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:
parent
f8c8a2144b
commit
d3d5d0f46e
|
@ -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 );
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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!
|
||||||
|
|
Loading…
Reference in New Issue