Add per-parameter "visible in symbol" flag for KiCad EDA export (#1444)

* 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) <noreply@anthropic.com>

* Fixed message ids

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
This commit is contained in:
Dant-hw 2026-07-27 22:31:06 +02:00 committed by GitHub
parent f3c2f4b913
commit 0169c2d1fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 137 additions and 1 deletions

View file

@ -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 @@ abstract class AbstractParameter extends AbstractNamedDBElement implements Uniqu
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()];

View file

@ -156,6 +156,11 @@ class ParameterType extends AbstractType
'label' => false,
'required' => false,
]);
$builder->add('eda_symbol_visibility', TriStateCheckboxType::class, [
'label' => false,
'required' => false,
]);
}
}

View file

@ -341,7 +341,9 @@ class KiCadHelper
$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);
}
}
}

View file

@ -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"),