diff --git a/sources/diagram.cpp b/sources/diagram.cpp index f105712f6..245a876a1 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -685,10 +685,11 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf project_ -> state() == QETProject::ProjectParsingRunning ); - // chargement de tous les elements du fichier XML + //Load all elements from the XML QList added_elements; QHash table_adr_id; - foreach (QDomElement element_xml, QET::findInDomElement(root, "elements", "element")) { + foreach (QDomElement element_xml, QET::findInDomElement(root, "elements", "element")) + { if (!Element::valideXml(element_xml)) continue; // cree un element dont le type correspond a l'id type @@ -698,7 +699,8 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf int state = 0; Element *nvel_elmt = ElementFactory::Instance() -> createElement(element_location, 0, &state); - if (state) { + 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); qDebug() << qPrintable(debug_message); delete nvel_elmt; @@ -760,10 +762,15 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf Terminal *p2 = table_adr_id.value(id_p2); if (p1 != p2) { - Conductor *c = new Conductor(table_adr_id.value(id_p1), table_adr_id.value(id_p2)); - addItem(c); - c -> fromXml(f); - added_conductors << c; + Conductor *c = new Conductor(p1, p2); + if (c->isValid()) + { + addItem(c); + c -> fromXml(f); + added_conductors << c; + } + else + delete c; } } else qDebug() << "Diagram::fromXml() : Le chargement du conducteur" << id_p1 << id_p2 << "a echoue"; diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index ebe50dc82..965e4f316 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -59,12 +59,11 @@ Conductor::Conductor(Terminal *p1, Terminal* p2) : setZValue(9); previous_z_value = zValue(); - // ajout du conducteur a la liste de conducteurs de chacune des deux bornes + //Add this conductor to the list of conductor of each of the two terminal bool ajout_p1 = terminal1 -> addConductor(this); bool ajout_p2 = terminal2 -> addConductor(this); - - // en cas d'echec de l'ajout (conducteur deja existant notamment) - if (!ajout_p1 || !ajout_p2) return; + //m_valid become false if the conductor can't be added to terminal (conductor already exist) + m_valid = (!ajout_p1 || !ajout_p2) ? false : true; // attributs de dessin par defaut (communs a tous les conducteurs) if (!pen_and_brush_initialized) { @@ -113,6 +112,15 @@ Conductor::~Conductor() { deleteSegments(); } +/** + * @brief Conductor::isValid + * @return true if conductor is valid else false; + * A non valid conductor, is a conductor without two terminal + */ +bool Conductor::isValid() const { + return m_valid; +} + /** Met a jour la representation graphique du conducteur en recalculant son trace. Cette fonction est typiquement appelee lorsqu'une seule des bornes du diff --git a/sources/qetgraphicsitem/conductor.h b/sources/qetgraphicsitem/conductor.h index b993bac16..2e7180816 100644 --- a/sources/qetgraphicsitem/conductor.h +++ b/sources/qetgraphicsitem/conductor.h @@ -45,6 +45,8 @@ class Conductor : public QObject, public QGraphicsPathItem { public: Conductor(Terminal *, Terminal *); virtual ~Conductor(); + + bool isValid() const; private: Conductor(const Conductor &); @@ -164,6 +166,7 @@ class Conductor : public QObject, public QGraphicsPathItem { qreal segments_squares_scale_; /// Define whether and how the conductor should be highlighted Highlight must_highlight_; + bool m_valid; private: void segmentsToPath();