@ -105,7 +105,7 @@ public:
PCB_EDITOR_CONTROL : : PCB_EDITOR_CONTROL ( ) :
TOOL_INTERACTIVE ( " pcbnew.EditorControl " ) ,
m_frame ( NULL ) , m_zoneMenu ( NULL ) , m_lockMenu ( NULL )
m_frame ( nullptr )
{
m_placeOrigin = new KIGFX : : ORIGIN_VIEWITEM ( KIGFX : : COLOR4D ( 0.8 , 0.0 , 0.0 , 1.0 ) ,
KIGFX : : ORIGIN_VIEWITEM : : CIRCLE_CROSS ) ;
@ -118,8 +118,6 @@ PCB_EDITOR_CONTROL::~PCB_EDITOR_CONTROL()
getView ( ) - > Remove ( m_placeOrigin ) ;
delete m_placeOrigin ;
delete m_zoneMenu ;
delete m_lockMenu ;
}
@ -138,11 +136,11 @@ void PCB_EDITOR_CONTROL::Reset( RESET_REASON aReason )
bool PCB_EDITOR_CONTROL : : Init ( )
{
m_ zoneMenu = new ZONE_CONTEXT_MENU ;
m_ zoneMenu- > SetTool ( this ) ;
auto zoneMenu = std : : make_shared < ZONE_CONTEXT_MENU > ( ) ;
zoneMenu - > SetTool ( this ) ;
m_ lockMenu = new LOCK_CONTEXT_MENU ;
m_ lockMenu- > SetTool ( this ) ;
auto lockMenu = std : : make_shared < LOCK_CONTEXT_MENU > ( ) ;
lockMenu - > SetTool ( this ) ;
// Add the PCB control menus to relevant other tools
@ -150,17 +148,28 @@ bool PCB_EDITOR_CONTROL::Init()
if ( selTool )
{
selTool - > GetMenu ( ) . AddMenu ( m_zoneMenu , _ ( " Zones " ) , false ,
SELECTION_CONDITIONS : : OnlyType ( PCB_ZONE_AREA_T ) ) ;
auto & toolMenu = selTool - > GetToolMenu ( ) ;
auto & menu = toolMenu . GetMenu ( ) ;
selTool - > GetMenu ( ) . AddMenu ( m_lockMenu , _ ( " Locking " ) , false ,
SELECTION_CONDITIONS : : OnlyTypes ( GENERAL_COLLECTOR : : Tracks ) ) ;
toolMenu . AddSubMenu ( zoneMenu ) ;
toolMenu . AddSubMenu ( lockMenu ) ;
menu . AddMenu ( zoneMenu . get ( ) , _ ( " Zones " ) , false ,
SELECTION_CONDITIONS : : OnlyType ( PCB_ZONE_AREA_T ) ) ;
menu . AddMenu ( lockMenu . get ( ) , _ ( " Locking " ) , false ,
SELECTION_CONDITIONS : : OnlyTypes ( GENERAL_COLLECTOR : : Tracks ) ) ;
}
DRAWING_TOOL * drawingTool = m_toolMgr - > GetTool < DRAWING_TOOL > ( ) ;
if ( drawingTool )
{
auto & toolMenu = drawingTool - > GetToolMenu ( ) ;
auto & menu = toolMenu . GetMenu ( ) ;
toolMenu . AddSubMenu ( zoneMenu ) ;
// Functor to say if the PCB_EDIT_FRAME is in a given mode
// Capture the tool pointer and tool mode by value
auto toolActiveFunctor = [ = ] ( DRAWING_TOOL : : MODE aMode )
@ -171,8 +180,8 @@ bool PCB_EDITOR_CONTROL::Init()
} ;
} ;
drawingTool - > GetMenu ( ) . AddMenu ( m_zoneMenu , _ ( " Zones " ) , false ,
toolActiveFunctor ( DRAWING_TOOL : : MODE : : ZONE ) ) ;
menu . AddMenu ( zoneMenu . get ( ) , _ ( " Zones " ) , false ,
toolActiveFunctor ( DRAWING_TOOL : : MODE : : ZONE ) ) ;
}
return true ;