diff --git a/sources/editor/ui/dynamictextfieldeditor.cpp b/sources/editor/ui/dynamictextfieldeditor.cpp index b974ac430..7cd15dd62 100644 --- a/sources/editor/ui/dynamictextfieldeditor.cpp +++ b/sources/editor/ui/dynamictextfieldeditor.cpp @@ -245,7 +245,8 @@ void DynamicTextFieldEditor::fillInfoComboBox() else { strl = QETInformation::elementInfoKeys(); - bool is_plc_slave = (type == ElementData::Slave + bool is_slave = (type == ElementData::Slave); + bool is_plc_slave = (is_slave && ed.m_slave_type == ElementData::PLCSlave); if (is_plc_slave) { @@ -274,6 +275,10 @@ void DynamicTextFieldEditor::fillInfoComboBox() strl.removeAll(QETInformation::ELMT_PLC_T3); strl.removeAll(QETInformation::ELMT_PLC_T4); } + + if (is_slave) { + strl.prepend(QETInformation::ELMT_XREF); + } } for (int i=0; ilinkedElements().isEmpty()) { Element *master_elmt = m_parent_element.data()->linkedElements().first(); - if(master_elmt && !parentGroup() && - ( + if(master_elmt && !parentGroup()) + { + XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + + //Champ de texte: store xref in element informations + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + if(m_text_from == DynamicElementTextItem::ElementInfo && m_info_name == "xref") + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + + //Set up connections for future updates + if(m_update_slave_Xref_connection.isEmpty()) + { + m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram(), &Diagram::diagramInformationChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref); + } + return; + } + //For label/composite text: fall through to cleanup (delete m_slave_Xref_item) + } + else if( (m_text_from == DynamicElementTextItem::ElementInfo && m_info_name == "label") || (m_text_from == DynamicElementTextItem::CompositeText && m_composite_text.contains("%{label}")) ) - ) - { - XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); - QString xref_label = xrp.slaveLabel(); - xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); - - if(!m_slave_Xref_item) { - m_slave_Xref_item = new QGraphicsTextItem(xref_label, this); - m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5)); - m_slave_Xref_item->setDefaultTextColor(Qt::black); - m_slave_Xref_item->installSceneEventFilter(this); + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); - m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram(), &Diagram::diagramInformationChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref); - m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref); + if(!m_slave_Xref_item) + { + m_slave_Xref_item = new QGraphicsTextItem(xref_label, this); + m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5)); + m_slave_Xref_item->setDefaultTextColor(Qt::black); + m_slave_Xref_item->installSceneEventFilter(this); + + m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram(), &Diagram::diagramInformationChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref); + m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref); + } + else + m_slave_Xref_item->setPlainText(xref_label); + setXref_item(xrp.getXrefPos(), xrp.slaveOffset()); + return; } - else - m_slave_Xref_item->setPlainText(xref_label); - setXref_item(xrp.getXrefPos(), xrp.slaveOffset()); - return; } } } @@ -1405,6 +1437,29 @@ void DynamicElementTextItem::updateXref() delete m_slave_Xref_item; m_slave_Xref_item = nullptr; m_update_slave_Xref_connection.clear(); + + //If position changed to Champ de texte, store xref in element info + if(m_parent_element->linkType() == Element::Slave && + !m_parent_element->linkedElements().isEmpty()) + { + Element *master_elmt = m_parent_element->linkedElements().first(); + if(master_elmt && diagram()) + { + XRefProperties xrp = diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + } + } + } } } diff --git a/sources/qetgraphicsitem/elementtextitemgroup.cpp b/sources/qetgraphicsitem/elementtextitemgroup.cpp index 983b5605b..b04c91eda 100644 --- a/sources/qetgraphicsitem/elementtextitemgroup.cpp +++ b/sources/qetgraphicsitem/elementtextitemgroup.cpp @@ -795,12 +795,46 @@ void ElementTextItemGroup::updateXref() !m_parent_element->linkedElements().isEmpty()) { Element *master_elmt = m_parent_element->linkedElements().first(); + XRefProperties xrp = project->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + + //Champ de texte: store xref in element informations + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + for(DynamicElementTextItem *deti : texts()) + { + if(deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "xref") + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + + //Set up connections for future updates + if(m_update_slave_Xref_connection.isEmpty()) + { + m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(project, &QETProject::projectDiagramsOrderChanged, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(project, &QETProject::diagramRemoved, this, &ElementTextItemGroup::updateXref); + m_update_slave_Xref_connection << connect(project, &QETProject::XRefPropertiesChanged, this, &ElementTextItemGroup::updateXref); + } + return; + } + } + //No "xref" text found: fall through to cleanup + } + for(DynamicElementTextItem *deti : texts()) { if((deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "label") || (deti->textFrom() == DynamicElementTextItem::CompositeText && deti->compositeText().contains("%{label"))) { - XRefProperties xrp = project->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); QString xref_label = xrp.slaveLabel(); xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); @@ -839,6 +873,30 @@ void ElementTextItemGroup::updateXref() delete m_slave_Xref_item; m_slave_Xref_item = nullptr; m_update_slave_Xref_connection.clear(); + + //If position changed to Champ de texte, store xref in element info + if(m_parent_element->linkType() == Element::Slave && + !m_parent_element->linkedElements().isEmpty() && + m_parent_element->diagram()) + { + Element *master_elmt = m_parent_element->linkedElements().first(); + if(master_elmt) + { + XRefProperties xrp = m_parent_element->diagram()->project()->defaultXRefProperties(master_elmt->kindInformations()["type"].toString()); + if(xrp.getXrefPos() == Qt::AlignHCenter) + { + QString xref_label = xrp.slaveLabel(); + xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt); + + DiagramContext dc = m_parent_element->elementInformations(); + if(dc.value("xref").toString() != xref_label) + { + dc.addValue("xref", xref_label); + m_parent_element->setElementInformations(dc); + } + } + } + } } } diff --git a/sources/qetinformation.cpp b/sources/qetinformation.cpp index de28925ef..05a246d47 100644 --- a/sources/qetinformation.cpp +++ b/sources/qetinformation.cpp @@ -194,8 +194,9 @@ QStringList QETInformation::elementInfoKeys() ELMT_PLC_ADDRESS, ELMT_PLC_FUNCTION, ELMT_PLC_COMMENT, - ELMT_PLC_CROSSREF, - "exclude_from_bom" }; + ELMT_PLC_CROSSREF, + ELMT_XREF, + "exclude_from_bom" }; return list; } @@ -316,6 +317,7 @@ QString QETInformation::translatedInfoKey(const QString &info) else if (info == ELMT_PLC_FUNCTION) return QObject::tr("Fonction PLC"); else if (info == ELMT_PLC_COMMENT) return QObject::tr("Commentaire PLC"); else if (info == ELMT_PLC_CROSSREF) return QObject::tr("Réf. croisée PLC"); + else if (info == ELMT_XREF) return QObject::tr("Réf. croisée"); else return QString(); } diff --git a/sources/qetinformation.h b/sources/qetinformation.h index 2aab78e95..9fee0cdf3 100644 --- a/sources/qetinformation.h +++ b/sources/qetinformation.h @@ -83,6 +83,7 @@ namespace QETInformation static QString ELMT_SUPPLIER_AUX4 = "supplier_auxiliary4"; static QString ELMT_QUANTITY_AUX4 = "quantity_auxiliary4"; static QString ELMT_UNITY_AUX4 = "unity_auxiliary4"; + static QString ELMT_XREF = "xref"; /** Default information related to conductor **/ diff --git a/sources/ui/xrefpropertieswidget.cpp b/sources/ui/xrefpropertieswidget.cpp index 02dedc746..97f4dadf8 100644 --- a/sources/ui/xrefpropertieswidget.cpp +++ b/sources/ui/xrefpropertieswidget.cpp @@ -111,6 +111,7 @@ void XRefPropertiesWidget::buildUi() ui -> m_xrefpos_cb -> addItem(tr("Left"),"left"); ui -> m_xrefpos_cb -> addItem(tr("Right"),"right"); ui -> m_xrefpos_cb -> addItem(tr("Text alignment"),"alignment"); + ui -> m_xrefpos_cb -> addItem(tr("Champ de texte"),"text_field"); m_previous_type_index = ui -> m_type_cb -> currentIndex(); } @@ -139,6 +140,7 @@ void XRefPropertiesWidget::saveProperties(int index) { else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "left") xrp.setXrefPos(Qt::AlignLeft); else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "right") xrp.setXrefPos(Qt::AlignRight); else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "alignment") xrp.setXrefPos(Qt::AlignBaseline); + else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "text_field") xrp.setXrefPos(Qt::AlignHCenter); xrp.setShowPowerContac(ui->m_show_power_cb->isChecked()); xrp.setShowTerminalName(ui->m_show_terminal_name_cb->isChecked()); xrp.setPrefix("power", ui->m_power_prefix_le->text()); @@ -195,6 +197,7 @@ void XRefPropertiesWidget::updateDisplay() else if(xrp.getXrefPos() == Qt::AlignRight) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("right")); else if(xrp.getXrefPos() == Qt::AlignBaseline) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("alignment")); else if(xrp.getXrefPos() == Qt::AlignBottom) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("bottom")); + else if(xrp.getXrefPos() == Qt::AlignHCenter) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("text_field")); ui->m_show_power_cb->setChecked(xrp.showPowerContact()); ui->m_show_terminal_name_cb->setChecked(xrp.showTerminalName()); ui->m_power_prefix_le-> setText(xrp.prefix("power"));