[qet] [1085] Gestion du chargement des fichiers enregistres dans une version < 0. 3.

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


Revision: 1085
Author:   xavier
Date:     2010-07-18 21:16:52 +0200 (Sun, 18 Jul 2010)
Log Message:
-----------
Gestion du chargement des fichiers enregistres dans une version < 0.3.

Modified Paths:
--------------
    branches/0.3/sources/diagram.cpp
    branches/0.3/sources/diagramcommands.h
    branches/0.3/sources/element.cpp
    branches/0.3/sources/element.h
    branches/0.3/sources/qet.h
    branches/0.3/sources/qetproject.cpp
    branches/0.3/sources/qetproject.h

Modified: branches/0.3/sources/diagram.cpp
===================================================================
--- branches/0.3/sources/diagram.cpp	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/diagram.cpp	2010-07-18 19:16:52 UTC (rev 1085)
@@ -488,7 +488,18 @@
 		}
 		
 		// charge les caracteristiques de l'element
-		if (nvel_elmt -> fromXml(element_xml, table_adr_id)) {
+		// Retrocompatibilite : avant la version 0.3, il faut gerer a l'ouverture du schema
+		// la compensation de la rotation de l'element pour ses champs de texte ayant l'option
+		// "FollowParentRotation" desactivee
+		// A partir de la 0.3, les champs de texte des elements comportent des attributs userx,
+		// usery et userrotation qui specifient explicitement leur position et orientation
+		bool handle_inputs_rotation = false;
+		if (project_) {
+			qreal project_qet_version = project_ -> declaredQElectroTechVersion();
+			handle_inputs_rotation = (project_qet_version != -1 && project_qet_version < 0.3 && project_ -> state() == QETProject::ProjectParsingRunning);
+		}
+		
+		if (nvel_elmt -> fromXml(element_xml, table_adr_id, handle_inputs_rotation)) {
 			// ajout de l'element au schema et a la liste des elements ajoutes
 			addElement(nvel_elmt);
 			added_elements << nvel_elmt;

Modified: branches/0.3/sources/diagramcommands.h
===================================================================
--- branches/0.3/sources/diagramcommands.h	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/diagramcommands.h	2010-07-18 19:16:52 UTC (rev 1085)
@@ -319,8 +319,7 @@
 	virtual void redo();
 	qreal appliedRotationAngle() const;
 	void setAppliedRotationAngle(const qreal &);
-	private:
-	void rotateElement(Element *, QET::Orientation);
+	static void rotateElement(Element *, QET::Orientation);
 	
 	// attributs
 	private:

Modified: branches/0.3/sources/element.cpp
===================================================================
--- branches/0.3/sources/element.cpp	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/element.cpp	2010-07-18 19:16:52 UTC (rev 1085)
@@ -403,7 +403,7 @@
 	@return true si l'import a reussi, false sinon
 	
 */
-bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr) {
+bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool handle_inputs_rotation) {
 	/*
 		les bornes vont maintenant etre recensees pour associer leurs id a leur adresse reelle
 		ce recensement servira lors de la mise en place des fils
@@ -453,14 +453,19 @@
 		}
 	}
 	
-	// position, selection et orientation
+	// position, selection
 	setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
 	setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+	
+	// orientation
 	bool conv_ok;
 	int read_ori = e.attribute("orientation").toInt(&conv_ok);
 	if (!conv_ok || read_ori < 0 || read_ori > 3) read_ori = ori.defaultOrientation();
-	setOrientation((QET::Orientation)read_ori);
-	
+	if (handle_inputs_rotation) {
+		RotateElementsCommand::rotateElement(this, (QET::Orientation)read_ori);
+	} else {
+		setOrientation((QET::Orientation)read_ori);
+	}
 	return(true);
 }
 

Modified: branches/0.3/sources/element.h
===================================================================
--- branches/0.3/sources/element.h	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/element.h	2010-07-18 19:16:52 UTC (rev 1085)
@@ -113,7 +113,7 @@
 	
 	// methodes relatives aux fichiers XML
 	static bool valideXml(QDomElement &);
-	virtual bool fromXml(QDomElement &, QHash<int, Terminal *> &);
+	virtual bool fromXml(QDomElement &, QHash<int, Terminal *> &, bool = false);
 	virtual QDomElement toXml(QDomDocument &, QHash<Terminal *, int> &) const;
 	
 	// methodes d'acces aux possibilites d'orientation

Modified: branches/0.3/sources/qet.h
===================================================================
--- branches/0.3/sources/qet.h	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/qet.h	2010-07-18 19:16:52 UTC (rev 1085)
@@ -25,9 +25,9 @@
 */
 namespace QET {
 	/// version de QElectroTech (utilisee pour estampiller les projets et elements)
-	const QString version = "0.22";
+	const QString version = "0.3";
 	/// version affichee de QElectroTech
-	const QString displayedVersion = "0.22";
+	const QString displayedVersion = "0.3";
 	QString license();
 	/// Orientation (utilise pour les bornes mais aussi pour les elements)
 	enum Orientation {North, East, South, West};

Modified: branches/0.3/sources/qetproject.cpp
===================================================================
--- branches/0.3/sources/qetproject.cpp	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/qetproject.cpp	2010-07-18 19:16:52 UTC (rev 1085)
@@ -36,6 +36,7 @@
 */
 QETProject::QETProject(int diagrams, QObject *parent) :
 	QObject(parent),
+	project_qet_version_(-1),
 	read_only_(false)
 {
 	// 0 a n schema(s) vide(s)
@@ -61,6 +62,7 @@
 */
 QETProject::QETProject(const QString &path, QObject *parent) :
 	QObject(parent),
+	project_qet_version_(-1),
 	read_only_(false)
 {
 	// ouvre le fichier
@@ -94,6 +96,7 @@
 */
 QETProject::QETProject(const QDomElement &xml_element, QObject *parent) :
 	QObject(parent),
+	project_qet_version_(-1),
 	read_only_(false)
 {
 	// copie le contenu XML
@@ -240,6 +243,15 @@
 }
 
 /**
+	@return la version de QElectroTech declaree dans le fichier projet lorsque
+	celui-ci a ete ouvert ; si ce projet n'a jamais ete enregistre / ouvert
+	depuis un fichier, cette methode retourne -1.
+*/
+qreal QETProject::declaredQElectroTechVersion() {
+	return(project_qet_version_);
+}
+
+/**
 	@param title le nouveau titre du projet
 */
 void QETProject::setTitle(const QString &title) {
@@ -689,14 +701,15 @@
 */
 void QETProject::readProjectXml() {
 	QDomElement root_elmt = document_root_.documentElement();
+	state_ = ProjectParsingRunning;
 	
 	// la racine du document XML est sensee etre un element "project"
 	if (root_elmt.tagName() == "project") {
 		// mode d'ouverture normal
 		if (root_elmt.hasAttribute("version")) {
 			bool conv_ok;
-			qreal diagram_version = root_elmt.attribute("version").toDouble(&conv_ok);
-			if (conv_ok && QET::version.toDouble() < diagram_version) {
+			project_qet_version_ = root_elmt.attribute("version").toDouble(&conv_ok);
+			if (conv_ok && QET::version.toDouble() < project_qet_version_) {
 				QET::MessageBox::warning(
 					0,
 					tr("Avertissement", "message box title"),

Modified: branches/0.3/sources/qetproject.h
===================================================================
--- branches/0.3/sources/qetproject.h	2010-07-18 15:16:51 UTC (rev 1084)
+++ branches/0.3/sources/qetproject.h	2010-07-18 19:16:52 UTC (rev 1085)
@@ -60,10 +60,11 @@
 		Represente l'etat du projet
 	*/
 	enum ProjectState {
-		Ok                   = 0, /// Le projet n'est pas en erreur
-		FileOpenFailed       = 1, /// l'ouverture d'un fichier a echoue
-		XmlParsingFailed     = 2, /// l'analyse XML a echoue
-		ProjectParsingFailed = 3  /// la lecture en tant que projet a echoue
+		Ok                    = 0, /// Le projet n'est pas en erreur
+		FileOpenFailed        = 1, /// l'ouverture d'un fichier a echoue
+		XmlParsingFailed      = 2, /// l'analyse XML a echoue
+		ProjectParsingRunning = 3, /// la lecture du projet est en cours
+		ProjectParsingFailed  = 4  /// la lecture en tant que projet a echoue
 	};
 	
 	// methodes
@@ -76,6 +77,7 @@
 	QString currentDir() const;
 	QString pathNameTitle() const;
 	QString title() const;
+	qreal declaredQElectroTechVersion();
 	void setTitle(const QString &);
 	BorderProperties defaultBorderProperties() const;
 	void setDefaultBorderProperties(const BorderProperties &);
@@ -142,6 +144,8 @@
 	XmlElementsCollection *collection_;
 	/// Titre du projet
 	QString project_title_;
+	/// Version de QElectroTech declaree dans le document XML lors de son ouverture
+	qreal project_qet_version_;
 	/// booleen indiquant si le projet est en ReadOnly ou non
 	bool read_only_;
 	/// Chemin du fichier pour lequel ce projet est considere comme etant en lecture seule


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