Add cancel to the selection context menu if a tool is running

The selection tool's context menu is displayed during the move tool,
so it should contain the ability to cancel the current action.
This commit is contained in:
Ian McInerney 2020-07-16 02:22:29 +01:00
parent 779ed40588
commit da6d0c9de6
2 changed files with 18 additions and 16 deletions

View File

@ -174,10 +174,17 @@ bool EDIT_TOOL::Init()
return frame()->ToolStackIsEmpty();
};
auto notMovingCondition =
[ this ] ( const SELECTION& aSelection )
{
return !frame()->IsCurrentTool( PCB_ACTIONS::move )
&& !frame()->IsCurrentTool( PCB_ACTIONS::moveWithReference );
};
// Add context menu entries that are displayed when selection tool is active
CONDITIONAL_MENU& menu = m_selectionTool->GetToolMenu().GetMenu();
menu.AddItem( PCB_ACTIONS::move, SELECTION_CONDITIONS::NotEmpty );
menu.AddItem( PCB_ACTIONS::move, SELECTION_CONDITIONS::NotEmpty && notMovingCondition );
menu.AddItem( PCB_ACTIONS::inlineBreakTrack, SELECTION_CONDITIONS::Count( 1 )
&& SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
menu.AddItem( PCB_ACTIONS::drag45Degree, SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
@ -213,21 +220,6 @@ bool EDIT_TOOL::Init()
menu.AddItem( PCB_ACTIONS::updateFootprint, singleModuleCondition );
menu.AddItem( PCB_ACTIONS::changeFootprint, singleModuleCondition );
// Populate the context menu displayed during the edit tool (primarily the measure tool)
auto activeToolCondition = [ this ] ( const SELECTION& aSel ) {
return !frame()->ToolStackIsEmpty();
};
auto frame = getEditFrame<PCB_BASE_FRAME>();
auto& ctxMenu = m_menu.GetMenu();
// "Cancel" goes at the top of the context menu when a tool is active
ctxMenu.AddItem( ACTIONS::cancelInteractive, activeToolCondition, 1 );
ctxMenu.AddSeparator( 1 );
if( frame )
frame->AddStandardSubMenus( m_menu );
return true;
}

View File

@ -157,9 +157,19 @@ bool SELECTION_TOOL::Init()
auto& menu = m_menu.GetMenu();
auto activeToolCondition =
[ frame ] ( const SELECTION& aSel )
{
return !frame->ToolStackIsEmpty();
};
menu.AddMenu( selectMenu.get(), SELECTION_CONDITIONS::NotEmpty );
menu.AddSeparator( 1000 );
// "Cancel" goes at the top of the context menu when a tool is active
menu.AddItem( ACTIONS::cancelInteractive, activeToolCondition, 1 );
menu.AddSeparator( 1 );
if( frame )
frame->AddStandardSubMenus( m_menu );