Fix bug with swapping pin data for undo.
This commit is contained in:
parent
d89d0e6b74
commit
50a9a6e1f7
|
@ -940,23 +940,37 @@ void SCH_COMPONENT::SwapData( SCH_ITEM* aItem )
|
|||
std::swap( m_unit, component->m_unit );
|
||||
std::swap( m_convert, component->m_convert );
|
||||
std::swap( m_pins, component->m_pins );
|
||||
std::swap( m_pinMap, component->m_pinMap );
|
||||
|
||||
TRANSFORM tmp = m_transform;
|
||||
|
||||
m_transform = component->m_transform;
|
||||
component->m_transform = tmp;
|
||||
m_pinMap.clear();
|
||||
component->m_pinMap.clear();
|
||||
|
||||
m_Fields.swap( component->m_Fields ); // std::vector's swap()
|
||||
|
||||
// Reparent items after copying data
|
||||
// (after swap(), m_Parent member does not point to the right parent):
|
||||
for( unsigned i = 0; i < m_pins.size(); ++i )
|
||||
{
|
||||
m_pins[ i ].SetParent( this );
|
||||
m_pinMap[ m_pins[ i ].GetLibPin() ] = i;
|
||||
}
|
||||
|
||||
for( unsigned i = 0; i < component->m_pins.size(); ++i )
|
||||
{
|
||||
component->m_pins[ i ].SetParent( component );
|
||||
component->m_pinMap[ component->m_pins[ i ].GetLibPin() ] = i;
|
||||
}
|
||||
|
||||
for( int ii = 0; ii < component->GetFieldCount(); ++ii )
|
||||
component->GetField( ii )->SetParent( component );
|
||||
|
||||
for( int ii = 0; ii < GetFieldCount(); ++ii )
|
||||
GetField( ii )->SetParent( this );
|
||||
|
||||
TRANSFORM tmp = m_transform;
|
||||
|
||||
m_transform = component->m_transform;
|
||||
component->m_transform = tmp;
|
||||
|
||||
std::swap( m_PathsAndReferences, component->m_PathsAndReferences );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue