diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 14cd063d0..ce6abd2c5 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -868,10 +868,6 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf addItem(c); c -> fromXml(f); added_conductors << c; - if (item_paste) { - c->m_frozen_label = f.attribute("frozenlabel"); - qDebug() << "Frozen Label" << f.attribute("frozenlabel"); - } } else delete c; @@ -1489,19 +1485,9 @@ bool Diagram::freezeNewElements() { * @brief Diagram::freezeConductors * Freeze every existent conductor label. */ -void Diagram::freezeConductors() { +void Diagram::freezeConductors(bool freeze) { foreach (Conductor *cnd, conductors()) { - cnd->setFreezeLabel(true); - } -} - -/** - * @brief Diagram::unfreezeConductors - * Unfreeze every existent conductor label. - */ -void Diagram::unfreezeConductors() { - foreach (Conductor *cnd, conductors()) { - cnd->setFreezeLabel(false); + cnd->setFreezeLabel(freeze); } } diff --git a/sources/diagram.h b/sources/diagram.h index c37d32218..dfcfc788c 100644 --- a/sources/diagram.h +++ b/sources/diagram.h @@ -222,9 +222,8 @@ class Diagram : public QGraphicsScene void setFreezeNewElements(bool); bool freezeNewElements(); - //methods related to conductor label Update Policy - void freezeConductors(); - void unfreezeConductors(); + //methods related to conductor label Update Policy + void freezeConductors(bool freeze); void setFreezeNewConductors(bool); bool freezeNewConductors(); diff --git a/sources/diagramevent/diagrameventaddelement.cpp b/sources/diagramevent/diagrameventaddelement.cpp index 0e9581fef..63cb61736 100644 --- a/sources/diagramevent/diagrameventaddelement.cpp +++ b/sources/diagramevent/diagrameventaddelement.cpp @@ -230,7 +230,7 @@ void DiagramEventAddElement::addElement() //Autonum the new conductor, the undo command associated for this, have for parent undo_object ConductorAutoNumerotation can (conductor, m_diagram, undo_object); can.numerate(); - if (m_diagram->freezeNewConductors() || m_diagram->project()->freezeNewConductors()) { + if (m_diagram->freezeNewConductors() || m_diagram->project()->isFreezeNewConductors()) { conductor->setFreezeLabel(true); } }; diff --git a/sources/projectconfigpages.cpp b/sources/projectconfigpages.cpp index 5dcd28f46..557bcb629 100644 --- a/sources/projectconfigpages.cpp +++ b/sources/projectconfigpages.cpp @@ -623,29 +623,29 @@ void ProjectAutoNumConfigPage::applyManagement() { //Allow Both Existent and New Conductors if (m_amw->ui->m_both_conductor_rb->isChecked()) { //Unfreeze Existent and New Conductors - project()->unfreezeExistentConductorLabel(from,to); - project()->unfreezeNewConductorLabel(from,to); + project()->freezeExistentConductorLabel(false, from,to); + project()->freezeNewConductorLabel(false, from,to); project()->setFreezeNewConductors(false); } //Allow Only New else if (m_amw->ui->m_new_conductor_rb->isChecked()) { //Freeze Existent and Unfreeze New Conductors - project()->freezeExistentConductorLabel(from,to); - project()->unfreezeNewConductorLabel(from,to); + project()->freezeExistentConductorLabel(true, from,to); + project()->freezeNewConductorLabel(false, from,to); project()->setFreezeNewConductors(false); } //Allow Only Existent else if (m_amw->ui->m_existent_conductor_rb->isChecked()) { //Freeze Existent and Unfreeze New Conductors - project()->unfreezeExistentConductorLabel(from,to); - project()->freezeNewConductorLabel(from,to); + project()->freezeExistentConductorLabel(false, from,to); + project()->freezeNewConductorLabel(true, from,to); project()->setFreezeNewConductors(true); } //Disable else if (m_amw->ui->m_disable_conductor_rb->isChecked()) { //Freeze Existent and New Elements, Set Freeze Element Project Wide - project()->freezeExistentConductorLabel(from,to); - project()->freezeNewConductorLabel(from,to); + project()->freezeExistentConductorLabel(true, from,to); + project()->freezeNewConductorLabel(true, from,to); project()->setFreezeNewConductors(true); } diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index aeadf1dce..3f43d63c0 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -36,6 +36,36 @@ bool Conductor::pen_and_brush_initialized = false; QPen Conductor::conductor_pen = QPen(); QBrush Conductor::conductor_brush = QBrush(); + +class ConductorXmlRetroCompatibility +{ + friend class Conductor; + + static void loadSequential(const QDomElement &dom_element, QString seq, QStringList* list) + { + int i = 0; + while (!dom_element.attribute(seq + QString::number(i+1)).isEmpty()) + { + list->append(dom_element.attribute(seq + QString::number(i+1))); + i++; + } + } + + static void loadSequential(const QDomElement &dom_element, Conductor *conductor) + { + autonum::sequentialNumbers sn; + + loadSequential(dom_element,"sequ_",&sn.unit); + loadSequential(dom_element,"sequf_",&sn.unit_folio); + loadSequential(dom_element,"seqt_",&sn.ten); + loadSequential(dom_element,"seqtf_",&sn.ten_folio); + loadSequential(dom_element,"seqh_",&sn.hundred); + loadSequential(dom_element,"seqhf_",&sn.hundred_folio); + + conductor->rSequenceNum() = sn; + } +}; + /** * @brief Conductor::Conductor * Default constructor. @@ -818,48 +848,30 @@ void Conductor::pointsToSegments(QList points_list) { * @param e * @return true is loading success else return false */ -bool Conductor::fromXml(QDomElement &e) { - setPos(e.attribute("x", 0).toDouble(), - e.attribute("y", 0).toDouble()); +bool Conductor::fromXml(QDomElement &dom_element) +{ + setPos(dom_element.attribute("x", 0).toDouble(), + dom_element.attribute("y", 0).toDouble()); - bool return_ = pathFromXml(e); + bool return_ = pathFromXml(dom_element); - text_item -> fromXml(e); + text_item -> fromXml(dom_element); ConductorProperties pr; - pr.fromXml(e); + pr.fromXml(dom_element); - //Load Sequential Values - loadSequential(&e,"sequ_",&m_autoNum_seq.unit); - loadSequential(&e,"sequf_",&m_autoNum_seq.unit_folio); - loadSequential(&e,"seqt_",&m_autoNum_seq.ten); - loadSequential(&e,"seqtf_",&m_autoNum_seq.ten_folio); - loadSequential(&e,"seqh_",&m_autoNum_seq.hundred); - loadSequential(&e,"seqhf_",&m_autoNum_seq.hundred_folio); + //Load Sequential Values + if (dom_element.hasAttribute("sequ_1") || dom_element.hasAttribute("sequf_1") || dom_element.hasAttribute("seqt_1") || dom_element.hasAttribute("seqtf_1") || dom_element.hasAttribute("seqh_1") || dom_element.hasAttribute("sequf_1")) + ConductorXmlRetroCompatibility::loadSequential(dom_element, this); + else + m_autoNum_seq.fromXml(dom_element.firstChildElement("sequentialNumbers")); - m_frozen_label = e.attribute("frozenlabel"); + m_freeze_label = dom_element.attribute("freezeLabel") == "true"? true : false; setProperties(pr); return return_; } -/** - Load Sequentials to display on conductor label - @param QDomElement to set Attributes - @param Qstring seq to be retrieved - @param QStringList list to be inserted values -*/ -void Conductor::loadSequential(QDomElement* e, QString seq, QStringList* list) -{ - //Load Sequential Values - int i = 0; - while (!e->attribute(seq + QString::number(i+1)).isEmpty()) - { - list->append(e->attribute(seq + QString::number(i+1))); - i++; - } -} - /** Exporte les caracteristiques du conducteur sous forme d'une element XML. @param d Le document XML a utiliser pour creer l'element XML @@ -867,65 +879,39 @@ void Conductor::loadSequential(QDomElement* e, QString seq, QStringList* list) bornes dans le document XML et leur adresse en memoire @return Un element XML representant le conducteur */ -QDomElement Conductor::toXml(QDomDocument &d, QHash &table_adr_id) const { - QDomElement e = d.createElement("conductor"); +QDomElement Conductor::toXml(QDomDocument &dom_document, QHash &table_adr_id) const +{ + QDomElement dom_element = dom_document.createElement("conductor"); - e.setAttribute("x", QString::number(pos().x())); - e.setAttribute("y", QString::number(pos().y())); - e.setAttribute("terminal1", table_adr_id.value(terminal1)); - e.setAttribute("terminal2", table_adr_id.value(terminal2)); + dom_element.setAttribute("x", QString::number(pos().x())); + dom_element.setAttribute("y", QString::number(pos().y())); + dom_element.setAttribute("terminal1", table_adr_id.value(terminal1)); + dom_element.setAttribute("terminal2", table_adr_id.value(terminal2)); + dom_element.setAttribute("freezeLabel", m_freeze_label? "true" : "false"); // on n'exporte les segments du conducteur que si ceux-ci ont // ete modifies par l'utilisateur - if (modified_path) { + if (modified_path) + { // parcours et export des segments QDomElement current_segment; - foreach(ConductorSegment *segment, segmentsList()) { - current_segment = d.createElement("segment"); + foreach(ConductorSegment *segment, segmentsList()) + { + current_segment = dom_document.createElement("segment"); current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical"); current_segment.setAttribute("length", QString("%1").arg(segment -> length())); - e.appendChild(current_segment); + dom_element.appendChild(current_segment); } } - // Save Conductor sequential values to Xml - // Save Unit Sequential Values - for (int i = 0; i < m_autoNum_seq.unit.size(); i++) { - e.setAttribute("sequ_" + QString::number(i+1),m_autoNum_seq.unit.at(i)); - } - - // Save UnitFolio Sequential Values - for (int i = 0; i < m_autoNum_seq.unit_folio.size(); i++) { - e.setAttribute("sequf_" + QString::number(i+1),m_autoNum_seq.unit_folio.at(i)); - } - - // Save Ten Sequential Values - for (int i = 0; i < m_autoNum_seq.ten.size(); i++) { - e.setAttribute("seqt_" + QString::number(i+1),m_autoNum_seq.ten.at(i)); - } - - // Save TenFolio Sequential Values - for (int i = 0; i < m_autoNum_seq.ten_folio.size(); i++) { - e.setAttribute("seqtf_" + QString::number(i+1),m_autoNum_seq.ten_folio.at(i)); - } - - // Save Hundred Sequential Values - for (int i = 0; i < m_autoNum_seq.hundred.size(); i++) { - e.setAttribute("seqh_" + QString::number(i+1),m_autoNum_seq.hundred.at(i)); - } - - // Save Hundred Sequential Values - for (int i = 0; i < m_autoNum_seq.hundred_folio.size(); i++) { - e.setAttribute("seqhf_" + QString::number(i+1),m_autoNum_seq.hundred_folio.at(i)); - } - - if (m_frozen_label != "") e.setAttribute("frozenlabel", m_frozen_label); + QDomElement dom_seq = m_autoNum_seq.toXml(dom_document); + dom_element.appendChild(dom_seq); - // Export the properties and text - m_properties. toXml(e); - text_item -> toXml(e); + // Export the properties and text + m_properties. toXml(dom_element); + text_item -> toXml(dom_element); - return(e); + return(dom_element); } /** @@ -1313,18 +1299,11 @@ void Conductor::setProperties(const ConductorProperties &properties) setText(m_properties.text); text_item -> setFontSize(m_properties.text_size); - if (terminal1 != NULL && terminal1->diagram() != NULL) { - if (terminal1->diagram()->item_paste) - m_frozen_label = ""; - else - m_frozen_label = m_properties.text; - } - - setFreezeLabel(m_freeze_label); if (m_properties.type != ConductorProperties::Multi) text_item -> setVisible(false); else text_item -> setVisible(m_properties.m_show_text); + calculateTextItemPosition(); update(); @@ -1732,17 +1711,4 @@ QList relatedConductors(const Conductor *conductor) { */ void Conductor::setFreezeLabel(bool freeze) { m_freeze_label = freeze; - - if (m_freeze_label) { - QString freezelabel = this->text_item->toPlainText(); - m_frozen_label = m_properties.text; - this->setText(freezelabel); - this->m_properties.text = freezelabel; - } - else { - if (m_frozen_label.isEmpty()) - return; - this->setText(m_frozen_label); - m_properties.text = m_frozen_label; - } } diff --git a/sources/qetgraphicsitem/conductor.h b/sources/qetgraphicsitem/conductor.h index 7d12b0dc6..da060557a 100644 --- a/sources/qetgraphicsitem/conductor.h +++ b/sources/qetgraphicsitem/conductor.h @@ -123,7 +123,6 @@ class Conductor : public QObject, public QGraphicsPathItem public: void setFreezeLabel(bool freeze); - QString m_frozen_label; public slots: void displayedTextChanged(); @@ -187,7 +186,6 @@ class Conductor : public QObject, public QGraphicsPathItem static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal = 9.0); static Qt::Corner movementType(const QPointF &, const QPointF &); static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &); - void loadSequential(QDomElement* e, QString seq, QStringList* list); }; Conductor * longuestConductorInPotential (Conductor *conductor, bool all_diagram = false); diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 0d8df6983..7dbc730c9 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -860,7 +860,7 @@ void Element::freezeLabel(bool freeze) * Freeze this label if needed */ void Element::freezeNewAddedElement() { - if (this->diagram()->freezeNewElements() || this->diagram()->project()->freezeNewElements()) { + if (this->diagram()->freezeNewElements() || this->diagram()->project()->isFreezeNewElements()) { freezeLabel(true); } else return; diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 73080f326..53c440d00 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -596,21 +596,9 @@ NumerotationContext QETProject::folioAutoNum (const QString &key) const { * @param from - first folio index to apply freeze * @param to - last folio index to apply freeze */ -void QETProject::freezeExistentConductorLabel(int from, int to) { +void QETProject::freezeExistentConductorLabel(bool freeze, int from, int to) { for (int i = from; i <= to; i++) { - diagrams_.at(i)->freezeConductors(); - } -} - -/** - * @brief QETProject::unfreezeExistentConductorLabel - * Unfreeze Existent Conductors in the selected folios - * @param from - first folio index to apply unfreeze - * @param to - last folio index to apply unfreeze - */ -void QETProject::unfreezeExistentConductorLabel(int from, int to) { - for (int i = from; i <= to; i++) { - diagrams_.at(i)->unfreezeConductors(); + diagrams_.at(i)->freezeConductors(freeze); } } @@ -620,29 +608,17 @@ void QETProject::unfreezeExistentConductorLabel(int from, int to) { * @param from - first folio index to apply freeze * @param to - last folio index to apply freeze */ -void QETProject::freezeNewConductorLabel(int from, int to) { +void QETProject::freezeNewConductorLabel(bool freeze, int from, int to) { for (int i = from; i <= to; i++) { - diagrams_.at(i)->setFreezeNewConductors(true); + diagrams_.at(i)->setFreezeNewConductors(freeze); } } /** - * @brief QETProject::unfreezeNewElementLabel - * Unfreeze New Conductors in the selected folios - * @param from - first folio index to apply unfreeze - * @param to - last folio index to apply unfreeze - */ -void QETProject::unfreezeNewConductorLabel(int from, int to) { - for (int i = from; i <= to; i++) { - diagrams_.at(i)->setFreezeNewConductors(false); - } -} - -/** - * @brief QETProject::freezeNewConductors + * @brief QETProject::isFreezeNewConductors * @return freeze new conductors Project Wide status */ -bool QETProject::freezeNewConductors() { +bool QETProject::isFreezeNewConductors() { return m_freeze_new_conductors; } @@ -682,7 +658,7 @@ void QETProject::freezeNewElementLabel(bool freeze, int from, int to) { * @brief QETProject::freezeNewElements * @return freeze new elements Project Wide status */ -bool QETProject::freezeNewElements() { +bool QETProject::isFreezeNewElements() { return m_freeze_new_elements; } diff --git a/sources/qetproject.h b/sources/qetproject.h index e298240d7..8a9e1ca4e 100644 --- a/sources/qetproject.h +++ b/sources/qetproject.h @@ -131,15 +131,13 @@ class QETProject : public QObject //Element void freezeExistentElementLabel(bool freeze, int from, int to); void freezeNewElementLabel(bool freeze, int from, int to); - bool freezeNewElements(); + bool isFreezeNewElements(); void setFreezeNewElements(bool); //Conductor - void freezeExistentConductorLabel(int,int); - void unfreezeExistentConductorLabel(int,int); - void freezeNewConductorLabel(int,int); - void unfreezeNewConductorLabel(int,int); - bool freezeNewConductors(); + void freezeExistentConductorLabel(bool freeze, int from, int to); + void freezeNewConductorLabel(bool freeze, int from, int to); + bool isFreezeNewConductors(); void setFreezeNewConductors(bool); bool autoConductor () const;