Fix several library symbol multiple inheritance issues.

This commit is contained in:
Wayne Stambaugh 2023-09-14 19:11:57 -04:00
parent 581cc0de5c
commit 5e86ba1abe
2 changed files with 38 additions and 12 deletions

View File

@ -639,7 +639,7 @@ std::unique_ptr< LIB_SYMBOL > LIB_SYMBOL::Flatten() const
// If the field isn't defined then inherit the parent field value.
if( tmp.IsEmpty() )
retv->GetFieldById( i )->SetText( parent->GetFieldById( i )->GetText() );
retv->GetFieldById( i )->SetText( retv->GetFieldById( i )->GetText() );
else
*retv->GetFieldById( i ) = *GetFieldById( i );
}
@ -714,7 +714,12 @@ const wxString LIB_SYMBOL::GetLibraryName() const
bool LIB_SYMBOL::IsPower() const
{
if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
return parent->m_options == ENTRY_POWER;
{
if( parent->IsRoot() )
return parent->m_options == ENTRY_POWER;
else
return parent->IsPower();
}
return m_options == ENTRY_POWER;
}
@ -723,7 +728,12 @@ bool LIB_SYMBOL::IsPower() const
void LIB_SYMBOL::SetPower()
{
if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
parent->m_options = ENTRY_POWER;
{
if( parent->IsRoot() )
parent->m_options = ENTRY_POWER;
else
parent->SetPower();
}
m_options = ENTRY_POWER;
}
@ -732,7 +742,12 @@ void LIB_SYMBOL::SetPower()
bool LIB_SYMBOL::IsNormal() const
{
if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
return parent->m_options == ENTRY_NORMAL;
{
if( parent->IsRoot() )
return parent->m_options == ENTRY_NORMAL;
else
return parent->IsNormal();
}
return m_options == ENTRY_NORMAL;
}
@ -741,7 +756,12 @@ bool LIB_SYMBOL::IsNormal() const
void LIB_SYMBOL::SetNormal()
{
if( LIB_SYMBOL_SPTR parent = m_parent.lock() )
parent->m_options = ENTRY_NORMAL;
{
if( parent->IsRoot() )
parent->m_options = ENTRY_NORMAL;
else
parent->SetNormal();
}
m_options = ENTRY_NORMAL;
}

View File

@ -626,26 +626,32 @@ BOOST_AUTO_TEST_CASE( Inheritance )
BOOST_CHECK_EQUAL( child->GetUnitCount(), 4 );
parent->SetUnitCount( 1 );
LIB_FIELD* field = new LIB_FIELD( MANDATORY_FIELDS, "Manufacturer" );
field->SetText( "Manufacturer" );
child->AddField( field );
parent->GetDatasheetField().SetText( "https://kicad/resistors.pdf" );
ref->GetDatasheetField().SetText( "https://kicad/resistors.pdf" );
BOOST_CHECK( *parent == *ref );
ref->SetName( "child" );
LIB_FIELD* field = new LIB_FIELD( MANDATORY_FIELDS, "Manufacturer" );
field->SetText( "KiCad" );
child->AddField( field );
field = new LIB_FIELD( MANDATORY_FIELDS, "Manufacturer" );
field->SetText( "Manufacturer" );
field->SetText( "KiCad" );
ref->AddField( field );
BOOST_CHECK( *ref == *child->Flatten() );
ref->SetName( "grandchild" );
field = new LIB_FIELD( MANDATORY_FIELDS + 1, "MPN" );
field->SetText( "123456" );
ref->AddField( field );
grandChild->AddField( field );
field = new LIB_FIELD( MANDATORY_FIELDS + 1, "MPN" );
field->SetText( "123456" );
grandChild->AddField( field );
ref->AddField( field );
BOOST_CHECK( *ref == *grandChild->Flatten() );
BOOST_CHECK_EQUAL( grandChild->Flatten()->GetDatasheetField().GetText(),
"https://kicad/resistors.pdf" );
child->SetParent();
BOOST_CHECK_EQUAL( child->GetUnitCount(), 1 );