diff --git a/sources/ui/masterpropertieswidget.cpp b/sources/ui/masterpropertieswidget.cpp index 03200943a..4f5891f5b 100644 --- a/sources/ui/masterpropertieswidget.cpp +++ b/sources/ui/masterpropertieswidget.cpp @@ -525,10 +525,10 @@ void MasterPropertiesWidget::updateUi() // Table m_plc_table = new QTableWidget(m_plc_widget); - m_plc_table->setColumnCount(5); + m_plc_table->setColumnCount(6); m_plc_table->setHorizontalHeaderLabels({ tr("Type"), tr("Adresse"), tr("Fonction"), - tr("Commentaire"), tr("Réf. croisée") + tr("Commentaire"), tr("Réf. croisée"), tr("Bornes") }); m_plc_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_plc_table->setSelectionBehavior(QAbstractItemView::SelectItems); @@ -592,6 +592,11 @@ void MasterPropertiesWidget::updateUi() auto *crossref_item = new QTableWidgetItem(io.crossRef); crossref_item->setFlags(crossref_item->flags() & ~Qt::ItemIsEditable); m_plc_table->setItem(row, 4, crossref_item); + + // Anschlüsse (read-only) + auto *terminals_item = new QTableWidgetItem(io.terminals.join(QStringLiteral(", "))); + terminals_item->setFlags(terminals_item->flags() & ~Qt::ItemIsEditable); + m_plc_table->setItem(row, 5, terminals_item); } m_plc_table->blockSignals(false); @@ -806,23 +811,7 @@ void MasterPropertiesWidget::setCellFromValue(int row, int col, const QString &v } } else if (col == 5) { - // Terminal count spinbox - auto *tc_sb = qobject_cast(m_plc_table->cellWidget(row, col)); - if (!tc_sb) { - tc_sb = new QSpinBox(m_plc_table); - tc_sb->setMinimum(1); - tc_sb->setMaximum(4); - m_plc_table->setCellWidget(row, col, tc_sb); - connect(tc_sb, QOverload::of(&QSpinBox::valueChanged), - this, [this, row](int) { plcIOCellChanged(row, 5); }); - } - bool ok; - int v = val.toInt(&ok); - if (ok && v >= 1 && v <= 4) - tc_sb->setValue(v); - } - else if (col == 6) { - // CrossRef - read-only + // Anschlüsse (read-only) auto *item = new QTableWidgetItem(val); item->setFlags(item->flags() & ~Qt::ItemIsEditable); m_plc_table->setItem(row, col, item); @@ -860,17 +849,10 @@ void MasterPropertiesWidget::plcAddRow() m_plc_table->setItem(row, 3, new QTableWidgetItem()); m_plc_table->setItem(row, 4, new QTableWidgetItem()); - auto *tc_sb = new QSpinBox(m_plc_table); - tc_sb->setMinimum(1); - tc_sb->setMaximum(4); - tc_sb->setValue(1); - m_plc_table->setCellWidget(row, 5, tc_sb); - connect(tc_sb, QOverload::of(&QSpinBox::valueChanged), - this, [this, row](int) { plcIOCellChanged(row, 5); }); - - auto *crossref_item = new QTableWidgetItem(); - crossref_item->setFlags(crossref_item->flags() & ~Qt::ItemIsEditable); - m_plc_table->setItem(row, 6, crossref_item); + // Anschlüsse (read-only) + auto *terminals_item = new QTableWidgetItem(); + terminals_item->setFlags(terminals_item->flags() & ~Qt::ItemIsEditable); + m_plc_table->setItem(row, 5, terminals_item); } /** diff --git a/sources/ui/plclinkwidget.cpp b/sources/ui/plclinkwidget.cpp index add80441d..144ee0bff 100644 --- a/sources/ui/plclinkwidget.cpp +++ b/sources/ui/plclinkwidget.cpp @@ -65,7 +65,7 @@ PlcLinkWidget::PlcLinkWidget(Element *elmt, QWidget *parent) m_tree_widget = new QTreeWidget(this); m_tree_widget->setHeaderLabels({ tr("Label"), tr("Type"), tr("Adresse"), - tr("Fonction"), tr("Commentaire"), tr("Anschlüsse") + tr("Fonction"), tr("Commentaire"), tr("Bornes") }); m_tree_widget->setRootIsDecorated(true); m_tree_widget->setIndentation(20); @@ -225,8 +225,8 @@ void PlcLinkWidget::buildPlcTree() child_item->setText(3, io.functionText); child_item->setText(4, io.comment); - // Terminal count - child_item->setText(5, QString::number(io.terminalCount)); + // Terminal names + child_item->setText(5, io.terminals.join(QStringLiteral(", "))); PlcIoEntry entry; entry.master = elmt; diff --git a/sources/undocommand/linkelementcommand.cpp b/sources/undocommand/linkelementcommand.cpp index 6f52387ea..a785420af 100644 --- a/sources/undocommand/linkelementcommand.cpp +++ b/sources/undocommand/linkelementcommand.cpp @@ -502,22 +502,45 @@ void LinkElementCommand::makeLink(const QList &element_list) m_element->setGroupIndexForElement(slave, group_idx); // Set master labels on slave terminals - const auto &groups = m_element->elementData().m_slave_contact_groups; - if (group_idx < groups.size()) + if (m_element->elementData().m_master_type == ElementData::PLC) { - const QStringList &labels = groups.at(group_idx).labels; - QList slave_terms = slave->terminals(); - // Sort terminals by name (T1, T2, T3...) to match label order - std::sort(slave_terms.begin(), slave_terms.end(), - [](Terminal *a, Terminal *b) { - return a->name() < b->name(); - }); - for (int i = 0; i < slave_terms.size(); ++i) + const auto &plc_data = m_element->elementData().plcMasterData(); + if (group_idx < plc_data.ios.size()) { - if (i < labels.size()) + const QStringList &labels = plc_data.ios.at(group_idx).terminals; + QList slave_terms = slave->terminals(); + std::sort(slave_terms.begin(), slave_terms.end(), + [](Terminal *a, Terminal *b) { + return a->baseName() < b->baseName(); + }); + for (int i = 0; i < slave_terms.size(); ++i) { - slave_terms.at(i)->setUseMasterLabel(true); - slave_terms.at(i)->setMasterLabelIndex(i); + if (i < labels.size()) + { + slave_terms.at(i)->setUseMasterLabel(true); + slave_terms.at(i)->setMasterLabelIndex(i); + } + } + } + } + else + { + const auto &groups = m_element->elementData().m_slave_contact_groups; + if (group_idx < groups.size()) + { + const QStringList &labels = groups.at(group_idx).labels; + QList slave_terms = slave->terminals(); + std::sort(slave_terms.begin(), slave_terms.end(), + [](Terminal *a, Terminal *b) { + return a->name() < b->name(); + }); + for (int i = 0; i < slave_terms.size(); ++i) + { + if (i < labels.size()) + { + slave_terms.at(i)->setUseMasterLabel(true); + slave_terms.at(i)->setMasterLabelIndex(i); + } } } } @@ -539,6 +562,20 @@ void LinkElementCommand::makeLink(const QList &element_list) plcCrossRefText(m_element, slave)); ctx.addValue(QETInformation::ELMT_LABEL, m_element->actualLabel()); + ctx.addValue(QETInformation::ELMT_PLC_TC, + QString::number(io.terminalCount)); + for (int t = 0; t < io.terminalCount && t < 4; ++t) + { + QString val = (t < io.terminals.size()) + ? io.terminals.at(t) : QString(); + ctx.addValue( + QStringList({ + QETInformation::ELMT_PLC_T1, + QETInformation::ELMT_PLC_T2, + QETInformation::ELMT_PLC_T3, + QETInformation::ELMT_PLC_T4 + }).at(t), val); + } slave->setElementInformations(ctx); } }