Distinguish between user added fields and those found in symbols.

Fixes https://gitlab.com/kicad/code/kicad/issues/11511

Fixes https://gitlab.com/kicad/code/kicad/issues/8999
This commit is contained in:
Jeff Young 2022-09-12 23:38:36 +01:00
parent f8c8a2144b
commit d3d5d0f46e
5 changed files with 1092 additions and 1088 deletions

View File

@ -28,6 +28,8 @@
#include <symbol_library.h> #include <symbol_library.h>
#include <confirm.h> #include <confirm.h>
#include <eda_doc.h> #include <eda_doc.h>
//#include "eda_list_dialog.h"
#include <wildcards_and_files_ext.h>
#include <eeschema_settings.h> #include <eeschema_settings.h>
#include <general.h> #include <general.h>
#include <grid_tricks.h> #include <grid_tricks.h>
@ -43,13 +45,9 @@
#include <widgets/wx_grid.h> #include <widgets/wx_grid.h>
#include <wx/ffile.h> #include <wx/ffile.h>
#include <wx/grid.h> #include <wx/grid.h>
#include <wx/msgdlg.h>
#include <wx/textdlg.h> #include <wx/textdlg.h>
#include <wx/filedlg.h> #include <wx/filedlg.h>
#include "dialog_symbol_fields_table.h" #include "dialog_symbol_fields_table.h"
#include "eda_list_dialog.h"
#include <wildcards_and_files_ext.h>
#define DISPLAY_NAME_COLUMN 0 #define DISPLAY_NAME_COLUMN 0
#define SHOW_FIELD_COLUMN 1 #define SHOW_FIELD_COLUMN 1
@ -180,6 +178,7 @@ protected:
std::vector<wxString> m_fieldNames; std::vector<wxString> m_fieldNames;
int m_sortColumn; int m_sortColumn;
bool m_sortAscending; bool m_sortAscending;
std::vector<wxString> m_userAddedFields;
// However, the grid view can vary in two ways: // However, the grid view can vary in two ways:
// 1) the componentRefs can be grouped into fewer rows // 1) the componentRefs can be grouped into fewer rows
@ -206,10 +205,13 @@ public:
m_symbolsList.SplitReferences(); m_symbolsList.SplitReferences();
} }
void AddColumn( const wxString& aFieldName ) void AddColumn( const wxString& aFieldName, bool aAddedByUser )
{ {
m_fieldNames.push_back( aFieldName ); m_fieldNames.push_back( aFieldName );
if( aAddedByUser )
m_userAddedFields.push_back( aFieldName );
for( unsigned i = 0; i < m_symbolsList.GetCount(); ++i ) for( unsigned i = 0; i < m_symbolsList.GetCount(); ++i )
{ {
SCH_SYMBOL* symbol = m_symbolsList[ i ].GetSymbol(); SCH_SYMBOL* symbol = m_symbolsList[ i ].GetSymbol();
@ -673,6 +675,9 @@ public:
// Add a not existing field if it has a value for this symbol // Add a not existing field if it has a value for this symbol
bool createField = !destField && !srcValue.IsEmpty(); bool createField = !destField && !srcValue.IsEmpty();
if( alg::contains( m_userAddedFields, srcName ) )
createField = true;
if( createField ) if( createField )
{ {
const VECTOR2I symbolPos = symbol.GetPosition(); const VECTOR2I symbolPos = symbol.GetPosition();
@ -987,9 +992,9 @@ bool DIALOG_SYMBOL_FIELDS_TABLE::TransferDataFromWindow()
void DIALOG_SYMBOL_FIELDS_TABLE::AddField( const wxString& aDisplayName, void DIALOG_SYMBOL_FIELDS_TABLE::AddField( const wxString& aDisplayName,
const wxString& aCanonicalName, const wxString& aCanonicalName,
bool defaultShow, bool defaultSortBy ) bool defaultShow, bool defaultSortBy, bool addedByUser )
{ {
m_dataModel->AddColumn( aCanonicalName ); m_dataModel->AddColumn( aCanonicalName, addedByUser );
wxVector<wxVariant> fieldsCtrlRow; wxVector<wxVariant> fieldsCtrlRow;
@ -1086,7 +1091,7 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnAddField( wxCommandEvent& event )
EESCHEMA_SETTINGS* cfg = static_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() ); EESCHEMA_SETTINGS* cfg = static_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() );
cfg->m_FieldEditorPanel.fields_show[key] = true; cfg->m_FieldEditorPanel.fields_show[key] = true;
AddField( fieldName, fieldName, true, false ); AddField( fieldName, fieldName, true, false, true );
wxGridTableMessage msg( m_dataModel, wxGRIDTABLE_NOTIFY_COLS_INSERTED, wxGridTableMessage msg( m_dataModel, wxGRIDTABLE_NOTIFY_COLS_INSERTED,
m_fieldsCtrl->GetItemCount(), 1 ); m_fieldsCtrl->GetItemCount(), 1 );

View File

@ -45,7 +45,7 @@ public:
private: private:
void AddField( const wxString& displayName, const wxString& aCanonicalName, bool defaultShow, void AddField( const wxString& displayName, const wxString& aCanonicalName, bool defaultShow,
bool defaultSortBy ); bool defaultSortBy, bool addedByUser = false );
/** /**
* Construct the rows of m_fieldsCtrl and the columns of m_dataModel from a union of all * Construct the rows of m_fieldsCtrl and the columns of m_dataModel from a union of all
@ -73,14 +73,13 @@ private:
void OnFilterMouseMoved( wxMouseEvent& event ) override; void OnFilterMouseMoved( wxMouseEvent& event ) override;
void OnFieldsCtrlSelectionChanged( wxDataViewEvent& event ) override; void OnFieldsCtrlSelectionChanged( wxDataViewEvent& event ) override;
private:
SCH_EDIT_FRAME* m_parent; SCH_EDIT_FRAME* m_parent;
int m_showColWidth; int m_showColWidth;
int m_groupByColWidth; int m_groupByColWidth;
SCH_REFERENCE_LIST m_symbolsList; SCH_REFERENCE_LIST m_symbolsList;
FIELDS_EDITOR_GRID_DATA_MODEL* m_dataModel; FIELDS_EDITOR_GRID_DATA_MODEL* m_dataModel;
static int m_newFieldsOption; // Store the option choice for new fields
// during a session:
}; };
#endif /* DIALOG_SYMBOL_FIELDS_TABLE_H */ #endif /* DIALOG_SYMBOL_FIELDS_TABLE_H */

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3) // C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -32,12 +32,12 @@ DIALOG_SYMBOL_FIELDS_TABLE_BASE::DIALOG_SYMBOL_FIELDS_TABLE_BASE( wxWindow* pare
bLeftSizer->Add( m_fieldsCtrl, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 ); bLeftSizer->Add( m_fieldsCtrl, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
m_addFieldButton = new wxButton( m_leftPanel, wxID_ANY, _("Add Field..."), wxDefaultPosition, wxDefaultSize, 0 ); m_addFieldButton = new wxButton( m_leftPanel, wxID_ANY, _("Add Field..."), wxDefaultPosition, wxDefaultSize, 0 );
bLeftSizer->Add( m_addFieldButton, 0, wxALL|wxEXPAND, 5 ); bLeftSizer->Add( m_addFieldButton, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
m_removeFieldButton = new wxButton( m_leftPanel, wxID_ANY, _("Remove Field..."), wxDefaultPosition, wxDefaultSize, 0 ); m_removeFieldButton = new wxButton( m_leftPanel, wxID_ANY, _("Remove Field..."), wxDefaultPosition, wxDefaultSize, 0 );
m_removeFieldButton->Enable( false ); m_removeFieldButton->Enable( false );
bLeftSizer->Add( m_removeFieldButton, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); bLeftSizer->Add( m_removeFieldButton, 0, wxEXPAND|wxBOTTOM|wxLEFT, 5 );
m_leftPanel->SetSizer( bLeftSizer ); m_leftPanel->SetSizer( bLeftSizer );

View File

@ -212,7 +212,7 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxEXPAND|wxTOP|wxBOTTOM|wxLEFT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
@ -286,7 +286,7 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property> <property name="flag">wxEXPAND|wxBOTTOM|wxLEFT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="1"> <object class="wxButton" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3) // C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!