fixed the SCH_COMPONENT copy constructor, make GenCopy() inline

This commit is contained in:
dickelbeck 2008-10-19 18:31:09 +00:00
parent 84609e62ab
commit b28d1ea418
2 changed files with 42 additions and 18 deletions

View File

@ -60,6 +60,26 @@ SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) :
m_PrefixString = wxString( _( "U" ) );
}
SCH_COMPONENT::SCH_COMPONENT( const SCH_COMPONENT& aTemplate ) :
SCH_ITEM( NULL, TYPE_SCH_COMPONENT )
{
// assignment of all fields, including field vector elements, and linked list pointers
*this = aTemplate;
// set linked list pointers to null, before this they were copies of aTemplate's
Pback = NULL;
Pnext = NULL;
m_Son = NULL;
// Re-parent the fields, which before this were aTemplate's parent
for( int i=0; i<GetFieldCount(); ++i )
{
GetField( i )->m_Parent = this;
}
}
/**
* Function AddHierarchicalReference
* adds a full hierachical reference (path + local reference)
@ -401,7 +421,7 @@ void SCH_COMPONENT::SwapData( SCH_COMPONENT* copyitem )
m_Fields.swap( copyitem->m_Fields ); // std::vector's swap()
// Reparent items after copying data
// (after swap(), m_Parent member does not points the right parent):
// (after swap(), m_Parent member does not point to the right parent):
for( int ii = 0; ii < copyitem->GetFieldCount(); ++ii )
{
copyitem->GetField(ii)->m_Parent = copyitem;
@ -502,22 +522,6 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet )
}
/**************************************************************/
SCH_COMPONENT* SCH_COMPONENT::GenCopy()
/**************************************************************/
{
SCH_COMPONENT* new_item = new SCH_COMPONENT( *this );
// Reset chain pointers:
new_item->Pback = new_item->Pnext = new_item->m_Son = NULL;
// Reparent items after copy:
for( int ii = 0; ii < new_item->GetFieldCount(); ++ii )
{
new_item->GetField(ii)->m_Parent = new_item;
}
return new_item;
}
/*****************************************************************/
void SCH_COMPONENT::SetRotationMiroir( int type_rotate )
/******************************************************************/

View File

@ -98,6 +98,16 @@ private:
public:
SCH_COMPONENT( const wxPoint& pos = wxPoint( 0, 0 ), SCH_ITEM* aParent = NULL );
/**
* Copy Constructor
* clones \a aTemplate into this object. All fields are copied as is except
* for the linked list management pointers which are set to NULL, and the
* SCH_CMP_FIELD's m_Parent pointers which are set to the new parent,
* i.e. this new object.
*/
SCH_COMPONENT( const SCH_COMPONENT& aTemplate );
~SCH_COMPONENT() { }
virtual wxString GetClass() const
@ -125,7 +135,17 @@ public:
void Load( FILE* aFile ) throw( Error );
*/
SCH_COMPONENT* GenCopy();
/**
* Function GenCopy
* returns a copy of this object but with the linked list pointers
* set to NULL.
* @return SCH_COMPONENT* - a copy of me.
*/
SCH_COMPONENT* GenCopy()
{
return new SCH_COMPONENT( *this );
}
void SetRotationMiroir( int type );
int GetRotationMiroir();
wxPoint GetScreenCoord( const wxPoint& coord );