Browse Source

Fix bug with swapping pin data for undo.

pull/15/head
Jeff Young 7 years ago
parent
commit
50a9a6e1f7
  1. 24
      eeschema/sch_component.cpp

24
eeschema/sch_component.cpp

@ -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…
Cancel
Save