diff --git a/customelement.cpp b/customelement.cpp index b23a5f8fe..3de795f38 100644 --- a/customelement.cpp +++ b/customelement.cpp @@ -106,7 +106,7 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram * // on peut d'ores et deja specifier la taille et le hotspot setSize(w, h); setHotspot(QPoint(hot_x, hot_y)); - setConnexionsInternesAcceptees(racine.attribute("ci") == "true"); + setInternalConnections(racine.attribute("ic") == "true"); // la definition est supposee avoir des enfants if (racine.firstChild().isNull()) { diff --git a/diagram.cpp b/diagram.cpp index 6dda96be2..8468fa147 100644 --- a/diagram.cpp +++ b/diagram.cpp @@ -436,7 +436,7 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in Terminal *p2 = table_adr_id.value(id_p2); if (p1 != p2) { bool can_add_conductor = true; - bool cia = ((Element *)p2 -> parentItem()) -> connexionsInternesAcceptees(); + bool cia = ((Element *)p2 -> parentItem()) -> internalConnections(); if (!cia) { foreach(QGraphicsItem *item, p2 -> parentItem() -> children()) { if (item == p1) can_add_conductor = false; diff --git a/editor/elementscene.cpp b/editor/elementscene.cpp index 100551991..a79f712c2 100644 --- a/editor/elementscene.cpp +++ b/editor/elementscene.cpp @@ -42,6 +42,7 @@ ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) : _width(3), _height(7), _hotspot(15, 35), + internal_connections(false), qgi_manager(this), element_editor(editor) { @@ -371,6 +372,7 @@ const QDomDocument ElementScene::toXml() const { root.setAttribute("hotspot_y", QString("%1").arg(_hotspot.y())); root.setAttribute("orientation", ori.toString()); root.setAttribute("version", QET::version); + if (internal_connections) root.setAttribute("ic", "true"); // noms de l'element root.appendChild(_names.toXml(xml_document)); @@ -423,8 +425,10 @@ void ElementScene::fromXml(const QDomDocument &xml_document) { } } - // orientations + // orientations et connexions internes if (state) { + internal_connections = (root.attribute("ic") == "true"); + if (!ori.fromString(root.attribute("orientation"))) { state = false; error_message = tr("Les orientations ne sont pas valides."); diff --git a/editor/elementscene.h b/editor/elementscene.h index c664dc1e3..5332d06c1 100644 --- a/editor/elementscene.h +++ b/editor/elementscene.h @@ -64,6 +64,8 @@ class ElementScene : public QGraphicsScene { NamesList _names; /// Liste des orientations de l'element OrientationSet ori; + /// booleen indiquant si les bornes de l'element peuvent etre reliees a des bornes de ce meme element + bool internal_connections; /// Gestionnaire de QGraphicsItem QGIManager qgi_manager; /// Pile des actions annulables diff --git a/element.cpp b/element.cpp index 7c7da3eca..4146dc9ae 100644 --- a/element.cpp +++ b/element.cpp @@ -26,8 +26,10 @@ /** Constructeur pour un element sans scene ni parent */ -Element::Element(QGraphicsItem *parent, Diagram *scene) : QGraphicsItem(parent, scene) { - peut_relier_ses_propres_terminals = false; +Element::Element(QGraphicsItem *parent, Diagram *scene) : + QGraphicsItem(parent, scene), + internal_connections(false) +{ setZValue(10); } diff --git a/element.h b/element.h index b7f2e4937..37837f7b8 100644 --- a/element.h +++ b/element.h @@ -79,8 +79,8 @@ class Element : public QGraphicsItem { void setPos(qreal, qreal); // methodes relatives aux connexions internes - bool connexionsInternesAcceptees(); - void setConnexionsInternesAcceptees(bool cia); + bool internalConnections(); + void setInternalConnections(bool); // methodes relatives aux fichiers XML static bool valideXml(QDomElement &); @@ -97,7 +97,7 @@ class Element : public QGraphicsItem { void mouseReleaseEvent(QGraphicsSceneMouseEvent *); private: - bool peut_relier_ses_propres_terminals; + bool internal_connections; void drawSelection(QPainter *, const QStyleOptionGraphicsItem *); void updatePixmap(); }; @@ -107,8 +107,8 @@ class Element : public QGraphicsItem { c'est-a-dire que ses bornes peuvent etre reliees entre elles @return true si l'element accepte les connexions internes, false sinon */ -inline bool Element::connexionsInternesAcceptees() { - return(peut_relier_ses_propres_terminals); +inline bool Element::internalConnections() { + return(internal_connections); } /** @@ -117,8 +117,8 @@ inline bool Element::connexionsInternesAcceptees() { @param cia true pour que l'element accepte les connexions internes, false pour qu'il les interdise */ -inline void Element::setConnexionsInternesAcceptees(bool cia) { - peut_relier_ses_propres_terminals = cia; +inline void Element::setInternalConnections(bool ic) { + internal_connections = ic; } /** diff --git a/terminal.cpp b/terminal.cpp index 3a7ed0f06..d33948fcc 100644 --- a/terminal.cpp +++ b/terminal.cpp @@ -334,7 +334,7 @@ void Terminal::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { couleur_hovered = couleur_interdit; } else if (p -> parentItem() == parentItem()) { // effet si l'on hover sur une borne du meme appareil - if (((Element *)parentItem()) -> connexionsInternesAcceptees()) + if (((Element *)parentItem()) -> internalConnections()) p -> couleur_hovered = p -> couleur_autorise; else p -> couleur_hovered = p -> couleur_interdit; } else if (p -> nbConductors()) { @@ -384,7 +384,7 @@ void Terminal::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { // idem s'il s'agit de la borne actuelle if (p == this) return; // idem s'il s'agit d'une borne de l'element actuel et que l'element n'a pas le droit de relier ses propres bornes - bool cia = ((Element *)parentItem()) -> connexionsInternesAcceptees(); + bool cia = ((Element *)parentItem()) -> internalConnections(); if (!cia) foreach(QGraphicsItem *item, parentItem() -> children()) if (item == p) return; // derniere verification : verifier que cette borne n'est pas deja reliee a l'autre borne foreach (Conductor *f, liste_conductors) if (f -> terminal1 == p || f -> terminal2 == p) return;