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
+29 -2
View File
@@ -4506,9 +4506,30 @@ TerminalStrip *QETProject::newTerminalStrip(QString installation, QString locati
this);
m_terminal_strip_vector.append(ts);
watchTerminalStrip(ts);
return ts;
}
/**
* @brief QETProject::watchTerminalStrip
* The spare terminals of @a strip (on no folio) are lines of the
* nomenclature : keep the database up to date with them.
* @param strip
* @param watch : false to stop watching @a strip
*/
void QETProject::watchTerminalStrip(TerminalStrip *strip, bool watch)
{
if (!strip) {
return;
}
disconnect(strip, nullptr, &m_data_base, nullptr);
if (watch) {
connect(strip, &TerminalStrip::orderChanged, &m_data_base, &projectDataBase::spareTerminalsChanged);
connect(strip, &TerminalStrip::dataChanged, &m_data_base, &projectDataBase::spareTerminalsChanged);
}
m_data_base.spareTerminalsChanged();
}
/**
* @brief QETProject::addTerminalStrip
* Add \p strip to the terminal strip list of the project.
@@ -4525,6 +4546,7 @@ bool QETProject::addTerminalStrip(TerminalStrip *strip)
return true;
m_terminal_strip_vector.append(strip);
watchTerminalStrip(strip);
return true;
}
@@ -4535,8 +4557,13 @@ bool QETProject::addTerminalStrip(TerminalStrip *strip)
* @param strip
* @return true if successfully removed.
*/
bool QETProject::removeTerminalStrip(TerminalStrip *strip) {
return m_terminal_strip_vector.removeOne(strip);
bool QETProject::removeTerminalStrip(TerminalStrip *strip)
{
const bool removed_ = m_terminal_strip_vector.removeOne(strip);
if (removed_) {
watchTerminalStrip(strip, false);
}
return removed_;
}
/**