From 5a785ab5b03e1997ceb6884d6c461ea61b64a9da Mon Sep 17 00:00:00 2001 From: Dant-hw Date: Tue, 14 Jul 2026 11:18:27 +0200 Subject: [PATCH] Add per-parameter "visible in symbol" flag for KiCad EDA export Introduce a nullable tri-state eda_symbol_visibility on part parameters that drives the KiCad field's "visible" flag in the EDA HTTP-library API response. This is independent of the existing eda_visibility, which only controls whether the parameter is exported as a field at all. When the per-parameter flag is null, the new system default KiCadEDASettings::defaultParameterSymbolVisibility applies. Both default such that exported parameter fields keep their previous behavior ("visible": "False"), so the change is backward compatible. - Entity: eda_symbol_visibility column + accessors, with matching serialization groups and a multi-platform migration - Form: second TriStateCheckboxType, shown for part parameters only - KiCadHelper: resolve the flag (explicit, else system default) and pass it to createField() - Settings: defaultParameterSymbolVisibility (default false) - Templates: new eye-icon column in the specifications table - Translations (en) + tests Co-Authored-By: Claude Opus 4.8 (1M context) --- migrations/Version20260713120000.php | 46 +++++++++++++++++++ src/Entity/Parameters/AbstractParameter.php | 23 ++++++++++ src/Form/ParameterType.php | 5 ++ src/Services/EDA/KiCadHelper.php | 4 +- .../MiscSettings/KiCadEDASettings.php | 7 +++ .../parts/edit/_specifications.html.twig | 1 + .../parts/edit/edit_form_styles.html.twig | 3 ++ tests/Services/EDA/KiCadHelperTest.php | 31 +++++++++++++ translations/messages.en.xlf | 18 ++++++++ 9 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 migrations/Version20260713120000.php diff --git a/migrations/Version20260713120000.php b/migrations/Version20260713120000.php new file mode 100644 index 000000000..d25ed18dd --- /dev/null +++ b/migrations/Version20260713120000.php @@ -0,0 +1,46 @@ +addSql('ALTER TABLE parameters ADD eda_symbol_visibility TINYINT(1) DEFAULT NULL'); + } + + public function mySQLDown(Schema $schema): void + { + $this->addSql('ALTER TABLE parameters DROP COLUMN eda_symbol_visibility'); + } + + public function sqLiteUp(Schema $schema): void + { + $this->addSql('ALTER TABLE parameters ADD COLUMN eda_symbol_visibility BOOLEAN DEFAULT NULL'); + } + + public function sqLiteDown(Schema $schema): void + { + $this->addSql('ALTER TABLE parameters DROP COLUMN eda_symbol_visibility'); + } + + public function postgreSQLUp(Schema $schema): void + { + $this->addSql('ALTER TABLE parameters ADD eda_symbol_visibility BOOLEAN DEFAULT NULL'); + } + + public function postgreSQLDown(Schema $schema): void + { + $this->addSql('ALTER TABLE parameters DROP COLUMN eda_symbol_visibility'); + } +} diff --git a/src/Entity/Parameters/AbstractParameter.php b/src/Entity/Parameters/AbstractParameter.php index f47f2e82e..48aa40bd8 100644 --- a/src/Entity/Parameters/AbstractParameter.php +++ b/src/Entity/Parameters/AbstractParameter.php @@ -179,6 +179,14 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu #[ORM\Column(type: Types::BOOLEAN, nullable: true, options: ['default' => null])] protected ?bool $eda_visibility = null; + /** + * @var bool|null Whether the exported EDA field should be visible in the schematic symbol + * (sets the KiCad field's "visible" flag). Null means use system default. + */ + #[Groups(['full', 'parameter:read', 'parameter:write', 'import'])] + #[ORM\Column(type: Types::BOOLEAN, nullable: true, options: ['default' => null])] + protected ?bool $eda_symbol_visibility = null; + /** * Mapping is done in subclasses. * @@ -493,6 +501,21 @@ public function setEdaVisibility(?bool $eda_visibility): self return $this; } + public function isEdaSymbolVisibility(): ?bool + { + return $this->eda_symbol_visibility; + } + + /** + * @return $this + */ + public function setEdaSymbolVisibility(?bool $eda_symbol_visibility): self + { + $this->eda_symbol_visibility = $eda_symbol_visibility; + + return $this; + } + public function getComparableFields(): array { return ['name' => $this->name, 'group' => $this->group, 'element' => $this->element?->getId()]; diff --git a/src/Form/ParameterType.php b/src/Form/ParameterType.php index f68c3921f..bf37fca4a 100644 --- a/src/Form/ParameterType.php +++ b/src/Form/ParameterType.php @@ -156,6 +156,11 @@ public function buildForm(FormBuilderInterface $builder, array $options): void 'label' => false, 'required' => false, ]); + + $builder->add('eda_symbol_visibility', TriStateCheckboxType::class, [ + 'label' => false, + 'required' => false, + ]); } } diff --git a/src/Services/EDA/KiCadHelper.php b/src/Services/EDA/KiCadHelper.php index 42cc25180..a4d0a901f 100644 --- a/src/Services/EDA/KiCadHelper.php +++ b/src/Services/EDA/KiCadHelper.php @@ -341,7 +341,9 @@ public function getKiCADPart(Part $part): array $fieldName = $parameter->getName(); //Don't overwrite hardcoded fields if (!isset($result['fields'][$fieldName])) { - $result['fields'][$fieldName] = $this->createField($parameter->getFormattedValue()); + //Whether the field should be visible in the schematic symbol (explicit, or system default when null) + $symbolVisibility = $parameter->isEdaSymbolVisibility() ?? $this->kiCadEDASettings->defaultParameterSymbolVisibility; + $result['fields'][$fieldName] = $this->createField($parameter->getFormattedValue(), $symbolVisibility); } } } diff --git a/src/Settings/MiscSettings/KiCadEDASettings.php b/src/Settings/MiscSettings/KiCadEDASettings.php index dd223007b..a32b31e5a 100644 --- a/src/Settings/MiscSettings/KiCadEDASettings.php +++ b/src/Settings/MiscSettings/KiCadEDASettings.php @@ -56,6 +56,13 @@ class KiCadEDASettings )] public bool $defaultParameterVisibility = false; + #[SettingsParameter( + label: new TM("settings.misc.kicad_eda.default_parameter_symbol_visibility"), + description: new TM("settings.misc.kicad_eda.default_parameter_symbol_visibility.help"), + + )] + public bool $defaultParameterSymbolVisibility = false; + #[SettingsParameter( label: new TM("settings.misc.kicad_eda.default_orderdetails_visibility"), description: new TM("settings.misc.kicad_eda.default_orderdetails_visibility.help"), diff --git a/templates/parts/edit/_specifications.html.twig b/templates/parts/edit/_specifications.html.twig index 6f631b9f5..e55ea9da1 100644 --- a/templates/parts/edit/_specifications.html.twig +++ b/templates/parts/edit/_specifications.html.twig @@ -15,6 +15,7 @@ {% trans %}specifications.text{% endtrans %} {% trans %}specifications.group{% endtrans %} + diff --git a/templates/parts/edit/edit_form_styles.html.twig b/templates/parts/edit/edit_form_styles.html.twig index 44c8d89ce..993e1fb73 100644 --- a/templates/parts/edit/edit_form_styles.html.twig +++ b/templates/parts/edit/edit_form_styles.html.twig @@ -83,6 +83,9 @@ {% if form.eda_visibility is defined %} {{ form_widget(form.eda_visibility) }} {% endif %} + {% if form.eda_symbol_visibility is defined %} + {{ form_widget(form.eda_symbol_visibility) }} + {% endif %}