Commit 53b0165b authored by charras's avatar charras

eeschema: restore right value for m_Parent field member in...

eeschema: restore right value for m_Parent field member in SCH_COMPONENT::GenCopy() and SCH_COMPONENT::SwapData()
parent 324f5744
...@@ -42,14 +42,15 @@ SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) : ...@@ -42,14 +42,15 @@ SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) :
m_Fields.reserve( NUMBER_OF_FIELDS ); m_Fields.reserve( NUMBER_OF_FIELDS );
for( int i=0; i<NUMBER_OF_FIELDS; ++i ) for( int i = 0; i<NUMBER_OF_FIELDS; ++i )
{ {
SCH_CMP_FIELD field( aPos, i, this, ReturnDefaultFieldName(i) ); SCH_CMP_FIELD field( aPos, i, this, ReturnDefaultFieldName( i ) );
if( i==REFERENCE ) if( i==REFERENCE )
field.SetLayer( LAYER_REFERENCEPART ); field.SetLayer( LAYER_REFERENCEPART );
else if( i==VALUE ) else if( i==VALUE )
field.SetLayer( LAYER_VALUEPART ); field.SetLayer( LAYER_VALUEPART );
// else keep LAYER_FIELDS from SCH_CMP_FIELD constructor // else keep LAYER_FIELDS from SCH_CMP_FIELD constructor
// SCH_CMP_FIELD's implicitly created copy constructor is called in here // SCH_CMP_FIELD's implicitly created copy constructor is called in here
...@@ -59,7 +60,6 @@ SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) : ...@@ -59,7 +60,6 @@ SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) :
m_PrefixString = wxString( _( "U" ) ); m_PrefixString = wxString( _( "U" ) );
} }
/** /**
* Function AddHierarchicalReference * Function AddHierarchicalReference
* adds a full hierachical reference (path + local reference) * adds a full hierachical reference (path + local reference)
...@@ -105,9 +105,9 @@ wxString ReturnDefaultFieldName( int aFieldNdx ) ...@@ -105,9 +105,9 @@ wxString ReturnDefaultFieldName( int aFieldNdx )
{ {
// avoid unnecessarily copying wxStrings at runtime. // avoid unnecessarily copying wxStrings at runtime.
static const wxString defaults[] = { static const wxString defaults[] = {
_( "Ref" ), // Reference of part, i.e. "IC21" _( "Ref" ), // Reference of part, i.e. "IC21"
_( "Value" ), // Value of part, i.e. "3.3K" _( "Value" ), // Value of part, i.e. "3.3K"
_( "Footprint" ), // Footprint, used by cvpcb or pcbnew, i.e. "16DIP300" _( "Footprint" ), // Footprint, used by cvpcb or pcbnew, i.e. "16DIP300"
_( "Datasheet" ), _( "Datasheet" ),
}; };
...@@ -116,7 +116,7 @@ wxString ReturnDefaultFieldName( int aFieldNdx ) ...@@ -116,7 +116,7 @@ wxString ReturnDefaultFieldName( int aFieldNdx )
else else
{ {
wxString ret = _("Field"); wxString ret = _( "Field" );
ret << ( aFieldNdx - FIELD1 + 1); ret << ( aFieldNdx - FIELD1 + 1);
return ret; return ret;
} }
...@@ -179,10 +179,10 @@ const wxString SCH_COMPONENT::GetRef( DrawSheetPath* sheet ) ...@@ -179,10 +179,10 @@ const wxString SCH_COMPONENT::GetRef( DrawSheetPath* sheet )
// this will happen if we load a version 1 schematic file. // this will happen if we load a version 1 schematic file.
// it will also mean that multiple instances of the same sheet by default // it will also mean that multiple instances of the same sheet by default
// all have the same component references, but perhaps this is best. // all have the same component references, but perhaps this is best.
if( !GetField(REFERENCE)->m_Text.IsEmpty() ) if( !GetField( REFERENCE )->m_Text.IsEmpty() )
{ {
SetRef( sheet, GetField(REFERENCE)->m_Text ); SetRef( sheet, GetField( REFERENCE )->m_Text );
return GetField(REFERENCE)->m_Text; return GetField( REFERENCE )->m_Text;
} }
return m_PrefixString; return m_PrefixString;
} }
...@@ -399,6 +399,17 @@ void SCH_COMPONENT::SwapData( SCH_COMPONENT* copyitem ) ...@@ -399,6 +399,17 @@ void SCH_COMPONENT::SwapData( SCH_COMPONENT* copyitem )
EXCHG( m_Transform[1][1], copyitem->m_Transform[1][1] ); EXCHG( m_Transform[1][1], copyitem->m_Transform[1][1] );
m_Fields.swap( copyitem->m_Fields ); // std::vector's swap() m_Fields.swap( copyitem->m_Fields ); // std::vector's swap()
// Reparent items after copying data (after swap() m_Pareny member does not points the right parent):
for( int ii = 0; ii < copyitem->GetFieldCount(); ++ii )
{
copyitem->GetField(ii)->m_Parent = copyitem;
}
for( int ii = 0; ii < GetFieldCount(); ++ii )
{
GetField(ii)->m_Parent = this;
}
} }
...@@ -455,7 +466,7 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet ) ...@@ -455,7 +466,7 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet )
wxString multi = wxT( "1" ); wxString multi = wxT( "1" );
if ( KeepMulti ) // We cannot remove all annotations: part selection must be kept if( KeepMulti ) // We cannot remove all annotations: part selection must be kept
{ {
wxString NewHref; wxString NewHref;
wxString path; wxString path;
...@@ -487,7 +498,6 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet ) ...@@ -487,7 +498,6 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet )
// UpdateAllScreenReferences for the active sheet. // UpdateAllScreenReferences for the active sheet.
// But this call cannot made here. // But this call cannot made here.
m_Fields[REFERENCE].m_Text = defRef; //for drawing. m_Fields[REFERENCE].m_Text = defRef; //for drawing.
} }
...@@ -495,27 +505,14 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet ) ...@@ -495,27 +505,14 @@ void SCH_COMPONENT::ClearAnnotation( DrawSheetPath* aSheet )
SCH_COMPONENT* SCH_COMPONENT::GenCopy() SCH_COMPONENT* SCH_COMPONENT::GenCopy()
/**************************************************************/ /**************************************************************/
{ {
#if 0
SCH_COMPONENT* new_item = new SCH_COMPONENT( m_Pos );
new_item->m_Multi = m_Multi;
new_item->m_ChipName = m_ChipName;
new_item->m_PrefixString = m_PrefixString;
new_item->m_Convert = m_Convert;
new_item->m_Transform[0][0] = m_Transform[0][0];
new_item->m_Transform[0][1] = m_Transform[0][1];
new_item->m_Transform[1][0] = m_Transform[1][0];
new_item->m_Transform[1][1] = m_Transform[1][1];
new_item->m_TimeStamp = m_TimeStamp;
new_item->m_Fields = m_Fields;
#else
SCH_COMPONENT* new_item = new SCH_COMPONENT( *this ); SCH_COMPONENT* new_item = new SCH_COMPONENT( *this );
// Reset chain pointers:
#endif 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; return new_item;
} }
...@@ -785,7 +782,6 @@ void SCH_COMPONENT::Show( int nestLevel, std::ostream& os ) ...@@ -785,7 +782,6 @@ void SCH_COMPONENT::Show( int nestLevel, std::ostream& os )
#endif #endif
/****************************************/ /****************************************/
bool SCH_COMPONENT::Save( FILE* f ) const bool SCH_COMPONENT::Save( FILE* f ) const
/****************************************/ /****************************************/
...@@ -805,10 +801,10 @@ bool SCH_COMPONENT::Save( FILE* f ) const ...@@ -805,10 +801,10 @@ bool SCH_COMPONENT::Save( FILE* f ) const
} }
else else
{ {
if( GetField(REFERENCE)->m_Text.IsEmpty() ) if( GetField( REFERENCE )->m_Text.IsEmpty() )
strncpy( Name1, CONV_TO_UTF8( m_PrefixString ), sizeof(Name1) ); strncpy( Name1, CONV_TO_UTF8( m_PrefixString ), sizeof(Name1) );
else else
strncpy( Name1, CONV_TO_UTF8( GetField(REFERENCE)->m_Text ), sizeof(Name1) ); strncpy( Name1, CONV_TO_UTF8( GetField( REFERENCE )->m_Text ), sizeof(Name1) );
} }
for( ii = 0; ii < (int) strlen( Name1 ); ii++ ) for( ii = 0; ii < (int) strlen( Name1 ); ii++ )
{ {
...@@ -878,11 +874,11 @@ bool SCH_COMPONENT::Save( FILE* f ) const ...@@ -878,11 +874,11 @@ bool SCH_COMPONENT::Save( FILE* f ) const
} }
} }
for( int fieldNdx=0; fieldNdx<GetFieldCount(); ++fieldNdx ) for( int fieldNdx = 0; fieldNdx<GetFieldCount(); ++fieldNdx )
{ {
SCH_CMP_FIELD* field = GetField( fieldNdx ); SCH_CMP_FIELD* field = GetField( fieldNdx );
wxString defaultName = ReturnDefaultFieldName( fieldNdx ); wxString defaultName = ReturnDefaultFieldName( fieldNdx );
// only save the field if there is a value in the field or if field name // only save the field if there is a value in the field or if field name
// is different than the default field name // is different than the default field name
...@@ -931,7 +927,7 @@ EDA_Rect SCH_COMPONENT::GetBoundingBox() ...@@ -931,7 +927,7 @@ EDA_Rect SCH_COMPONENT::GetBoundingBox()
// Include BoundingBoxes of fields // Include BoundingBoxes of fields
for( int ii = 0; ii < GetFieldCount(); ii++ ) for( int ii = 0; ii < GetFieldCount(); ii++ )
{ {
bbox.Merge( GetField(ii)->GetBoundaryBox() ); bbox.Merge( GetField( ii )->GetBoundaryBox() );
} }
// ... add padding // ... add padding
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment