Browse Source

Hook up AutoplaceFields for sheets.

Fixes https://gitlab.com/kicad/code/kicad/issues/6197
6.0.7
Jeff Young 5 years ago
parent
commit
c9d7bdc340
  1. 7
      eeschema/ee_collectors.cpp
  2. 1
      eeschema/ee_collectors.h
  3. 2
      eeschema/sch_sheet.cpp
  4. 2
      eeschema/tools/ee_actions.cpp
  5. 26
      eeschema/tools/sch_edit_tool.cpp

7
eeschema/ee_collectors.cpp

@ -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 )
{
if( aItem->Type() == LIB_PIN_T )

1
eeschema/ee_collectors.h

@ -46,6 +46,7 @@ public:
static const KICAD_T EditableItems[];
static const KICAD_T ComponentsOnly[];
static const KICAD_T SheetsOnly[];
static const KICAD_T ComponentsOrSheets[];
EE_COLLECTOR( const KICAD_T* aScanTypes = EE_COLLECTOR::AllItems ) :
m_Unit( 0 ),

2
eeschema/sch_sheet.cpp

@ -497,8 +497,6 @@ int SCH_SHEET::GetPenWidth() const
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();
int borderMargin = KiROUND( GetPenWidth() / 2.0 ) + 4;
int margin = borderMargin + KiROUND( std::max( textSize.x, textSize.y ) * 0.5 );

2
eeschema/tools/ee_actions.cpp

@ -393,7 +393,7 @@ TOOL_ACTION EE_ACTIONS::editFootprint( "eeschema.InteractiveEdit.editFootprint",
TOOL_ACTION EE_ACTIONS::autoplaceFields( "eeschema.InteractiveEdit.autoplaceFields",
AS_GLOBAL,
'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 );
TOOL_ACTION EE_ACTIONS::changeSymbols( "eeschema.InteractiveEdit.changeSymbols",

26
eeschema/tools/sch_edit_tool.cpp

@ -359,7 +359,8 @@ 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, singleComponentCondition, 200 );
selToolMenu.AddItem( EE_ACTIONS::autoplaceFields, singleComponentCondition
|| singleSheetCondition, 200 );
selToolMenu.AddItem( EE_ACTIONS::toggleDeMorgan, E_C::SingleSymbol, 200 );
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 )
{
EE_SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::ComponentsOnly );
EE_SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::ComponentsOrSheets );
if( selection.Empty() )
return 0;
SCH_COMPONENT* component = (SCH_COMPONENT*) selection.Front();
SCH_ITEM* item = static_cast<SCH_ITEM*>( selection.Front() );
if( !component->IsNew() )
saveCopyInUndoList( component, UNDO_REDO::CHANGED );
if( !item->IsNew() )
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 );
updateView( component );
m_frame->GetScreen()->Update( item );
updateView( item );
m_frame->OnModify();
if( selection.IsHover() )

Loading…
Cancel
Save