Eagle schematic import: Corrected visibility for >NAME and >VALUE

This commit is contained in:
Dag Lem 2023-01-14 14:40:35 +00:00 committed by Wayne Stambaugh
parent 96a0bd556e
commit 54f67cd6f5
2 changed files with 34 additions and 10 deletions

View File

@ -1542,16 +1542,25 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
if( einstance.part.find_first_not_of( wxT( "#" ) ) != 0 ) if( einstance.part.find_first_not_of( wxT( "#" ) ) != 0 )
reference.Prepend( wxT( "UNK" ) ); reference.Prepend( wxT( "UNK" ) );
symbol->GetField( REFERENCE_FIELD )->SetText( reference ); SCH_FIELD* referenceField = symbol->GetField( REFERENCE_FIELD );
referenceField->SetText( reference );
referenceField->SetVisible( part->GetFieldById( REFERENCE_FIELD )->IsVisible() );
wxString value = ( epart->value ) ? *epart->value : kisymbolname; SCH_FIELD* valueField = symbol->GetField( VALUE_FIELD );
bool userValue = m_userValue.at( libIdSymbolName );
valueField->SetVisible( part->GetFieldById( VALUE_FIELD )->IsVisible() );
symbol->GetField( VALUE_FIELD )->SetText( value ); if( userValue && epart->value )
{
valueField->SetText( *epart->value );
}
else
{
valueField->SetText( kisymbolname );
// Set the visibility of fields. if( userValue )
symbol->GetField( REFERENCE_FIELD )->SetVisible( valueField->SetVisible( false );
part->GetFieldById( REFERENCE_FIELD )->IsVisible() ); }
symbol->GetField( VALUE_FIELD )->SetVisible( part->GetFieldById( VALUE_FIELD )->IsVisible() );
for( const auto& a : epart->attribute ) for( const auto& a : epart->attribute )
{ {
@ -1789,6 +1798,11 @@ EAGLE_LIBRARY* SCH_EAGLE_PLUGIN::loadLibrary( wxXmlNode* aLibraryNode,
m_properties.get() ); m_properties.get() );
aEagleLibrary->KiCadSymbols.insert( libName, libSymbol.release() ); aEagleLibrary->KiCadSymbols.insert( libName, libSymbol.release() );
// Store information on whether the value of VALUE_FIELD for a part should be
// part/@value or part/@deviceset + part/@device.
m_userValue.emplace( std::make_pair( libName,
edeviceset.uservalue == true ) );
deviceNode = deviceNode->GetNext(); deviceNode = deviceNode->GetNext();
} // devicenode } // devicenode
@ -1892,17 +1906,27 @@ bool SCH_EAGLE_PLUGIN::loadSymbol( wxXmlNode* aSymbolNode, std::unique_ptr<LIB_S
{ {
std::unique_ptr<LIB_TEXT> libtext( loadSymbolText( aSymbol, currentNode, std::unique_ptr<LIB_TEXT> libtext( loadSymbolText( aSymbol, currentNode,
aGateNumber ) ); aGateNumber ) );
const wxString& text = libtext->GetText();
const wxString textUpper = text.Upper();
if( libtext->GetText().Upper() == wxT( ">NAME" ) ) if( textUpper == wxT( ">NAME" ) )
{ {
LIB_FIELD* field = aSymbol->GetFieldById( REFERENCE_FIELD ); LIB_FIELD* field = aSymbol->GetFieldById( REFERENCE_FIELD );
loadFieldAttributes( field, libtext.get() ); loadFieldAttributes( field, libtext.get() );
if( text != textUpper )
field->SetVisible( false );
foundName = true; foundName = true;
} }
else if( libtext->GetText().Upper() == wxT( ">VALUE" ) ) else if( textUpper == wxT( ">VALUE" ) )
{ {
LIB_FIELD* field = aSymbol->GetFieldById( VALUE_FIELD ); LIB_FIELD* field = aSymbol->GetFieldById( VALUE_FIELD );
loadFieldAttributes( field, libtext.get() ); loadFieldAttributes( field, libtext.get() );
if( text != textUpper )
field->SetVisible( false );
foundValue = true; foundValue = true;
} }
else else
@ -2451,7 +2475,6 @@ void SCH_EAGLE_PLUGIN::loadFieldAttributes( LIB_FIELD* aField, const LIB_TEXT* a
aField->SetBold( aText->IsBold() ); aField->SetBold( aText->IsBold() );
aField->SetVertJustify( aText->GetVertJustify() ); aField->SetVertJustify( aText->GetVertJustify() );
aField->SetHorizJustify( aText->GetHorizJustify() ); aField->SetHorizJustify( aText->GetHorizJustify() );
aField->SetVisible( true );
} }

View File

@ -232,6 +232,7 @@ private:
EPART_MAP m_partlist; EPART_MAP m_partlist;
std::map<wxString, EAGLE_LIBRARY> m_eagleLibs; std::map<wxString, EAGLE_LIBRARY> m_eagleLibs;
std::unordered_map<wxString, bool> m_userValue; ///< deviceset/@uservalue for device.
SCH_PLUGIN::SCH_PLUGIN_RELEASER m_pi; ///< PI to create KiCad symbol library. SCH_PLUGIN::SCH_PLUGIN_RELEASER m_pi; ///< PI to create KiCad symbol library.
std::unique_ptr<STRING_UTF8_MAP> m_properties; ///< Library plugin properties. std::unique_ptr<STRING_UTF8_MAP> m_properties; ///< Library plugin properties.