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:
xavierqet
2007-02-24 19:56:29 +00:00
parent cbc12b8aef
commit 89885422eb
4 changed files with 81 additions and 13 deletions

View File

@@ -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
ce recensement servira lors de la mise en place des fils
*/
QList<QDomElement> liste_terminals;
// parcours des enfants de l'element
for (QDomNode enfant = e.firstChild() ; !enfant.isNull() ; enfant = enfant.nextSibling()) {
// 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);
}
foreach(QDomElement qde, findInDomElement(e, "bornes", "borne")) {
if (Terminal::valideXml(qde)) liste_terminals << qde;
}
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
setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
@@ -404,5 +402,46 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
}
}
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);
}
/**
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);
}

View File

@@ -87,6 +87,7 @@
if (o == Terminal::Nord) return(Terminal::Ouest);
return((Terminal::Orientation)(o - 1));
}
static QList<QDomElement> findInDomElement(QDomElement, QString, QString);
QSize dimensions;
QPoint hotspot_coord;

View File

@@ -21,7 +21,32 @@ void ElementTextItem::setPos(qreal x, qreal y) {
}
QPointF ElementTextItem::pos() const {
QPointF actual_pos = pos();
QPointF actual_pos = QGraphicsTextItem::pos();
actual_pos += QPointF(0.0, boundingRect().height() / 2.0);
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);
}

View File

@@ -1,6 +1,7 @@
#ifndef ELEMENT_TEXT_ITEM_H
#define ELEMENT_TEXT_ITEM_H
#include <QGraphicsTextItem>
#include <QtXml>
class ElementTextItem : public QGraphicsTextItem {
// constructeurs
public:
@@ -17,6 +18,8 @@
virtual int type() const { return Type; }
inline bool followParentRotations() const { return(follow_parent_rotations); }
inline void setFollowParentRotations(bool frp) { follow_parent_rotations = frp; }
void fromXml(QDomElement &);
QDomElement toXml(QDomDocument &);
void setPos(const QPointF &);
void setPos(qreal, qreal);
QPointF pos() const;