Terminal strip editor: add spare terminals, numbered, counted in the nomenclature

A spare (reserved) terminal is a terminal of a strip which is drawn on no
folio. RealTerminal already foresaw it ("a terminal set by user but not
present on any folio") but every terminal needed an element.

- RealTerminal::createSpare(): a terminal without element, with its own
  data (label, type, function, led, informations: section, width, catalog
  terminal, color, manufacturer...). Saved in the strip:
  <real_terminal spare_uuid="..." type="..." function="..."><informations>
  Older versions ignore these terminals.
- TerminalStrip::insertSpareTerminals() / insertTerminals(): insert at a
  position of the strip. Undoable commands AddSpareTerminalsCommand and
  ChangeSpareTerminalDataCommand.
- Terminal strip editor: "Add spare terminals..." button. The terminals
  are inserted after the selected terminal (at the end if none), numbered
  from its label ("X1:12" -> "X1:13", "X1:14", leading zeros kept), with
  its properties if asked. The labels can be changed or removed in the
  table, like the other cells; the Xref column shows "Spare". Moving a
  spare terminal to the independent terminals removes it (undoable).
- Nomenclature: the spare terminals are in the new spare_terminal table,
  added to element_nomenclature_view (UNION ALL, same columns), after the
  folios, in the order of their strip. exclude_from_bom is honoured.
- The modified cells of the editor model are kept by real terminal, not by
  element, since a spare terminal has none.
This commit is contained in:
Laurent Trinques
2026-10-18 16:24:14 +02:00
parent ddc71553e2
commit 015811d243
16 changed files with 747 additions and 70 deletions
+2
View File
@@ -234,6 +234,7 @@ class projectDataBase : public QObject
void elementMoved();
public:
void spareTerminalsChanged();
signals:
void dataBaseUpdated();
@@ -250,6 +251,7 @@ class projectDataBase : public QObject
void populateElementTable();
void populateElementInfoTable();
void populateElementInfoTableFromFolios();
void populateSpareTerminalTable();
void populateDiagramInfoTable();
void populateConductorTable();
void populateLinkTable();