diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 216f68e70..cf018794c 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -983,9 +983,19 @@ QDomElement Diagram::writeXml(QDomDocument &xml_doc) const { return(new_node.toElement()); } -void Diagram::initElementsLinks() { +/** + * @brief Diagram::refreshContents + * refresh all content of diagram. + * - refresh conductor text. + * - linking the elements waiting to be linked + */ +void Diagram::refreshContents() { + foreach (Element *elmt, elements()) elmt->initLink(project()); + + foreach (Conductor *conductor, conductors()) + conductor->refreshText(); } /** @@ -1506,7 +1516,7 @@ bool Diagram::freezeNewElements() { */ void Diagram::freezeConductors() { foreach (Conductor *cnd, conductors()) { - cnd->freezeLabel(); + cnd->setFreezeLabel(true); } } @@ -1516,7 +1526,7 @@ void Diagram::freezeConductors() { */ void Diagram::unfreezeConductors() { foreach (Conductor *cnd, conductors()) { - cnd->unfreezeLabel(); + cnd->setFreezeLabel(false); } } diff --git a/sources/diagram.h b/sources/diagram.h index 4e156e073..a81104ad4 100644 --- a/sources/diagram.h +++ b/sources/diagram.h @@ -166,8 +166,9 @@ class Diagram : public QGraphicsScene void folioSequentialsToXml(QHash*, QDomElement *, QString, QString, QDomDocument *); void folioSequentialsFromXml(const QDomElement&, QHash*, QString, QString, QString, QString); - // methods related to graphics items addition/removal on the diagram - void initElementsLinks(); + void refreshContents(); + + // methods related to graphics items addition/removal on the diagram virtual void addItem (QGraphicsItem *item); virtual void removeItem (QGraphicsItem *item); diff --git a/sources/diagramevent/diagrameventaddelement.cpp b/sources/diagramevent/diagrameventaddelement.cpp index 28ed1b855..354e369e3 100644 --- a/sources/diagramevent/diagrameventaddelement.cpp +++ b/sources/diagramevent/diagrameventaddelement.cpp @@ -217,7 +217,8 @@ void DiagramEventAddElement::addElement() element -> setRotation(m_element -> rotation()); m_diagram -> addItem(element); - QUndoCommand *undo_object = new AddItemCommand(element, m_diagram, m_element -> pos()); + QUndoCommand *undo_object = new QUndoCommand(tr("Ajouter %1").arg(element->name())); + new AddItemCommand(element, m_diagram, m_element -> pos(), undo_object); while (!element -> AlignedFreeTerminals().isEmpty() && m_diagram -> project() -> autoConductor()) { @@ -232,8 +233,9 @@ void DiagramEventAddElement::addElement() ConductorAutoNumerotation can (conductor, m_diagram, undo_object); can.numerate(); conductor->setSeq = true; - if (m_diagram->freezeNewConductors() || m_diagram->project()->freezeNewConductors() ) - conductor->freeze_label = true; + if (m_diagram->freezeNewConductors() || m_diagram->project()->freezeNewConductors()) { + conductor->setFreezeLabel(true); + } }; m_diagram -> undoStack().push(undo_object); element->setSequential(); diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index 50814c7ab..e9ec374f7 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -48,7 +48,6 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : terminal1(p1), terminal2(p2), setSeq(true), - freeze_label(false), bMouseOver(false), m_handler(10), text_item(0), @@ -1446,6 +1445,15 @@ void Conductor::setText(const QString &t) { text_item -> setPlainText(label); } +/** + * @brief Conductor::refreshText + * Refresh the text of this conductor. + * recalcule and set the text according to the formula. + */ +void Conductor::refreshText() { + setText(m_freeze_label? text_item->toPlainText() : properties().text); +} + /** * @brief Conductor::setProperties * Set new properties for this conductor @@ -1478,8 +1486,8 @@ void Conductor::setProperties(const ConductorProperties &properties) else m_frozen_label = properties_.text; } - if (freeze_label) - freezeLabel(); + + setFreezeLabel(m_freeze_label); if (properties_.type != ConductorProperties::Multi) text_item -> setVisible(false); else @@ -1883,22 +1891,23 @@ QList relatedConductors(const Conductor *conductor) { } /** - * @brief Conductor::freezeLabel - * Freeze this conductor label + * @brief Conductor::setFreezeLabel + * Freeze this conductor label if true + * Unfreeze this conductor label if false + * @param freeze */ -void Conductor::freezeLabel() { - QString freezelabel = this->text_item->toPlainText(); - m_frozen_label = properties_.text; - this->setText(freezelabel); - this->properties_.text = freezelabel; -} +void Conductor::setFreezeLabel(bool freeze) { + m_freeze_label = freeze; -/** - * @brief Conductor::unfreezeLabel - * Unfreeze this conductor label - */ -void Conductor::unfreezeLabel() { - this->setText(m_frozen_label); - if (m_frozen_label == "") return; - properties_.text = m_frozen_label; + if (m_freeze_label) { + QString freezelabel = this->text_item->toPlainText(); + m_frozen_label = properties_.text; + this->setText(freezelabel); + this->properties_.text = freezelabel; + } + else { + this->setText(m_frozen_label); + if (m_frozen_label == "") return; + properties_.text = m_frozen_label; + } } diff --git a/sources/qetgraphicsitem/conductor.h b/sources/qetgraphicsitem/conductor.h index 6d8e5dad2..9fcfd6baa 100644 --- a/sources/qetgraphicsitem/conductor.h +++ b/sources/qetgraphicsitem/conductor.h @@ -95,6 +95,7 @@ class Conductor : public QObject, public QGraphicsPathItem QString text() const; QString assignVariables(QString) ; void setText(const QString &); + void refreshText(); QString assignSeq (QString, Conductor*); void setSequential (); void setOthersSequential (Conductor *); @@ -131,9 +132,7 @@ class Conductor : public QObject, public QGraphicsPathItem QStringList seq_hundred; QStringList seq_hundredfolio; bool setSeq; - bool freeze_label; - void freezeLabel(); - void unfreezeLabel(); + void setFreezeLabel(bool freeze); QString m_frozen_label; public slots: @@ -153,32 +152,33 @@ class Conductor : public QObject, public QGraphicsPathItem private: QetGraphicsHandlerUtility m_handler; - /// Functional properties + /// Functional properties ConductorProperties properties_; - /// Text input for non simple, non-singleline conductors + /// Text input for non simple, non-singleline conductors ConductorTextItem *text_item; - /// Segments composing the conductor + /// Segments composing the conductor ConductorSegment *segments; - /// Attributs related to mouse interaction + /// Attributs related to mouse interaction bool moving_segment; int moved_point; qreal previous_z_value; ConductorSegment *moved_segment; QPointF before_mov_text_pos_; - /// Whether the conductor was manually modified by users + /// Whether the conductor was manually modified by users bool modified_path; - /// Whether the current profile should be saved as soon as possible + /// Whether the current profile should be saved as soon as possible bool has_to_save_profile; - /// conductor profile: "photography" of what the conductor is supposed to look - /// like - there is one profile per kind of traject + /// conductor profile: "photography" of what the conductor is supposed to look + /// like - there is one profile per kind of traject ConductorProfilesGroup conductor_profiles; - /// QPen et QBrush objects used to draw conductors + /// QPen et QBrush objects used to draw conductors static QPen conductor_pen; static QBrush conductor_brush; static bool pen_and_brush_initialized; - /// Define whether and how the conductor should be highlighted + /// Define whether and how the conductor should be highlighted Highlight must_highlight_; bool m_valid; + bool m_freeze_label = false; private: void segmentsToPath(); diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 12a2211ca..160823e93 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -1367,8 +1367,9 @@ void QETProject::readDiagramsXml(QDomDocument &xml_project) addDiagram(diagram); //Initialise links between elements in this project + //and refresh the text of conductor foreach (Diagram *d, diagrams()) - d->initElementsLinks(); + d->refreshContents(); delete dlgWaiting; }