Add "Enter Sheet" to Sheet tool (context menu & double-click).

Fixes https://gitlab.com/kicad/code/kicad/issues/11531
This commit is contained in:
Jeff Young 2022-05-30 14:07:28 +01:00
parent 5cae4cf918
commit abba1b04bd
4 changed files with 31 additions and 1 deletions

View File

@ -99,6 +99,12 @@ void CONDITIONAL_MENU::AddSeparator( int aOrder )
}
void CONDITIONAL_MENU::AddSeparator( const SELECTION_CONDITION& aCondition, int aOrder )
{
addEntry( ENTRY( aCondition, aOrder ) );
}
SELECTION g_resolveDummySelection;

View File

@ -1660,11 +1660,28 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
}
else if( !sheet && ( evt->IsClick( BUT_LEFT ) || evt->IsDblClick( BUT_LEFT ) ) )
{
EE_SELECTION& selection = m_selectionTool->GetSelection();
EESCHEMA_SETTINGS* cfg = m_frame->eeconfig();
if( selection.Size() == 1
&& selection.Front()->Type() == SCH_SHEET_T
&& selection.Front()->GetBoundingBox().Contains( cursorPos ) )
{
if( evt->IsClick( BUT_LEFT ) )
{
// sheet already selected
continue;
}
else if( evt->IsDblClick( BUT_LEFT ) )
{
m_toolMgr->RunAction( EE_ACTIONS::enterSheet, false );
break;
}
}
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(), (VECTOR2I) cursorPos );
sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(), cursorPos );
sheet->SetFlags( IS_NEW | IS_RESIZING );
sheet->SetScreen( nullptr );
sheet->SetBorderWidth( Mils2iu( cfg->m_Drawing.default_line_thickness ) );

View File

@ -176,6 +176,8 @@ bool SCH_EDIT_TOOL::Init()
return sheet->HasUndefinedPins();
};
auto sheetSelection = E_C::Count( 1 ) && E_C::OnlyType( SCH_SHEET_T );
auto anyTextTool =
[this]( const SELECTION& aSel )
{
@ -386,6 +388,9 @@ bool SCH_EDIT_TOOL::Init()
//
CONDITIONAL_MENU& drawMenu = drawingTools->GetToolMenu().GetMenu();
drawMenu.AddItem( EE_ACTIONS::enterSheet, sheetSelection && EE_CONDITIONS::Idle, 1 );
drawMenu.AddSeparator( sheetSelection && EE_CONDITIONS::Idle, 1 );
drawMenu.AddItem( EE_ACTIONS::rotateCCW, orientCondition, 200 );
drawMenu.AddItem( EE_ACTIONS::rotateCW, orientCondition, 200 );
drawMenu.AddItem( EE_ACTIONS::mirrorV, orientCondition, 200 );

View File

@ -103,6 +103,8 @@ public:
*/
void AddSeparator( int aOrder = ANY_ORDER );
void AddSeparator( const SELECTION_CONDITION& aCondition, int aOrder );
/**
* Update the contents of the menu based on the supplied conditions.
*/