diff --git a/sources/autoNum/assignvariables.cpp b/sources/autoNum/assignvariables.cpp index 2cdafebf0..f1161cc41 100644 --- a/sources/autoNum/assignvariables.cpp +++ b/sources/autoNum/assignvariables.cpp @@ -20,6 +20,7 @@ #include "element.h" #include "diagramposition.h" #include +#include namespace autonum { @@ -234,4 +235,81 @@ namespace autonum } } + /** + * @brief NumerotationContextToFormula + * @param nc + * @return the numerotation context, converted to formula + */ + QString NumerotationContextToFormula(const NumerotationContext &nc) + { + QString type; + QString value; + QString formula; + int count_unit = 0; + int count_unitf = 0; + int count_ten = 0; + int count_tenf = 0; + int count_hundred = 0; + int count_hundredf = 0; + + for(int i=0 ; i &hash, QString autoNumName); void setSequential(QString label, autonum::sequenceStruct &seqStruct, NumerotationContext &context, Diagram *diagram, QString hashKey); + QString NumerotationContextToFormula(const NumerotationContext &nc); } #endif // ASSIGNVARIABLES_H diff --git a/sources/autoNum/numerotationcontext.cpp b/sources/autoNum/numerotationcontext.cpp index 9b6116825..b19190082 100644 --- a/sources/autoNum/numerotationcontext.cpp +++ b/sources/autoNum/numerotationcontext.cpp @@ -99,7 +99,7 @@ QStringList NumerotationContext::itemAt(const int i) const { * @return all type use to numerotation */ QString NumerotationContext::validRegExpNum () const { - return ("unit|unitfolio|ten|hundred|string|idfolio|folio|machine|locmach|elementline|elementcolumn|elementprefix"); + return ("unit|unitfolio|ten|tenfolio|hundred|hundredfolio|string|idfolio|folio|machine|locmach|elementline|elementcolumn|elementprefix"); } /** @@ -107,7 +107,7 @@ QString NumerotationContext::validRegExpNum () const { * @return all type represents a number */ QString NumerotationContext::validRegExpNumber() const { - return ("unit|unitfolio|ten|hundred"); + return ("unit|unitfolio|ten|tenfolio|hundred|hundredfolio"); } /** diff --git a/sources/autoNum/ui/selectautonumw.cpp b/sources/autoNum/ui/selectautonumw.cpp index 3b4aa2aef..c7732a1f9 100644 --- a/sources/autoNum/ui/selectautonumw.cpp +++ b/sources/autoNum/ui/selectautonumw.cpp @@ -22,7 +22,7 @@ #include "numerotationcontextcommands.h" #include "formulaautonumberingw.h" #include "ui_formulaautonumberingw.h" -#include "qdebug.h" +#include "assignvariables.h" /** * Constructor @@ -244,72 +244,18 @@ void SelectAutonumW::applyEnable(bool b) { * @brief SelectAutonumW::contextToFormula * Apply formula to ElementAutonumbering Widget */ -void SelectAutonumW::contextToFormula() { - FormulaAutonumberingW* m_faw; +void SelectAutonumW::contextToFormula() +{ + FormulaAutonumberingW* m_faw = nullptr; if (this->parentWidget() -> objectName()=="ElementTab") m_faw = m_feaw; - if (this->parentWidget()->objectName()=="ConductorTab") + else if (this->parentWidget()->objectName()=="ConductorTab") m_faw = m_fcaw; - m_faw->clearContext(); - int count_unit = 0; - int count_unitf = 0; - int count_ten = 0; - int count_tenf = 0; - int count_hundred = 0; - int count_hundredf = 0; - foreach (NumPartEditorW *npe, num_part_list_) { - if (npe->isValid()) { - if (npe->type_ == NumPartEditorW::idfolio) { - m_faw->setContext("%id"); - } - else if (npe->type_ == NumPartEditorW::folio) { - m_faw->setContext("%F"); - } - else if (npe->type_ == NumPartEditorW::machine) { - m_faw->setContext("%M"); - } - else if (npe->type_ == NumPartEditorW::locmach) { - m_faw->setContext("%LM"); - } - - - else if (npe->type_ == NumPartEditorW::elementcolumn) { - m_faw->setContext("%c"); - } - else if (npe->type_ == NumPartEditorW::elementline) { - m_faw->setContext("%l"); - } - else if (npe->type_ == NumPartEditorW::elementprefix) { - m_faw->setContext("%prefix"); - } - else if (npe->type_ == NumPartEditorW::string) { - m_faw->setContext(npe->toNumContext().itemAt(0).at(1)); - } - else if (npe->type_ == NumPartEditorW::unit) { - count_unit++; - m_faw->setContext("%sequ_"+QString::number(count_unit)); - } - else if (npe->type_ == NumPartEditorW::unitfolio) { - count_unitf++; - m_faw->setContext("%sequf_"+QString::number(count_unitf)); - } - else if (npe->type_ == NumPartEditorW::ten) { - count_ten++; - m_faw->setContext("%seqt_"+QString::number(count_ten)); - } - else if (npe->type_ == NumPartEditorW::tenfolio) { - count_tenf++; - m_faw->setContext("%seqtf_"+QString::number(count_tenf)); - } - else if (npe->type_ == NumPartEditorW::hundred) { - count_hundred++; - m_faw->setContext("%seqh_"+QString::number(count_hundred)); - } - else if (npe->type_ == NumPartEditorW::hundredfolio) { - count_hundredf++; - m_faw->setContext("%seqhf_"+QString::number(count_hundredf)); - } - } + + if (m_faw) + { + m_faw->clearContext(); + m_faw->setContext(autonum::NumerotationContextToFormula(toNumContext())); } } diff --git a/sources/diagramcontext.h b/sources/diagramcontext.h index 88f0b81af..e69a63120 100644 --- a/sources/diagramcontext.h +++ b/sources/diagramcontext.h @@ -32,6 +32,7 @@ /** * Key for element : * label -> label or identification of element + * formula -> formula used to create the label (formula is make with variable) * designation -> exhaustive comment used to explain what the element does. * comment -> a little comment wich can be displayed in the folio * manufacturer -> the manufacturer of the element diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index bbc4fda21..caa3eccd1 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -282,9 +282,11 @@ ElementsCollectionCache *QETApp::collectionCache() { * @brief QETApp::elementInfoKeys * @return all available key for describe an element */ -QStringList QETApp::elementInfoKeys() { +QStringList QETApp::elementInfoKeys() +{ QStringList info_list; - info_list << "label" + info_list << "formula" + << "label" << "comment" << "designation" << "manufacturer" @@ -304,8 +306,10 @@ QStringList QETApp::elementInfoKeys() { * @param info the key to be translated * @return */ -QString QETApp::elementTranslatedInfoKey(QString &info) { - if (info == "label") return tr("Label"); +QString QETApp::elementTranslatedInfoKey(QString &info) +{ + if (info == "formula") return tr("formule du label"); + else if (info == "label") return tr("Label"); else if (info == "comment") return tr("Commentaire"); else if (info == "designation") return tr("Désignation"); else if (info == "manufacturer") return tr("Fabricant"); diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 9a9f82fbb..a0f538108 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -437,8 +437,18 @@ bool Element::fromXml(QDomElement &e, QHash &table_id_adr, bool loadSequential(&e,"seqh_",&m_autoNum_seq.hundred); loadSequential(&e,"seqhf_",&m_autoNum_seq.hundred_folio); - //load informations + //load informations m_element_informations.fromXml(e.firstChildElement("elementInformations"), "elementInformation"); + /** + * Since the commit 4791, the value used as "label" and "formula" is stored in differents keys (instead of the same key, "label" in previous version), + * so, if "label" contain "%" (Use variable value), and "formula" does not exist, + * this mean the label was made before commit 4791 (0.51 dev). So we swap the value stored in "label" to "formula" as expected. + * @TODO remove this code at version 0.7 or more (probably useless). + */ + if (m_element_informations["label"].toString().contains("%") && m_element_informations["formula"].toString().isNull()) + { + m_element_informations.addValue("formula", m_element_informations["label"]); + } //Position and selection. //We directly call setPos from QGraphicsObject, because QetGraphicsItem will snap to grid diff --git a/sources/ui/elementinfopartwidget.cpp b/sources/ui/elementinfopartwidget.cpp index 74a6ce88f..8a23ca0f3 100644 --- a/sources/ui/elementinfopartwidget.cpp +++ b/sources/ui/elementinfopartwidget.cpp @@ -99,3 +99,23 @@ void ElementInfoPartWidget::setHideShow(const bool &hide) { void ElementInfoPartWidget::setFocusTolineEdit() { ui->line_edit->setFocus(); } + +/** + * @brief ElementInfoPartWidget::setEnabled + * enable the line edit + * @param e + */ +void ElementInfoPartWidget::setEnabled(bool e) +{ + ui->line_edit->setEnabled(e); +} + +/** + * @brief ElementInfoPartWidget::setDisabled + * disable the line edit + * @param d + */ +void ElementInfoPartWidget::setDisabled(bool d) +{ + ui->line_edit->setDisabled(d); +} diff --git a/sources/ui/elementinfopartwidget.h b/sources/ui/elementinfopartwidget.h index 3ebe19276..9a31f717e 100644 --- a/sources/ui/elementinfopartwidget.h +++ b/sources/ui/elementinfopartwidget.h @@ -40,6 +40,8 @@ class ElementInfoPartWidget : public QWidget void setShow (const bool &); void setHideShow (const bool &); void setFocusTolineEdit(); + void setEnabled(bool e); + void setDisabled(bool d); signals: void textEdited (const QString & text); diff --git a/sources/ui/elementinfowidget.cpp b/sources/ui/elementinfowidget.cpp index a9590a781..76520fa14 100644 --- a/sources/ui/elementinfowidget.cpp +++ b/sources/ui/elementinfowidget.cpp @@ -75,7 +75,20 @@ void ElementInfoWidget::setElement(Element *element) void ElementInfoWidget::apply() { if (QUndoCommand *undo = associatedUndo()) + { m_element -> diagram() -> undoStack().push(undo); + + ElementInfoPartWidget *f = infoPartWidgetForKey("formula"); + ElementInfoPartWidget *l = infoPartWidgetForKey("label"); + + if (f && l) + { + if (f->text().isEmpty()) + l->setEnabled(true); + else + l->setDisabled(true); + } + } } /** @@ -176,6 +189,22 @@ void ElementInfoWidget::buildInterface() ui->scroll_vlayout->addStretch(); } +/** + * @brief ElementInfoWidget::infoPartWidgetForKey + * @param key + * @return the ElementInfoPartWidget with key @key, if not found return nullptr; + */ +ElementInfoPartWidget *ElementInfoWidget::infoPartWidgetForKey(const QString &key) const +{ + foreach (ElementInfoPartWidget *eipw, m_eipw_list) + { + if (eipw->key() == key) + return eipw; + } + + return nullptr; +} + /** * @brief ElementInfoWidget::updateUi * fill information fetch in m_element_info to the @@ -203,6 +232,17 @@ void ElementInfoWidget::updateUi() eipw->setHideShow(true); } + ElementInfoPartWidget *f = infoPartWidgetForKey("formula"); + ElementInfoPartWidget *l = infoPartWidgetForKey("label"); + + if (f && l) + { + if (f->text().isEmpty()) + l->setEnabled(true); + else + l->setDisabled(true); + } + if (m_live_edit) enableLiveEdit(); } diff --git a/sources/ui/elementinfowidget.h b/sources/ui/elementinfowidget.h index e3f41bb49..e178f5ab8 100644 --- a/sources/ui/elementinfowidget.h +++ b/sources/ui/elementinfowidget.h @@ -60,6 +60,7 @@ class ElementInfoWidget : public AbstractElementPropertiesEditorWidget private: void buildInterface(); + ElementInfoPartWidget *infoPartWidgetForKey(const QString &key) const; private slots: void firstActivated();