mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-15 02:33:15 +02:00
Sync pin shape between sheet/hier labels
This commit is contained in:
parent
de26550b5a
commit
bd5cb76fcd
@ -34,6 +34,9 @@
|
|||||||
#include <string_utils.h>
|
#include <string_utils.h>
|
||||||
#include <geometry/geometry_utils.h>
|
#include <geometry/geometry_utils.h>
|
||||||
#include <schematic.h>
|
#include <schematic.h>
|
||||||
|
#include <sch_screen.h>
|
||||||
|
#include <sch_sheet.h>
|
||||||
|
#include <sch_sheet_pin.h>
|
||||||
#include <settings/color_settings.h>
|
#include <settings/color_settings.h>
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
#include <default_values.h>
|
#include <default_values.h>
|
||||||
@ -314,6 +317,82 @@ COLOR4D SCH_LABEL_BASE::GetLabelColor() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCH_LABEL_BASE::SetLabelShape( LABEL_SHAPE aShape )
|
||||||
|
{
|
||||||
|
m_shape = (LABEL_FLAG_SHAPE) aShape;
|
||||||
|
|
||||||
|
static bool s_inUpdate = false;
|
||||||
|
|
||||||
|
if( s_inUpdate )
|
||||||
|
return;
|
||||||
|
|
||||||
|
s_inUpdate = true;
|
||||||
|
|
||||||
|
if( Type() == SCH_HIER_LABEL_T )
|
||||||
|
{
|
||||||
|
SCH_HIERLABEL* label = static_cast<SCH_HIERLABEL*>( this );
|
||||||
|
SCH_SCREEN* screen = static_cast<SCH_SCREEN*>( label->GetParent() );
|
||||||
|
|
||||||
|
if( screen )
|
||||||
|
{
|
||||||
|
const wxString& text = label->GetText();
|
||||||
|
|
||||||
|
for( SCH_ITEM* item : screen->Items().OfType( SCH_HIER_LABEL_T ) )
|
||||||
|
{
|
||||||
|
SCH_HIERLABEL* other = static_cast<SCH_HIERLABEL*>( item );
|
||||||
|
|
||||||
|
if( other != label && other->GetText() == text )
|
||||||
|
other->SetLabelShape( aShape );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( const SCH_SHEET_PATH& sheetPath : screen->GetClientSheetPaths() )
|
||||||
|
{
|
||||||
|
SCH_SHEET* sheet = sheetPath.Last();
|
||||||
|
|
||||||
|
if( sheet )
|
||||||
|
{
|
||||||
|
for( SCH_SHEET_PIN* pin : sheet->GetPins() )
|
||||||
|
{
|
||||||
|
if( pin->GetText() == text )
|
||||||
|
pin->SetLabelShape( aShape );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( Type() == SCH_SHEET_PIN_T )
|
||||||
|
{
|
||||||
|
SCH_SHEET_PIN* pin = static_cast<SCH_SHEET_PIN*>( this );
|
||||||
|
SCH_SHEET* parent = pin->GetParent();
|
||||||
|
|
||||||
|
if( parent )
|
||||||
|
{
|
||||||
|
const wxString& text = pin->GetText();
|
||||||
|
SCH_SCREEN* screen = parent->GetScreen();
|
||||||
|
|
||||||
|
if( screen )
|
||||||
|
{
|
||||||
|
for( SCH_ITEM* item : screen->Items().OfType( SCH_HIER_LABEL_T ) )
|
||||||
|
{
|
||||||
|
SCH_HIERLABEL* hlabel = static_cast<SCH_HIERLABEL*>( item );
|
||||||
|
|
||||||
|
if( hlabel->GetText() == text )
|
||||||
|
hlabel->SetLabelShape( aShape );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for( SCH_SHEET_PIN* other : parent->GetPins() )
|
||||||
|
{
|
||||||
|
if( other != pin && other->GetText() == text )
|
||||||
|
other->SetLabelShape( aShape );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s_inUpdate = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_LABEL_BASE::SetSpinStyle( SPIN_STYLE aSpinStyle )
|
void SCH_LABEL_BASE::SetSpinStyle( SPIN_STYLE aSpinStyle )
|
||||||
{
|
{
|
||||||
// Assume "Right" and Left" mean which side of the anchor the text will be on
|
// Assume "Right" and Left" mean which side of the anchor the text will be on
|
||||||
|
@ -173,12 +173,19 @@ public:
|
|||||||
bool HasConnectivityChanges( const SCH_ITEM* aItem,
|
bool HasConnectivityChanges( const SCH_ITEM* aItem,
|
||||||
const SCH_SHEET_PATH* aInstance = nullptr ) const override;
|
const SCH_SHEET_PATH* aInstance = nullptr ) const override;
|
||||||
|
|
||||||
LABEL_FLAG_SHAPE GetShape() const { return m_shape; }
|
|
||||||
void SetShape( LABEL_FLAG_SHAPE aShape ) { m_shape = aShape; }
|
|
||||||
|
|
||||||
// Type-specific versions for property manager
|
// Type-specific versions for property manager
|
||||||
LABEL_SHAPE GetLabelShape() const { return (LABEL_SHAPE) m_shape; }
|
LABEL_SHAPE GetLabelShape() const { return (LABEL_SHAPE) m_shape; }
|
||||||
void SetLabelShape( LABEL_SHAPE aShape ) { m_shape = (LABEL_FLAG_SHAPE) aShape; }
|
void SetLabelShape( LABEL_SHAPE aShape );
|
||||||
|
|
||||||
|
LABEL_FLAG_SHAPE GetShape() const { return m_shape; }
|
||||||
|
void SetShape( LABEL_FLAG_SHAPE aShape )
|
||||||
|
{
|
||||||
|
// Set flags directly if a flag shape
|
||||||
|
if( aShape >= F_FIRST )
|
||||||
|
m_shape = aShape;
|
||||||
|
else
|
||||||
|
SetLabelShape( (LABEL_SHAPE) aShape );
|
||||||
|
}
|
||||||
|
|
||||||
COLOR4D GetLabelColor() const;
|
COLOR4D GetLabelColor() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user