diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 0c3d1745a..599416320 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -60,7 +60,8 @@ Diagram::Diagram(QETProject *project) : draw_terminals_ (true), draw_colored_conductors_ (true), m_event_interface (nullptr), - m_freeze_new_elements_ (false) + m_freeze_new_elements_ (false), + m_freeze_new_conductors_ (false) { setProject(project); qgi_manager_ = new QGIManager(this); @@ -478,6 +479,9 @@ QDomDocument Diagram::toXml(bool whole_content) { //Default New Element racine.setAttribute("freezeNewElement", m_freeze_new_elements_ ? "true" : "false"); + //Default New Conductor + racine.setAttribute("freezeNewConductor", m_freeze_new_conductors_ ? "true" : "false"); + //Element Folio Sequential Variables if (!m_elmt_unitfolio_max.isEmpty() || !m_elmt_tenfolio_max.isEmpty() || !m_elmt_hundredfolio_max.isEmpty()) { QDomElement elmtfoliosequential = document.createElement("elementautonumfoliosequentials"); @@ -724,6 +728,9 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf // Load Freeze New Element m_freeze_new_elements_ = root.attribute("freezeNewElement").toInt(); + // Load Freeze New Conductor + m_freeze_new_conductors_ = root.attribute("freezeNewConductor").toInt(); + //Load Element Folio Sequential folioSequentialsFromXml(root, &m_elmt_unitfolio_max, "elementunitfolioseq","sequf_","unitfolioseq", "elementautonumfoliosequentials"); folioSequentialsFromXml(root, &m_elmt_tenfolio_max, "elementtenfolioseq","seqtf_", "tenfolioseq", "elementautonumfoliosequentials"); @@ -861,6 +868,10 @@ 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; @@ -1361,6 +1372,19 @@ QList Diagram::elements() const { return (element_list); } +/** + * @brief Diagram::conductors + * Return the list containing all conductors + */ +QList Diagram::conductors() const { + QList cnd_list; + foreach (QGraphicsItem *qgi, items()) { + if (Conductor *cnd = qgraphicsitem_cast(qgi)) + cnd_list <freezeLabel(); + } +} + +/** + * @brief Diagram::unfreezeConductors + * Unfreeze every existent conductor label. + */ +void Diagram::unfreezeConductors() { + foreach (Conductor *cnd, conductors()) { + cnd->unfreezeLabel(); + } +} + +/** + * @brief Diagram::setfreezeNewConductors + * Set new conductor label to be frozen. + */ +void Diagram::setFreezeNewConductors(bool b) { + m_freeze_new_conductors_ = b; +} + +/** + * @brief Diagram::freezeNewConductors + * @return current freeze new conductor status . + */ +bool Diagram::freezeNewConductors() { + return m_freeze_new_conductors_; +} + /** * @brief Diagram::adjustSceneRect * Recalcul and adjust the size of the scene diff --git a/sources/diagram.h b/sources/diagram.h index 98d52f6a4..4e156e073 100644 --- a/sources/diagram.h +++ b/sources/diagram.h @@ -113,6 +113,7 @@ class Diagram : public QGraphicsScene DiagramEventInterface *m_event_interface; bool m_freeze_new_elements_; + bool m_freeze_new_conductors_; // METHODS protected: @@ -194,6 +195,7 @@ class Diagram : public QGraphicsScene QList customElements() const; QList elements() const; + QList conductors() const; QSet selectedTexts() const; QSet selectedConductorTexts() const; QSet selectedElementTexts() const; @@ -216,10 +218,15 @@ class Diagram : public QGraphicsScene //methods related to element label Update Policy void freezeElements(); void unfreezeElements(); - void freezeNew(); - void unfreezeNew(); + void setFreezeNewElements(bool); bool freezeNewElements(); + //methods related to conductor label Update Policy + void freezeConductors(); + void unfreezeConductors(); + void setFreezeNewConductors(bool); + bool freezeNewConductors(); + //methods related to insertion and loading of folio sequential void insertFolioSeqHash (QHash *hash, QString title, QString seq, NumerotationContext *nc); void loadFolioSeqHash (QHash *hash, QString title, QString seq, NumerotationContext *nc); diff --git a/sources/diagramevent/diagrameventaddelement.cpp b/sources/diagramevent/diagrameventaddelement.cpp index 387a9b7dc..28ed1b855 100644 --- a/sources/diagramevent/diagrameventaddelement.cpp +++ b/sources/diagramevent/diagrameventaddelement.cpp @@ -232,6 +232,8 @@ 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; }; m_diagram -> undoStack().push(undo_object); element->setSequential(); diff --git a/sources/projectconfigpages.cpp b/sources/projectconfigpages.cpp index 42636e25e..762f055c5 100644 --- a/sources/projectconfigpages.cpp +++ b/sources/projectconfigpages.cpp @@ -598,18 +598,34 @@ void ProjectAutoNumConfigPage::applyManagement() { to = m_amw->ui->m_to_folios_cb->itemData(m_amw->ui->m_to_folios_cb->currentIndex()).toInt(); } - //Conductor Autonumbering Status + //Conductor Autonumbering Update Policy + //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()->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()->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()->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()->setFreezeNewConductors(true); } //Element Autonumbering Update Policy diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index 3ca3bfc76..c78eb6350 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -48,6 +48,7 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : terminal1(p1), terminal2(p2), setSeq(true), + freeze_label(false), bMouseOver(false), m_handler(10), text_item(0), @@ -826,6 +827,8 @@ bool Conductor::fromXml(QDomElement &e) { loadSequential(&e,"seqh_",&seq_hundred); loadSequential(&e,"seqhf_",&seq_hundredfolio); + m_frozen_label = e.attribute("frozenlabel"); + setProperties(pr); return return_; @@ -905,6 +908,8 @@ QDomElement Conductor::toXml(QDomDocument &d, QHash &table_adr_ for (int i = 0; i < seq_hundredfolio.size(); i++) { e.setAttribute("seqhf_" + QString::number(i+1),seq_hundredfolio.at(i)); } + + if (m_frozen_label != "") e.setAttribute("frozenlabel", m_frozen_label); // Export the properties and text properties_. toXml(e); @@ -1466,6 +1471,12 @@ void Conductor::setProperties(const ConductorProperties &properties) } setText(properties_.text); text_item -> setFontSize(properties_.text_size); + if (terminal1->diagram()->item_paste) + m_frozen_label = ""; + else + m_frozen_label = properties_.text; + if (freeze_label) + freezeLabel(); if (properties_.type != ConductorProperties::Multi) text_item -> setVisible(false); else @@ -1867,3 +1878,23 @@ QList relatedConductors(const Conductor *conductor) { other_conductors_list.removeAll(const_cast (conductor)); return(other_conductors_list); } + +/** + * @brief Conductor::freezeLabel + * Freeze this conductor label + */ +void Conductor::freezeLabel() { + QString freezelabel = this->text_item->toPlainText(); + m_frozen_label = properties_.text; + this->setText(freezelabel); + this->properties_.text = freezelabel; +} + +/** + * @brief Conductor::unfreezeLabel + * Unfreeze this conductor label + */ +void Conductor::unfreezeLabel() { + this->setText(m_frozen_label); + properties_.text = m_frozen_label; +} diff --git a/sources/qetgraphicsitem/conductor.h b/sources/qetgraphicsitem/conductor.h index 1f9f3ce52..6d8e5dad2 100644 --- a/sources/qetgraphicsitem/conductor.h +++ b/sources/qetgraphicsitem/conductor.h @@ -131,6 +131,10 @@ class Conductor : public QObject, public QGraphicsPathItem QStringList seq_hundred; QStringList seq_hundredfolio; bool setSeq; + bool freeze_label; + void freezeLabel(); + void unfreezeLabel(); + QString m_frozen_label; public slots: void displayedTextChanged(); diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 05b83f64c..12a2211ca 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -49,7 +49,8 @@ QETProject::QETProject(int diagrams, QObject *parent) : folioSheetsQuantity (0 ), m_auto_conductor (true ), m_elements_collection (nullptr), - m_freeze_new_elements (false) + m_freeze_new_elements (false), + m_freeze_new_conductors (false) { // 0 a n schema(s) vide(s) int diagrams_count = qMax(0, diagrams); @@ -627,6 +628,70 @@ NumerotationContext QETProject::folioAutoNum (const QString &key) const { else return NumerotationContext(); } +/** + * @brief QETProject::freezeExistentConductorLabel + * Freeze Existent Conductors in the selected folios + * @param from - first folio index to apply freeze + * @param to - last folio index to apply freeze + */ +void QETProject::freezeExistentConductorLabel(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(); + } +} + +/** + * @brief QETProject::freezeNewConductorLabel + * Freeze New Conductors in the selected folios + * @param from - first folio index to apply freeze + * @param to - last folio index to apply freeze + */ +void QETProject::freezeNewConductorLabel(int from, int to) { + for (int i = from; i <= to; i++) { + diagrams_.at(i)->setFreezeNewConductors(true); + } +} + +/** + * @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 + * @return freeze new conductors Project Wide status + */ +bool QETProject::freezeNewConductors() { + return m_freeze_new_conductors; +} + +/** + * @brief QETProject::setfreezeNewConductors + * Set Project Wide freeze new conductors + */ +void QETProject::setFreezeNewConductors(bool set) { + m_freeze_new_conductors = set; +} + /** * @brief QETProject::freezeExistentElementLabel * Freeze Existent Elements in the selected folios @@ -659,7 +724,7 @@ void QETProject::unfreezeExistentElementLabel(int from, int to) { */ void QETProject::freezeNewElementLabel(int from, int to) { for (int i = from; i <= to; i++) { - diagrams_.at(i)->freezeNew(); + diagrams_.at(i)->setFreezeNewElements(true); } } @@ -671,7 +736,7 @@ void QETProject::freezeNewElementLabel(int from, int to) { */ void QETProject::unfreezeNewElementLabel(int from, int to) { for (int i = from; i <= to; i++) { - diagrams_.at(i)->unfreezeNew(); + diagrams_.at(i)->setFreezeNewElements(false); } } @@ -1410,6 +1475,7 @@ void QETProject::readDefaultPropertiesXml(QDomDocument &xml_project) { m_current_conductor_autonum = conds_autonums.attribute("current_autonum"); m_current_conductor_formula = conds_autonums.attribute("current_formula"); + m_freeze_new_conductors = conds_autonums.attribute("freeze_new_conductors") == "true"; foreach (QDomElement elmt, QET::findInDomElement(conds_autonums, "conductor_autonum")) { NumerotationContext nc; @@ -1431,7 +1497,7 @@ void QETProject::readDefaultPropertiesXml(QDomDocument &xml_project) { m_current_element_autonum = element_autonums.attribute("current_autonum"); m_current_element_formula = element_autonums.attribute("current_formula"); - m_freeze_new_elements = element_autonums.attribute("freeze_new_elements").toInt(); + m_freeze_new_elements = element_autonums.attribute("freeze_new_elements") == "true"; foreach (QDomElement elmt, QET::findInDomElement(element_autonums, "element_autonum")) { NumerotationContext nc; @@ -1496,6 +1562,7 @@ void QETProject::writeDefaultPropertiesXml(QDomElement &xml_element) { QDomElement conductor_autonums = xml_document.createElement("conductors_autonums"); conductor_autonums.setAttribute("current_autonum", m_current_conductor_autonum); conductor_autonums.setAttribute("current_formula", m_current_conductor_formula); + conductor_autonums.setAttribute("freeze_new_conductors", m_freeze_new_conductors ? "true" : "false"); foreach (QString key, conductorAutoNum().keys()) { QDomElement conductor_autonum = conductorAutoNum(key).toXml(xml_document, "conductor_autonum"); if (key != "" && conductorAutoNumFormula(key) != "") { diff --git a/sources/qetproject.h b/sources/qetproject.h index b684218cf..86e47f7db 100644 --- a/sources/qetproject.h +++ b/sources/qetproject.h @@ -133,6 +133,7 @@ class QETProject : public QObject QString elementAutoNumCurrentFormula() const; QString elementCurrentAutoNum() const; + //Element void freezeExistentElementLabel(int,int); void freezeNewElementLabel(int,int); void unfreezeExistentElementLabel(int,int); @@ -140,6 +141,14 @@ class QETProject : public QObject bool freezeNewElements(); void setFreezeNewElements(bool); + //Conductor + void freezeExistentConductorLabel(int,int); + void unfreezeExistentConductorLabel(int,int); + void freezeNewConductorLabel(int,int); + void unfreezeNewConductorLabel(int,int); + bool freezeNewConductors(); + void setFreezeNewConductors(bool); + bool autoConductor () const; bool autoElement () const; bool autoFolio () const; @@ -268,6 +277,7 @@ class QETProject : public QObject bool m_auto_conductor; XmlElementCollection *m_elements_collection; bool m_freeze_new_elements; + bool m_freeze_new_conductors; }; Q_DECLARE_METATYPE(QETProject *) #endif diff --git a/sources/ui/autonumberingmanagementw.cpp b/sources/ui/autonumberingmanagementw.cpp index a410ffb2a..11d0bbd2d 100644 --- a/sources/ui/autonumberingmanagementw.cpp +++ b/sources/ui/autonumberingmanagementw.cpp @@ -37,7 +37,6 @@ AutoNumberingManagementW::AutoNumberingManagementW(QETProject *project, QWidget ui->setupUi(this); ui->m_apply_locations_rb->setHidden(true); ui->m_selected_locations_le->setHidden(true); - ui->conductorWidget->setHidden(true); ui->folioWidget->setHidden(true); ui->m_selected_folios_widget->setDisabled(true); ui->m_selected_folios_le->setDisabled(true); diff --git a/sources/ui/autonumberingmanagementw.ui b/sources/ui/autonumberingmanagementw.ui index 8d3afa1b4..1a59d4000 100644 --- a/sources/ui/autonumberingmanagementw.ui +++ b/sources/ui/autonumberingmanagementw.ui @@ -76,7 +76,7 @@ 0 0 630 - 498 + 495 @@ -254,6 +254,16 @@ + + + + Both + + + true + + + @@ -267,17 +277,7 @@ - Existent and New - - - true - - - - - - - Both + Only Existent true