7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-21 09:41:41 +00:00

eeschema: move SwapData to SwapItemData/swapData paradigm

Used by BOARD_ITEM to support groups, which we are adding to the
schematic. Also adds an unused group pointer for now.
This commit is contained in:
Mike Williams 2025-03-26 10:13:47 -04:00
parent 79924b5dfd
commit 7cf699bc9d
36 changed files with 104 additions and 59 deletions

View File

@ -83,7 +83,7 @@ EDA_ITEM* SCH_BITMAP::Clone() const
}
void SCH_BITMAP::SwapData( SCH_ITEM* aItem )
void SCH_BITMAP::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -69,8 +69,6 @@ public:
const BOX2I GetBoundingBox() const override;
void SwapData( SCH_ITEM* aItem ) override;
/// @copydoc VIEW_ITEM::ViewGetLayers()
virtual std::vector<int> ViewGetLayers() const override;
@ -116,6 +114,9 @@ public:
void Show( int nestLevel, std::ostream& os ) const override;
#endif
protected:
void swapData( SCH_ITEM* aItem ) override;
private:
friend struct SCH_BITMAP_DESC;

View File

@ -134,7 +134,7 @@ VECTOR2I SCH_BUS_ENTRY_BASE::GetEnd() const
}
void SCH_BUS_ENTRY_BASE::SwapData( SCH_ITEM* aItem )
void SCH_BUS_ENTRY_BASE::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -93,7 +93,7 @@ public:
COLOR4D GetBusEntryColor() const;
void SetBusEntryColor( const COLOR4D& aColor );
void SwapData( SCH_ITEM* aItem ) override;
void swapData( SCH_ITEM* aItem ) override;
std::vector<int> ViewGetLayers() const override;

View File

@ -575,7 +575,7 @@ void SCH_COMMIT::Revert()
bool unselect = !item->IsSelected();
item->SwapData( copy );
item->SwapItemData( copy );
if( unselect )
{

View File

@ -404,7 +404,7 @@ void SCH_FIELD::ImportValues( const SCH_FIELD& aSource )
}
void SCH_FIELD::SwapData( SCH_ITEM* aItem )
void SCH_FIELD::swapData( SCH_ITEM* aItem )
{
wxCHECK_RET( aItem && aItem->Type() == SCH_FIELD_T, wxT( "Cannot swap with invalid item." ) );

View File

@ -219,7 +219,7 @@ public:
bool CanAutoplace() const { return m_allowAutoPlace; }
void SetCanAutoplace( bool aCanPlace ) { m_allowAutoPlace = aCanPlace; }
void SwapData( SCH_ITEM* aItem ) override;
void swapData( SCH_ITEM* aItem ) override;
int GetPenWidth() const override;

View File

@ -78,7 +78,8 @@ SCH_ITEM::SCH_ITEM( EDA_ITEM* aParent, KICAD_T aType, int aUnit, int aBodyStyle
EDA_ITEM( aParent, aType, true, false ),
m_unit( aUnit ),
m_bodyStyle( aBodyStyle ),
m_private( false )
m_private( false ),
m_group( nullptr )
{
m_layer = LAYER_WIRE; // It's only a default, in fact
m_fieldsAutoplaced = AUTOPLACE_NONE;
@ -94,6 +95,7 @@ SCH_ITEM::SCH_ITEM( const SCH_ITEM& aItem ) :
m_bodyStyle = aItem.m_bodyStyle;
m_private = aItem.m_private;
m_fieldsAutoplaced = aItem.m_fieldsAutoplaced;
m_group = aItem.m_group;
m_connectivity_dirty = aItem.m_connectivity_dirty;
}
@ -105,6 +107,7 @@ SCH_ITEM& SCH_ITEM::operator=( const SCH_ITEM& aItem )
m_bodyStyle = aItem.m_bodyStyle;
m_private = aItem.m_private;
m_fieldsAutoplaced = aItem.m_fieldsAutoplaced;
m_group = aItem.m_group;
m_connectivity_dirty = aItem.m_connectivity_dirty;
return *this;
@ -113,6 +116,8 @@ SCH_ITEM& SCH_ITEM::operator=( const SCH_ITEM& aItem )
SCH_ITEM::~SCH_ITEM()
{
wxASSERT( m_group == nullptr );
for( const auto& it : m_connection_map )
delete it.second;
@ -343,12 +348,30 @@ const wxString& SCH_ITEM::GetCachedDriverName() const
}
void SCH_ITEM::SwapData( SCH_ITEM* aItem )
void SCH_ITEM::swapData( SCH_ITEM* aItem )
{
UNIMPLEMENTED_FOR( GetClass() );
}
void SCH_ITEM::SwapItemData( SCH_ITEM* aImage )
{
if( aImage == nullptr )
return;
EDA_ITEM* parent = GetParent();
SCH_GROUP* group = GetParentGroup();
SetParentGroup( nullptr );
aImage->SetParentGroup( nullptr );
swapData( aImage );
// Restore pointers to be sure they are not broken
SetParent( parent );
SetParentGroup( group );
}
void SCH_ITEM::SwapFlags( SCH_ITEM* aItem )
{
EDA_ITEM_FLAGS editFlags = GetEditFlags();

View File

@ -40,6 +40,7 @@
class CONNECTION_GRAPH;
class SCH_CONNECTION;
class SCH_GROUP;
class SCH_SHEET_PATH;
class SCHEMATIC;
class SYMBOL;
@ -174,6 +175,9 @@ public:
virtual ~SCH_ITEM();
void SetParentGroup( SCH_GROUP* aGroup ) { m_group = aGroup; }
SCH_GROUP* GetParentGroup() const { return m_group; }
wxString GetClass() const override
{
return wxT( "SCH_ITEM" );
@ -203,13 +207,16 @@ public:
}
/**
* Swap the internal data structures \a aItem with the schematic item.
* Swap data between \a aItem and \a aImage.
*
* Obviously, aItem must have the same type than me.
* \a aItem and \a aImage should have the same type.
*
* @param aItem The item to swap the data structures with.
* Used in undo and redo commands to swap values between an item and its copy.
* Only values like layer, size .. which are modified by editing are swapped.
*
* @param aImage the item image which contains data to swap.
*/
virtual void SwapData( SCH_ITEM* aItem );
void SwapItemData( SCH_ITEM* aImage );
/**
* Swap the non-temp and non-edit flags.
@ -638,6 +645,15 @@ public:
virtual bool operator<( const SCH_ITEM& aItem ) const;
protected:
/**
* Swap the internal data structures \a aItem with the schematic item.
*
* Obviously, aItem must have the same type than me.
*
* @param aItem The item to swap the data structures with.
*/
virtual void swapData( SCH_ITEM* aItem );
SCH_RENDER_SETTINGS* getRenderSettings( PLOTTER* aPlotter ) const
{
return static_cast<SCH_RENDER_SETTINGS*>( aPlotter->RenderSettings() );
@ -698,6 +714,7 @@ protected:
AUTOPLACE_ALGO m_fieldsAutoplaced; // indicates status of field autoplacement
VECTOR2I m_storedPos; // temp variable used in some move commands to store
// an initial position of the item or mouse cursor
SCH_GROUP* m_group; // The group this item belongs to
/// Store pointers to other items that are connected to this one, per sheet.
std::map<SCH_SHEET_PATH, SCH_ITEM_VEC, SHEET_PATH_CMP> m_connected_items;

View File

@ -58,7 +58,7 @@ EDA_ITEM* SCH_JUNCTION::Clone() const
}
void SCH_JUNCTION::SwapData( SCH_ITEM* aItem )
void SCH_JUNCTION::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -52,7 +52,7 @@ public:
return wxT( "SCH_JUNCTION" );
}
void SwapData( SCH_ITEM* aItem ) override;
void swapData( SCH_ITEM* aItem ) override;
void SetLastResolvedState( const SCH_ITEM* aItem ) override
{

View File

@ -266,9 +266,9 @@ bool SCH_LABEL_BASE::IsType( const std::vector<KICAD_T>& aScanTypes ) const
}
void SCH_LABEL_BASE::SwapData( SCH_ITEM* aItem )
void SCH_LABEL_BASE::swapData( SCH_ITEM* aItem )
{
SCH_TEXT::SwapData( aItem );
SCH_TEXT::swapData( aItem );
SCH_LABEL_BASE* label = static_cast<SCH_LABEL_BASE*>( aItem );
@ -1510,9 +1510,9 @@ SCH_DIRECTIVE_LABEL::SCH_DIRECTIVE_LABEL( const VECTOR2I& pos ) :
}
void SCH_DIRECTIVE_LABEL::SwapData( SCH_ITEM* aItem )
void SCH_DIRECTIVE_LABEL::swapData( SCH_ITEM* aItem )
{
SCH_LABEL_BASE::SwapData( aItem );
SCH_LABEL_BASE::swapData( aItem );
SCH_DIRECTIVE_LABEL* label = static_cast<SCH_DIRECTIVE_LABEL*>( aItem );

View File

@ -145,8 +145,6 @@ public:
bool IsType( const std::vector<KICAD_T>& aScanTypes ) const override;
void SwapData( SCH_ITEM* aItem ) override;
bool CanConnect( const SCH_ITEM* aItem ) const override
{
switch( aItem->Type() )
@ -361,6 +359,8 @@ public:
bool operator==( const SCH_ITEM& aItem ) const override;
protected:
void swapData( SCH_ITEM* aItem ) override;
void cacheShownText() override;
protected:
@ -457,7 +457,7 @@ public:
return new SCH_DIRECTIVE_LABEL( *this );
}
void SwapData( SCH_ITEM* aItem ) override;
void swapData( SCH_ITEM* aItem ) override;
FLAG_SHAPE GetFlagShape() const { return (FLAG_SHAPE) m_shape; }
void SetFlagShape( FLAG_SHAPE aShape ) { m_shape = (LABEL_FLAG_SHAPE) aShape; }

View File

@ -796,7 +796,7 @@ bool SCH_LINE::HitTest( const BOX2I& aRect, bool aContained, int aAccuracy ) con
}
void SCH_LINE::SwapData( SCH_ITEM* aItem )
void SCH_LINE::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -307,8 +307,6 @@ public:
EDA_ITEM* Clone() const override;
void SwapData( SCH_ITEM* aItem ) override;
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
const wxString& GetOperatingPoint() const { return m_operatingPoint; }
@ -343,6 +341,9 @@ public:
bool operator==( const SCH_ITEM& aOther ) const override;
protected:
void swapData( SCH_ITEM* aItem ) override;
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override;

View File

@ -68,7 +68,7 @@ EDA_ITEM* SCH_MARKER::Clone() const
}
void SCH_MARKER::SwapData( SCH_ITEM* aItem )
void SCH_MARKER::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -51,8 +51,6 @@ public:
const KIID GetUUID() const override { return m_Uuid; }
void SwapData( SCH_ITEM* aItem ) override;
wxString SerializeToString() const;
static SCH_MARKER* DeserializeFromString( const SCH_SHEET_LIST& aSheetList,
const wxString& data );
@ -137,6 +135,8 @@ public:
#endif
protected:
void swapData( SCH_ITEM* aItem ) override;
KIGFX::COLOR4D getColor() const override;
bool m_isLegacyMarker; ///< True if marker was deserialized from a file version < 20230121.

View File

@ -55,7 +55,7 @@ EDA_ITEM* SCH_NO_CONNECT::Clone() const
}
void SCH_NO_CONNECT::SwapData( SCH_ITEM* aItem )
void SCH_NO_CONNECT::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -61,8 +61,6 @@ public:
int GetPenWidth() const override;
void SwapData( SCH_ITEM* aItem ) override;
std::vector<int> ViewGetLayers() const override;
void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList ) override;
@ -119,6 +117,9 @@ public:
void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
#endif
protected:
void swapData( SCH_ITEM* aItem ) override;
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override;

View File

@ -49,7 +49,7 @@ EDA_ITEM* SCH_SHAPE::Clone() const
}
void SCH_SHAPE::SwapData( SCH_ITEM* aItem )
void SCH_SHAPE::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -45,8 +45,6 @@ public:
return wxT( "SCH_SHAPE" );
}
void SwapData( SCH_ITEM* aItem ) override;
bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
@ -134,6 +132,8 @@ public:
#endif
protected:
void swapData( SCH_ITEM* aItem ) override;
void setFilled( bool aFlag ) override
{
m_fill = aFlag ? FILL_T::FILLED_WITH_COLOR : FILL_T::NO_FILL;

View File

@ -325,7 +325,7 @@ bool SCH_SHEET::ResolveTextVar( const SCH_SHEET_PATH* aPath, wxString* token, in
}
void SCH_SHEET::SwapData( SCH_ITEM* aItem )
void SCH_SHEET::swapData( SCH_ITEM* aItem )
{
SCH_ITEM::SwapFlags( aItem );

View File

@ -270,7 +270,7 @@ public:
*/
VECTOR2I GetRotationCenter() const;
void SwapData( SCH_ITEM* aItem ) override;
void swapData( SCH_ITEM* aItem ) override;
/**
* Count our own symbols, without the power symbols.

View File

@ -65,9 +65,9 @@ EDA_ITEM* SCH_SHEET_PIN::Clone() const
}
void SCH_SHEET_PIN::SwapData( SCH_ITEM* aItem )
void SCH_SHEET_PIN::swapData( SCH_ITEM* aItem )
{
SCH_HIERLABEL::SwapData( aItem );
SCH_HIERLABEL::swapData( aItem );
wxCHECK_RET( aItem->Type() == SCH_SHEET_PIN_T,
wxString::Format( "SCH_SHEET_PIN object cannot swap data with %s object.",

View File

@ -114,8 +114,6 @@ public:
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
void SwapData( SCH_ITEM* aItem ) override;
int GetPenWidth() const override;
/**
@ -206,6 +204,9 @@ public:
bool operator==( const SCH_ITEM& aOther ) const override;
protected:
void swapData( SCH_ITEM* aItem ) override;
private:
int m_number; ///< Label number use for saving sheet label to file.
///< Sheet label numbering begins at 2.

Some files were not shown because too many files have changed in this diff Show More