mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-21 16:50: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
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user