Get fields out of SYMBOL, not LIB_PART.

Also make sure the match-mode is initialised before we try and fetch
all the field names.

Fixes https://gitlab.com/kicad/code/kicad/issues/6589
This commit is contained in:
Jeff Young 2020-12-02 14:17:59 +00:00
parent d8fa37d5c2
commit 3d7c26b6bd
1 changed files with 5 additions and 13 deletions

View File

@ -101,8 +101,6 @@ DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS( SCH_EDIT_FRAME* aParent, SCH_COMPO
m_fieldsBox->Check( i, true );
}
updateFieldsList();
m_messagePanel->SetLazyUpdate( true );
if( aSymbol && aSymbol->IsSelected() )
@ -117,6 +115,8 @@ DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS( SCH_EDIT_FRAME* aParent, SCH_COMPO
m_matchByReference->SetValue( true );
}
updateFieldsList();
if( m_mode == MODE::CHANGE )
{
m_updateFieldsSizer->GetStaticBox()->SetLabel( _( "Update Fields") );
@ -269,18 +269,10 @@ void DIALOG_CHANGE_SYMBOLS::updateFieldsList()
if( !isMatch( symbol, &instance ) )
continue;
LIB_PART* libSymbol = frame->GetLibPart( symbol->GetLibId() );
std::vector<SCH_FIELD>& fields = symbol->GetFields();
if( !libSymbol )
continue;
std::unique_ptr<LIB_PART> flattenedSymbol = libSymbol->Flatten();
LIB_FIELDS libFields;
flattenedSymbol->GetFields( libFields );
for( unsigned i = MANDATORY_FIELDS; i < libFields.size(); ++i )
fieldNames.insert( libFields[i].GetName() );
for( unsigned i = MANDATORY_FIELDS; i < fields.size(); ++i )
fieldNames.insert( fields[i].GetName() );
}
}