[qet] [3485] Conductor and conductor text item : minor change about how the text is save to xml

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 3485
Author:   blacksun
Date:     2014-11-14 14:06:24 +0100 (Fri, 14 Nov 2014)
Log Message:
-----------
Conductor and conductor text item : minor change about how the text is save to xml

Modified Paths:
--------------
    trunk/sources/qetgraphicsitem/conductor.cpp
    trunk/sources/qetgraphicsitem/conductor.h
    trunk/sources/qetgraphicsitem/conductortextitem.cpp
    trunk/sources/qetgraphicsitem/conductortextitem.h
    trunk/sources/qetgraphicsitem/diagramtextitem.cpp
    trunk/sources/qetgraphicsitem/diagramtextitem.h

Modified: trunk/sources/qetgraphicsitem/conductor.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.cpp	2014-11-13 19:32:56 UTC (rev 3484)
+++ trunk/sources/qetgraphicsitem/conductor.cpp	2014-11-14 13:06:24 UTC (rev 3485)
@@ -951,32 +951,66 @@
 }
 
 /**
-	Charge les caracteristiques du conducteur depuis un element XML.
-	@param e Un element XML
-	@return true si le chargement a reussi, false sinon
-*/
+ * @brief Conductor::fromXml
+ * Load the conductor and her information from xml element
+ * @param e
+ * @return true is loading success else return false
+ */
 bool Conductor::fromXml(QDomElement &e) {
-	//Get the "configuration" of conductor
-	properties_.fromXml(e);
-	readProperties();
-
 	setPos(e.attribute("x", 0).toDouble(),
 		   e.attribute("y", 0).toDouble());
 
-	//Get the pos of text item
-	qreal user_pos_x, user_pos_y;
-	if (
-		QET::attributeIsAReal(e, "userx", &user_pos_x) &&
-		QET::attributeIsAReal(e, "usery", &user_pos_y)
-	) {
-		text_item -> forceMovedByUser(true);
-		text_item -> setPos(user_pos_x, user_pos_y);
+	bool return_ = pathFromXml(e);
+
+	text_item -> fromXml(e);
+	properties_. fromXml(e);
+	readProperties();
+
+	return return_;
+}
+
+/**
+	Exporte les caracteristiques du conducteur sous forme d'une element XML.
+	@param d Le document XML a utiliser pour creer l'element XML
+	@param table_adr_id Hash stockant les correspondances entre les ids des
+	bornes dans le document XML et leur adresse en memoire
+	@return Un element XML representant le conducteur
+*/
+QDomElement Conductor::toXml(QDomDocument &d, QHash<Terminal *, int> &table_adr_id) const {
+	QDomElement e = d.createElement("conductor");
+
+	e.setAttribute("x", pos().x());
+	e.setAttribute("y", pos().y());
+	e.setAttribute("terminal1", table_adr_id.value(terminal1));
+	e.setAttribute("terminal2", table_adr_id.value(terminal2));
+	
+	// on n'exporte les segments du conducteur que si ceux-ci ont
+	// ete modifies par l'utilisateur
+	if (modified_path) {
+		// parcours et export des segments
+		QDomElement current_segment;
+		foreach(ConductorSegment *segment, segmentsList()) {
+			current_segment = d.createElement("segment");
+			current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
+			current_segment.setAttribute("length", QString("%1").arg(segment -> length()));
+			e.appendChild(current_segment);
+		}
 	}
-	if (e.hasAttribute("rotation")) {
-		text_item -> setRotationAngle(e.attribute("rotation").toDouble());
-		text_item -> forceRotateByUser(true);
-	}
 	
+	// Export the properties and text
+	properties_. toXml(e);
+	text_item -> toXml(e);
+
+	return(e);
+}
+
+/**
+ * @brief Conductor::pathFromXml
+ * Generate the path from xml file
+ * @param e
+ * @return true if generate path success else return false
+ */
+bool Conductor::pathFromXml(const QDomElement &e) {
 	// parcourt les elements XML "segment" et en extrait deux listes de longueurs
 	// les segments non valides sont ignores
 	QList<qreal> segments_x, segments_y;
@@ -984,15 +1018,15 @@
 		// on s'interesse aux elements XML "segment"
 		QDomElement current_segment = node.toElement();
 		if (current_segment.isNull() || current_segment.tagName() != "segment") continue;
-		
+
 		// le segment doit avoir une longueur
 		if (!current_segment.hasAttribute("length")) continue;
-		
+
 		// cette longueur doit etre un reel
 		bool ok;
 		qreal segment_length = current_segment.attribute("length").toDouble(&ok);
 		if (!ok) continue;
-		
+
 		if (current_segment.attribute("orientation") == "horizontal") {
 			segments_x << segment_length;
 			segments_y << 0.0;
@@ -1016,7 +1050,7 @@
 	QPointF t2 = terminal2 -> dockConductor();
 	qreal expected_width  = t2.x() - t1.x();
 	qreal expected_height = t2.y() - t1.y();
-	
+
 	// on considere que le trajet est incoherent a partir d'une unite de difference avec l'espacement entre les bornes
 	if (
 		qAbs(expected_width  - width)  > 1.0 ||
@@ -1025,7 +1059,7 @@
 		qDebug() << "Conductor::fromXml : les segments du conducteur ne semblent pas coherents - utilisation d'un trajet automatique";
 		return(false);
 	}
-	
+
 	/* on recree les segments a partir des donnes XML */
 	// cree la liste de points
 	QList<QPointF> points_list;
@@ -1036,57 +1070,17 @@
 			points_list.last().y() + segments_y.at(i)
 		);
 	}
-	
+
 	pointsToSegments(points_list);
-	
+
 	// initialise divers parametres lies a la modification des conducteurs
 	modified_path = true;
 	saveProfile(false);
-	
+
 	segmentsToPath();
 	return(true);
 }
 
