[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