From fc73d53d73bc341e853e7f36e797bd8b9ad47b46 Mon Sep 17 00:00:00 2001 From: joshua Date: Thu, 7 Nov 2019 21:21:07 +0100 Subject: [PATCH] CSV export : correctly export label --- .../diagramevent/diagrameventaddelement.cpp | 2 +- .../dynamicelementtextitem.cpp | 42 +++++++++---------- sources/qetgraphicsitem/element.cpp | 29 ++++++++++--- sources/qetgraphicsitem/element.h | 1 + sources/ui/bomexportdialog.cpp | 3 ++ sources/ui/linksingleelementwidget.cpp | 18 +++----- 6 files changed, 54 insertions(+), 41 deletions(-) diff --git a/sources/diagramevent/diagrameventaddelement.cpp b/sources/diagramevent/diagrameventaddelement.cpp index c14955fbf..543522334 100644 --- a/sources/diagramevent/diagrameventaddelement.cpp +++ b/sources/diagramevent/diagrameventaddelement.cpp @@ -237,7 +237,7 @@ void DiagramEventAddElement::addElement() if (m_diagram->freezeNewConductors() || m_diagram->project()->isFreezeNewConductors()) { conductor->setFreezeLabel(true); } - }; + } m_diagram -> undoStack().push(undo_object); element->setUpFormula(); diff --git a/sources/qetgraphicsitem/dynamicelementtextitem.cpp b/sources/qetgraphicsitem/dynamicelementtextitem.cpp index 23534c37e..2309da9d8 100644 --- a/sources/qetgraphicsitem/dynamicelementtextitem.cpp +++ b/sources/qetgraphicsitem/dynamicelementtextitem.cpp @@ -762,11 +762,13 @@ bool DynamicElementTextItem::sceneEventFilter(QGraphicsItem *watched, QEvent *ev void DynamicElementTextItem::elementInfoChanged() { DiagramContext dc; - if(elementUseForInfo()) - dc = elementUseForInfo()->elementInformations(); + Element *element = elementUseForInfo(); + if(element) { + dc = element->elementInformations(); + } QString final_text; - Element *element = elementUseForInfo(); + if (m_text_from == ElementInfo) { @@ -775,14 +777,14 @@ void DynamicElementTextItem::elementInfoChanged() if(m_info_name == "label") { setupFormulaConnection(); - - if (dc.value("formula").toString().isEmpty()) - final_text = dc.value(m_info_name).toString(); - else - final_text = autonum::AssignVariables::formulaToLabel(dc.value("formula").toString(), element->rSequenceStruct(), element->diagram(), element); + + if (element) { + final_text = element->actualLabel(); + } } - else + else { final_text = dc.value(m_info_name).toString(); + } } else if (m_text_from == CompositeText) { @@ -1040,20 +1042,18 @@ void DynamicElementTextItem::updateLabel() (m_text_from == CompositeText && m_composite_text.contains("%{label}"))) { DiagramContext dc; - if(elementUseForInfo()) - dc = elementUseForInfo()->elementInformations(); + Element *element = elementUseForInfo(); + if(element) { + dc = element->elementInformations(); + } - Element *element = elementUseForInfo(); - - if(m_text_from == ElementInfo) - { - if(dc.value("formula").toString().isEmpty()) - setPlainText(dc.value("label").toString()); - else - setPlainText(autonum::AssignVariables::formulaToLabel(dc.value("formula").toString(), element->rSequenceStruct(), element->diagram(), element)); + + if(m_text_from == ElementInfo && element) { + setPlainText(element->actualLabel()); } - else if (m_text_from == CompositeText) + else if (m_text_from == CompositeText) { setPlainText(autonum::AssignVariables::replaceVariable(m_composite_text, dc)); + } } } @@ -1172,7 +1172,7 @@ QString DynamicElementTextItem::reportReplacedCompositeText() const { Element *elmt = m_other_report.data(); QString label = m_report_formula; - label = autonum::AssignVariables::formulaToLabel(label, elmt->rSequenceStruct(), elmt->diagram(), elmt); + label = elmt->actualLabel(); string.replace("%{label}", label); } if (m_watched_conductor) diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 1e2a1fd35..8eac9ecd1 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -1419,7 +1419,10 @@ QString Element::linkTypeToString() const */ void Element::setElementInformations(DiagramContext dc) { - if (m_element_informations == dc) return; + if (m_element_informations == dc) { + return; + } + DiagramContext old_info = m_element_informations; m_element_informations = dc; emit elementInfoChange(old_info, m_element_informations); @@ -1480,7 +1483,7 @@ void Element::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) * @param e QGraphicsSceneHoverEvent */ void Element::hoverEnterEvent(QGraphicsSceneHoverEvent *e) { - Q_UNUSED(e); + Q_UNUSED(e) foreach (Element *elmt, linkedElements()) elmt -> setHighlighted(true); @@ -1497,7 +1500,7 @@ void Element::hoverEnterEvent(QGraphicsSceneHoverEvent *e) { * @param e QGraphicsSceneHoverEvent */ void Element::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) { - Q_UNUSED(e); + Q_UNUSED(e) foreach (Element *elmt, linkedElements()) elmt -> setHighlighted(false); @@ -1536,8 +1539,7 @@ void Element::setUpFormula(bool code_letter) if(!m_freeze_label && !formula.isEmpty()) { DiagramContext dc = m_element_informations; - QString label = autonum::AssignVariables::formulaToLabel(formula, m_autoNum_seq, diagram(), this); - m_element_informations.addValue("label", label); + m_element_informations.addValue("label", actualLabel()); emit elementInfoChange(dc, m_element_informations); } } @@ -1576,7 +1578,22 @@ void Element::freezeNewAddedElement() { if (this->diagram()->freezeNewElements() || this->diagram()->project()->isFreezeNewElements()) { freezeLabel(true); } - else return; + else return; +} + +/** + * @brief Element::actualLabel + * Always return the current label to be displayed. + * This function is usefull when label is based on formula, because label can change at any time. + * @return + */ +QString Element::actualLabel() +{ + if (m_element_informations.value("formula").toString().isEmpty()) { + return m_element_informations.value("label").toString(); + } else { + return autonum::AssignVariables::formulaToLabel(m_element_informations.value("formula").toString(), m_autoNum_seq, diagram(), this); + } } /** diff --git a/sources/qetgraphicsitem/element.h b/sources/qetgraphicsitem/element.h index a9d621322..686850496 100644 --- a/sources/qetgraphicsitem/element.h +++ b/sources/qetgraphicsitem/element.h @@ -100,6 +100,7 @@ class Element : public QetGraphicsItem void freezeLabel(bool freeze); bool isFreezeLabel() const {return m_freeze_label;} void freezeNewAddedElement(); + QString actualLabel(); QString name() const override; ElementsLocation location() const; diff --git a/sources/ui/bomexportdialog.cpp b/sources/ui/bomexportdialog.cpp index d0103207d..c3dbedb87 100644 --- a/sources/ui/bomexportdialog.cpp +++ b/sources/ui/bomexportdialog.cpp @@ -426,6 +426,9 @@ QHash BOMExportDialog::elementInfoToString(Element *elmt) cons else if (key == "designation_qty") { hash.insert(key, key); } + else if (key == "label") { + hash.insert(key, elmt->actualLabel()); + } else { hash.insert(key, elmt->elementInformations()[keys_hash.value(key)].toString()); } diff --git a/sources/ui/linksingleelementwidget.cpp b/sources/ui/linksingleelementwidget.cpp index b35d4e5c3..e6ef812ca 100644 --- a/sources/ui/linksingleelementwidget.cpp +++ b/sources/ui/linksingleelementwidget.cpp @@ -219,19 +219,11 @@ void LinkSingleElementWidget::buildTree() { QStringList search_list; QStringList str_list; - - QString formula = elmt->elementInformations()["formula"].toString(); - if(!formula.isEmpty()) - { - str_list << autonum::AssignVariables::formulaToLabel(formula, elmt->rSequenceStruct(), elmt->diagram(), elmt); - search_list << str_list.last(); - } - else - { - str_list << elmt->elementInformations()["label"].toString(); - if(!str_list.last().isEmpty()) - search_list << str_list.last(); - } + + str_list << elmt->actualLabel(); + if(!str_list.last().isEmpty()) { + search_list << str_list.last(); + } str_list << elmt->elementInformations()["comment"].toString(); if (!str_list.last().isEmpty())