From 8fe863729759a06c9e29e22f5c204b6febb5ec0c Mon Sep 17 00:00:00 2001 From: Jeff Young <jeff@rokeby.ie> Date: Wed, 22 Jan 2025 18:17:05 +0000 Subject: [PATCH] Fix yet more assumptions about field IDs and order. Fixes https://gitlab.com/kicad/code/kicad/-/issues/19710 --- eeschema/dialogs/dialog_field_properties.cpp | 2 +- eeschema/fields_grid_table.cpp | 23 ++++++++++---------- pcbnew/pcb_fields_grid_table.cpp | 10 +++++---- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/eeschema/dialogs/dialog_field_properties.cpp b/eeschema/dialogs/dialog_field_properties.cpp index d8fc1a4153..bd29761ba6 100644 --- a/eeschema/dialogs/dialog_field_properties.cpp +++ b/eeschema/dialogs/dialog_field_properties.cpp @@ -689,7 +689,7 @@ void DIALOG_FIELD_PROPERTIES::UpdateField( SCH_COMMIT* aCommit, SCH_FIELD* aFiel else if( fieldType == FOOTPRINT_FIELD ) otherUnit->SetFootprintFieldText( m_text ); else - otherUnit->GetField( DATASHEET_FIELD )->SetText( m_text ); + otherUnit->GetField( (MANDATORY_FIELD_T) fieldType )->SetText( m_text ); editFrame->UpdateItem( otherUnit, false, true ); } diff --git a/eeschema/fields_grid_table.cpp b/eeschema/fields_grid_table.cpp index 1a3eab5515..37e6143e1b 100644 --- a/eeschema/fields_grid_table.cpp +++ b/eeschema/fields_grid_table.cpp @@ -556,17 +556,17 @@ wxGridCellAttr* FIELDS_GRID_TABLE::GetAttr( int aRow, int aCol, wxGridCellAttr:: } case FDC_VALUE: - if( m_parentType == SCH_SYMBOL_T && aRow == REFERENCE_FIELD ) + if( m_parentType == SCH_SYMBOL_T && field.GetId() == REFERENCE_FIELD ) { m_referenceAttr->IncRef(); return enhanceAttr( m_referenceAttr, aRow, aCol, aKind ); } - else if( m_parentType == SCH_SYMBOL_T && aRow == VALUE_FIELD ) + else if( m_parentType == SCH_SYMBOL_T && field.GetId() == VALUE_FIELD ) { m_valueAttr->IncRef(); return enhanceAttr( m_valueAttr, aRow, aCol, aKind ); } - else if( m_parentType == SCH_SYMBOL_T && aRow == FOOTPRINT_FIELD ) + else if( m_parentType == SCH_SYMBOL_T && field.GetId() == FOOTPRINT_FIELD ) { // Power symbols have do not appear in the board, so don't allow // a footprint (m_part can be nullptr when loading a old schematic @@ -582,23 +582,23 @@ wxGridCellAttr* FIELDS_GRID_TABLE::GetAttr( int aRow, int aCol, wxGridCellAttr:: return enhanceAttr( m_footprintAttr, aRow, aCol, aKind ); } } - else if( m_parentType == SCH_SYMBOL_T && aRow == DATASHEET_FIELD ) + else if( m_parentType == SCH_SYMBOL_T && field.GetId() == DATASHEET_FIELD ) { m_urlAttr->IncRef(); return enhanceAttr( m_urlAttr, aRow, aCol, aKind ); } - else if( m_parentType == SCH_SHEET_T && aRow == SHEETNAME ) + else if( m_parentType == SCH_SHEET_T && field.GetId() == SHEETNAME ) { m_referenceAttr->IncRef(); return enhanceAttr( m_referenceAttr, aRow, aCol, aKind ); } - else if( m_parentType == SCH_SHEET_T && aRow == SHEETFILENAME ) + else if( m_parentType == SCH_SHEET_T && field.GetId() == SHEETFILENAME ) { m_filepathAttr->IncRef(); return enhanceAttr( m_filepathAttr, aRow, aCol, aKind ); } else if( ( m_parentType == SCH_LABEL_LOCATE_ANY_T ) - && this->at( (size_t) aRow ).GetCanonicalName() == wxT( "Netclass" ) ) + && field.GetCanonicalName() == wxT( "Netclass" ) ) { m_netclassAttr->IncRef(); return enhanceAttr( m_netclassAttr, aRow, aCol, aKind ); @@ -696,7 +696,7 @@ wxString FIELDS_GRID_TABLE::GetValue( int aRow, int aCol ) else if( m_parentType == SCH_SHEET_T ) { if( field.IsMandatory() ) - return SCH_SHEET::GetDefaultFieldName( aRow, DO_TRANSLATE ); + return SCH_SHEET::GetDefaultFieldName( field.GetId(), DO_TRANSLATE ); else return field.GetName( false ); } @@ -841,11 +841,11 @@ void FIELDS_GRID_TABLE::SetValue( int aRow, int aCol, const wxString &aValue ) case FDC_VALUE: { - if( m_parentType == SCH_SHEET_T && aRow == SHEETFILENAME ) + if( m_parentType == SCH_SHEET_T && field.GetId() == SHEETFILENAME ) { value = EnsureFileExtension( value, FILEEXT::KiCadSchematicFileExtension ); } - else if( m_parentType == LIB_SYMBOL_T && aRow == VALUE_FIELD ) + else if( m_parentType == LIB_SYMBOL_T && field.GetId() == VALUE_FIELD ) { value = EscapeString( value, CTX_LIBID ); } @@ -949,8 +949,7 @@ void FIELDS_GRID_TABLE::SetValue( int aRow, int aCol, const wxString &aValue ) if( value == DEFAULT_FONT_NAME ) field.SetFont( nullptr ); else if( value == KICAD_FONT_NAME ) - field.SetFont( KIFONT::FONT::GetFont( wxEmptyString, field.IsBold(), - field.IsItalic() ) ); + field.SetFont( KIFONT::FONT::GetFont( wxEmptyString, field.IsBold(), field.IsItalic() ) ); else field.SetFont( KIFONT::FONT::GetFont( aValue, field.IsBold(), field.IsItalic() ) ); diff --git a/pcbnew/pcb_fields_grid_table.cpp b/pcbnew/pcb_fields_grid_table.cpp index 5109db3969..5bdd756399 100644 --- a/pcbnew/pcb_fields_grid_table.cpp +++ b/pcbnew/pcb_fields_grid_table.cpp @@ -230,10 +230,12 @@ bool PCB_FIELDS_GRID_TABLE::CanSetValueAs( int aRow, int aCol, const wxString& a wxGridCellAttr* PCB_FIELDS_GRID_TABLE::GetAttr( int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind ) { + const PCB_FIELD& field = this->at( (size_t) aRow ); + switch( aCol ) { case PFC_NAME: - if( aRow < GetMandatoryRowCount() ) + if( field.IsMandatory() ) { m_readOnlyAttr->IncRef(); return enhanceAttr( m_readOnlyAttr, aRow, aCol, aKind ); @@ -242,17 +244,17 @@ wxGridCellAttr* PCB_FIELDS_GRID_TABLE::GetAttr( int aRow, int aCol, return enhanceAttr( nullptr, aRow, aCol, aKind ); case PFC_VALUE: - if( aRow == REFERENCE_FIELD ) + if( field.GetId() == REFERENCE_FIELD ) { m_referenceAttr->IncRef(); return enhanceAttr( m_referenceAttr, aRow, aCol, aKind ); } - else if( aRow == VALUE_FIELD ) + else if( field.GetId() == VALUE_FIELD ) { m_valueAttr->IncRef(); return enhanceAttr( m_valueAttr, aRow, aCol, aKind ); } - else if( aRow == DATASHEET_FIELD ) + else if( field.GetId() == DATASHEET_FIELD ) { m_urlAttr->IncRef(); return enhanceAttr( m_urlAttr, aRow, aCol, aKind );