Enable autoplace whenever sel contains at least 1 field owner.

Fixes https://gitlab.com/kicad/code/kicad/issues/8886
This commit is contained in:
Jeff Young 2021-07-29 20:23:11 +01:00
parent 8aea2cbd03
commit c716548b29
1 changed files with 16 additions and 7 deletions

View File

@ -188,11 +188,11 @@ bool SCH_EDIT_TOOL::Init()
if( SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus( aSel ) )
return false;
SCH_ITEM* item = (SCH_ITEM*) aSel.Front();
if( aSel.GetSize() > 1 )
return true;
SCH_ITEM* item = (SCH_ITEM*) aSel.Front();
switch( item->Type() )
{
case SCH_MARKER_T:
@ -255,6 +255,18 @@ bool SCH_EDIT_TOOL::Init()
}
};
auto autoplaceCondition =
[] ( const SELECTION& aSel )
{
for( const EDA_ITEM* item : aSel )
{
if( item->IsType( EE_COLLECTOR::FieldOwners ) )
return true;
}
return false;
};
static KICAD_T toLabelTypes[] = { SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_TEXT_T, EOT };
auto toLabelCondition = E_C::Count( 1 ) && E_C::OnlyTypes( toLabelTypes );
@ -270,9 +282,6 @@ bool SCH_EDIT_TOOL::Init()
static KICAD_T entryTypes[] = { SCH_BUS_WIRE_ENTRY_T, SCH_BUS_BUS_ENTRY_T, EOT };
auto entryCondition = E_C::MoreThan( 0 ) && E_C::OnlyTypes( entryTypes );
static KICAD_T fieldParentTypes[] = { SCH_SYMBOL_T, SCH_SHEET_T, SCH_GLOBAL_LABEL_T, EOT };
auto singleFieldParentCondition = E_C::Count( 1 ) && E_C::OnlyTypes( fieldParentTypes );
auto singleSheetCondition = E_C::Count( 1 ) && E_C::OnlyType( SCH_SHEET_T );
//
@ -323,7 +332,7 @@ bool SCH_EDIT_TOOL::Init()
drawMenu.AddItem( EE_ACTIONS::editReference, E_C::SingleSymbol, 200 );
drawMenu.AddItem( EE_ACTIONS::editValue, E_C::SingleSymbol, 200 );
drawMenu.AddItem( EE_ACTIONS::editFootprint, E_C::SingleSymbol, 200 );
drawMenu.AddItem( EE_ACTIONS::autoplaceFields, singleFieldParentCondition, 200 );
drawMenu.AddItem( EE_ACTIONS::autoplaceFields, autoplaceCondition, 200 );
drawMenu.AddItem( EE_ACTIONS::toggleDeMorgan, E_C::SingleDeMorganSymbol, 200 );
std::shared_ptr<SYMBOL_UNIT_MENU> symUnitMenu2 = std::make_shared<SYMBOL_UNIT_MENU>();
@ -353,7 +362,7 @@ bool SCH_EDIT_TOOL::Init()
selToolMenu.AddItem( EE_ACTIONS::editReference, E_C::SingleSymbol, 200 );
selToolMenu.AddItem( EE_ACTIONS::editValue, E_C::SingleSymbol, 200 );
selToolMenu.AddItem( EE_ACTIONS::editFootprint, E_C::SingleSymbol, 200 );
selToolMenu.AddItem( EE_ACTIONS::autoplaceFields, singleFieldParentCondition, 200 );
selToolMenu.AddItem( EE_ACTIONS::autoplaceFields, autoplaceCondition, 200 );
selToolMenu.AddItem( EE_ACTIONS::toggleDeMorgan, E_C::SingleSymbol, 200 );
std::shared_ptr<SYMBOL_UNIT_MENU> symUnitMenu3 = std::make_shared<SYMBOL_UNIT_MENU>();