mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 05:00:33 +01:00
Correction d'une regression : les annulations sont de nouveau disponibles pour les champs de texte des elements.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@565 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -209,6 +209,11 @@ QList<Conductor *> CustomElement::conductors() const {
|
||||
return(conductors);
|
||||
}
|
||||
|
||||
/// @return la liste des textes de cet element
|
||||
QList<ElementTextItem *> CustomElement::texts() const {
|
||||
return(list_texts_);
|
||||
}
|
||||
|
||||
/**
|
||||
@return Le nombre de bornes que l'element possede
|
||||
*/
|
||||
@@ -560,6 +565,9 @@ ElementTextItem *CustomElement::parseInput(QDomElement &e) {
|
||||
eti -> setPos(pos_x, pos_y);
|
||||
eti -> setOriginalPos(QPointF(pos_x, pos_y));
|
||||
if (e.attribute("rotate") == "true") eti -> setFollowParentRotations(true);
|
||||
|
||||
list_texts_ << eti;
|
||||
|
||||
return(eti);
|
||||
}
|
||||
|
||||
|
||||
@@ -49,11 +49,13 @@ class CustomElement : public FixedElement {
|
||||
ElementsLocation location_;
|
||||
QPicture drawing;
|
||||
QList<Terminal *> list_terminals;
|
||||
QList<ElementTextItem *> list_texts_;
|
||||
|
||||
// methodes
|
||||
public:
|
||||
virtual QList<Terminal *> terminals() const;
|
||||
virtual QList<Conductor *> conductors() const;
|
||||
virtual QList<ElementTextItem *> texts() const;
|
||||
virtual int terminalsCount() const;
|
||||
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *);
|
||||
QString typeId() const;
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "conductor.h"
|
||||
#include "customelement.h"
|
||||
#include "diagram.h"
|
||||
#include "elementtextitem.h"
|
||||
#include "exportdialog.h"
|
||||
#include "ghostelement.h"
|
||||
#include "diagramcommands.h"
|
||||
@@ -450,7 +451,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
|
||||
// charge les caracteristiques de l'element
|
||||
if (nvel_elmt -> fromXml(e, table_adr_id)) {
|
||||
// ajout de l'element au schema et a la liste des elements ajoutes
|
||||
addItem(nvel_elmt);
|
||||
addElement(nvel_elmt);
|
||||
added_elements << nvel_elmt;
|
||||
} else {
|
||||
delete nvel_elmt;
|
||||
@@ -463,12 +464,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
|
||||
foreach (QDomElement f, QET::findInDomElement(root, "inputs", "input")) {
|
||||
DiagramTextItem *dti = new DiagramTextItem(0, this);
|
||||
dti -> fromXml(f);
|
||||
QObject::connect(
|
||||
dti,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
this,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
addDiagramTextItem(dti);
|
||||
added_texts << dti;
|
||||
}
|
||||
|
||||
@@ -584,6 +580,121 @@ QDomElement Diagram::writeXml(QDomDocument &xml_doc) const {
|
||||
return(new_node.toElement());
|
||||
}
|
||||
|
||||
/**
|
||||
Ajoute un element sur le schema
|
||||
@param element Element a ajouter
|
||||
*/
|
||||
void Diagram::addElement(Element *element) {
|
||||
if (!element || isReadOnly()) return;
|
||||
|
||||
// ajoute l'element au schema
|
||||
if (element -> scene() != this) {
|
||||
addItem(element);
|
||||
}
|
||||
|
||||
// surveille les modifications de ses champs de texte
|
||||
foreach(ElementTextItem *eti, element -> texts()) {
|
||||
connect(
|
||||
eti,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
this,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Ajoute un conducteur sur le schema
|
||||
@param conductor Conducteur a ajouter
|
||||
*/
|
||||
void Diagram::addConductor(Conductor *conductor) {
|
||||
if (!conductor || isReadOnly()) return;
|
||||
|
||||
// ajoute le conducteur au schema
|
||||
if (conductor -> scene() != this) {
|
||||
addItem(conductor);
|
||||
conductor -> terminal1 -> addConductor(conductor);
|
||||
conductor -> terminal2 -> addConductor(conductor);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Aoute un champ de texte independant sur le schema
|
||||
@param dti Champ de texte a ajouter
|
||||
*/
|
||||
void Diagram::addDiagramTextItem(DiagramTextItem *dti) {
|
||||
if (!dti || isReadOnly()) return;
|
||||
|
||||
// ajoute le champ de texte au schema
|
||||
if (dti -> scene() != this) {
|
||||
addItem(dti);
|
||||
}
|
||||
|
||||
// surveille les modifications apportees au champ de texte
|
||||
connect(
|
||||
dti,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
this,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Enleve un element du schema
|
||||
@param element Element a enlever
|
||||
*/
|
||||
void Diagram::removeElement(Element *element) {
|
||||
if (!element || isReadOnly()) return;
|
||||
|
||||
// enleve l'element au schema
|
||||
removeItem(element);
|
||||
|
||||
// arrete la surveillance des modifications de ses champs de texte
|
||||
foreach(ElementTextItem *eti, element -> texts()) {
|
||||
disconnect(
|
||||
eti,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
this,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Enleve un conducteur du schema
|
||||
@param conductor Conducteur a enlever
|
||||
*/
|
||||
void Diagram::removeConductor(Conductor *conductor) {
|
||||
if (!conductor || isReadOnly()) return;
|
||||
|
||||
// detache le conducteur sans le detruire
|
||||
conductor -> terminal1 -> removeConductor(conductor);
|
||||
conductor -> terminal2 -> removeConductor(conductor);
|
||||
|
||||
// enleve le conducteur du schema
|
||||
removeItem(conductor);
|
||||
}
|
||||
|
||||
/**
|
||||
Enleve un champ de texte independant du schema
|
||||
@param dti Champ de texte a enlever
|
||||
*/
|
||||
void Diagram::removeDiagramTextItem(DiagramTextItem *dti) {
|
||||
if (!dti || isReadOnly()) return;
|
||||
|
||||
// enleve le champ de texte au schema
|
||||
removeItem(dti);
|
||||
|
||||
// arrete la surveillance des modifications apportees au champ de texte
|
||||
disconnect(
|
||||
dti,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
this,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
Gere le fait qu'un texte du schema ait ete modifie
|
||||
@param text_item Texte modifie
|
||||
|
||||
@@ -115,6 +115,15 @@ class Diagram : public QGraphicsScene {
|
||||
bool wasWritten() const;
|
||||
QDomElement writeXml(QDomDocument &) const;
|
||||
|
||||
// fonctions relative a l'ajout et a l'enlevement d'elements graphiques sur le schema
|
||||
void addElement(Element *);
|
||||
void addConductor(Conductor *);
|
||||
void addDiagramTextItem(DiagramTextItem *);
|
||||
|
||||
void removeElement(Element *);
|
||||
void removeConductor(Conductor *);
|
||||
void removeDiagramTextItem(DiagramTextItem *);
|
||||
|
||||
// fonctions relatives aux options graphiques
|
||||
void setDisplayGrid(bool);
|
||||
bool displayGrid();
|
||||
|
||||
@@ -48,12 +48,12 @@ AddElementCommand::~AddElementCommand() {
|
||||
|
||||
/// Annule l'ajout
|
||||
void AddElementCommand::undo() {
|
||||
diagram -> removeItem(element);
|
||||
diagram -> removeElement(element);
|
||||
}
|
||||
|
||||
/// Refait l'ajout
|
||||
void AddElementCommand::redo() {
|
||||
diagram -> addItem(element);
|
||||
diagram -> addElement(element);
|
||||
element -> setPos(position);
|
||||
element -> setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||||
}
|
||||
@@ -81,24 +81,12 @@ AddTextCommand::~AddTextCommand() {
|
||||
|
||||
/// Annule l'ajout
|
||||
void AddTextCommand::undo() {
|
||||
QObject::disconnect(
|
||||
textitem,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
diagram,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
diagram -> removeItem(textitem);
|
||||
diagram -> removeDiagramTextItem(textitem);
|
||||
}
|
||||
|
||||
/// Refait l'ajour
|
||||
void AddTextCommand::redo() {
|
||||
QObject::connect(
|
||||
textitem,
|
||||
SIGNAL(diagramTextChanged(DiagramTextItem *, const QString &, const QString &)),
|
||||
diagram,
|
||||
SLOT(diagramTextChanged(DiagramTextItem *, const QString &, const QString &))
|
||||
);
|
||||
diagram -> addItem(textitem);
|
||||
diagram -> addDiagramTextItem(textitem);
|
||||
textitem -> setPos(position);
|
||||
}
|
||||
|
||||
@@ -127,15 +115,12 @@ AddConductorCommand::~AddConductorCommand() {
|
||||
|
||||
/// Annule l'ajout
|
||||
void AddConductorCommand::undo() {
|
||||
// detache le conducteur sans le detruire
|
||||
conductor -> terminal1 -> removeConductor(conductor);
|
||||
conductor -> terminal2 -> removeConductor(conductor);
|
||||
diagram -> removeItem(conductor);
|
||||
diagram -> removeConductor(conductor);
|
||||
}
|
||||
|
||||
/// Refait l'ajout
|
||||
void AddConductorCommand::redo() {
|
||||
diagram -> addItem(conductor);
|
||||
diagram -> addConductor(conductor);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,19 +158,17 @@ DeleteElementsCommand::~DeleteElementsCommand() {
|
||||
void DeleteElementsCommand::undo() {
|
||||
// remet les elements
|
||||
foreach(Element *e, removed_content.elements) {
|
||||
diagram -> addItem(e);
|
||||
diagram -> addElement(e);
|
||||
}
|
||||
|
||||
// remet les conducteurs
|
||||
foreach(Conductor *c, removed_content.conductors(DiagramContent::AnyConductor)) {
|
||||
diagram -> addItem(c);
|
||||
c -> terminal1 -> addConductor(c);
|
||||
c -> terminal2 -> addConductor(c);
|
||||
diagram -> addConductor(c);
|
||||
}
|
||||
|
||||
// remet les textes
|
||||
foreach(DiagramTextItem *t, removed_content.textFields) {
|
||||
diagram -> addItem(t);
|
||||
diagram -> addDiagramTextItem(t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,19 +176,17 @@ void DeleteElementsCommand::undo() {
|
||||
void DeleteElementsCommand::redo() {
|
||||
// enleve les conducteurs
|
||||
foreach(Conductor *c, removed_content.conductors(DiagramContent::AnyConductor)) {
|
||||
c -> terminal1 -> removeConductor(c);
|
||||
c -> terminal2 -> removeConductor(c);
|
||||
diagram -> removeItem(c);
|
||||
diagram -> removeConductor(c);
|
||||
}
|
||||
|
||||
// enleve les elements
|
||||
foreach(Element *e, removed_content.elements) {
|
||||
diagram -> removeItem(e);
|
||||
diagram -> removeElement(e);
|
||||
}
|
||||
|
||||
// enleve les textes
|
||||
foreach(DiagramTextItem *t, removed_content.textFields) {
|
||||
diagram -> removeItem(t);
|
||||
diagram -> removeDiagramTextItem(t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,17 +227,13 @@ PasteDiagramCommand::~PasteDiagramCommand() {
|
||||
/// annule le coller
|
||||
void PasteDiagramCommand::undo() {
|
||||
// enleve les conducteurs
|
||||
foreach(Conductor *c, content.conductorsToMove) {
|
||||
c -> terminal1 -> removeConductor(c);
|
||||
c -> terminal2 -> removeConductor(c);
|
||||
diagram -> removeItem(c);
|
||||
}
|
||||
foreach(Conductor *c, content.conductorsToMove) diagram -> removeConductor(c);
|
||||
|
||||
// enleve les elements
|
||||
foreach(Element *e, content.elements) diagram -> removeItem(e);
|
||||
foreach(Element *e, content.elements) diagram -> removeElement(e);
|
||||
|
||||
// enleve les textes
|
||||
foreach(DiagramTextItem *t, content.textFields) diagram -> removeItem(t);
|
||||
foreach(DiagramTextItem *t, content.textFields) diagram -> removeDiagramTextItem(t);
|
||||
}
|
||||
|
||||
/// refait le coller
|
||||
@@ -264,17 +241,13 @@ void PasteDiagramCommand::redo() {
|
||||
if (first_redo) first_redo = false;
|
||||
else {
|
||||
// pose les elements
|
||||
foreach(Element *e, content.elements) diagram -> addItem(e);
|
||||
foreach(Element *e, content.elements) diagram -> addElement(e);
|
||||
|
||||
// pose les conducteurs
|
||||
foreach(Conductor *c, content.conductorsToMove) {
|
||||
diagram -> addItem(c);
|
||||
c -> terminal1 -> addConductor(c);
|
||||
c -> terminal2 -> addConductor(c);
|
||||
}
|
||||
foreach(Conductor *c, content.conductorsToMove) diagram -> addConductor(c);
|
||||
|
||||
// pose les textes
|
||||
foreach(DiagramTextItem *t, content.textFields) diagram -> addItem(t);
|
||||
foreach(DiagramTextItem *t, content.textFields) diagram -> addDiagramTextItem(t);
|
||||
}
|
||||
foreach(Element *e, content.elements) e -> setSelected(true);
|
||||
foreach(Conductor *c, content.conductorsToMove) c -> setSelected(true);
|
||||
|
||||
@@ -437,29 +437,21 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
|
||||
}
|
||||
|
||||
// enregistrement des bornes de l'appareil
|
||||
QDomElement terminals = document.createElement("terminals");
|
||||
QDomElement xml_terminals = document.createElement("terminals");
|
||||
// pour chaque enfant de l'element
|
||||
foreach(QGraphicsItem *child, childItems()) {
|
||||
// si cet enfant est une borne
|
||||
if (Terminal *t = qgraphicsitem_cast<Terminal *>(child)) {
|
||||
// alors on enregistre la borne
|
||||
QDomElement terminal = t -> toXml(document);
|
||||
terminal.setAttribute("id", id_terminal);
|
||||
table_adr_id.insert(t, id_terminal ++);
|
||||
terminals.appendChild(terminal);
|
||||
}
|
||||
foreach(Terminal *t, terminals()) {
|
||||
// alors on enregistre la borne
|
||||
QDomElement terminal = t -> toXml(document);
|
||||
terminal.setAttribute("id", id_terminal);
|
||||
table_adr_id.insert(t, id_terminal ++);
|
||||
xml_terminals.appendChild(terminal);
|
||||
}
|
||||
element.appendChild(terminals);
|
||||
element.appendChild(xml_terminals);
|
||||
|
||||
// enregistrement des champ de texte de l'appareil
|
||||
QDomElement inputs = document.createElement("inputs");
|
||||
// pour chaque enfant de l'element
|
||||
foreach(QGraphicsItem *child, childItems()) {
|
||||
// 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));
|
||||
}
|
||||
foreach(ElementTextItem *eti, texts()) {
|
||||
inputs.appendChild(eti -> toXml(document));
|
||||
}
|
||||
element.appendChild(inputs);
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "terminal.h"
|
||||
#include "orientationset.h"
|
||||
class Diagram;
|
||||
class ElementTextItem;
|
||||
/**
|
||||
Cette classe abstraite represente un element electrique.
|
||||
*/
|
||||
@@ -68,6 +69,8 @@ class Element : public QObject, public QGraphicsItem {
|
||||
virtual QList<Terminal *> terminals() const = 0;
|
||||
/// @return la liste des conducteurs relies a cet element
|
||||
virtual QList<Conductor *> conductors() const = 0;
|
||||
/// @return la liste des champs de textes de cet element
|
||||
virtual QList<ElementTextItem *> texts() const = 0;
|
||||
/// @return le nombre de bornes actuel de cet element
|
||||
virtual int terminalsCount() const = 0;
|
||||
/// @return le nombre de bornes minimum de cet element
|
||||
|
||||
@@ -26,6 +26,7 @@ class Diagram;
|
||||
malgre les rotations de son element parent.
|
||||
*/
|
||||
class ElementTextItem : public DiagramTextItem {
|
||||
Q_OBJECT
|
||||
// constructeurs, destructeur
|
||||
public:
|
||||
ElementTextItem(QGraphicsItem * = 0, QGraphicsScene * = 0);
|
||||
|
||||
Reference in New Issue
Block a user