Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions migrations/Version20260713120000.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use App\Migration\AbstractMultiPlatformMigration;
use Doctrine\DBAL\Schema\Schema;

final class Version20260713120000 extends AbstractMultiPlatformMigration
{
public function getDescription(): string
{
return 'Add eda_symbol_visibility nullable boolean column to parameters table (controls the "visible" flag of the exported KiCad field)';
}

public function mySQLUp(Schema $schema): void
{
$this->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');
}
}
23 changes: 23 additions & 0 deletions src/Entity/Parameters/AbstractParameter.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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()];
Expand Down
5 changes: 5 additions & 0 deletions src/Form/ParameterType.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
]);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/Services/EDA/KiCadHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions src/Settings/MiscSettings/KiCadEDASettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand Down
1 change: 1 addition & 0 deletions templates/parts/edit/_specifications.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<th>{% trans %}specifications.text{% endtrans %}</th>
<th>{% trans %}specifications.group{% endtrans %}</th>
<th title="{% trans %}specifications.eda_visibility.help{% endtrans %}"><i class="fas fa-bolt fa-fw"></i></th>
<th title="{% trans %}specifications.eda_symbol_visibility.help{% endtrans %}"><i class="fas fa-eye fa-fw"></i></th>
<th></th>
</tr>
</thead>
Expand Down
3 changes: 3 additions & 0 deletions templates/parts/edit/edit_form_styles.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@
{% if form.eda_visibility is defined %}
<td class="text-center">{{ form_widget(form.eda_visibility) }}</td>
{% endif %}
{% if form.eda_symbol_visibility is defined %}
<td class="text-center">{{ form_widget(form.eda_symbol_visibility) }}</td>
{% endif %}
<td>
<button type="button" class="btn btn-danger btn-sm order_btn_delete position-relative {% if form.parent.vars.allow_delete is defined and not form.parent.vars.allow_delete %}disabled{% endif %}"
{{ collection.delete_btn() }} title="{% trans %}orderdetail.delete{% endtrans %}">
Expand Down
31 changes: 31 additions & 0 deletions tests/Services/EDA/KiCadHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,37 @@ public function testParameterWithEdaVisibilityAppearsInFields(): void

self::assertArrayHasKey('Voltage Rating', $result['fields']);
self::assertSame('3.3 V', $result['fields']['Voltage Rating']['value']);
//Without an explicit symbol visibility the field defaults to not being shown in the symbol
self::assertSame('False', $result['fields']['Voltage Rating']['visible']);
}

/**
* Test that a parameter with eda_symbol_visibility=true is marked visible in the symbol.
*/
public function testParameterWithSymbolVisibilityIsVisibleInSymbol(): void
{
$category = $this->em->find(Category::class, 1);

$part = new Part();
$part->setName('Part with Symbol-Visible Parameter');
$part->setCategory($category);

$param = new PartParameter();
$param->setName('Voltage Rating');
$param->setValueTypical(3.3);
$param->setUnit('V');
$param->setEdaVisibility(true);
$param->setEdaSymbolVisibility(true);
$part->addParameter($param);

$this->em->persist($part);
$this->em->flush();

$result = $this->helper->getKiCADPart($part);

self::assertArrayHasKey('Voltage Rating', $result['fields']);
self::assertSame('3.3 V', $result['fields']['Voltage Rating']['value']);
self::assertSame('True', $result['fields']['Voltage Rating']['visible']);
}

/**
Expand Down
18 changes: 18 additions & 0 deletions translations/messages.en.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -648,6 +648,12 @@ Sub elements will be moved upwards.</target>
<target>Export this parameter as an EDA field</target>
</segment>
</unit>
<unit id="edaSymVis1" name="specifications.eda_symbol_visibility.help">
<segment state="translated">
<source>specifications.eda_symbol_visibility.help</source>
<target>Make this parameter field visible in the schematic symbol</target>
</segment>
</unit>
<unit id="XclPxI9" name="specification.create">
<segment state="translated">
<source>specification.create</source>
Expand Down Expand Up @@ -13019,6 +13025,18 @@ Buerklin-API Authentication server:
<target>EDA visibility for all [part] parameters who does not have an explicit visibility set. When enabled all parameters will be visible in the EDA software by default.</target>
</segment>
</unit>
<unit id="edaSymVis2" name="settings.misc.kicad_eda.default_parameter_symbol_visibility">
<segment state="translated">
<source>settings.misc.kicad_eda.default_parameter_symbol_visibility</source>
<target>Default symbol visibility of parameters</target>
</segment>
</unit>
<unit id="edaSymVis3" name="settings.misc.kicad_eda.default_parameter_symbol_visibility.help">
<segment state="translated">
<source>settings.misc.kicad_eda.default_parameter_symbol_visibility.help</source>
<target>Whether exported [part] parameter fields that do not have an explicit symbol visibility set are shown in the schematic symbol (the KiCad field's "visible" flag). Only affects parameters that are already exported as EDA fields.</target>
</segment>
</unit>
<unit id="J6pYnaC" name="settings.misc.kicad_eda.default_orderdetails_visibility">
<segment state="translated">
<source>settings.misc.kicad_eda.default_orderdetails_visibility</source>
Expand Down
Loading