diff --git a/sources/qetgraphicsitem/masterelement.cpp b/sources/qetgraphicsitem/masterelement.cpp index 290e8ff5f..84e6781ad 100644 --- a/sources/qetgraphicsitem/masterelement.cpp +++ b/sources/qetgraphicsitem/masterelement.cpp @@ -18,6 +18,7 @@ #include "masterelement.h" #include "crossrefitem.h" #include "elementtextitem.h" +#include "diagram.h" /** * @brief MasterElement::MasterElement @@ -122,6 +123,15 @@ void MasterElement::initLink(QETProject *project) { updateLabel(DiagramContext(), elementInformations()); } +/** + * @brief MasterElement::folioIdChange + * Used to update the label of this item when the folio id change + */ +void MasterElement::folioIdChange() { + DiagramContext dc =elementInformations(); + setTaggedText("label", assignVariables(dc["label"].toString(), this), true); +} + /** * @brief MasterElement::changeElementInfo() * Update label if it contains %c, %l, %f or %F variables @@ -144,13 +154,23 @@ void MasterElement::updateLabel(DiagramContext old_info, DiagramContext new_info Element *elmt = this; newstr = assignVariables(newstr, elmt); - //Label of element + //Label of element if (old_info["label"].toString() != newstr) { if (new_info["label"].toString().isEmpty()) setTaggedText("label", "_", false); else { setTaggedText("label", newstr, true); } + + //If autonum formula have %id we connect the change of folio position, to keep up to date the label. + if (diagram() && diagram()->project()) { + if (old_info["label"].toString().contains("%id") && !new_info["label"].toString().contains("%id")) { + disconnect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &MasterElement::folioIdChange); + } + else if (new_info["label"].toString().contains("%id")) { + connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &MasterElement::folioIdChange); + } + } } if (ElementTextItem *eti = taggedText("label")) { diff --git a/sources/qetgraphicsitem/masterelement.h b/sources/qetgraphicsitem/masterelement.h index a14ac66f6..330699fcf 100644 --- a/sources/qetgraphicsitem/masterelement.h +++ b/sources/qetgraphicsitem/masterelement.h @@ -43,6 +43,9 @@ class MasterElement : public CustomElement signals: + private: + void folioIdChange(); + public slots: void updateLabel(DiagramContext old_info, DiagramContext new_info); void changeElementInfo(); diff --git a/sources/qetgraphicsitem/simpleelement.cpp b/sources/qetgraphicsitem/simpleelement.cpp index 66468fc04..f2fe6b5db 100644 --- a/sources/qetgraphicsitem/simpleelement.cpp +++ b/sources/qetgraphicsitem/simpleelement.cpp @@ -18,6 +18,7 @@ #include "simpleelement.h" #include "commentitem.h" #include "elementtextitem.h" +#include "diagram.h" /** * @brief SimpleElement::SimpleElement @@ -56,6 +57,15 @@ void SimpleElement::initLink(QETProject *project) { updateLabel(DiagramContext(), elementInformations()); } +/** + * @brief SimpleElement::folioIdChange + * Use to update the label of this item when the foio id change + */ +void SimpleElement::folioIdChange() { + DiagramContext dc =elementInformations(); + setTaggedText("label", assignVariables(dc["label"].toString(), this), true); +} + /** * @brief SimpleElement::changeElementInfo() * Update label if it contains %c, %l, %f or %F variables @@ -77,13 +87,23 @@ void SimpleElement::updateLabel(DiagramContext old_info, DiagramContext new_info Element *elmt = this; label = assignVariables(label,elmt); - //Label of element + //Label of element if (old_info["label"].toString() != label) { if (new_info["label"].toString().isEmpty()) setTaggedText("label", "_", false); else { setTaggedText("label", label, true); } + + //If autonum formula have %id we connect the change of folio position, to keep up to date the label. + if (diagram() && diagram()->project()) { + if (old_info["label"].toString().contains("%id") && !new_info["label"].toString().contains("%id")) { + disconnect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &SimpleElement::folioIdChange); + } + else if (new_info["label"].toString().contains("%id")) { + connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &SimpleElement::folioIdChange); + } + } } if (ElementTextItem *eti = taggedText("label")) { diff --git a/sources/qetgraphicsitem/simpleelement.h b/sources/qetgraphicsitem/simpleelement.h index d73825ef4..5282942ad 100644 --- a/sources/qetgraphicsitem/simpleelement.h +++ b/sources/qetgraphicsitem/simpleelement.h @@ -39,6 +39,9 @@ class SimpleElement : public CustomElement { signals: + private: + void folioIdChange(); + public slots: void updateLabel(DiagramContext old_info, DiagramContext new_info); void changeElementInfo(); @@ -46,7 +49,6 @@ class SimpleElement : public CustomElement { private: CommentItem *m_comment_item; CommentItem *m_location_item; - }; #endif // SIMPLEELEMENT_H