diff --git a/eeschema/dialogs/dialog_symbol_fields_table.cpp b/eeschema/dialogs/dialog_symbol_fields_table.cpp index 5b95444cf6..374e56142c 100644 --- a/eeschema/dialogs/dialog_symbol_fields_table.cpp +++ b/eeschema/dialogs/dialog_symbol_fields_table.cpp @@ -341,23 +341,26 @@ void DIALOG_SYMBOL_FIELDS_TABLE::SetupColumnProperties() attr->SetReadOnly( false ); // Set some column types to specific editors - if( m_dataModel->GetColFieldName( col ) == _( "Reference" ) ) + if( m_dataModel->GetColFieldName( col ) + == TEMPLATE_FIELDNAME::GetDefaultFieldName( REFERENCE_FIELD ) ) { attr->SetReadOnly(); m_grid->SetColAttr( col, attr ); } - else if( m_dataModel->GetColFieldName( col ) == _( "Footprint" ) ) + else if( m_dataModel->GetColFieldName( col ) + == TEMPLATE_FIELDNAME::GetDefaultFieldName( FOOTPRINT_FIELD ) ) { attr->SetEditor( new GRID_CELL_FPID_EDITOR( this, wxEmptyString ) ); m_grid->SetColAttr( col, attr ); } - else if( m_dataModel->GetColFieldName( col ) == _( "Datasheet" ) ) + else if( m_dataModel->GetColFieldName( col ) + == TEMPLATE_FIELDNAME::GetDefaultFieldName( DATASHEET_FIELD ) ) { // set datasheet column viewer button attr->SetEditor( new GRID_CELL_URL_EDITOR( this, Prj().SchSearchS() ) ); m_grid->SetColAttr( col, attr ); } - else if( m_dataModel->GetColFieldName( col ) == _( "Quantity" ) ) + else if( m_dataModel->GetColFieldName( col ) == wxS( "Quantity" ) ) { attr->SetReadOnly(); m_grid->SetColAttr( col, attr ); @@ -541,6 +544,34 @@ void DIALOG_SYMBOL_FIELDS_TABLE::AddField( const wxString& aFieldName, void DIALOG_SYMBOL_FIELDS_TABLE::LoadFieldNames() { + // Add mandatory fields first + for( int i = 0; i < MANDATORY_FIELDS; ++i ) + { + bool show = false; + bool groupBy = false; + + switch( i ) + { + case REFERENCE_FIELD: + case VALUE_FIELD: + case FOOTPRINT_FIELD: + show = true; + groupBy = true; + break; + case DATASHEET_FIELD: + show = true; + groupBy = false; + break; + } + + AddField( TEMPLATE_FIELDNAME::GetDefaultFieldName( i ), + TEMPLATE_FIELDNAME::GetDefaultFieldName( i, true ), show, groupBy ); + } + + // Generated field that isn't in any symbol + AddField( wxS( "Quantity" ), _( "Qty" ), true, false ); + + // User fields second std::set userFieldNames; for( unsigned i = 0; i < m_symbolsList.GetCount(); ++i ) @@ -551,13 +582,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::LoadFieldNames() userFieldNames.insert( symbol->GetFields()[j].GetName() ); } - - AddField( _( "Reference" ), wxT( "Reference" ), true, true ); - AddField( _( "Value" ), wxT( "Value" ), true, true ); - AddField( _( "Footprint" ), wxT( "Footprint" ), true, true ); - AddField( _( "Datasheet" ), wxT( "Datasheet" ), true, false ); - AddField( _( "Quantity" ), wxT( "Qty" ), true, false ); - for( const wxString& fieldName : userFieldNames ) AddField( fieldName, fieldName, true, false ); @@ -568,8 +592,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::LoadFieldNames() if( userFieldNames.count( templateFieldname.m_Name ) == 0 ) AddField( templateFieldname.m_Name, templateFieldname.m_Name, false, false ); } - - m_dataModel->SetFieldsOrder( m_schSettings.m_BomSettings.column_order ); } @@ -1505,9 +1527,9 @@ void DIALOG_SYMBOL_FIELDS_TABLE::onBomPresetChanged( wxCommandEvent& aEvent ) void DIALOG_SYMBOL_FIELDS_TABLE::doApplyBomPreset( const BOM_PRESET& aPreset ) { // Set a good default sort - int fieldNameCol = m_dataModel->GetFieldNameCol( _( "Reference" ) ); - m_dataModel->SetSorting( fieldNameCol, false ); - m_grid->SetSortingColumn( fieldNameCol, false ); + int refCol = m_dataModel->GetFieldNameCol( + TEMPLATE_FIELDNAME::GetDefaultFieldName( REFERENCE_FIELD ) ); + m_grid->SetSortingColumn( refCol, false ); for( int i = 0; i < m_fieldsCtrl->GetItemCount(); i++ ) { diff --git a/eeschema/fields_data_model.cpp b/eeschema/fields_data_model.cpp index ac80a92e6f..0975a722e2 100644 --- a/eeschema/fields_data_model.cpp +++ b/eeschema/fields_data_model.cpp @@ -205,6 +205,19 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::SetValue( int aRow, int aCol, const wxString } +bool FIELDS_EDITOR_GRID_DATA_MODEL::ColIsReference( int aCol ) +{ + wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), false ); + return m_cols[aCol].m_fieldName == TEMPLATE_FIELDNAME::GetDefaultFieldName( REFERENCE_FIELD ); +} + +bool FIELDS_EDITOR_GRID_DATA_MODEL::ColIsQuantity( int aCol ) +{ + wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), false ); + return m_cols[aCol].m_fieldName == wxS( "Quantity" ); +} + + bool FIELDS_EDITOR_GRID_DATA_MODEL::cmp( const DATA_MODEL_ROW& lhGroup, const DATA_MODEL_ROW& rhGroup, FIELDS_EDITOR_GRID_DATA_MODEL* dataModel, int sortCol, @@ -286,7 +299,7 @@ bool FIELDS_EDITOR_GRID_DATA_MODEL::groupMatch( const SCH_REFERENCE& lhRef, const SCH_REFERENCE& rhRef ) { - int refCol = GetFieldNameCol( _( "Reference" ) ); + int refCol = GetFieldNameCol( TEMPLATE_FIELDNAME::GetDefaultFieldName( REFERENCE_FIELD ) ); bool matchFound = false; // First check the reference column. This can be done directly out of the diff --git a/eeschema/fields_data_model.h b/eeschema/fields_data_model.h index 3d79569c9b..8dbe6cf030 100644 --- a/eeschema/fields_data_model.h +++ b/eeschema/fields_data_model.h @@ -111,17 +111,8 @@ public: return m_rows[aRow].m_Refs; } - bool ColIsReference( int aCol ) - { - wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), false ); - return m_cols[aCol].m_fieldName == _( "Reference" ); - } - - bool ColIsQuantity( int aCol ) - { - wxCHECK( aCol >= 0 && aCol < (int) m_cols.size(), false ); - return m_cols[aCol].m_fieldName == _( "Quantity" ); - } + bool ColIsReference( int aCol ); + bool ColIsQuantity( int aCol ); void SetSorting( int aCol, bool ascending ) {