-/**
-	Exporte les caracteristiques du conducteur sous forme d'une element XML.
-	@param d Le document XML a utiliser pour creer l'element XML
-	@param table_adr_id Hash stockant les correspondances entre les ids des
-	bornes dans le document XML et leur adresse en memoire
-	@return Un element XML representant le conducteur
-*/
-QDomElement Conductor::toXml(QDomDocument &d, QHash<Terminal *, int> &table_adr_id) const {
-	QDomElement e = d.createElement("conductor");
-
-	e.setAttribute("x", pos().x());
-	e.setAttribute("y", pos().y());
-	e.setAttribute("terminal1", table_adr_id.value(terminal1));
-	e.setAttribute("terminal2", table_adr_id.value(terminal2));
-	
-	// on n'exporte les segments du conducteur que si ceux-ci ont
-	// ete modifies par l'utilisateur
-	if (modified_path) {
-		// parcours et export des segments
-		QDomElement current_segment;
-		foreach(ConductorSegment *segment, segmentsList()) {
-			current_segment = d.createElement("segment");
-			current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
-			current_segment.setAttribute("length", QString("%1").arg(segment -> length()));
-			e.appendChild(current_segment);
-		}
-	}
-	
-	// exporte la "configuration" du conducteur
-	properties_.toXml(e);
-	if (text_item -> wasRotateByUser()) {
-		e.setAttribute("rotation", QString("%1").arg(text_item -> rotationAngle()));
-	}
-	if (text_item -> wasMovedByUser()) {
-		e.setAttribute("userx", QString("%1").arg(text_item -> pos().x()));
-		e.setAttribute("usery", QString("%1").arg(text_item -> pos().y()));
-	}
-	return(e);
-}
-
 /// @return les segments de ce conducteur
 const QList<ConductorSegment *> Conductor::segmentsList() const {
 	if (segments == NULL) return(QList<ConductorSegment *>());
@@ -1231,6 +1225,7 @@
 		QPointF text_item_pos = text_item -> pos();
 		QPainterPath near_shape = nearShape();
 		if (!near_shape.contains(text_item_pos)) {
+			qDebug() << "trop loin";
 			text_item -> setPos(movePointIntoPolygon(text_item_pos, near_shape));
 		}
 	} else {

Modified: trunk/sources/qetgraphicsitem/conductor.h
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.h	2014-11-13 19:32:56 UTC (rev 3484)
+++ trunk/sources/qetgraphicsitem/conductor.h	2014-11-14 13:06:24 UTC (rev 3485)
@@ -92,9 +92,15 @@
 	bool containsPoint(const QPointF &) const;
 	QString text() const;
 	void setText(const QString &);
-	static bool valideXml(QDomElement &);
-	bool fromXml(QDomElement &);
-	QDomElement toXml(QDomDocument &, QHash<Terminal *, int> &) const;
+
+	public:
+		static bool valideXml (QDomElement &);
+		bool        fromXml   (QDomElement &);
+		QDomElement toXml     (QDomDocument &, QHash<Terminal *, int> &) const;
+	private:
+		bool pathFromXml(const QDomElement &);
+
+	public:
 	const QList<ConductorSegment *> segmentsList() const;
 	void setProperties(const ConductorProperties &);
 	ConductorProperties properties() const;

Modified: trunk/sources/qetgraphicsitem/conductortextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductortextitem.cpp	2014-11-13 19:32:56 UTC (rev 3484)
+++ trunk/sources/qetgraphicsitem/conductortextitem.cpp	2014-11-14 13:06:24 UTC (rev 3485)
@@ -60,38 +60,36 @@
 }
 
 /**
-	Permet de lire le texte a mettre dans le champ a partir d'un element XML.
-	Cette methode se base sur la position du champ pour assigner ou non la
-	valeur a ce champ.
-	@param e L'element XML representant le champ de texte
-*/
+ * @brief ConductorTextItem::fromXml
+ * Read the properties stored in the xml element given in parameter
+ * @param e
+ */
 void ConductorTextItem::fromXml(const QDomElement &e) {
-	setPlainText(e.attribute("text"));
-	
-	qreal user_pos_x, user_pos_y;
-	if (
-		QET::attributeIsAReal(e, "userx", &user_pos_x) &&
-		QET::attributeIsAReal(e, "usery", &user_pos_y)
-	) {
-		setPos(user_pos_x, user_pos_y);
+	if (e.hasAttribute("userx")) {
+		setPos(e.attribute("userx").toDouble(),
+			   e.attribute("usery").toDouble());
+		moved_by_user_ = true;
 	}
-	
-	setRotationAngle(e.attribute("rotation").toDouble());
+	if (e.hasAttribute("rotation")) {
+		setRotation(e.attribute("rotation").toDouble());
+		rotate_by_user_ = true;
+	}
 }
 
 /**
-	@param document Le document XML a utiliser
-	@return L'element XML representant ce champ de texte
-*/
-QDomElement ConductorTextItem::toXml(QDomDocument &document) const {
-	QDomElement result = document.createElement("input");
-	result.setAttribute("userx", QString("%1").arg(pos().x()));
-	result.setAttribute("usery", QString("%1").arg(pos().y()));
-	result.setAttribute("text", toPlainText());
-	if (rotationAngle()) {
-		result.setAttribute("rotation", QString("%1").arg(rotationAngle()));
+ * @brief ConductorTextItem::toXml
+ * Export the properties of this text in the attribute of the xml element given in parameter
+ * The properties exported are position and rotation (only if moved or rotate by user)
+ * @param xml
+ */
+void ConductorTextItem::toXml(QDomElement &xml) const {
+	if (moved_by_user_) {
+		xml.setAttribute("userx", QString("%1").arg(pos().x()));
+		xml.setAttribute("usery", QString("%1").arg(pos().y()));
 	}
-	return(result);
+	if (rotate_by_user_) {
+		xml.setAttribute("rotation", QString("%1").arg(rotation()));
+	}
 }
 
 /**

Modified: trunk/sources/qetgraphicsitem/conductortextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/conductortextitem.h	2014-11-13 19:32:56 UTC (rev 3484)
+++ trunk/sources/qetgraphicsitem/conductortextitem.h	2014-11-14 13:06:24 UTC (rev 3485)
@@ -42,7 +42,7 @@
 	enum { Type = UserType + 1006 };
 	Conductor *parentConductor() const;
 	virtual void fromXml(const QDomElement &);
-	virtual QDomElement toXml(QDomDocument &) const;
+	virtual void toXml  (QDomElement &xml) const;
 	
 	// methods
 	public:

Modified: trunk/sources/qetgraphicsitem/diagramtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.cpp	2014-11-13 19:32:56 UTC (rev 3484)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.cpp	2014-11-14 13:06:24 UTC (rev 3485)
@@ -80,6 +80,16 @@
 }
 
 /**
+ * @brief DiagramTextItem::toXml
+ * This method do nothing and return an empty DomElement
+ * This is used to be inherited by child class
+ * @return
+ */
+QDomElement DiagramTextItem::toXml(QDomDocument &) const {
+	return QDomElement();
+}
+
+/**
 	@return l'angle de rotation actuel de ce texte
 */
 qreal DiagramTextItem::rotationAngle() const {

Modified: trunk/sources/qetgraphicsitem/diagramtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.h	2014-11-13 19:32:56 UTC (rev 3484)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.h	2014-11-14 13:06:24 UTC (rev 3485)
@@ -54,7 +54,7 @@
 	virtual int type() const { return Type; }
 	Diagram *diagram() const;
 	virtual void fromXml(const QDomElement &) = 0;
-	virtual QDomElement toXml(QDomDocument &) const = 0;
+	virtual QDomElement toXml(QDomDocument &) const;
 	qreal rotationAngle() const;
 	void setRotationAngle(const qreal &);
 	void rotateBy(const qreal &);


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/