diff --git a/eeschema/dialogs/dialog_change_symbols.cpp b/eeschema/dialogs/dialog_change_symbols.cpp index 3b2492f915..5d45d8dffa 100644 --- a/eeschema/dialogs/dialog_change_symbols.cpp +++ b/eeschema/dialogs/dialog_change_symbols.cpp @@ -764,11 +764,11 @@ int DIALOG_CHANGE_SYMBOLS::processSymbols( SCH_COMMIT* aCommit, if( !symbol->GetField( libField->GetName() ) ) { - SCH_FIELD* schField = symbol->AddField( SCH_FIELD( { 0, 0 }, FIELD_T::USER, symbol, - libField->GetName() ) ); + SCH_FIELD* schField = symbol->AddField( SCH_FIELD( symbol, FIELD_T::USER, libField->GetName() ) ); - // Careful: the visible bit and position are also set by SetAttributes() + // SetAttributes() also covers text angle, size, italic and bold schField->SetAttributes( *libField ); + schField->SetVisible( libField->IsVisible() ); schField->SetText( libField->GetText() ); schField->SetTextPos( symbol->GetPosition() + libField->GetTextPos() ); schField->SetPrivate( libField->IsPrivate() ); diff --git a/eeschema/dialogs/dialog_label_properties.cpp b/eeschema/dialogs/dialog_label_properties.cpp index 7b68785138..9940df608e 100644 --- a/eeschema/dialogs/dialog_label_properties.cpp +++ b/eeschema/dialogs/dialog_label_properties.cpp @@ -759,14 +759,13 @@ void DIALOG_LABEL_PROPERTIES::OnAddField( wxCommandEvent& event ) fieldName = SCH_LABEL_BASE::GetDefaultFieldName( fieldName, true ); - SCH_FIELD newField( VECTOR2I( 0, 0 ), FIELD_T::USER, m_currentLabel, fieldName ); + SCH_FIELD newField( m_currentLabel, FIELD_T::USER, fieldName ); if( m_fields->size() > 0 ) { + // SetAttributes() also covers text angle, size, italic and bold + newField.SetAttributes( m_fields->at( m_fields->size() - 1 ) ); newField.SetVisible( m_fields->at( m_fields->size() - 1 ).IsVisible() ); - newField.SetTextAngle( m_fields->at( m_fields->size() - 1 ).GetTextAngle() ); - newField.SetItalic( m_fields->at( m_fields->size() - 1 ).IsItalic() ); - newField.SetBold( m_fields->at( m_fields->size() - 1 ).IsBold() ); } else { diff --git a/eeschema/dialogs/dialog_lib_symbol_properties.cpp b/eeschema/dialogs/dialog_lib_symbol_properties.cpp index 44cee4d582..85e4447f1d 100644 --- a/eeschema/dialogs/dialog_lib_symbol_properties.cpp +++ b/eeschema/dialogs/dialog_lib_symbol_properties.cpp @@ -201,7 +201,7 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataToWindow() { if( defined.count( templateFieldname.m_Name ) <= 0 ) { - SCH_FIELD field( { 0, 0 }, FIELD_T::USER, m_libEntry, templateFieldname.m_Name ); + SCH_FIELD field( m_libEntry, FIELD_T::USER, templateFieldname.m_Name ); field.SetVisible( templateFieldname.m_Visible ); m_fields->push_back( field ); m_addedTemplateFields.insert( templateFieldname.m_Name ); diff --git a/eeschema/dialogs/dialog_sheet_properties.cpp b/eeschema/dialogs/dialog_sheet_properties.cpp index f73443cd64..04f8be324b 100644 --- a/eeschema/dialogs/dialog_sheet_properties.cpp +++ b/eeschema/dialogs/dialog_sheet_properties.cpp @@ -61,7 +61,7 @@ DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_S m_sourceSheetFilename( aSourceSheetFilename ), m_borderWidth( aParent, m_borderWidthLabel, m_borderWidthCtrl, m_borderWidthUnits ), m_dummySheet( *aSheet ), - m_dummySheetNameField( VECTOR2I( -1, -1 ), FIELD_T::SHEET_NAME, &m_dummySheet ) + m_dummySheetNameField( &m_dummySheet, FIELD_T::SHEET_NAME ) { m_sheet = aSheet; m_fields = new FIELDS_GRID_TABLE( this, aParent, m_grid, m_sheet ); @@ -737,11 +737,10 @@ void DIALOG_SHEET_PROPERTIES::OnAddField( wxCommandEvent& event ) if( !m_grid->CommitPendingChanges() ) return; - SCH_FIELD newField( { 0, 0 }, FIELD_T::SHEET_USER, m_sheet, - GetUserFieldName( (int) m_fields->size(), DO_TRANSLATE ) ); + SCH_FIELD newField( m_sheet, FIELD_T::SHEET_USER, GetUserFieldName( (int) m_fields->size(), DO_TRANSLATE ) ); newField.SetTextAngle( m_fields->GetField( FIELD_T::SHEET_NAME )->GetTextAngle() ); - + newField.SetVisible( false ); m_fields->push_back( newField ); // notify the grid diff --git a/eeschema/dialogs/dialog_symbol_properties.cpp b/eeschema/dialogs/dialog_symbol_properties.cpp index d9adb242f3..e86d957df3 100644 --- a/eeschema/dialogs/dialog_symbol_properties.cpp +++ b/eeschema/dialogs/dialog_symbol_properties.cpp @@ -468,7 +468,7 @@ bool DIALOG_SYMBOL_PROPERTIES::TransferDataToWindow() { if( defined.count( templateFieldname.m_Name ) <= 0 ) { - SCH_FIELD field( { 0, 0 }, FIELD_T::USER, m_symbol, templateFieldname.m_Name ); + SCH_FIELD field( m_symbol, FIELD_T::USER, templateFieldname.m_Name ); field.SetVisible( templateFieldname.m_Visible ); m_fields->push_back( field ); } @@ -859,12 +859,9 @@ void DIALOG_SYMBOL_PROPERTIES::OnAddField( wxCommandEvent& event ) if( !m_fieldsGrid->CommitPendingChanges() ) return; - SCHEMATIC_SETTINGS& settings = m_symbol->Schematic()->Settings(); - SCH_FIELD newField( { 0, 0 }, FIELD_T::USER, m_symbol, - GetUserFieldName( (int) m_fields->size(), DO_TRANSLATE ) ); + SCH_FIELD newField( m_symbol, FIELD_T::USER, GetUserFieldName( (int) m_fields->size(), DO_TRANSLATE ) ); newField.SetTextAngle( m_fields->GetField( FIELD_T::REFERENCE )->GetTextAngle() ); - newField.SetTextSize( VECTOR2I( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) ); newField.SetVisible( false ); m_fields->push_back( newField ); diff --git a/eeschema/fields_data_model.cpp b/eeschema/fields_data_model.cpp index 8592329d1a..b241d14706 100644 --- a/eeschema/fields_data_model.cpp +++ b/eeschema/fields_data_model.cpp @@ -803,8 +803,7 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData( SCH_COMMIT& aCommit ) for( const SCH_REFERENCE& instance : m_symbolsList ) { - SCH_SYMBOL& symbol = *instance.GetSymbol(); - SCHEMATIC_SETTINGS& settings = symbol.Schematic()->Settings(); + SCH_SYMBOL& symbol = *instance.GetSymbol(); aCommit.Modify( &symbol, instance.GetSheetPath().LastScreen() ); @@ -842,12 +841,10 @@ void FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData( SCH_COMMIT& aCommit ) if( createField ) { - destField = symbol.AddField( SCH_FIELD( symbol.GetPosition(), FIELD_T::USER, - &symbol, srcName ) ); + destField = symbol.AddField( SCH_FIELD( &symbol, FIELD_T::USER, srcName ) ); destField->SetTextAngle( symbol.GetField( FIELD_T::REFERENCE )->GetTextAngle() ); - destField->SetTextSize( VECTOR2I( settings.m_DefaultTextSize, - settings.m_DefaultTextSize ) ); destField->SetVisible( false ); + destField->SetTextPos( symbol.GetPosition() ); } if( !destField ) diff --git a/eeschema/netlist_exporters/netlist_exporter_spice.cpp b/eeschema/netlist_exporters/netlist_exporter_spice.cpp index 276970799d..5d399674e0 100644 --- a/eeschema/netlist_exporters/netlist_exporter_spice.cpp +++ b/eeschema/netlist_exporters/netlist_exporter_spice.cpp @@ -187,8 +187,7 @@ bool NETLIST_EXPORTER_SPICE::ReadSchematicAndLibraries( unsigned aNetlistOptions for( const SCH_FIELD& field : symbol->GetFields() ) { - spiceItem.fields.emplace_back( VECTOR2I(), FIELD_T::USER, symbol, - field.GetName() ); + spiceItem.fields.emplace_back( symbol, FIELD_T::USER, field.GetName() ); if( field.GetId() == FIELD_T::REFERENCE ) spiceItem.fields.back().SetText( symbol->GetRef( &sheet ) ); diff --git a/eeschema/sch_field.cpp b/eeschema/sch_field.cpp index 5007bcae61..9e7812cf92 100644 --- a/eeschema/sch_field.cpp +++ b/eeschema/sch_field.cpp @@ -60,8 +60,7 @@ SCH_FIELD::SCH_FIELD() : } -SCH_FIELD::SCH_FIELD( const VECTOR2I& aPos, FIELD_T aFieldId, SCH_ITEM* aParent, - const wxString& aName ) : +SCH_FIELD::SCH_FIELD( SCH_ITEM* aParent, FIELD_T aFieldId, const wxString& aName ) : SCH_FIELD() { m_parent = aParent; @@ -71,15 +70,15 @@ SCH_FIELD::SCH_FIELD( const VECTOR2I& aPos, FIELD_T aFieldId, SCH_ITEM* aParent, else SetName( GetDefaultFieldName( aFieldId, DO_TRANSLATE ) ); - SetTextPos( aPos ); setId( aFieldId ); // will also set the layer SetVisible( true ); -} + if( aParent && aParent->Schematic() ) + { + SCHEMATIC_SETTINGS& settings = aParent->Schematic()->Settings(); + SetTextSize( VECTOR2I( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) ); + } -SCH_FIELD::SCH_FIELD( SCH_ITEM* aParent, FIELD_T aFieldId, const wxString& aName ) : - SCH_FIELD( VECTOR2I(), aFieldId, aParent, aName ) -{ if( aFieldId == FIELD_T::USER && aParent ) { if( aParent->Type() == SCH_SYMBOL_T ) @@ -94,8 +93,8 @@ SCH_FIELD::SCH_FIELD( SCH_ITEM* aParent, FIELD_T aFieldId, const wxString& aName } -SCH_FIELD::SCH_FIELD( SCH_TEXT* aText ) : - SCH_FIELD( VECTOR2I(), FIELD_T::USER, nullptr, wxEmptyString ) +SCH_FIELD::SCH_FIELD( SCH_ITEM* aParent, SCH_TEXT* aText ) : + SCH_FIELD( aParent, FIELD_T::USER, wxEmptyString ) { SCH_ITEM::operator=( *aText ); EDA_TEXT::operator=( *aText ); diff --git a/eeschema/sch_field.h b/eeschema/sch_field.h index 7240006600..a52205ad87 100644 --- a/eeschema/sch_field.h +++ b/eeschema/sch_field.h @@ -43,13 +43,10 @@ class SCH_FIELD : public SCH_ITEM, public EDA_TEXT public: SCH_FIELD(); // For std::map::operator[] - SCH_FIELD( const VECTOR2I& aPos, FIELD_T aFieldId, SCH_ITEM* aParent, - const wxString& aName = wxEmptyString ); - SCH_FIELD( SCH_ITEM* aParent, FIELD_T aFieldId = FIELD_T::USER, const wxString& aName = wxEmptyString ); - SCH_FIELD( SCH_TEXT* aText ); + SCH_FIELD( SCH_ITEM* aParent, SCH_TEXT* aText ); SCH_FIELD( const SCH_FIELD& aText ); @@ -447,7 +444,7 @@ inline void SetFieldValue( std::vector& aFields, const wxString& aFie } SCH_ITEM* parent = static_cast( aFields.at( 0 ).GetParent() ); - aFields.emplace_back( VECTOR2I(), FIELD_T::USER, parent, aFieldName ); + aFields.emplace_back( parent, FIELD_T::USER, aFieldName ); aFields.back().SetText( aValue ); aFields.back().SetVisible( aIsVisible ); } diff --git a/eeschema/sch_io/altium/sch_io_altium.cpp b/eeschema/sch_io/altium/sch_io_altium.cpp index 3636de767a..1bc4159843 100644 --- a/eeschema/sch_io/altium/sch_io_altium.cpp +++ b/eeschema/sch_io/altium/sch_io_altium.cpp @@ -4382,7 +4382,7 @@ void SCH_IO_ALTIUM::ParseParameter( const std::map& aPropert fieldName = "ALTIUM_VALUE"; } - field = symbol->AddField( SCH_FIELD( { 0, 0 }, FIELD_T::USER, symbol, fieldName ) ); + field = symbol->AddField( SCH_FIELD( symbol, FIELD_T::USER, fieldName ) ); } wxString kicadText = AltiumSchSpecialStringsToKiCadVariables( elem.text, variableMap ); diff --git a/eeschema/sch_io/cadstar/cadstar_sch_archive_loader.cpp b/eeschema/sch_io/cadstar/cadstar_sch_archive_loader.cpp index b337641cbd..137467247c 100644 --- a/eeschema/sch_io/cadstar/cadstar_sch_archive_loader.cpp +++ b/eeschema/sch_io/cadstar/cadstar_sch_archive_loader.cpp @@ -788,10 +788,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances() SCH_FIELD* partField = symbol->GetField( PartNameFieldName ); if( !partField ) - { - partField = symbol->AddField( SCH_FIELD( { 0, 0 }, FIELD_T::USER, symbol, - PartNameFieldName ) ); - } + partField = symbol->AddField( SCH_FIELD( symbol, FIELD_T::USER, PartNameFieldName ) ); wxASSERT( partField->GetName() == PartNameFieldName ); @@ -816,10 +813,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances() SCH_FIELD* attrField = symbol->GetField( attrName ); if( !attrField ) - { - attrField = symbol->AddField( SCH_FIELD( { 0, 0 }, FIELD_T::USER, symbol, - attrName ) ); - } + attrField = symbol->AddField( SCH_FIELD( symbol, FIELD_T::USER, attrName ) ); wxASSERT( attrField->GetName() == attrName ); diff --git a/eeschema/sch_io/eagle/sch_io_eagle.cpp b/eeschema/sch_io/eagle/sch_io_eagle.cpp index 45ca727e38..554d771e88 100644 --- a/eeschema/sch_io/eagle/sch_io_eagle.cpp +++ b/eeschema/sch_io/eagle/sch_io_eagle.cpp @@ -1889,15 +1889,13 @@ void SCH_IO_EAGLE::loadInstance( const std::unique_ptr& aInstance, for( const auto& [ attrName, attr ] : epart->attributes ) { - VECTOR2I newFieldPosition( 0, 0 ); - - if( !symbol->GetFields().empty() ) - newFieldPosition = symbol->GetFields().back().GetPosition(); - - SCH_FIELD newField( newFieldPosition, FIELD_T::USER, symbol.get() ); + SCH_FIELD newField( symbol.get(), FIELD_T::USER ); newField.SetName( attrName ); + if( !symbol->GetFields().empty() ) + newField.SetTextPos( symbol->GetFields().back().GetPosition() ); + if( attr->value ) newField.SetText( *attr->value ); diff --git a/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy.cpp b/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy.cpp index 291d85e19b..5a7d4d5c0e 100644 --- a/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy.cpp +++ b/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy.cpp @@ -1307,7 +1307,7 @@ SCH_SYMBOL* SCH_IO_KICAD_LEGACY::loadSymbol( LINE_READER& aReader ) case 3: field = symbol->GetField( FIELD_T::DATASHEET ); break; default: - field = symbol->AddField( SCH_FIELD( { 0, 0 }, FIELD_T::USER, symbol.get() ) ); + field = symbol->AddField( SCH_FIELD( symbol.get(), FIELD_T::USER ) ); break; } diff --git a/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy_lib_cache.cpp b/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy_lib_cache.cpp index faf107d615..b64b5548a9 100644 --- a/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy_lib_cache.cpp +++ b/eeschema/sch_io/kicad_legacy/sch_io_kicad_legacy_lib_cache.cpp @@ -1003,7 +1003,7 @@ SCH_ITEM* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadText( LINE_READER& aReader, if( !visible ) { - SCH_FIELD* field = new SCH_FIELD( center, FIELD_T::USER, nullptr ); + SCH_FIELD* field = new SCH_FIELD( nullptr, FIELD_T::USER ); sch_item = field; eda_text = field; } @@ -1016,6 +1016,7 @@ SCH_ITEM* SCH_IO_KICAD_LEGACY_LIB_CACHE::loadText( LINE_READER& aReader, eda_text->SetTextAngle( EDA_ANGLE( angleInTenths, TENTHS_OF_A_DEGREE_T ) ); eda_text->SetTextSize( size ); + eda_text->SetTextPos( center ); eda_text->SetVisible( visible ); sch_item->SetUnit( unit ); sch_item->SetBodyStyle( bodyStyle ); diff --git a/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr_parser.cpp b/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr_parser.cpp index 6e8c7fdc34..a9864f02d1 100644 --- a/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr_parser.cpp +++ b/eeschema/sch_io/kicad_sexpr/sch_io_kicad_sexpr_parser.cpp @@ -2315,10 +2315,8 @@ SCH_FIELD* SCH_IO_KICAD_SEXPR_PARSER::parseSchField( SCH_ITEM* aParent ) fieldId = FIELD_T::INTERSHEET_REFS; } - std::unique_ptr field = std::make_unique( VECTOR2I( -1, -1 ), fieldId, - aParent, name ); + std::unique_ptr field = std::make_unique( aParent, fieldId, name ); field->SetText( value ); - field->SetVisible( true ); if( fieldId == FIELD_T::USER ) field->SetPrivate( is_private ); diff --git a/eeschema/sch_io/ltspice/sch_io_ltspice_parser.cpp b/eeschema/sch_io/ltspice/sch_io_ltspice_parser.cpp index 166e2ddd80..8a3ceb6ecd 100644 --- a/eeschema/sch_io/ltspice/sch_io_ltspice_parser.cpp +++ b/eeschema/sch_io/ltspice/sch_io_ltspice_parser.cpp @@ -915,7 +915,7 @@ SCH_IO_LTSPICE_PARSER::CreateSCH_LABEL( KICAD_T aType, const VECTOR2I& aOffset, label->SetSpinStyle( SPIN_STYLE::RIGHT ); - SCH_FIELD field( { 0, 0 }, FIELD_T::USER, label, wxS( "DATAFLAG" ) ); + SCH_FIELD field( label, FIELD_T::USER, wxS( "DATAFLAG" ) ); field.SetText( aValue ); field.SetTextSize( ToKicadFontSize( aFontSize ) ); field.SetVisible( true ); @@ -998,52 +998,39 @@ void SCH_IO_LTSPICE_PARSER::CreateFields( LTSPICE_SCHEMATIC::LT_SYMBOL& aLTSymbo value2 = wxEmptyString; } + auto addField = + [&]( const wxString& aFieldName, const wxString& aFieldValue ) + { + SCH_FIELD newField( aSymbol, FIELD_T::USER, aFieldName ); + newField.SetVisible( false ); + newField.SetText( aFieldValue ); + aSymbol->AddField( newField ); + }; + aSymbol->SetRef( aSheet, instName ); aSymbol->SetValueFieldText( value ); if( !value2.IsEmpty() ) - { - SCH_FIELD paramsField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Value2" ) ); - paramsField.SetVisible( false ); - paramsField.SetText( value2 ); - aSymbol->AddField( paramsField ); - } + addField( wxS( "Value2" ), value2 ); - auto setupNonInferredPassive = [&]( const wxString& aDevice, const wxString& aValueKey ) - { - SCH_FIELD deviceField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Device" ) ); - deviceField.SetVisible( false ); - deviceField.SetText( aDevice ); - aSymbol->AddField( deviceField ); + auto setupNonInferredPassive = + [&]( const wxString& aDevice, const wxString& aValueKey ) + { + addField( wxS( "Sim.Device" ), aDevice ); + addField( wxS( "Sim.Params" ), aValueKey + wxS( "=${VALUE}" ) ); + }; - SCH_FIELD paramsField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Params" ) ); - paramsField.SetVisible( false ); - paramsField.SetText( aValueKey + wxS( "=${VALUE}" ) ); - aSymbol->AddField( paramsField ); - }; + auto setupBehavioral = + [&]( const wxString& aDevice, const wxString& aType ) + { + aSymbol->SetValueFieldText( wxS( "${Sim.Params}" ) ); - auto setupBehavioral = [&]( const wxString& aDevice, const wxString& aType ) - { - aSymbol->SetValueFieldText( wxS( "${Sim.Params}" ) ); + addField( wxS( "Sim.Device" ), aDevice ); + addField( wxS( "Sim.Type" ), aType ); + addField( wxS( "Sim.Params" ), value ); + }; - SCH_FIELD deviceField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Device" ) ); - deviceField.SetVisible( false ); - deviceField.SetText( aDevice ); - aSymbol->AddField( deviceField ); - - SCH_FIELD typeField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Type" ) ); - typeField.SetVisible( false ); - typeField.SetText( aType ); - aSymbol->AddField( typeField ); - - SCH_FIELD paramsField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Params" ) ); - paramsField.SetVisible( false ); - paramsField.SetText( value ); - aSymbol->AddField( paramsField ); - }; - - static const std::set prefixWithGain = { wxS( "E" ), wxS( "F" ), wxS( "G" ), - wxS( "H" ) }; + static const std::set prefixWithGain = { wxS( "E" ), wxS( "F" ), wxS( "G" ), wxS( "H" ) }; if( prefix == wxS( "R" ) ) { @@ -1064,20 +1051,13 @@ void SCH_IO_LTSPICE_PARSER::CreateFields( LTSPICE_SCHEMATIC::LT_SYMBOL& aLTSymbo else if( prefix == wxS( "B" ) ) { if( symbolName.StartsWith( wxS( "BV" ) ) ) - { setupBehavioral( wxS( "V" ), wxS( "=" ) ); - } else if( symbolName.StartsWith( wxS( "BI" ) ) ) - { setupBehavioral( wxS( "I" ), wxS( "=" ) ); - } } else if( prefix == wxS( "V" ) || symbolName == wxS( "I" ) ) { - SCH_FIELD deviceField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Device" ) ); - deviceField.SetVisible( false ); - deviceField.SetText( wxS( "SPICE" ) ); - aSymbol->AddField( deviceField ); + addField( wxS( "Sim.Device" ), wxS( "SPICE" ) ); wxString simParams; simParams << "type=" << '"' << prefix << '"' << ' '; @@ -1087,10 +1067,7 @@ void SCH_IO_LTSPICE_PARSER::CreateFields( LTSPICE_SCHEMATIC::LT_SYMBOL& aLTSymbo else simParams << "model=" << '"' << "${VALUE} ${VALUE2}" << '"' << ' '; - SCH_FIELD paramsField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Params" ) ); - paramsField.SetVisible( false ); - paramsField.SetText( simParams ); - aSymbol->AddField( paramsField ); + addField( wxS( "Sim.Params" ), simParams ); } else { @@ -1120,44 +1097,23 @@ void SCH_IO_LTSPICE_PARSER::CreateFields( LTSPICE_SCHEMATIC::LT_SYMBOL& aLTSymbo libFile = m_includes[value]; if( !libFile.IsEmpty() ) - { - SCH_FIELD libField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Library" ) ); - libField.SetVisible( false ); - libField.SetText( libFile ); - aSymbol->AddField( libField ); - } + addField( wxS( "Sim.Library" ), libFile ); if( type == wxS( "X" ) ) - { - SCH_FIELD deviceField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Device" ) ); - deviceField.SetVisible( false ); - deviceField.SetText( wxS( "SUBCKT" ) ); - aSymbol->AddField( deviceField ); - } + addField( wxS( "Sim.Device" ), wxS( "SUBCKT" ) ); else - { - SCH_FIELD deviceField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Device" ) ); - deviceField.SetVisible( false ); - deviceField.SetText( wxS( "SPICE" ) ); - aSymbol->AddField( deviceField ); - } + addField( wxS( "Sim.Device" ), wxS( "SPICE" ) ); wxString spiceLine = aLTSymbol.SymAttributes[wxS( "SPICELINE" )]; if( !spiceLine.IsEmpty() ) { // TODO: append value - SCH_FIELD paramsField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Params" ) ); - paramsField.SetVisible( false ); - paramsField.SetText( spiceLine ); - aSymbol->AddField( paramsField ); + addField( wxS( "Sim.Params" ), spiceLine ); } else { - SCH_FIELD modelField( { 0, 0 }, FIELD_T::USER, aSymbol, wxS( "Sim.Params" ) ); - modelField.SetVisible( false ); - modelField.SetText( "model=\"" + value + "\"" ); - aSymbol->AddField( modelField ); + addField( wxS( "Sim.Params" ), "model=\"" + value + "\"" ); } } diff --git a/eeschema/sch_label.cpp b/eeschema/sch_label.cpp index 585cfe7230..2172ee1e80 100644 --- a/eeschema/sch_label.cpp +++ b/eeschema/sch_label.cpp @@ -1807,12 +1807,12 @@ SCH_GLOBALLABEL::SCH_GLOBALLABEL( const VECTOR2I& pos, const wxString& text ) : SetVertJustify( GR_TEXT_V_ALIGN_CENTER ); - m_fields.emplace_back( SCH_FIELD( pos, FIELD_T::INTERSHEET_REFS, this, + m_fields.emplace_back( SCH_FIELD( this, FIELD_T::INTERSHEET_REFS, ::GetDefaultFieldName( FIELD_T::INTERSHEET_REFS, false ) ) ); m_fields.back().SetText( wxT( "${INTERSHEET_REFS}" ) ); m_fields.back().SetVisible( false ); - m_fields.back().SetLayer( LAYER_INTERSHEET_REFS ); m_fields.back().SetVertJustify( GR_TEXT_V_ALIGN_CENTER ); + m_fields.back().SetTextPos( pos ); } diff --git a/eeschema/sch_sheet.cpp b/eeschema/sch_sheet.cpp index 23463f7c32..ff94b94f91 100644 --- a/eeschema/sch_sheet.cpp +++ b/eeschema/sch_sheet.cpp @@ -65,10 +65,10 @@ SCH_SHEET::SCH_SHEET( EDA_ITEM* aParent, const VECTOR2I& aPos, VECTOR2I aSize ) m_backgroundColor = COLOR4D::UNSPECIFIED; m_fieldsAutoplaced = AUTOPLACE_AUTO; - m_fields.emplace_back( aPos, FIELD_T::SHEET_NAME, this, + m_fields.emplace_back( this, FIELD_T::SHEET_NAME, GetDefaultFieldName( FIELD_T::SHEET_NAME, DO_TRANSLATE ) ); - m_fields.emplace_back( aPos, FIELD_T::SHEET_FILENAME, this, + m_fields.emplace_back( this, FIELD_T::SHEET_FILENAME, GetDefaultFieldName( FIELD_T::SHEET_FILENAME, DO_TRANSLATE ) ); AutoplaceFields( nullptr, m_fieldsAutoplaced ); diff --git a/eeschema/sch_symbol.cpp b/eeschema/sch_symbol.cpp index 8432d3195a..c2602dae77 100644 --- a/eeschema/sch_symbol.cpp +++ b/eeschema/sch_symbol.cpp @@ -184,7 +184,8 @@ void SCH_SYMBOL::Init( const VECTOR2I& pos ) auto addField = [&]( FIELD_T id, SCH_LAYER_ID layer ) { - m_fields.emplace_back( pos, id, this, GetCanonicalFieldName( id ) ); + m_fields.emplace_back( this, id, GetCanonicalFieldName( id ) ); + m_fields.back().SetTextPos( pos ); m_fields.back().SetLayer( layer ); }; @@ -924,8 +925,9 @@ void SCH_SYMBOL::UpdateFields( const SCH_SHEET_PATH* aPath, bool aUpdateStyle, b if( !schField ) { - schField = AddField( SCH_FIELD( { 0, 0 }, FIELD_T::USER, this, - libField->GetCanonicalName() ) ); + schField = AddField( SCH_FIELD( this, FIELD_T::USER, libField->GetCanonicalName() ) ); + schField->ImportValues( *libField ); + schField->SetTextPos( m_pos + libField->GetTextPos() ); } } diff --git a/eeschema/sim/sim_lib_mgr.cpp b/eeschema/sim/sim_lib_mgr.cpp index ae3f7b6be0..af2013c623 100644 --- a/eeschema/sim/sim_lib_mgr.cpp +++ b/eeschema/sim/sim_lib_mgr.cpp @@ -197,12 +197,12 @@ SIM_LIBRARY::MODEL SIM_LIB_MGR::CreateModel( const SCH_SHEET_PATH* aSheetPath, S { if( field.GetId() == FIELD_T::REFERENCE ) { - fields.emplace_back( VECTOR2I(), FIELD_T::USER, &aSymbol, field.GetName() ); + fields.emplace_back( &aSymbol, FIELD_T::USER, field.GetName() ); fields.back().SetText( aSymbol.GetRef( aSheetPath ) ); } else if( field.GetId() == FIELD_T::VALUE || field.GetName().StartsWith( wxS( "Sim." ) ) ) { - fields.emplace_back( VECTOR2I(), FIELD_T::USER, &aSymbol, field.GetName() ); + fields.emplace_back( &aSymbol, FIELD_T::USER, field.GetName() ); fields.back().SetText( field.GetShownText( aSheetPath, false ) ); } } diff --git a/eeschema/tools/backannotate.cpp b/eeschema/tools/backannotate.cpp index 3f4af1f458..af7b64d828 100644 --- a/eeschema/tools/backannotate.cpp +++ b/eeschema/tools/backannotate.cpp @@ -527,9 +527,9 @@ void BACK_ANNOTATE::applyChangelist() if( !m_dryRun ) { - SCH_FIELD newField( symbol->GetPosition(), FIELD_T::USER, symbol, - fpFieldName ); + SCH_FIELD newField( symbol, FIELD_T::USER, fpFieldName ); newField.SetText( fpFieldValue ); + newField.SetTextPos( symbol->GetPosition() ); newField.SetVisible( false ); // Don't clutter up the schematic symbol->AddField( newField ); } diff --git a/eeschema/tools/sch_drawing_tools.cpp b/eeschema/tools/sch_drawing_tools.cpp index df4938822c..823d9cc5cb 100644 --- a/eeschema/tools/sch_drawing_tools.cpp +++ b/eeschema/tools/sch_drawing_tools.cpp @@ -1643,8 +1643,8 @@ bool SCH_DRAWING_TOOLS::createNewLabel( const VECTOR2I& aPosition, int aType, case LAYER_NETCLASS_REFS: labelItem = new SCH_DIRECTIVE_LABEL( aPosition ); labelItem->SetShape( m_lastNetClassFlagShape ); - labelItem->GetFields().emplace_back( VECTOR2I(), FIELD_T::USER, labelItem, wxT( "Netclass" ) ); - labelItem->GetFields().emplace_back( VECTOR2I(), FIELD_T::USER, labelItem, wxT( "Component Class" ) ); + labelItem->GetFields().emplace_back( labelItem, FIELD_T::USER, wxT( "Netclass" ) ); + labelItem->GetFields().emplace_back( labelItem, FIELD_T::USER, wxT( "Component Class" ) ); labelItem->GetFields().back().SetItalic( true ); labelItem->GetFields().back().SetVisible( true ); break; diff --git a/eeschema/tools/sch_edit_tool.cpp b/eeschema/tools/sch_edit_tool.cpp index 6857767426..8a74805874 100644 --- a/eeschema/tools/sch_edit_tool.cpp +++ b/eeschema/tools/sch_edit_tool.cpp @@ -2668,9 +2668,9 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent ) // or not. if( !dynamic_cast( item ) ) { - SCH_FIELD netclass( position, FIELD_T::USER, new_label, wxT( "Netclass" ) ); + SCH_FIELD netclass( new_label, FIELD_T::USER, wxT( "Netclass" ) ); netclass.SetText( txt ); - netclass.SetVisible( true ); + netclass.SetTextPos( position ); new_label->GetFields().push_back( netclass ); } diff --git a/qa/tests/eeschema/test_ee_item.cpp b/qa/tests/eeschema/test_ee_item.cpp index 7f5a7a83b1..97f9733add 100644 --- a/qa/tests/eeschema/test_ee_item.cpp +++ b/qa/tests/eeschema/test_ee_item.cpp @@ -127,7 +127,7 @@ public: case SCH_DIRECTIVE_LABEL_T: return new SCH_DIRECTIVE_LABEL( VECTOR2I( 0, 0 ) ); case SCH_GLOBAL_LABEL_T: return new SCH_GLOBALLABEL(); case SCH_HIER_LABEL_T: return new SCH_HIERLABEL(); - case SCH_FIELD_T: return new SCH_FIELD( { 0, 0 }, FIELD_T::USER, nullptr ); + case SCH_FIELD_T: return new SCH_FIELD( nullptr, FIELD_T::USER ); case SCH_SYMBOL_T: return new SCH_SYMBOL(); case SCH_SHEET_PIN_T: