diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 42df251c7..6aaa20cf3 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -907,6 +907,7 @@ Terminal* findTerminal(int conductor_index, QDomElement& f, QHash createElement(element_location, nullptr, &state); + Element *nvel_elmt = ElementFactory::Instance() -> createElement(element_location, nullptr, &state); // read element definition! if (state) { QString debug_message = QString("Diagram::fromXml() : Le chargement de la description de l'element %1 a echoue avec le code d'erreur %2").arg(element_location.path()).arg(state); @@ -1085,7 +1086,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf Terminal* p1 = findTerminal(1, f, table_adr_id, added_elements); Terminal* p2 = findTerminal(2, f, table_adr_id, added_elements); - if (p1 && p2 && p1 != p2) + if (p1 && p2 && p1 != p2) // why the condition for unequal is required? { Conductor *c = new Conductor(p1, p2); if (c->isValid()) @@ -1096,7 +1097,9 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf } else delete c; - } + } else { + qDebug() << "Diagramm::fromXML(): No matching terminals found."; + } } //Load tables diff --git a/sources/editor/graphicspart/partterminal.cpp b/sources/editor/graphicspart/partterminal.cpp index 47b9d8cf7..a1ac1c486 100644 --- a/sources/editor/graphicspart/partterminal.cpp +++ b/sources/editor/graphicspart/partterminal.cpp @@ -28,6 +28,7 @@ PartTerminal::PartTerminal(QETElementEditor *editor, QGraphicsItem *parent) : CustomElementGraphicPart(editor, parent) { d = new TerminalData(this); + d->m_name = tr("terminal"); d->m_orientation = Qet::North; d->m_uuid = QUuid::createUuid(); // if part is loaded this uuid will be overwritten, but being sure that terminal has a uuid updateSecondPoint(); diff --git a/sources/properties/propertiesinterface.cpp b/sources/properties/propertiesinterface.cpp index 731783731..7d96e8513 100644 --- a/sources/properties/propertiesinterface.cpp +++ b/sources/properties/propertiesinterface.cpp @@ -212,9 +212,9 @@ PropertiesInterface::PropertyFlags PropertiesInterface::propertyBool(const QDomE bool ok; bool tmp = attr.toInt(&ok); if (!ok) { - if (attr == "true") + if (attr == "true" || attr == "1") tmp = true; - else if (attr == "false") + else if (attr == "false" || attr == "0") tmp = false; else { qDebug() << "\t\t\t" << "Tagname: " << e.tagName() << ". " << "No valid Conversion: " << attribute_name << ". type: " << integerS << ". value: " << attr; diff --git a/sources/properties/terminaldata.cpp b/sources/properties/terminaldata.cpp index 1adec26ee..5594f34c6 100644 --- a/sources/properties/terminaldata.cpp +++ b/sources/properties/terminaldata.cpp @@ -41,7 +41,7 @@ void TerminalData::fromSettings(const QSettings& settings, const QString&) QDomElement TerminalData::toXml(QDomDocument &xml_document) const { - QDomElement xml_element = xml_document.createElement("terminal"); + QDomElement xml_element = xml_document.createElement("terminaldata"); xml_element.appendChild(createXmlProperty(xml_document, "x", q->scenePos().x())); xml_element.appendChild(createXmlProperty(xml_document, "y", q->scenePos().y())); @@ -64,7 +64,7 @@ bool TerminalData::fromXml (const QDomElement &xml_element) // RETURNS True m_pos = QPointF(term_x, term_y); - //emit posFromXML(QPointF(term_x, term_y)); +// emit posFromXML(QPointF(term_x, term_y)); QUuid uuid; // update part and add uuid, which is used in the new version to connect terminals together diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index f0f0a5046..b87138a5a 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -1106,16 +1106,13 @@ bool Conductor::pathFromXml(const QDomElement &e) { continue; bool isHorizontal = false; - if (propertyBool(current_segment, "orientation", &isHorizontal) == PropertyFlags::NoValidConversion) { - // legacy - QString orientation; - if (propertyString(current_segment, "orientation", &orientation) == PropertyFlags::Success) { - if (orientation == "horizontal") - isHorizontal = true; - } else { - qDebug() << "PathFromXML failed"; - return false; - } + QString orientation; + if (propertyString(current_segment, "orientation", &orientation) == PropertyFlags::Success) { + if (orientation == "horizontal") + isHorizontal = true; + } else { + qDebug() << "PathFromXML failed"; + return false; } if (isHorizontal) { diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 622fb258f..7ff42a6d6 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -574,13 +574,11 @@ DynamicElementTextItem *Element::parseDynamicText(const QDomElement &dom_element Terminal *Element::parseTerminal(const QDomElement &dom_element) { - if (!TerminalData::valideXml(dom_element)) + if (!Terminal::valideXml(dom_element)) return nullptr; - - TerminalData* data = new TerminalData(); - data->fromXml(dom_element); - Terminal *new_terminal = new Terminal(data, this); + Terminal *new_terminal = new Terminal(0, 0, Qet::Orientation::North, this); + new_terminal->fromXml(dom_element); m_terminals << new_terminal; //Sort from top to bottom and left to rigth @@ -653,7 +651,7 @@ bool Element::fromXml(QDomElement &e, QHash &table_id_adr, bool if (Terminal *p = qgraphicsitem_cast(qgi)) { bool terminal_trouvee = false; foreach(QDomElement qde, liste_terminals) { - if (p -> fromXml(qde)) { + if (p -> fromXml(qde)) { // TODO: is there validXML enough? Because the Terminal was already read in the ElementCreation function qDebug() << "Matching Terminal found."; priv_id_adr.insert(qde.attribute("id").toInt(), p); terminal_trouvee = true; diff --git a/sources/qetgraphicsitem/terminal.cpp b/sources/qetgraphicsitem/terminal.cpp index d1433edd0..51923ed0e 100644 --- a/sources/qetgraphicsitem/terminal.cpp +++ b/sources/qetgraphicsitem/terminal.cpp @@ -54,7 +54,7 @@ void Terminal::init(QString number, QString name, bool hiddenName) { // Number of terminal number_terminal_ = std::move(number); // Name of terminal - name_terminal_ = std::move(name); + d->m_name = std::move(name); name_terminal_hidden = hiddenName; // par defaut : pas de conducteur @@ -193,10 +193,18 @@ void Terminal::setNumber(QString number) { @param name */ void Terminal::setName(QString name, bool hiddenName) { - name_terminal_ = std::move(name); + d->m_name = std::move(name); name_terminal_hidden = hiddenName; } +/** + @brief Terminal::name + @return the name of terminal. +*/ +inline QString Terminal::name() const { + return(d->m_name); +} + /** @brief Terminal::addConductor Add a conductor to this terminal @@ -715,13 +723,17 @@ QList Terminal::conductors() const { QDomElement Terminal::toXml(QDomDocument &doc) const { QDomElement qdo = doc.createElement("terminal"); - qdo.appendChild(createXmlProperty(doc, "x", dock_elmt_.x())); - qdo.appendChild(createXmlProperty(doc, "y", dock_elmt_.y())); - qdo.appendChild(createXmlProperty(doc, "orientation", orientationToString(d->m_orientation))); qdo.appendChild(createXmlProperty(doc, "number", number_terminal_)); - qdo.appendChild(createXmlProperty(doc, "name", name_terminal_)); qdo.appendChild(createXmlProperty(doc, "nameHidden", name_terminal_hidden)); + // store terminal data too! + + // Do not store terminal data in its own child + QDomElement terminalDataElement = d->toXml(doc); + for (int i=0; i < terminalDataElement.childNodes().length(); i++) { + qdo.appendChild(terminalDataElement.childNodes().at(i)); + } + return(qdo); } @@ -731,32 +743,17 @@ QDomElement Terminal::toXml(QDomDocument &doc) const { @param terminal Le QDomElement a analyser @return true si le QDomElement passe en parametre est une borne, false sinon */ -bool Terminal::valideXml(QDomElement &terminal) { +bool Terminal::valideXml(const QDomElement &terminal) { if (terminal.tagName() != "terminal") return(false); - if (propertyString(terminal, "number")) - return false; +// affuteuse_250h.qet contains in line 8398 terminals which do not have this +// if (propertyString(terminal, "number")) +// return false; +// affuteuse_250h.qet contains in line 8398 terminals which do not have this +// if (propertyBool(terminal, "nameHidden")) +// return false; - if (propertyString(terminal, "name")) - return false; - - if (propertyBool(terminal, "nameHidden")) - return false; - - if (propertyDouble(terminal, "x")) - return false; - if (propertyDouble(terminal, "y")) - return false; - - QString o; - if (propertyString(terminal, "orientation", &o)) - return false; - - Qet::Orientation terminal_or = orientationFromString(o); - if (terminal_or != Qet::North - && terminal_or != Qet::South - && terminal_or != Qet::East - && terminal_or != Qet::West) + if (!TerminalData::valideXml(terminal)) return false; // a ce stade, la borne est syntaxiquement correcte @@ -772,30 +769,15 @@ bool Terminal::valideXml(QDomElement &terminal) { (memes coordonnes, meme orientation), false sinon */ bool Terminal::fromXml(const QDomElement &terminal) { - if (propertyString(terminal, "number", &number_terminal_)) + propertyString(terminal, "number", &number_terminal_); + + propertyBool(terminal, "nameHidden", &name_terminal_hidden); + + if(!d->fromXml(terminal)) return false; - if (propertyString(terminal, "name", &name_terminal_)) - return false; - - if (propertyBool(terminal, "nameHidden", &name_terminal_hidden)) - return false; - - double x, y; - if (propertyDouble(terminal, "x", &x)) - return false; - if (propertyDouble(terminal, "y", &y)) - return false; - - QString o; - if (propertyString(terminal, "orientation", &o)) - return false; - - if (!qFuzzyCompare(x, dock_elmt_.x()) || - !qFuzzyCompare(y, dock_elmt_.y()) || - orientationFromString(o) != d->m_orientation) - return false; + init(number_terminal_, d->m_name, name_terminal_hidden); // initialize dock_elmt_. This must be done after Terminal data is initialized return true; } diff --git a/sources/qetgraphicsitem/terminal.h b/sources/qetgraphicsitem/terminal.h index 1f7f365ab..8a06733f9 100644 --- a/sources/qetgraphicsitem/terminal.h +++ b/sources/qetgraphicsitem/terminal.h @@ -90,7 +90,7 @@ class Terminal : public QGraphicsObject, public PropertiesInterface bool canBeLinkedTo(Terminal *); // methods related to XML import/export - static bool valideXml(QDomElement &); + static bool valideXml(const QDomElement &); bool fromXml (const QDomElement &) override; QDomElement toXml (QDomDocument &) const override; @@ -148,9 +148,7 @@ class Terminal : public QGraphicsObject, public PropertiesInterface QColor hovered_color_{Terminal::hovered_color_}; /// Number of Terminal QString number_terminal_; - /// Name of Terminal - QString name_terminal_; - bool name_terminal_hidden; + bool name_terminal_hidden{true}; private: void init(QString number, QString name, bool hiddenName); @@ -174,14 +172,6 @@ inline QString Terminal::number() const { return(number_terminal_); } -/** - @brief Terminal::name - @return the name of terminal. -*/ -inline QString Terminal::name() const { - return(name_terminal_); -} - QList relatedPotentialTerminal (const Terminal *terminal, const bool all_diagram = true);