mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-29 05:44:14 +02:00
Derive empty-slot labels from the group's declared terminals
Both issues from the review, preview of empty contact comb slots only: - Slice the flat label list over the declared poles in drawAsContacts (terminals per pole from labels.size()/contactCount) instead of a fixed stride of 2 (3 for a switch) inside drawContact: terminalCount and contactCount are edited independently, so with 3 poles and the default terminal count of 2 the fixed stride starved every pole but the first. Available labels are now distributed across the poles. - Map changeover labels of a slot to their own position always (common=stored[0] right, NC=stored[1] bottom-left, NO=stored[2] top-left, missing entries stay empty) instead of falling back to the raw stored order, which put the numbers on the wrong contact halves when the terminal count was below three. - Element editor: changing the contact count now keeps the terminal count in step (same terminals per contact, type default 2/3 for inconsistent data, minimum 3 for a switch), so the mismatch cannot be created anymore; legacy mismatched data is handled by the new slicing. - Drop the now redundant elmt check before is_power_ctc (it already includes it) - the dead null check from the review.
This commit is contained in:
@@ -588,6 +588,29 @@ void ElementPropertiesEditorWidget::populateSlaveGroupsTable()
|
||||
contact_ct->setValue(group.contactCount);
|
||||
ui->m_slave_groups_table->setCellWidget(i, 2, contact_ct);
|
||||
|
||||
// When the contact count changes, keep the terminal count in step
|
||||
// with it, otherwise the two drift apart (both are edited
|
||||
// independently): the stored terminals-per-contact ratio is kept,
|
||||
// or the contact type default (2, 3 for a switch) is used when the
|
||||
// stored values don't divide evenly (inconsistent legacy data).
|
||||
const int old_contacts = group.contactCount;
|
||||
const int old_terminals = group.terminalCount;
|
||||
connect(contact_ct, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, [this, i, old_contacts, old_terminals](int val) {
|
||||
if (i < m_data.m_slave_contact_groups.size()) {
|
||||
readSlaveGroupsFromTable();
|
||||
auto &group = m_data.m_slave_contact_groups[i];
|
||||
int per_pole = old_terminals / qMax(1, old_contacts);
|
||||
if (per_pole < 1 || old_terminals % qMax(1, old_contacts) != 0)
|
||||
per_pole = group.type == ElementData::SW ? 3 : 2;
|
||||
else if (group.type == ElementData::SW && per_pole < 3)
|
||||
per_pole = 3; //a switch needs common, NC and NO
|
||||
group.contactCount = val;
|
||||
group.terminalCount = val * per_pole;
|
||||
populateSlaveGroupsTable();
|
||||
}
|
||||
});
|
||||
|
||||
// Terminal count
|
||||
auto *terminal_ct = new QSpinBox(ui->m_slave_groups_table);
|
||||
terminal_ct->setMinimum(1);
|
||||
|
||||
Reference in New Issue
Block a user