7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-14 14:09:35 +00:00

Fix yet more assumptions about field IDs and order.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/19710
This commit is contained in:
Jeff Young 2025-01-22 18:17:05 +00:00
parent d562336760
commit 8fe8637297
3 changed files with 18 additions and 17 deletions

View File

@ -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 );
}

View File

@ -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() ) );

View File

@ -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 );