diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index 4f1bd33441..d31ab9f14b 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -467,6 +467,24 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) SetCurItem( NULL ); // Outlines can have changed break; + case ID_POPUP_PCB_ZONE_DUPLICATE: + { + ZONE_CONTAINER* zone = (ZONE_CONTAINER*) GetCurItem(); + ZONE_CONTAINER* newZone = new ZONE_CONTAINER( m_Pcb ); + newZone->Copy( zone ); + ZONE_SETTINGS zoneSettings; + zoneSettings << *zone; + if( InvokeCopperZonesEditor( this, &zoneSettings ) ) + { + zoneSettings.ExportSetting( *newZone ); + m_Pcb->Add( newZone ); + newZone->Draw( m_canvas, &dc, GR_OR ); + } + else + delete newZone; + } + break; + case ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE: m_canvas->MoveCursorToCrossHair(); m_canvas->SetAutoPanRequest( true ); diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index d33c08b470..970e8493ac 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -621,6 +621,9 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* } zones_menu->AppendSeparator(); + AddMenuItem( zones_menu, ID_POPUP_PCB_ZONE_DUPLICATE, + _( "Duplicate Zone" ), KiBitmap( add_zone_xpm ) ); + AddMenuItem( zones_menu, ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE, _( "Add Similar Zone" ), KiBitmap( add_zone_xpm ) ); diff --git a/pcbnew/pcbnew_id.h b/pcbnew/pcbnew_id.h index 1e1d33247c..b1fa634428 100644 --- a/pcbnew/pcbnew_id.h +++ b/pcbnew/pcbnew_id.h @@ -92,6 +92,7 @@ enum pcbnew_ids ID_POPUP_PCB_FILL_ALL_ZONES, ID_POPUP_PCB_FILL_ZONE, ID_POPUP_PCB_DELETE_ZONE_CONTAINER, + ID_POPUP_PCB_ZONE_DUPLICATE, ID_POPUP_PCB_ZONE_ADD_SIMILAR_ZONE, ID_POPUP_PCB_ZONE_ADD_CUTOUT_ZONE, ID_POPUP_PCB_DELETE_ZONE_CUTOUT,