Bring intersheet refs in line with schematic setting when changing sheets.

Fixes https://gitlab.com/kicad/code/kicad/issues/13061
This commit is contained in:
Jeff Young 2022-12-03 14:17:15 +00:00
parent 96819f6c01
commit f9b3f14dfa
1 changed files with 22 additions and 10 deletions

View File

@ -26,6 +26,7 @@
#include <sch_screen.h> #include <sch_screen.h>
#include <sch_item.h> #include <sch_item.h>
#include <sch_marker.h> #include <sch_marker.h>
#include <sch_label.h>
#include <sch_reference_list.h> #include <sch_reference_list.h>
#include <symbol_library.h> #include <symbol_library.h>
#include <sch_sheet_path.h> #include <sch_sheet_path.h>
@ -323,22 +324,33 @@ wxString SCH_SHEET_PATH::PathHumanReadable( bool aUseShortRootName ) const
void SCH_SHEET_PATH::UpdateAllScreenReferences() const void SCH_SHEET_PATH::UpdateAllScreenReferences() const
{ {
std::vector<SCH_ITEM*> symbols; std::vector<SCH_ITEM*> items;
std::copy_if( LastScreen()->Items().begin(), std::copy_if( LastScreen()->Items().begin(), LastScreen()->Items().end(),
LastScreen()->Items().end(), std::back_inserter( items ),
std::back_inserter( symbols ),
[]( SCH_ITEM* aItem ) []( SCH_ITEM* aItem )
{ {
return ( aItem->Type() == SCH_SYMBOL_T ); return ( aItem->Type() == SCH_SYMBOL_T || aItem->Type() == SCH_GLOBAL_LABEL_T );
} ); } );
for( SCH_ITEM* item : symbols ) for( SCH_ITEM* item : items )
{ {
SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item ); if( item->Type() == SCH_SYMBOL_T )
symbol->GetField( REFERENCE_FIELD )->SetText( symbol->GetRef( this ) ); {
symbol->UpdateUnit( symbol->GetUnitSelection( this ) ); SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
LastScreen()->Update( item );
symbol->GetField( REFERENCE_FIELD )->SetText( symbol->GetRef( this ) );
symbol->UpdateUnit( symbol->GetUnitSelection( this ) );
LastScreen()->Update( item );
}
else if( item->Type() == SCH_GLOBAL_LABEL_T )
{
SCH_GLOBALLABEL* label = static_cast<SCH_GLOBALLABEL*>( item );
SCH_FIELD& intersheetRefs = label->GetFields()[0];
intersheetRefs.SetVisible( label->Schematic()->Settings().m_IntersheetRefsShow );
LastScreen()->Update( &intersheetRefs );
}
} }
} }