From 7ab0115c6211cc526251d280871eb8204cac4486 Mon Sep 17 00:00:00 2001 From: blacksun Date: Tue, 6 Dec 2016 19:49:18 +0000 Subject: [PATCH] Conductor : formula and text is now two different things. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4799 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- sources/autoNum/assignvariables.cpp | 1 - .../autoNum/ui/autonumberingdockwidget.cpp | 9 +- sources/conductorautonumerotation.cpp | 64 +++++--- sources/conductorautonumerotation.h | 6 +- sources/conductorproperties.cpp | 15 +- sources/conductorproperties.h | 3 +- sources/diagram.cpp | 13 +- .../diagramevent/diagrameventaddelement.cpp | 3 - sources/elementsmover.cpp | 1 - sources/projectconfigpages.cpp | 18 +-- sources/qetgraphicsitem/conductor.cpp | 112 +++++++------- sources/qetgraphicsitem/conductor.h | 140 +++++++++--------- sources/qetgraphicsitem/terminal.cpp | 8 +- sources/qetproject.cpp | 47 +----- sources/qetproject.h | 6 - sources/ui/conductorpropertieswidget.cpp | 3 + 16 files changed, 213 insertions(+), 236 deletions(-) diff --git a/sources/autoNum/assignvariables.cpp b/sources/autoNum/assignvariables.cpp index 6122aa3fe..05b3d492b 100644 --- a/sources/autoNum/assignvariables.cpp +++ b/sources/autoNum/assignvariables.cpp @@ -334,7 +334,6 @@ namespace autonum //Add location name to path array while((current_location.parent() != current_location) && (current_location.parent().fileName() != "import")) { - qDebug() << "i = " << i << " " << current_location.fileName(); i++; path[i]=current_location.fileName(); current_location = current_location.parent(); diff --git a/sources/autoNum/ui/autonumberingdockwidget.cpp b/sources/autoNum/ui/autonumberingdockwidget.cpp index 906318fe4..d6af711b1 100644 --- a/sources/autoNum/ui/autonumberingdockwidget.cpp +++ b/sources/autoNum/ui/autonumberingdockwidget.cpp @@ -191,15 +191,8 @@ void AutoNumberingDockWidget::conductorAutoNumChanged() { void AutoNumberingDockWidget::on_m_conductor_cb_activated(int) { QString current_autonum = ui->m_conductor_cb->currentText(); - QString current_formula = m_project->conductorAutoNumFormula(current_autonum); - - if (!current_autonum.isEmpty()) { - m_project->setConductorAutoNumCurrentFormula(current_formula, current_autonum); - } - else { - m_project->setConductorAutoNumCurrentFormula("",""); - } + m_project->setCurrentConductorAutoNum(current_autonum); m_project_view->currentDiagram()->diagram()->setConductorsAutonumName(current_autonum); m_project_view->currentDiagram()->diagram()->loadCndFolioSeq(); } diff --git a/sources/conductorautonumerotation.cpp b/sources/conductorautonumerotation.cpp index f3c880d92..de0e65062 100644 --- a/sources/conductorautonumerotation.cpp +++ b/sources/conductorautonumerotation.cpp @@ -23,6 +23,7 @@ #include "qet.h" #include "QPropertyUndoCommand/qpropertyundocommand.h" #include "potentialselectordialog.h" +#include "assignvariables.h" /** * @brief ConductorAutoNumerotation::ConductorAutoNumerotation @@ -36,8 +37,8 @@ */ ConductorAutoNumerotation::ConductorAutoNumerotation(Conductor *conductor, Diagram *diagram, QUndoCommand *parent_undo) : m_diagram (diagram), - conductor_ (conductor), - conductor_list (conductor -> relatedPotentialConductors()), + m_conductor (conductor), + conductor_list (conductor -> relatedPotentialConductors().toList()), m_parent_undo (parent_undo) {} @@ -46,9 +47,9 @@ ConductorAutoNumerotation::ConductorAutoNumerotation(Conductor *conductor, Diagr * execute the automatic numerotation */ void ConductorAutoNumerotation::numerate() { - if (!conductor_) return; + if (!m_conductor) return; if (conductor_list.size() >= 1 ) numeratePotential(); - else if (conductor_ -> properties().type == ConductorProperties::Multi) numerateNewConductor(); + else if (m_conductor -> properties().type == ConductorProperties::Multi) numerateNewConductor(); } /** @@ -57,15 +58,15 @@ void ConductorAutoNumerotation::numerate() { */ void ConductorAutoNumerotation::applyText(QString t) { - if (!conductor_) return; + if (!m_conductor) return; QVariant old_value, new_value; - ConductorProperties cp = conductor_ -> properties(); + ConductorProperties cp = m_conductor -> properties(); old_value.setValue(cp); cp.text = t; new_value.setValue(cp); - QPropertyUndoCommand *undo = new QPropertyUndoCommand(conductor_, "properties", old_value, new_value, m_parent_undo); + QPropertyUndoCommand *undo = new QPropertyUndoCommand(m_conductor, "properties", old_value, new_value, m_parent_undo); undo->setText(QObject::tr("Modifier les propriétés d'un conducteur", "undo caption")); if (!conductor_list.isEmpty()) @@ -91,35 +92,58 @@ void ConductorAutoNumerotation::applyText(QString t) */ void ConductorAutoNumerotation::numeratePotential() { - QStringList strl; - foreach (const Conductor *cc, conductor_list) strl<<(cc->text()); + QStringList text_list; + QStringList formula_list; + foreach (const Conductor *cc, conductor_list) + { + ConductorProperties cp = cc->properties(); + text_list << cp.text; + formula_list << cp.m_formula; + } + //the texts is identicals - if (QET::eachStrIsEqual(strl)) + if (QET::eachStrIsEqual(text_list) && QET::eachStrIsEqual(formula_list)) { - ConductorProperties cp = conductor_ -> properties(); - cp.text = strl.at(0); - conductor_ -> setProperties(cp); - conductor_ -> setText(strl.at(0)); + ConductorProperties cp = m_conductor -> properties(); + cp.text = text_list.first(); + cp.m_formula = formula_list.first(); + m_conductor->setProperties(cp); + m_conductor->setOthersSequential(conductor_list.first()); + m_conductor->setText(text_list.first()); } //the texts isn't identicals else { - PotentialSelectorDialog psd(conductor_, m_parent_undo, conductor_->diagramEditor()); + PotentialSelectorDialog psd(m_conductor, m_parent_undo, m_conductor->diagramEditor()); psd.exec(); } } /** * @brief ConductorAutoNumerotation::numerateNewConductor - * create and apply a new numerotation to @conductor_ + * create and apply a new numerotation to @m_conductor */ -void ConductorAutoNumerotation::numerateNewConductor() { - if (!conductor_ || m_diagram->conductorsAutonumName().isEmpty()) return; +void ConductorAutoNumerotation::numerateNewConductor() +{ + if (!m_conductor || m_diagram->conductorsAutonumName().isEmpty()) + return; NumerotationContext context = m_diagram->project()->conductorAutoNum(m_diagram -> conductorsAutonumName()); - if (context.isEmpty()) return; + if (context.isEmpty()) + return; + + QString autoNum_name = m_diagram->project()->conductorCurrentAutoNum(); + QString formula = autonum::numerotationContextToFormula(context); + + ConductorProperties cp = m_conductor -> properties(); + cp.m_formula = formula; + m_conductor->setProperties(cp); + + autonum::setSequential(formula, m_conductor->rSequenceStruct(), context, m_diagram, autoNum_name); NumerotationContextCommands ncc (context, m_diagram); - applyText(m_diagram->project()->conductorAutoNumCurrentFormula()); + m_diagram->project()->addConductorAutoNum(autoNum_name, ncc.next()); + + applyText(autonum::AssignVariables::formulaToLabel(formula, m_conductor->rSequenceStruct(), m_diagram)); } diff --git a/sources/conductorautonumerotation.h b/sources/conductorautonumerotation.h index 2bb3b58aa..4200e7c5c 100644 --- a/sources/conductorautonumerotation.h +++ b/sources/conductorautonumerotation.h @@ -18,7 +18,7 @@ #ifndef CONDUCTORAUTONUMEROTATION_H #define CONDUCTORAUTONUMEROTATION_H -#include +#include class Diagram; class Conductor; @@ -41,8 +41,8 @@ class ConductorAutoNumerotation //attributes Diagram *m_diagram; - Conductor *conductor_; - QSet conductor_list; + Conductor *m_conductor; + QList conductor_list; QUndoCommand *m_parent_undo; }; diff --git a/sources/conductorproperties.cpp b/sources/conductorproperties.cpp index 4a669a242..bc08113e3 100644 --- a/sources/conductorproperties.cpp +++ b/sources/conductorproperties.cpp @@ -254,6 +254,7 @@ void ConductorProperties::toXml(QDomElement &e) const singleLineProperties.toXml(e); e.setAttribute("num", text); + e.setAttribute("formula", m_formula); e.setAttribute("function", m_function); e.setAttribute("tension-protocol", m_tension_protocol); e.setAttribute("numsize", QString::number(text_size)); @@ -293,6 +294,7 @@ void ConductorProperties::fromXml(QDomElement &e) type = Multi; text = e.attribute("num"); + m_formula = e.attribute("formula"); m_function = e.attribute("function"); m_tension_protocol = e.attribute("tension-protocol"); text_size = e.attribute("numsize", QString::number(9)).toInt(); @@ -318,6 +320,7 @@ void ConductorProperties::toSettings(QSettings &settings, const QString &prefix) settings.setValue(prefix + "style", writeStyle()); settings.setValue(prefix + "type", typeToString(type)); settings.setValue(prefix + "text", text); + settings.setValue(prefix + "formula", m_formula); settings.setValue(prefix + "function", m_function); settings.setValue(prefix + "tension-protocol", m_tension_protocol); settings.setValue(prefix + "textsize", QString::number(text_size)); @@ -344,6 +347,7 @@ void ConductorProperties::fromSettings(QSettings &settings, const QString &prefi singleLineProperties.fromSettings(settings, prefix); text = settings.value(prefix + "text", "_").toString(); + m_formula = settings.value(prefix + "formula", "").toString(); m_function = settings.value(prefix + "function", "").toString(); m_tension_protocol = settings.value(prefix + "tension-protocol", "").toString(); text_size = settings.value(prefix + "textsize", "7").toInt(); @@ -391,15 +395,18 @@ ConductorProperties ConductorProperties::defaultProperties() } /** - @param other l'autre ensemble de proprietes avec lequel il faut effectuer la comparaison - @return true si les deux ensembles de proprietes sont identiques, false sinon -*/ -bool ConductorProperties::operator==(const ConductorProperties &other) const{ + * @brief ConductorProperties::operator == + * @param other + * @return true if other == this + */ +bool ConductorProperties::operator==(const ConductorProperties &other) const +{ return( other.type == type &&\ other.color == color &&\ other.style == style &&\ other.text == text &&\ + other.m_formula == m_formula &&\ other.m_function == m_function &&\ other.m_tension_protocol == m_tension_protocol &&\ other.m_show_text == m_show_text &&\ diff --git a/sources/conductorproperties.h b/sources/conductorproperties.h index b2d3011ba..3f66938c6 100644 --- a/sources/conductorproperties.h +++ b/sources/conductorproperties.h @@ -80,7 +80,8 @@ class ConductorProperties QColor color; QString text, m_function, - m_tension_protocol; + m_tension_protocol, + m_formula; int text_size; double cond_size; double verti_rotate_text; diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 69ffaa42b..13813caa7 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -1294,18 +1294,19 @@ void Diagram::loadCndFolioSeq() { //Conductor QString title = project()->conductorCurrentAutoNum(); NumerotationContext nc = project()->conductorAutoNum(title); + QString formula = autonum::numerotationContextToFormula(nc); //Unit Folio if (m_cnd_unitfolio_max.isEmpty() || !m_cnd_unitfolio_max.contains(title)) { //Insert Initial Value - if (project()->conductorAutoNumCurrentFormula().contains("%sequf_")) { + if (formula.contains("%sequf_")) { insertFolioSeqHash(&m_cnd_unitfolio_max,title,"unitfolio",&nc); project()->addConductorAutoNum(title,nc); } } else if (m_cnd_unitfolio_max.contains(title)) { //Load Folio Current Value - if (project()->conductorAutoNumCurrentFormula().contains("%sequf_")) { + if (formula.contains("%sequf_")) { loadFolioSeqHash(&m_cnd_unitfolio_max,title,"unitfolio",&nc); project()->addConductorAutoNum(title,nc); } @@ -1314,14 +1315,14 @@ void Diagram::loadCndFolioSeq() { //Ten Folio if (m_cnd_tenfolio_max.isEmpty() || !m_cnd_tenfolio_max.contains(title)) { //Insert Initial Value - if (project()->conductorAutoNumCurrentFormula().contains("%seqtf_")) { + if (formula.contains("%seqtf_")) { insertFolioSeqHash(&m_cnd_tenfolio_max,title,"tenfolio",&nc); project()->addConductorAutoNum(title,nc); } } else if (m_cnd_tenfolio_max.contains(title)) { //Load Folio Current Value - if (project()->conductorAutoNumCurrentFormula().contains("%seqtf_")) { + if (formula.contains("%seqtf_")) { loadFolioSeqHash(&m_cnd_tenfolio_max,title,"tenfolio",&nc); project()->addConductorAutoNum(title,nc); } @@ -1330,14 +1331,14 @@ void Diagram::loadCndFolioSeq() { //Hundred Folio if (m_cnd_hundredfolio_max.isEmpty() || !m_cnd_hundredfolio_max.contains(title)) { //Insert Initial Value - if (project()->conductorAutoNumCurrentFormula().contains("%seqhf_")) { + if (formula.contains("%seqhf_")) { insertFolioSeqHash(&m_cnd_hundredfolio_max,title,"hundredfolio",&nc); project()->addConductorAutoNum(title,nc); } } else if (m_cnd_hundredfolio_max.contains(title)) { //Load Folio Current Value - if (project()->conductorAutoNumCurrentFormula().contains("%seqhf_")) { + if (formula.contains("%seqhf_")) { loadFolioSeqHash(&m_cnd_hundredfolio_max,title,"hundredfolio",&nc); project()->addConductorAutoNum(title,nc); } diff --git a/sources/diagramevent/diagrameventaddelement.cpp b/sources/diagramevent/diagrameventaddelement.cpp index 215eae3cb..0e9581fef 100644 --- a/sources/diagramevent/diagrameventaddelement.cpp +++ b/sources/diagramevent/diagrameventaddelement.cpp @@ -225,14 +225,11 @@ void DiagramEventAddElement::addElement() QPair pair = element -> AlignedFreeTerminals().takeFirst(); Conductor *conductor = new Conductor(pair.first, pair.second); - conductor -> setProperties(m_diagram -> defaultConductorProperties); - new AddItemCommand(conductor, m_diagram, QPointF(), undo_object); //Autonum the new conductor, the undo command associated for this, have for parent undo_object ConductorAutoNumerotation can (conductor, m_diagram, undo_object); can.numerate(); - conductor->setSeq = true; if (m_diagram->freezeNewConductors() || m_diagram->project()->freezeNewConductors()) { conductor->setFreezeLabel(true); } diff --git a/sources/elementsmover.cpp b/sources/elementsmover.cpp index f658e00fa..74ba2bb78 100644 --- a/sources/elementsmover.cpp +++ b/sources/elementsmover.cpp @@ -181,7 +181,6 @@ void ElementsMover::endMovement() //Autonum the new conductor, the undo command associated for this, have for parent undo_object ConductorAutoNumerotation can (conductor, diagram_, undo_object); can.numerate(); - conductor->setSeq = true; } }; } diff --git a/sources/projectconfigpages.cpp b/sources/projectconfigpages.cpp index 15e3bd85f..6bbeca1e8 100644 --- a/sources/projectconfigpages.cpp +++ b/sources/projectconfigpages.cpp @@ -532,23 +532,23 @@ void ProjectAutoNumConfigPage::removeContextElement() void ProjectAutoNumConfigPage::saveContext_conductor() { // If the text is the default text "Name of new numerotation" save the edited context // With the the name "No name" - if (m_context_cb_conductor-> currentText() == tr("Nom de la nouvelle numérotation")) { + if (m_context_cb_conductor-> currentText() == tr("Nom de la nouvelle numérotation")) + { m_project->addConductorAutoNum (tr("Sans nom"), m_saw_conductor -> toNumContext()); - project()->addConductorAutoNumFormula (tr("Sans nom"), m_saw_conductor->formula()); //add hash - project()->setConductorAutoNumCurrentFormula (m_saw_conductor->formula(),tr("Sans nom")); //add last added conductor formula to current formula + project()->setCurrentConductorAutoNum(tr("Sans nom")); m_context_cb_conductor-> addItem(tr("Sans nom")); } // If the text isn't yet to the autonum of the project, add this new item to the combo box. - else if ( !m_project -> conductorAutoNum().keys().contains( m_context_cb_conductor->currentText())) { + else if ( !m_project -> conductorAutoNum().keys().contains( m_context_cb_conductor->currentText())) + { project()->addConductorAutoNum(m_context_cb_conductor->currentText(), m_saw_conductor->toNumContext()); - project()->addConductorAutoNumFormula (m_context_cb_conductor->currentText(), m_saw_conductor->formula()); //add hash - project()->setConductorAutoNumCurrentFormula (m_saw_conductor->formula(),m_context_cb_conductor->currentText()); //add last added conductor formula to current formula + project()->setCurrentConductorAutoNum(m_context_cb_conductor->currentText()); m_context_cb_conductor-> addItem(m_context_cb_conductor->currentText()); } // Else, the text already exist in the autonum of the project, just update the context - else { - project()->addConductorAutoNumFormula (m_context_cb_conductor->currentText(), m_saw_conductor->formula()); //add hash - project()->setConductorAutoNumCurrentFormula (m_saw_conductor->formula(), m_context_cb_conductor->currentText()); //add last added conductor formula to current formula + else + { + project()->setCurrentConductorAutoNum(m_context_cb_conductor->currentText()); m_project->addConductorAutoNum (m_context_cb_conductor-> currentText(), m_saw_conductor -> toNumContext()); } project()->conductorAutoNumAdded(); diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index 231ed2767..ce9cbe792 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -47,8 +47,7 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : QGraphicsPathItem(0), terminal1(p1), terminal2(p2), - setSeq(true), - bMouseOver(false), + m_mouse_over(false), m_handler(10), text_item(0), segments(NULL), @@ -59,9 +58,9 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : { //Set the default conductor properties. if (p1->diagram()) - properties_ = p1->diagram()->defaultConductorProperties; + m_properties = p1->diagram()->defaultConductorProperties; else if (p2->diagram()) - properties_ = p2->diagram()->defaultConductorProperties; + m_properties = p2->diagram()->defaultConductorProperties; //set Zvalue at 11 to be upper than the DiagramImageItem and element setZValue(11); @@ -98,7 +97,7 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : setAcceptHoverEvents(true); // Add the text field - text_item = new ConductorTextItem(properties_.text, this); + text_item = new ConductorTextItem(m_properties.text, this); connect(text_item, &ConductorTextItem::diagramTextChanged, this, &Conductor::displayedTextChanged); } @@ -439,7 +438,7 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi qp -> setRenderHint(QPainter::Antialiasing, false); // determine la couleur du conducteur - QColor final_conductor_color(properties_.color); + QColor final_conductor_color(m_properties.color); if (must_highlight_ == Normal) { final_conductor_color = QColor::fromRgb(69, 137, 255, 255); } else if (must_highlight_ == Alert) { @@ -455,7 +454,7 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi } //Draw the conductor bigger when is hovered - conductor_pen.setWidthF(bMouseOver? (properties_.cond_size) +4 : (properties_.cond_size)); + conductor_pen.setWidthF(m_mouse_over? (m_properties.cond_size) +4 : (m_properties.cond_size)); // affectation du QPen et de la QBrush modifies au QPainter qp -> setBrush(conductor_brush); @@ -463,7 +462,7 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi // modification du QPen generique pour lui affecter la couleur et le style adequats final_conductor_pen.setColor(final_conductor_color); - final_conductor_pen.setStyle(properties_.style); + final_conductor_pen.setStyle(m_properties.style); final_conductor_pen.setJoinStyle(Qt::SvgMiterJoin); // meilleur rendu des pointilles // utilisation d'un trait "cosmetique" en-dessous d'un certain zoom @@ -475,9 +474,9 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi // dessin du conducteur qp -> drawPath(path()); - if (properties_.type == ConductorProperties::Single) { + if (m_properties.type == ConductorProperties::Single) { qp -> setBrush(final_conductor_color); - properties_.singleLineProperties.draw( + m_properties.singleLineProperties.draw( qp, middleSegment() -> isHorizontal() ? QET::Horizontal : QET::Vertical, QRectF(middleSegment() -> middle() - QPointF(12.0, 12.0), QSizeF(24.0, 24.0)) @@ -633,7 +632,7 @@ void Conductor::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) */ void Conductor::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); - bMouseOver = true; + m_mouse_over = true; update(); } @@ -645,7 +644,7 @@ void Conductor::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { void Conductor::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); update(); - bMouseOver = false; + m_mouse_over = false; } /** @@ -719,7 +718,7 @@ QRectF Conductor::boundingRect() const QPainterPath Conductor::shape() const { QPainterPathStroker pps; - pps.setWidth(bMouseOver? 5 : 1); + pps.setWidth(m_mouse_over? 5 : 1); pps.setJoinStyle(conductor_pen.joinStyle()); QPainterPath shape_(pps.createStroke(path())); @@ -850,14 +849,15 @@ bool Conductor::fromXml(QDomElement &e) { @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 +void Conductor::loadSequential(QDomElement* e, QString seq, QStringList* list) +{ + //Load Sequential Values int i = 0; - while (!e->attribute(seq + QString::number(i+1)).isEmpty()) { + while (!e->attribute(seq + QString::number(i+1)).isEmpty()) + { list->append(e->attribute(seq + QString::number(i+1))); i++; } - setSeq = false; } /** @@ -922,7 +922,7 @@ QDomElement Conductor::toXml(QDomDocument &d, QHash &table_adr_ if (m_frozen_label != "") e.setAttribute("frozenlabel", m_frozen_label); // Export the properties and text - properties_. toXml(e); + m_properties. toXml(e); text_item -> toXml(e); return(e); @@ -1144,7 +1144,7 @@ QPointF Conductor::posForText(Qt::Orientations &flag) { * If text was moved by user, this function do nothing, except check if text is near conductor. */ void Conductor::calculateTextItemPosition() { - if (!text_item || !diagram() || properties_.type != ConductorProperties::Multi) return; + if (!text_item || !diagram() || m_properties.type != ConductorProperties::Multi) return; if (diagram() -> defaultConductorProperties.m_one_text_per_folio == true && relatedPotentialConductors(false).size() > 0) { @@ -1181,8 +1181,8 @@ void Conductor::calculateTextItemPosition() { QPointF text_pos = posForText(rotation); if (!text_item -> wasRotateByUser()) { - rotation == Qt::Vertical ? text_item -> setRotationAngle(properties_.verti_rotate_text): - text_item -> setRotationAngle(properties_.horiz_rotate_text); + rotation == Qt::Vertical ? text_item -> setRotationAngle(m_properties.verti_rotate_text): + text_item -> setRotationAngle(m_properties.horiz_rotate_text); } //Adjust the position of text if his rotation @@ -1292,23 +1292,24 @@ void Conductor::setOthersSequential(Conductor *other) { void Conductor::setText(const QString &t) { text_item->setPlainText(t); - if (setSeq && diagram()) - { - QString conductor_currentAutoNum = diagram()->project()->conductorCurrentAutoNum(); - NumerotationContext nc = diagram()->project()->conductorAutoNum(conductor_currentAutoNum); +// text_item->setPlainText(t); +// if (setSeq && diagram()) +// { +// QString conductor_currentAutoNum = diagram()->project()->conductorCurrentAutoNum(); +// NumerotationContext nc = diagram()->project()->conductorAutoNum(conductor_currentAutoNum); - autonum::setSequential(text(), m_autoNum_seq, nc, diagram(), conductor_currentAutoNum); +// autonum::setSequential(text(), m_autoNum_seq, nc, diagram(), conductor_currentAutoNum); - NumerotationContextCommands ncc (nc); - diagram()->project()->addConductorAutoNum(conductor_currentAutoNum, ncc.next()); +// NumerotationContextCommands ncc (nc); +// diagram()->project()->addConductorAutoNum(conductor_currentAutoNum, ncc.next()); - setSeq = false; - } - if (diagram()) - { - QString label = autonum::AssignVariables::formulaToLabel(t, m_autoNum_seq, diagram()); - text_item -> setPlainText(label); - } +// setSeq = false; +// } +// if (diagram()) +// { +// QString label = autonum::AssignVariables::formulaToLabel(t, m_autoNum_seq, diagram()); +// text_item -> setPlainText(label); +// } } /** @@ -1329,35 +1330,35 @@ void Conductor::refreshText() { */ void Conductor::setProperties(const ConductorProperties &properties) { - if (properties_ == properties) return; + if (m_properties == properties) return; - properties_ = properties; + m_properties = properties; foreach(Conductor *other_conductor, relatedPotentialConductors()) { ConductorProperties other_properties = other_conductor->properties(); - other_properties.text = properties_.text; - other_properties.color = properties_.color; - other_properties.cond_size = properties_.cond_size; - other_properties.m_function = properties_.m_function; - other_properties.m_tension_protocol = properties_.m_tension_protocol; + other_properties.text = m_properties.text; + other_properties.color = m_properties.color; + other_properties.cond_size = m_properties.cond_size; + other_properties.m_function = m_properties.m_function; + other_properties.m_tension_protocol = m_properties.m_tension_protocol; other_conductor->setProperties(other_properties); } - setText(properties_.text); - text_item -> setFontSize(properties_.text_size); + 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 = properties_.text; + m_frozen_label = m_properties.text; } setFreezeLabel(m_freeze_label); - if (properties_.type != ConductorProperties::Multi) + if (m_properties.type != ConductorProperties::Multi) text_item -> setVisible(false); else - text_item -> setVisible(properties_.m_show_text); + text_item -> setVisible(m_properties.m_show_text); calculateTextItemPosition(); update(); @@ -1368,8 +1369,9 @@ void Conductor::setProperties(const ConductorProperties &properties) * @brief Conductor::properties * @return the properties of this Conductor */ -ConductorProperties Conductor::properties() const { - return(properties_); +ConductorProperties Conductor::properties() const +{ + return(m_properties); } /** @@ -1394,11 +1396,11 @@ void Conductor::setHighlighted(Conductor::Highlight hl) { */ void Conductor::displayedTextChanged() { - if ((text_item->toPlainText() == autonum::AssignVariables::formulaToLabel(properties_.text, m_autoNum_seq, diagram())) || !diagram()) return; + if ((text_item->toPlainText() == autonum::AssignVariables::formulaToLabel(m_properties.text, m_autoNum_seq, diagram())) || !diagram()) return; QVariant old_value, new_value; - old_value.setValue(properties_); - ConductorProperties new_properties(properties_); + old_value.setValue(m_properties); + ConductorProperties new_properties(m_properties); new_properties.text = text_item -> toPlainText(); new_value.setValue(new_properties); @@ -1767,14 +1769,14 @@ void Conductor::setFreezeLabel(bool freeze) { if (m_freeze_label) { QString freezelabel = this->text_item->toPlainText(); - m_frozen_label = properties_.text; + m_frozen_label = m_properties.text; this->setText(freezelabel); - this->properties_.text = freezelabel; + this->m_properties.text = freezelabel; } else { if (m_frozen_label.isEmpty()) return; this->setText(m_frozen_label); - properties_.text = m_frozen_label; + m_properties.text = m_frozen_label; } } diff --git a/sources/qetgraphicsitem/conductor.h b/sources/qetgraphicsitem/conductor.h index 6ea5a43ec..5c6f9cc58 100644 --- a/sources/qetgraphicsitem/conductor.h +++ b/sources/qetgraphicsitem/conductor.h @@ -49,7 +49,6 @@ class Conductor : public QObject, public QGraphicsPathItem signals: void propertiesChange(); - // constructors, destructor public: Conductor(Terminal *, Terminal *); virtual ~Conductor(); @@ -59,44 +58,41 @@ class Conductor : public QObject, public QGraphicsPathItem private: Conductor(const Conductor &); - // attributes public: - enum { Type = UserType + 1001 }; - enum Highlight { None, Normal, Alert }; + enum { Type = UserType + 1001 }; + enum Highlight { None, Normal, Alert }; + + /// First terminal the wire is attached to + Terminal *terminal1; + /// Second terminal the wire is attached to + Terminal *terminal2; - /// First terminal the wire is attached to - Terminal *terminal1; - /// Second terminal the wire is attached to - Terminal *terminal2; - - // methods public: - /** - Enable the use of qgraphicsitem_cast to safely cast a QGraphicsItem into a - Conductor. - @return the QGraphicsItem type - */ - virtual int type() const { return Type; } - Diagram *diagram() const; - ConductorTextItem *textItem() const; - void updatePath(const QRectF & = QRectF()); + /** + * Enable the use of qgraphicsitem_cast to safely cast a QGraphicsItem into a conductor. + * @return the QGraphicsItem type + */ + virtual int type() const { return Type; } + Diagram *diagram() const; + ConductorTextItem *textItem() const; + void updatePath(const QRectF & = QRectF()); - //This method do nothing, it's only made to be used with Q_PROPERTY - //It's used to anim the path when is change - void updatePathAnimate(const int = 1) {updatePath();} - int fakePath() {return 1;} + //This method do nothing, it's only made to be used with Q_PROPERTY + //It's used to anim the path when is change + void updatePathAnimate(const int = 1) {updatePath();} + int fakePath() {return 1;} - void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); - QRectF boundingRect() const; - virtual QPainterPath shape() const; - virtual QPainterPath nearShape() const; - qreal length() const; - ConductorSegment *middleSegment(); - QPointF posForText(Qt::Orientations &flag); - QString text() const; - void setText(const QString &); - void refreshText(); - void setOthersSequential (Conductor *); + void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); + QRectF boundingRect() const; + virtual QPainterPath shape() const; + virtual QPainterPath nearShape() const; + qreal length() const; + ConductorSegment *middleSegment(); + QPointF posForText(Qt::Orientations &flag); + QString text() const; + void setText(const QString &); + void refreshText(); + void setOthersSequential (Conductor *); public: static bool valideXml (QDomElement &); @@ -127,12 +123,11 @@ class Conductor : public QObject, public QGraphicsPathItem autonum::sequenceStruct m_autoNum_seq; public: - bool setSeq; void setFreezeLabel(bool freeze); QString m_frozen_label; public slots: - void displayedTextChanged(); + void displayedTextChanged(); protected: virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); @@ -143,58 +138,57 @@ class Conductor : public QObject, public QGraphicsPathItem virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual QVariant itemChange(GraphicsItemChange, const QVariant &); - - bool bMouseOver; private: + bool m_mouse_over; QetGraphicsHandlerUtility m_handler; /// Functional properties - ConductorProperties properties_; + ConductorProperties m_properties; /// Text input for non simple, non-singleline conductors - ConductorTextItem *text_item; + ConductorTextItem *text_item; /// Segments composing the conductor - ConductorSegment *segments; + ConductorSegment *segments; /// Attributs related to mouse interaction - bool moving_segment; - int moved_point; - qreal previous_z_value; - ConductorSegment *moved_segment; - QPointF before_mov_text_pos_; + 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 - bool modified_path; + bool modified_path; /// Whether the current profile should be saved as soon as possible - bool has_to_save_profile; + 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 - ConductorProfilesGroup conductor_profiles; + ConductorProfilesGroup conductor_profiles; /// QPen et QBrush objects used to draw conductors - static QPen conductor_pen; - static QBrush conductor_brush; - static bool pen_and_brush_initialized; + static QPen conductor_pen; + static QBrush conductor_brush; + static bool pen_and_brush_initialized; /// Define whether and how the conductor should be highlighted - Highlight must_highlight_; - bool m_valid; - bool m_freeze_label = false; + Highlight must_highlight_; + bool m_valid; + bool m_freeze_label = false; private: - void segmentsToPath(); - void saveProfile(bool = true); - void generateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation); - void updateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation); - uint segmentsCount(QET::ConductorSegmentType = QET::Both) const; - QList segmentsToPoints() const; - QList bends() const; - QList junctions() const; - void pointsToSegments(QList); - Qt::Corner currentPathType() const; - void deleteSegments(); - static int getCoeff(const qreal &, const qreal &); - static int getSign(const qreal &); - QHash shareOffsetBetweenSegments(const qreal &offset, const QList &, const qreal & = 0.01) const; - 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); + void segmentsToPath(); + void saveProfile(bool = true); + void generateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation); + void updateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation); + uint segmentsCount(QET::ConductorSegmentType = QET::Both) const; + QList segmentsToPoints() const; + QList bends() const; + QList junctions() const; + void pointsToSegments(QList); + Qt::Corner currentPathType() const; + void deleteSegments(); + static int getCoeff(const qreal &, const qreal &); + static int getSign(const qreal &); + QHash shareOffsetBetweenSegments(const qreal &offset, const QList &, const qreal & = 0.01) const; + 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/terminal.cpp b/sources/qetgraphicsitem/terminal.cpp index f3fb06d59..07f13ffa6 100644 --- a/sources/qetgraphicsitem/terminal.cpp +++ b/sources/qetgraphicsitem/terminal.cpp @@ -604,9 +604,9 @@ void Terminal::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) QUndoCommand *undo = new AddItemCommand(new_conductor, diagram()); - if (use_properties) { + if (use_properties) + { Conductor *other = conductors_list.toList().first(); - new_conductor->setSeq = false; new_conductor->setOthersSequential(other); new_conductor->setProperties(others_properties); } @@ -615,11 +615,11 @@ void Terminal::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) //Autonum it ConductorAutoNumerotation can (new_conductor, diagram(), undo); can.numerate(); - new_conductor->setSeq = true; } //Add undo command to the parent diagram diagram() -> undoStack().push(undo); - if (use_properties) { + if (use_properties) + { Conductor *other = conductors_list.toList().first(); new_conductor->setText(""); new_conductor->setText(other->properties().text); diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index c9085d0f7..c0c58a32e 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -418,14 +418,6 @@ QHash QETProject::elementAutoNum() const { return m_element_autonum; } -/** - * @brief QETProject::conductorAutoNumHash - * @return Title and Formula Hash - */ -QHash QETProject::conductorAutoNumHash() { - return m_conductor_autonum_formula; -} - /** * @brief QETProject::elementAutoNumFormula * @param element autonum title @@ -469,18 +461,12 @@ void QETProject::setCurrrentElementAutonum(QString autoNum) { * @param conductor autonum title * @return Formula of element autonum stored in conductor autonum */ -QString QETProject::conductorAutoNumFormula (QString key) const { +QString QETProject::conductorAutoNumFormula (QString key) const +{ if (m_conductor_autonum.contains(key)) - return m_conductor_autonum_formula[key]; - else return ""; -} - -/** - * @brief QETProject::conductorAutoNumCurrentFormula - * @return current formula being used by project - */ -QString QETProject::conductorAutoNumCurrentFormula() const { - return m_current_conductor_formula; + return autonum::numerotationContextToFormula(m_conductor_autonum.value(key)); + else + return QString(); } /** @@ -518,26 +504,6 @@ void QETProject::addConductorAutoNum(QString key, NumerotationContext context) { m_conductor_autonum.insert(key, context); } -/** - * @brief QETProject::addConductorAutoNumFormula - * Add the new formula - * @param formula - */ -void QETProject::addConductorAutoNumFormula(QString key, QString formula) { - m_conductor_autonum_formula.insert(key, formula); -} - -/** - * @brief QETProject::setConductorAutoNumCurrentFormula - * Add the formula and title to the current formula and current autonum - * @param formula - * @param title - */ -void QETProject::setConductorAutoNumCurrentFormula(QString formula, QString title) { - m_current_conductor_formula = formula; - m_current_conductor_autonum = title; -} - /** * @brief QETProject::addElementAutoNum * Add a new element numerotation context. If key already exist, @@ -1471,14 +1437,12 @@ void QETProject::readDefaultPropertiesXml(QDomDocument &xml_project) if (!conds_autonums.isNull()) { 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; nc.fromXml(elmt); m_conductor_autonum.insert(elmt.attribute("title"), nc); - m_conductor_autonum_formula.insert(elmt.attribute("title"),elmt.attribute("formula")); } } if (!folio_autonums.isNull()) @@ -1556,7 +1520,6 @@ void QETProject::writeDefaultPropertiesXml(QDomElement &xml_element) { //Export Conductor Autonums 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"); diff --git a/sources/qetproject.h b/sources/qetproject.h index def999828..9e6b6f028 100644 --- a/sources/qetproject.h +++ b/sources/qetproject.h @@ -108,11 +108,8 @@ class QETProject : public QObject QHash conductorAutoNum() const; QHash elementAutoNum() const; - QHash conductorAutoNumHash(); QHash folioAutoNum() const; void addConductorAutoNum (QString key, NumerotationContext context); - void addConductorAutoNumFormula (QString key, QString formula); - void setConductorAutoNumCurrentFormula (QString formula, QString title); void addElementAutoNum (QString key, NumerotationContext context); void addFolioAutoNum (QString key, NumerotationContext context); void removeConductorAutoNum (QString key); @@ -123,7 +120,6 @@ class QETProject : public QObject NumerotationContext elementAutoNum(const QString &key); QString conductorAutoNumFormula(const QString key) const; //returns Formula - QString conductorAutoNumCurrentFormula() const; QString conductorCurrentAutoNum() const; void setCurrentConductorAutoNum(QString autoNum); @@ -261,8 +257,6 @@ class QETProject : public QObject QUndoStack *undo_stack_; /// Conductor auto numerotation QHash m_conductor_autonum;//Title and NumContext hash - QHash m_conductor_autonum_formula;//Title and Formula hash - QString m_current_conductor_formula; QString m_current_conductor_autonum; /// Folio auto numbering QHash m_folio_autonum; diff --git a/sources/ui/conductorpropertieswidget.cpp b/sources/ui/conductorpropertieswidget.cpp index 310158056..68ec9a176 100644 --- a/sources/ui/conductorpropertieswidget.cpp +++ b/sources/ui/conductorpropertieswidget.cpp @@ -75,6 +75,7 @@ void ConductorPropertiesWidget::setProperties(const ConductorProperties &propert int index = ui -> m_line_style_cb -> findData(QPen(m_properties.style)); if (index != -1) ui -> m_line_style_cb -> setCurrentIndex(index); + ui->m_formula_le -> setText (m_properties.m_formula); ui->m_text_le -> setText (m_properties.text); ui->m_function_le -> setText (m_properties.m_function); ui->m_tension_protocol_le -> setText (m_properties.m_tension_protocol); @@ -107,6 +108,7 @@ ConductorProperties ConductorPropertiesWidget::properties() const properties_.color = ui -> m_color_pb->palette().color(QPalette::Button); properties_.style = ui -> m_line_style_cb->itemData(ui->m_line_style_cb->currentIndex()).value().style(); + properties_.m_formula = ui->m_formula_le->text(); properties_.text = ui -> m_text_le -> text(); properties_.m_function = ui -> m_function_le->text(); properties_.m_tension_protocol = ui -> m_tension_protocol_le->text(); @@ -188,6 +190,7 @@ void ConductorPropertiesWidget::initWidget() { connect(ui->m_multiwires_gb, &QGroupBox::toggled, [this](bool toggle) {this->ui->m_singlewire_gb->setChecked(!toggle);}); connect(ui->m_singlewire_gb, &QGroupBox::toggled, [this](bool toggle) {this->ui->m_multiwires_gb->setChecked(!toggle);}); + connect(ui->m_formula_le, &QLineEdit::textChanged, [this](QString text) {this->ui->m_text_le->setEnabled(text.isEmpty());}); ui->m_multiwires_gb->setChecked(true); ui->m_singlewire_gb->setChecked(true); }