mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-21 08:40:53 +01:00
Les champs de texte sont dorenavant sauvegardes dans / lus depuis les fichiers *.qet
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@68 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
63
element.cpp
63
element.cpp
@@ -298,19 +298,9 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr) {
|
|||||||
les bornes vont maintenant etre recensees pour associer leurs id à leur adresse reelle
|
les bornes vont maintenant etre recensees pour associer leurs id à leur adresse reelle
|
||||||
ce recensement servira lors de la mise en place des fils
|
ce recensement servira lors de la mise en place des fils
|
||||||
*/
|
*/
|
||||||
|
|
||||||
QList<QDomElement> liste_terminals;
|
QList<QDomElement> liste_terminals;
|
||||||
// parcours des enfants de l'element
|
foreach(QDomElement qde, findInDomElement(e, "bornes", "borne")) {
|
||||||
for (QDomNode enfant = e.firstChild() ; !enfant.isNull() ; enfant = enfant.nextSibling()) {
|
if (Terminal::valideXml(qde)) liste_terminals << qde;
|
||||||
// on s'interesse a l'element XML "bornes"
|
|
||||||
QDomElement terminals = enfant.toElement();
|
|
||||||
if (terminals.isNull() || terminals.tagName() != "bornes") continue;
|
|
||||||
// parcours des enfants de l'element XML "bornes"
|
|
||||||
for (QDomNode node_terminal = terminals.firstChild() ; !node_terminal.isNull() ; node_terminal = node_terminal.nextSibling()) {
|
|
||||||
// on s'interesse a l'element XML "borne"
|
|
||||||
QDomElement terminal = node_terminal.toElement();
|
|
||||||
if (!terminal.isNull() && Terminal::valideXml(terminal)) liste_terminals.append(terminal);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QHash<int, Terminal *> priv_id_adr;
|
QHash<int, Terminal *> priv_id_adr;
|
||||||
@@ -345,6 +335,14 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// importe les valeurs des champs de texte
|
||||||
|
QList<QDomElement> inputs = findInDomElement(e, "inputs", "input");
|
||||||
|
foreach(QGraphicsItem *qgi, children()) {
|
||||||
|
if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(qgi)) {
|
||||||
|
foreach(QDomElement input, inputs) eti -> fromXml(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// position, selection et orientation
|
// position, selection et orientation
|
||||||
setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
|
setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
|
||||||
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||||||
@@ -404,5 +402,46 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
element.appendChild(terminals);
|
element.appendChild(terminals);
|
||||||
|
|
||||||
|
// enregistrement des champ de texte de l'appareil
|
||||||
|
QDomElement inputs = document.createElement("inputs");
|
||||||
|
// pour chaque enfant de l'element
|
||||||
|
foreach(QGraphicsItem *child, children()) {
|
||||||
|
// si cet enfant est un champ de texte
|
||||||
|
if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(child)) {
|
||||||
|
// alors on enregistre le champ de texte
|
||||||
|
inputs.appendChild(eti -> toXml(document));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
element.appendChild(inputs);
|
||||||
|
|
||||||
return(element);
|
return(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Methode statique sans rapport direct avec la manipulation des elements.
|
||||||
|
Etant donne un element XML e, elle renvoie la liste de tous les elements
|
||||||
|
children imbriques dans les elements parent, eux-memes enfants de l'elememt e
|
||||||
|
@param e Element XML a explorer
|
||||||
|
@param parent tag XML intermediaire
|
||||||
|
@param children tag XML a rechercher
|
||||||
|
@return La liste des elements XML children
|
||||||
|
*/
|
||||||
|
QList<QDomElement> Element::findInDomElement(QDomElement e, QString parent, QString children) {
|
||||||
|
// recense les champs de texte
|
||||||
|
QList<QDomElement> return_list;
|
||||||
|
// parcours des enfants de l'element
|
||||||
|
for (QDomNode enfant = e.firstChild() ; !enfant.isNull() ; enfant = enfant.nextSibling()) {
|
||||||
|
// on s'interesse a l'element XML "parent"
|
||||||
|
QDomElement parents = enfant.toElement();
|
||||||
|
if (parents.isNull() || parents.tagName() != parent) continue;
|
||||||
|
// parcours des enfants de l'element XML "parent"
|
||||||
|
for (QDomNode node_children = parents.firstChild() ; !node_children.isNull() ; node_children = node_children.nextSibling()) {
|
||||||
|
// on s'interesse a l'element XML "children"
|
||||||
|
QDomElement children = node_children.toElement();
|
||||||
|
if (!children.isNull()) return_list.append(children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(return_list);
|
||||||
|
}
|
||||||
|
|||||||
@@ -87,6 +87,7 @@
|
|||||||
if (o == Terminal::Nord) return(Terminal::Ouest);
|
if (o == Terminal::Nord) return(Terminal::Ouest);
|
||||||
return((Terminal::Orientation)(o - 1));
|
return((Terminal::Orientation)(o - 1));
|
||||||
}
|
}
|
||||||
|
static QList<QDomElement> findInDomElement(QDomElement, QString, QString);
|
||||||
|
|
||||||
QSize dimensions;
|
QSize dimensions;
|
||||||
QPoint hotspot_coord;
|
QPoint hotspot_coord;
|
||||||
|
|||||||
@@ -21,7 +21,32 @@ void ElementTextItem::setPos(qreal x, qreal y) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QPointF ElementTextItem::pos() const {
|
QPointF ElementTextItem::pos() const {
|
||||||
QPointF actual_pos = pos();
|
QPointF actual_pos = QGraphicsTextItem::pos();
|
||||||
actual_pos += QPointF(0.0, boundingRect().height() / 2.0);
|
actual_pos += QPointF(0.0, boundingRect().height() / 2.0);
|
||||||
return(actual_pos);
|
return(actual_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
void ElementTextItem::fromXml(QDomElement &e) {
|
||||||
|
QPointF _pos = pos();
|
||||||
|
if (e.attribute("x").toDouble() == _pos.x() && e.attribute("y").toDouble() == _pos.y()) {
|
||||||
|
setPlainText(e.attribute("text"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param document Le document XML a utiliser
|
||||||
|
@return L'element XML representant ce champ de texte
|
||||||
|
*/
|
||||||
|
QDomElement ElementTextItem::toXml(QDomDocument &document) {
|
||||||
|
QDomElement result = document.createElement("input");
|
||||||
|
result.setAttribute("x", pos().x());
|
||||||
|
result.setAttribute("y", pos().y());
|
||||||
|
result.setAttribute("text", toPlainText());
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef ELEMENT_TEXT_ITEM_H
|
#ifndef ELEMENT_TEXT_ITEM_H
|
||||||
#define ELEMENT_TEXT_ITEM_H
|
#define ELEMENT_TEXT_ITEM_H
|
||||||
#include <QGraphicsTextItem>
|
#include <QGraphicsTextItem>
|
||||||
|
#include <QtXml>
|
||||||
class ElementTextItem : public QGraphicsTextItem {
|
class ElementTextItem : public QGraphicsTextItem {
|
||||||
// constructeurs
|
// constructeurs
|
||||||
public:
|
public:
|
||||||
@@ -17,6 +18,8 @@
|
|||||||
virtual int type() const { return Type; }
|
virtual int type() const { return Type; }
|
||||||
inline bool followParentRotations() const { return(follow_parent_rotations); }
|
inline bool followParentRotations() const { return(follow_parent_rotations); }
|
||||||
inline void setFollowParentRotations(bool frp) { follow_parent_rotations = frp; }
|
inline void setFollowParentRotations(bool frp) { follow_parent_rotations = frp; }
|
||||||
|
void fromXml(QDomElement &);
|
||||||
|
QDomElement toXml(QDomDocument &);
|
||||||
void setPos(const QPointF &);
|
void setPos(const QPointF &);
|
||||||
void setPos(qreal, qreal);
|
void setPos(qreal, qreal);
|
||||||
QPointF pos() const;
|
QPointF pos() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user