diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 5f45f923b..486b26c7d 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -344,8 +344,8 @@ QDomDocument Diagram::toXml(bool diagram) { @param position La position du schema importe @param consider_informations Si vrai, les informations complementaires (auteur, titre, ...) seront prises en compte - @param content_ptr si ce pointeur vers un DiagramContent n'est pas NULL, il - sera rempli avec le contenu ajoute au schema par le fromXml + @param content_ptr si ce pointeur vers un DiagramContent est different de 0, + il sera rempli avec le contenu ajoute au schema par le fromXml @return true si l'import a reussi, false sinon */ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_informations, DiagramContent *content_ptr) { @@ -353,6 +353,34 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in return(fromXml(root, position, consider_informations, content_ptr)); } +/** + Importe le schema decrit dans un element XML. Cette methode delegue son travail a Diagram::fromXml + Si l'import reussit, cette methode initialise egalement le document XML + interne permettant de bien gerer l'enregistrement de ce schema dans le + projet auquel il appartient. + @see Diagram::fromXml + @param document Le document XML a analyser + @param position La position du schema importe + @param consider_informations Si vrai, les informations complementaires + (auteur, titre, ...) seront prises en compte + @param content_ptr si ce pointeur vers un DiagramContent est different de 0, + il sera rempli avec le contenu ajoute au schema par le fromXml + @return true si l'import a reussi, false sinon + +*/ +bool Diagram::initFromXml(QDomElement &document, QPointF position, bool consider_informations, DiagramContent *content_ptr) { + // import le contenu et les proprietes du schema depuis l'element XML fourni en parametre + bool from_xml = fromXml(document, position, consider_informations, content_ptr); + + // initialise le document XML interne a partir de l'element XML fourni en parametre + if (from_xml) { + xml_document.clear(); + xml_document.appendChild(xml_document.importNode(document, true)); + // a ce stade, le document XML interne contient le code XML qui a ete importe, et non pas une version re-exporte par la methode toXml() + } + return(from_xml); +} + /** Importe le schema decrit dans un element XML. Si une position est precisee, les elements importes sont positionnes de maniere a ce que le @@ -362,8 +390,8 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in @param position La position du schema importe @param consider_informations Si vrai, les informations complementaires (auteur, titre, ...) seront prises en compte - @param content_ptr si ce pointeur vers un DiagramContent n'est pas NULL, il - sera rempli avec le contenu ajoute au schema par le fromXml + @param content_ptr si ce pointeur vers un DiagramContent est different de 0, + il sera rempli avec le contenu ajoute au schema par le fromXml @return true si l'import a reussi, false sinon */ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_informations, DiagramContent *content_ptr) { @@ -526,13 +554,12 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf } // remplissage des listes facultatives - if (content_ptr != NULL) { + if (content_ptr) { content_ptr -> elements = added_elements; content_ptr -> conductorsToMove = added_conductors; content_ptr -> textFields = added_texts; } - write(); return(true); } @@ -833,7 +860,7 @@ void Diagram::moveElements(const QPointF &diff, QGraphicsItem *dontmove) { // deplace les elements selectionnes foreach(Element *element, elementsToMove()) { - if (dontmove != NULL && element == dontmove) continue; + if (dontmove && element == dontmove) continue; element -> setPos(element -> pos() + diff); } @@ -850,7 +877,7 @@ void Diagram::moveElements(const QPointF &diff, QGraphicsItem *dontmove) { // deplace les champs de texte foreach(DiagramTextItem *dti, textsToMove()) { - if (dontmove != NULL && dti == dontmove) continue; + if (dontmove && dti == dontmove) continue; dti -> setPos(dti -> pos() + diff); } } diff --git a/sources/diagram.h b/sources/diagram.h index 0d02e663a..0215030ca 100644 --- a/sources/diagram.h +++ b/sources/diagram.h @@ -108,8 +108,9 @@ class Diagram : public QGraphicsScene { // fonctions relatives a l'import / export XML QDomDocument toXml(bool = true); - bool fromXml(QDomDocument &, QPointF = QPointF(), bool = true, DiagramContent * = NULL); - bool fromXml(QDomElement &, QPointF = QPointF(), bool = true, DiagramContent * = NULL); + bool initFromXml(QDomElement &, QPointF = QPointF(), bool = true, DiagramContent * = 0); + bool fromXml(QDomDocument &, QPointF = QPointF(), bool = true, DiagramContent * = 0); + bool fromXml(QDomElement &, QPointF = QPointF(), bool = true, DiagramContent * = 0); void write(); void write(const QDomElement &); bool wasWritten() const; @@ -152,7 +153,7 @@ class Diagram : public QGraphicsScene { QSet selectedConductors() const; DiagramContent content() const; DiagramContent selectedContent(); - void moveElements(const QPointF &, QGraphicsItem * = NULL); + void moveElements(const QPointF &, QGraphicsItem * = 0); bool usesElement(const ElementsLocation &); QUndoStack &undoStack(); diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 146440b4b..852d26b0f 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -729,7 +729,7 @@ void QETProject::readDiagramsXml() { QDomElement diagram_xml_element = diagram_nodes.at(i).toElement(); Diagram *diagram = new Diagram(); diagram -> setProject(this); - bool diagram_loading = diagram -> fromXml(diagram_xml_element); + bool diagram_loading = diagram -> initFromXml(diagram_xml_element); if (diagram_loading) { // recupere l'attribut order du schema int diagram_order = -1;