Fix bug with swapping pin data for undo.

This commit is contained in:
Jeff Young 2019-04-26 11:31:11 +01:00
parent d89d0e6b74
commit 50a9a6e1f7
1 changed files with 19 additions and 5 deletions

View File

@ -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 );
}