diff --git a/eeschema/dialogs/dialog_symbol_fields_table.cpp b/eeschema/dialogs/dialog_symbol_fields_table.cpp index 7c9dab3846..75a692c7b3 100644 --- a/eeschema/dialogs/dialog_symbol_fields_table.cpp +++ b/eeschema/dialogs/dialog_symbol_fields_table.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -628,13 +627,7 @@ bool DIALOG_SYMBOL_FIELDS_TABLE::TransferDataFromWindow() SCH_COMMIT commit( m_parent ); SCH_SHEET_PATH currentSheet = m_parent->GetCurrentSheet(); - std::function changeHandler = - [&commit]( SCH_SYMBOL& aSymbol, SCH_SHEET_PATH& aPath ) -> void - { - commit.Modify( &aSymbol, aPath.LastScreen() ); - }; - - m_dataModel->ApplyData( changeHandler ); + m_dataModel->ApplyData( commit ); commit.Push( wxS( "Symbol Fields Table Edit" ) ); diff --git a/eeschema/fields_data_model.cpp b/eeschema/fields_data_model.cpp index 9d3195a568..a4d6ea3a05 100644 --- a/eeschema/fields_data_model.cpp +++ b/eeschema/fields_data_model.cpp @@ -23,7 +23,8 @@ #include #include #include -#include +#include +#include #include "string_utils.h" #include "fields_data_model.h" @@ -60,9 +61,13 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::updateDataStoreSymbolField( const SCH_SYMBOL else if( const SCH_FIELD* field = aSymbol.GetFieldByName( aFieldName ) ) { if( field->IsPrivate() ) + { m_dataStore[aSymbol.m_Uuid][aFieldName] = wxEmptyString; - else - m_dataStore[aSymbol.m_Uuid][aFieldName] = field->GetText(); + return; + } + + wxString value = aSymbol.Schematic()->ConvertKIIDsToRefs( field->GetText() ); + m_dataStore[aSymbol.m_Uuid][aFieldName] = value; } else if( IsTextVar( aFieldName ) ) { @@ -757,22 +762,18 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::ExpandAfterSort() } -void FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData( - std::function symbolChangeHandler ) +void FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData( SCH_COMMIT& aCommit ) { for( unsigned i = 0; i < m_symbolsList.GetCount(); ++i ) { SCH_SYMBOL& symbol = *m_symbolsList[i].GetSymbol(); - symbolChangeHandler( symbol, m_symbolsList[i].GetSheetPath() ); + aCommit.Modify( &symbol, m_symbolsList[i].GetSheetPath().LastScreen() ); const std::map& fieldStore = m_dataStore[symbol.m_Uuid]; - for( const std::pair srcData : fieldStore ) + for( const auto& [srcName, srcValue] : fieldStore ) { - const wxString& srcName = srcData.first; - const wxString& srcValue = srcData.second; - // Attributes bypass the field logic, so handle them first if( isAttribute( srcName ) ) { @@ -813,24 +814,19 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData( if( destField->GetId() == REFERENCE_FIELD ) { // Reference is not editable from this dialog + continue; } else if( destField->GetId() == VALUE_FIELD ) { // Value field cannot be empty - if( !srcValue.IsEmpty() ) - symbol.SetValueFieldText( srcValue ); - } - else if( destField->GetId() == FOOTPRINT_FIELD ) - { - symbol.SetFootprintFieldText( srcValue ); - } - else - { - destField->SetText( srcValue ); + if( srcValue.IsEmpty() ) + continue; } + + destField->SetText( symbol.Schematic()->ConvertRefsToKIIDs( srcValue ) ); } - for( int ii = symbol.GetFields().size() - 1; ii >= 0; ii-- ) + for( int ii = (int) symbol.GetFields().size() - 1; ii >= 0; ii-- ) { if( symbol.GetFields()[ii].IsMandatory() || symbol.GetFields()[ii].IsPrivate() ) continue; @@ -978,8 +974,10 @@ wxString FIELDS_EDITOR_GRID_DATA_MODEL::Export( const BOM_FMT_PRESET& settings ) } if( !settings.stringDelimiter.IsEmpty() ) + { field.Replace( settings.stringDelimiter, settings.stringDelimiter + settings.stringDelimiter ); + } return settings.stringDelimiter + field + settings.stringDelimiter + ( last ? wxString( wxS( "\n" ) ) : settings.fieldDelimiter ); @@ -1023,13 +1021,20 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::AddReferences( const SCH_REFERENCE_LIST& aRe { if( !m_symbolsList.Contains( ref ) ) { + SCH_SYMBOL* symbol = ref.GetSymbol(); + m_symbolsList.AddItem( ref ); // Update the fields of every reference - for( const SCH_FIELD& field : ref.GetSymbol()->GetFields() ) + for( const SCH_FIELD& field : symbol->GetFields() ) { if( !field.IsPrivate() ) - m_dataStore[ref.GetSymbol()->m_Uuid][field.GetCanonicalName()] = field.GetText(); + { + wxString name = field.GetCanonicalName(); + wxString value = symbol->Schematic()->ConvertKIIDsToRefs( field.GetText() ); + + m_dataStore[symbol->m_Uuid][name] = value; + } } } } diff --git a/eeschema/fields_data_model.h b/eeschema/fields_data_model.h index 235380d999..7f7d5d6883 100644 --- a/eeschema/fields_data_model.h +++ b/eeschema/fields_data_model.h @@ -204,7 +204,7 @@ public: void CollapseForSort(); void ExpandAfterSort(); - void ApplyData( std::function symbolChangeHandler ); + void ApplyData( SCH_COMMIT& aCommit ); bool IsEdited() { return m_edited; }