Ensure local names of vector bus members are preserved
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7196
This commit is contained in:
parent
4c14406788
commit
77bb36a482
|
@ -222,25 +222,44 @@ void SCH_CONNECTION::Reset()
|
||||||
void SCH_CONNECTION::Clone( SCH_CONNECTION& aOther )
|
void SCH_CONNECTION::Clone( SCH_CONNECTION& aOther )
|
||||||
{
|
{
|
||||||
m_graph = aOther.m_graph;
|
m_graph = aOther.m_graph;
|
||||||
m_type = aOther.Type();
|
|
||||||
// Note: m_lastDriver is not cloned as it needs to be the last driver of *this* connection
|
// Note: m_lastDriver is not cloned as it needs to be the last driver of *this* connection
|
||||||
m_driver = aOther.Driver();
|
m_driver = aOther.Driver();
|
||||||
m_sheet = aOther.Sheet();
|
m_sheet = aOther.Sheet();
|
||||||
m_name = aOther.m_name;
|
m_name = aOther.m_name;
|
||||||
// Note: m_local_name is not cloned
|
// Note: m_local_name is not cloned if not set yet
|
||||||
m_prefix = aOther.Prefix();
|
if( m_local_name.IsEmpty() )
|
||||||
m_bus_prefix = aOther.BusPrefix();
|
m_local_name = aOther.LocalName();
|
||||||
m_suffix = aOther.Suffix();
|
|
||||||
m_members = aOther.Members();
|
m_prefix = aOther.Prefix();
|
||||||
m_net_code = aOther.NetCode();
|
m_bus_prefix = aOther.BusPrefix();
|
||||||
m_bus_code = aOther.BusCode();
|
m_suffix = aOther.Suffix();
|
||||||
|
m_net_code = aOther.NetCode();
|
||||||
|
m_bus_code = aOther.BusCode();
|
||||||
m_vector_start = aOther.VectorStart();
|
m_vector_start = aOther.VectorStart();
|
||||||
m_vector_end = aOther.VectorEnd();
|
m_vector_end = aOther.VectorEnd();
|
||||||
// Note: m_vector_index is not cloned
|
// Note: m_vector_index is not cloned
|
||||||
m_vector_prefix = aOther.VectorPrefix();
|
m_vector_prefix = aOther.VectorPrefix();
|
||||||
|
|
||||||
// Note: subgraph code isn't cloned, it should remain with the original object
|
// Note: subgraph code isn't cloned, it should remain with the original object
|
||||||
|
|
||||||
|
// Handle vector bus members: make sure local names are preserved where possible
|
||||||
|
std::vector<std::shared_ptr<SCH_CONNECTION>>& otherMembers = aOther.Members();
|
||||||
|
|
||||||
|
if( m_type == CONNECTION_TYPE::BUS && aOther.Type() == CONNECTION_TYPE::BUS &&
|
||||||
|
m_members.size() == otherMembers.size() )
|
||||||
|
{
|
||||||
|
for( size_t i = 0; i < m_members.size(); ++i )
|
||||||
|
{
|
||||||
|
m_members[i]->Clone( *otherMembers[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_members = otherMembers;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_type = aOther.Type();
|
||||||
|
|
||||||
recacheName();
|
recacheName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue