[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 &);