Hook up AutoplaceFields for sheets.
Fixes https://gitlab.com/kicad/code/kicad/issues/6197
This commit is contained in:
parent
bc23fd0530
commit
c9d7bdc340
|
@ -71,6 +71,13 @@ const KICAD_T EE_COLLECTOR::SheetsOnly[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const KICAD_T EE_COLLECTOR::ComponentsOrSheets[] = {
|
||||||
|
SCH_COMPONENT_T,
|
||||||
|
SCH_SHEET_T,
|
||||||
|
EOT
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
SEARCH_RESULT EE_COLLECTOR::Inspect( EDA_ITEM* aItem, void* aTestData )
|
SEARCH_RESULT EE_COLLECTOR::Inspect( EDA_ITEM* aItem, void* aTestData )
|
||||||
{
|
{
|
||||||
if( aItem->Type() == LIB_PIN_T )
|
if( aItem->Type() == LIB_PIN_T )
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
static const KICAD_T EditableItems[];
|
static const KICAD_T EditableItems[];
|
||||||
static const KICAD_T ComponentsOnly[];
|
static const KICAD_T ComponentsOnly[];
|
||||||
static const KICAD_T SheetsOnly[];
|
static const KICAD_T SheetsOnly[];
|
||||||
|
static const KICAD_T ComponentsOrSheets[];
|
||||||
|
|
||||||
EE_COLLECTOR( const KICAD_T* aScanTypes = EE_COLLECTOR::AllItems ) :
|
EE_COLLECTOR( const KICAD_T* aScanTypes = EE_COLLECTOR::AllItems ) :
|
||||||
m_Unit( 0 ),
|
m_Unit( 0 ),
|
||||||
|
|
|
@ -497,8 +497,6 @@ int SCH_SHEET::GetPenWidth() const
|
||||||
|
|
||||||
void SCH_SHEET::AutoplaceFields( SCH_SCREEN* aScreen, bool aManual )
|
void SCH_SHEET::AutoplaceFields( SCH_SCREEN* aScreen, bool aManual )
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( !aManual, "manual autoplacement not currently supported for sheets" );
|
|
||||||
|
|
||||||
wxSize textSize = m_fields[ SHEETNAME ].GetTextSize();
|
wxSize textSize = m_fields[ SHEETNAME ].GetTextSize();
|
||||||
int borderMargin = KiROUND( GetPenWidth() / 2.0 ) + 4;
|
int borderMargin = KiROUND( GetPenWidth() / 2.0 ) + 4;
|
||||||
int margin = borderMargin + KiROUND( std::max( textSize.x, textSize.y ) * 0.5 );
|
int margin = borderMargin + KiROUND( std::max( textSize.x, textSize.y ) * 0.5 );
|
||||||
|
|
|
@ -393,7 +393,7 @@ TOOL_ACTION EE_ACTIONS::editFootprint( "eeschema.InteractiveEdit.editFootprint",
|
||||||
TOOL_ACTION EE_ACTIONS::autoplaceFields( "eeschema.InteractiveEdit.autoplaceFields",
|
TOOL_ACTION EE_ACTIONS::autoplaceFields( "eeschema.InteractiveEdit.autoplaceFields",
|
||||||
AS_GLOBAL,
|
AS_GLOBAL,
|
||||||
'O', LEGACY_HK_NAME( "Autoplace Fields" ),
|
'O', LEGACY_HK_NAME( "Autoplace Fields" ),
|
||||||
_( "Autoplace Fields" ), _( "Runs the automatic placement algorithm on the symbol's fields" ),
|
_( "Autoplace Fields" ), _( "Runs the automatic placement algorithm on the symbol or sheet's fields" ),
|
||||||
autoplace_fields_xpm );
|
autoplace_fields_xpm );
|
||||||
|
|
||||||
TOOL_ACTION EE_ACTIONS::changeSymbols( "eeschema.InteractiveEdit.changeSymbols",
|
TOOL_ACTION EE_ACTIONS::changeSymbols( "eeschema.InteractiveEdit.changeSymbols",
|
||||||
|
|
|
@ -359,7 +359,8 @@ bool SCH_EDIT_TOOL::Init()
|
||||||
selToolMenu.AddItem( EE_ACTIONS::editReference, E_C::SingleSymbol, 200 );
|
selToolMenu.AddItem( EE_ACTIONS::editReference, E_C::SingleSymbol, 200 );
|
||||||
selToolMenu.AddItem( EE_ACTIONS::editValue, 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::editFootprint, E_C::SingleSymbol, 200 );
|
||||||
selToolMenu.AddItem( EE_ACTIONS::autoplaceFields, singleComponentCondition, 200 );
|
selToolMenu.AddItem( EE_ACTIONS::autoplaceFields, singleComponentCondition
|
||||||
|
|| singleSheetCondition, 200 );
|
||||||
selToolMenu.AddItem( EE_ACTIONS::toggleDeMorgan, E_C::SingleSymbol, 200 );
|
selToolMenu.AddItem( EE_ACTIONS::toggleDeMorgan, E_C::SingleSymbol, 200 );
|
||||||
|
|
||||||
std::shared_ptr<SYMBOL_UNIT_MENU> symUnitMenu3 = std::make_shared<SYMBOL_UNIT_MENU>();
|
std::shared_ptr<SYMBOL_UNIT_MENU> symUnitMenu3 = std::make_shared<SYMBOL_UNIT_MENU>();
|
||||||
|
@ -1260,20 +1261,29 @@ int SCH_EDIT_TOOL::EditField( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int SCH_EDIT_TOOL::AutoplaceFields( const TOOL_EVENT& aEvent )
|
int SCH_EDIT_TOOL::AutoplaceFields( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
EE_SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::ComponentsOnly );
|
EE_SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::ComponentsOrSheets );
|
||||||
|
|
||||||
if( selection.Empty() )
|
if( selection.Empty() )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
SCH_COMPONENT* component = (SCH_COMPONENT*) selection.Front();
|
SCH_ITEM* item = static_cast<SCH_ITEM*>( selection.Front() );
|
||||||
|
|
||||||
if( !component->IsNew() )
|
if( !item->IsNew() )
|
||||||
saveCopyInUndoList( component, UNDO_REDO::CHANGED );
|
saveCopyInUndoList( item, UNDO_REDO::CHANGED );
|
||||||
|
|
||||||
component->AutoplaceFields( m_frame->GetScreen(), /* aManual */ true );
|
if( item->Type() == SCH_COMPONENT_T )
|
||||||
|
{
|
||||||
|
SCH_COMPONENT* component = static_cast<SCH_COMPONENT*>( item );
|
||||||
|
component->AutoplaceFields( m_frame->GetScreen(), /* aManual */ true );
|
||||||
|
}
|
||||||
|
else if( item->Type() == SCH_SHEET_T )
|
||||||
|
{
|
||||||
|
SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
|
||||||
|
sheet->AutoplaceFields( m_frame->GetScreen(), /* aManual */ true );
|
||||||
|
}
|
||||||
|
|
||||||
m_frame->GetScreen()->Update( component );
|
m_frame->GetScreen()->Update( item );
|
||||||
updateView( component );
|
updateView( item );
|
||||||
m_frame->OnModify();
|
m_frame->OnModify();
|
||||||
|
|
||||||
if( selection.IsHover() )
|
if( selection.IsHover() )
|
||||||
|
|
Loading…
Reference in New Issue