diff --git a/sources/editor/arceditor.cpp b/sources/editor/arceditor.cpp
index b4c63f009..2b86a0830 100644
--- a/sources/editor/arceditor.cpp
+++ b/sources/editor/arceditor.cpp
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see .
*/
#include "arceditor.h"
+#include "styleeditor.h"
#include "partarc.h"
/**
@@ -24,10 +25,11 @@
@param arc L'arc a editer
@param parent le Widget parent
*/
-ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) : ElementItemEditor(editor, parent) {
-
- part = arc;
-
+ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(arc)
+{
+ style_ = new StyleEditor(editor);
x = new QLineEdit();
y = new QLineEdit();
h = new QLineEdit();
@@ -42,7 +44,9 @@ ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) :
h -> setValidator(new QDoubleValidator(h));
v -> setValidator(new QDoubleValidator(v));
- QGridLayout *grid = new QGridLayout(this);
+ QVBoxLayout *v_layout = new QVBoxLayout(this);
+
+ QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0);
grid -> addWidget(x, 1, 1);
@@ -57,6 +61,10 @@ ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) :
grid -> addWidget(start_angle, 5, 1);
grid -> addWidget(new QLabel(tr("Angle :")), 6, 0);
grid -> addWidget(angle, 6, 1);
+
+ v_layout -> addWidget(style_);
+ v_layout -> addLayout(grid);
+
updateForm();
activeConnections(true);
@@ -66,16 +74,48 @@ ArcEditor::ArcEditor(QETElementEditor *editor, PartArc *arc, QWidget *parent) :
ArcEditor::~ArcEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur d'arc acceptera d'editer la primitive new_part s'il s'agit d'un
+ objet de la classe PartArc.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool ArcEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ style_ -> setPart(0);
+ return(true);
+ }
+ if (PartArc *part_arc = dynamic_cast(new_part)) {
+ part = part_arc;
+ style_ -> setPart(part);
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *ArcEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour l'arc a partir a partir des donnees du formulaire
*/
void ArcEditor::updateArc() {
- part -> setProperty("x", x -> text().toDouble());
- part -> setProperty("y", y -> text().toDouble());
- part -> setProperty("diameter_h", h -> text().toDouble());
- part -> setProperty("diameter_v", v -> text().toDouble());
- part -> setStartAngle(-start_angle -> value() + 90);
- part -> setAngle(-angle -> value());
+ if (!part) return;
+ part -> setProperty("x", x -> text().toDouble());
+ part -> setProperty("y", y -> text().toDouble());
+ part -> setProperty("diameter_h", h -> text().toDouble());
+ part -> setProperty("diameter_v", v -> text().toDouble());
+ part -> setProperty("start_angle", -start_angle -> value() + 90);
+ part -> setProperty("angle", -angle -> value());
}
/// Met a jour l'abscisse du centre de l'arc et cree un objet d'annulation
@@ -95,6 +135,7 @@ void ArcEditor::updateArcA() { addChangePartCommand(tr("angle"),
Met a jour le formulaire d'edition
*/
void ArcEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
x -> setText(part -> property("x").toString());
y -> setText(part -> property("y").toString());
diff --git a/sources/editor/arceditor.h b/sources/editor/arceditor.h
index 51c4793e4..3f041decf 100644
--- a/sources/editor/arceditor.h
+++ b/sources/editor/arceditor.h
@@ -20,6 +20,7 @@
#include
#include "elementitemeditor.h"
class PartArc;
+class StyleEditor;
/**
Cette classe represente le widget d'edition d'un arc dans l'editeur
d'element.
@@ -28,18 +29,23 @@ class ArcEditor : public ElementItemEditor {
Q_OBJECT
//constructeurs, destructeur
public:
- ArcEditor(QETElementEditor *, PartArc *, QWidget * = 0);
- ~ArcEditor();
+ ArcEditor(QETElementEditor *, PartArc * = 0, QWidget * = 0);
+ virtual ~ArcEditor();
private:
ArcEditor(const ArcEditor &);
// attributs
private:
PartArc *part;
+ StyleEditor *style_;
QLineEdit *x, *y, *h, *v;
QSpinBox *angle, *start_angle;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateArc();
void updateArcX();
diff --git a/sources/editor/circleeditor.cpp b/sources/editor/circleeditor.cpp
index 37ea72038..481da39f2 100644
--- a/sources/editor/circleeditor.cpp
+++ b/sources/editor/circleeditor.cpp
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see .
*/
#include "circleeditor.h"
+#include "styleeditor.h"
#include "partcircle.h"
/**
@@ -24,9 +25,11 @@
@param circle Le cercle a editer
@param parent le Widget parent
*/
-CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget *parent) : ElementItemEditor(editor, parent) {
-
- part = circle;
+CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(circle)
+{
+ style_ = new StyleEditor(editor);
x = new QLineEdit();
y = new QLineEdit();
@@ -36,7 +39,9 @@ CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget
y -> setValidator(new QDoubleValidator(y));
r -> setValidator(new QDoubleValidator(r));
- QGridLayout *grid = new QGridLayout(this);
+ QVBoxLayout *v_layout = new QVBoxLayout(this);
+
+ QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0);
grid -> addWidget(x, 1, 1);
@@ -45,6 +50,9 @@ CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget
grid -> addWidget(new QLabel(tr("Diam\350tre : ")), 2, 0);
grid -> addWidget(r, 2, 1);
+ v_layout -> addWidget(style_);
+ v_layout -> addLayout(grid);
+
activeConnections(true);
updateForm();
}
@@ -53,10 +61,42 @@ CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget
CircleEditor::~CircleEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de cercle acceptera d'editer la primitive new_part s'il s'agit
+ d'un objet de la classe PartCircle.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool CircleEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ style_ -> setPart(0);
+ return(true);
+ }
+ if (PartCircle *part_circle = dynamic_cast(new_part)) {
+ part = part_circle;
+ style_ -> setPart(part);
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *CircleEditor::currentPart() const {
+ return(part);
+}
+
/**
met a jour le cercle a partir des donnees du formulaire
*/
void CircleEditor::updateCircle() {
+ if (!part) return;
part -> setProperty("x", x -> text().toDouble());
part -> setProperty("y", y -> text().toDouble());
part -> setProperty("diameter", r -> text().toDouble());
@@ -75,6 +115,7 @@ void CircleEditor::updateCircleD() { addChangePartCommand(tr("diam\350tre"), par
Met a jour le formulaire d'edition
*/
void CircleEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
x -> setText(part -> property("x").toString());
y -> setText(part -> property("y").toString());
diff --git a/sources/editor/circleeditor.h b/sources/editor/circleeditor.h
index c229339bb..9a7f8d329 100644
--- a/sources/editor/circleeditor.h
+++ b/sources/editor/circleeditor.h
@@ -20,6 +20,7 @@
#include
#include "elementitemeditor.h"
class PartCircle;
+class StyleEditor;
/**
Cette classe represente un editeur de cercle.
Elle permet d'editer a travers une interface graphique les
@@ -29,7 +30,7 @@ class CircleEditor : public ElementItemEditor {
Q_OBJECT
// Constructeurs, destructeur
public:
- CircleEditor(QETElementEditor *, PartCircle *, QWidget * = 0);
+ CircleEditor(QETElementEditor *, PartCircle * = 0, QWidget * = 0);
virtual ~CircleEditor();
private:
CircleEditor(const CircleEditor &);
@@ -37,9 +38,14 @@ class CircleEditor : public ElementItemEditor {
// attributs
private:
PartCircle *part;
+ StyleEditor *style_;
QLineEdit *x, *y, *r;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateCircle();
void updateCircleX();
diff --git a/sources/editor/customelementgraphicpart.cpp b/sources/editor/customelementgraphicpart.cpp
index a26e3a6a3..f912b4e1a 100644
--- a/sources/editor/customelementgraphicpart.cpp
+++ b/sources/editor/customelementgraphicpart.cpp
@@ -83,9 +83,6 @@ void CustomElementGraphicPart::stylesFromXml(const QDomElement &qde) {
// recupere l'antialiasing
_antialiased = qde.attribute("antialias") == "true";
-
- // met a jour l'editeur de style
- style_editor -> updateForm();
}
/**
@@ -142,13 +139,6 @@ void CustomElementGraphicPart::applyStylesToQPainter(QPainter &painter) const {
painter.setBrush(brush);
}
-/**
- @return Le widget permettant d'editer les styles
-*/
-QWidget *CustomElementGraphicPart::elementInformations() {
- return(style_editor);
-}
-
/**
Specifie la valeur d'une propriete de style donnee.
@param property propriete a modifier. Valeurs acceptees :
@@ -177,9 +167,6 @@ void CustomElementGraphicPart::setProperty(const QString &property, const QVaria
setAntialiased(value.toBool());
change_made = true;
}
- if (change_made) {
- style_editor -> updateForm();
- }
}
/**
diff --git a/sources/editor/customelementgraphicpart.h b/sources/editor/customelementgraphicpart.h
index 05dd1e19e..7935bb988 100644
--- a/sources/editor/customelementgraphicpart.h
+++ b/sources/editor/customelementgraphicpart.h
@@ -69,13 +69,10 @@ class CustomElementGraphicPart : public CustomElementPart {
_color(BlackColor),
_antialiased(false)
{
- style_editor = new StyleEditor(elementEditor(), this);
};
/// Destructeur
virtual ~CustomElementGraphicPart() {
- if (style_editor -> parentWidget()) return; // l'editeur de style sera supprime par son parent
- delete style_editor;
};
// attributs
@@ -86,10 +83,6 @@ class CustomElementGraphicPart : public CustomElementPart {
Color _color;
bool _antialiased;
- protected:
- /// Widget d'edition des styles de cette partie graphique
- StyleEditor *style_editor;
-
//methodes
public:
void setLineStyle(LineStyle);
@@ -104,7 +97,6 @@ class CustomElementGraphicPart : public CustomElementPart {
Color color() const;
bool antialiased() const;
- QWidget *elementInformations();
void setProperty(const QString &, const QVariant &);
QVariant property(const QString &);
diff --git a/sources/editor/customelementpart.cpp b/sources/editor/customelementpart.cpp
index 2c393ba5b..f07c9347f 100644
--- a/sources/editor/customelementpart.cpp
+++ b/sources/editor/customelementpart.cpp
@@ -24,6 +24,16 @@ QETElementEditor *CustomElementPart::elementEditor() const {
return(element_editor);
}
+/**
+ Appelle le slot updateCurrentPartEditor de l'editeur
+ @see QETElementEditor::updateCurrentPartEditor()
+*/
+void CustomElementPart::updateCurrentPartEditor() const {
+ if (element_editor) {
+ element_editor -> updateCurrentPartEditor();
+ }
+}
+
/// @return l'ElementScene contenant les parties editees par cet editeur
ElementScene *CustomElementPart::elementScene() const {
return(element_editor -> elementScene());
diff --git a/sources/editor/customelementpart.h b/sources/editor/customelementpart.h
index 9f9e09ad5..00ac395a1 100644
--- a/sources/editor/customelementpart.h
+++ b/sources/editor/customelementpart.h
@@ -59,8 +59,6 @@ class CustomElementPart {
Enregistre la partie dans un document XML
*/
virtual const QDomElement toXml(QDomDocument &) const = 0;
- /// @return un widget suppose decrire et/ou permettre de modifier la partie
- virtual QWidget *elementInformations() = 0;
/**
Permet de modifier une des proprietes de la partie
*/
@@ -77,11 +75,18 @@ class CustomElementPart {
virtual bool isUseless() const = 0;
/// @return un pointeur vers l'editeur d'element parent
virtual QETElementEditor *elementEditor() const;
+ /**
+ Appelle le slot updateCurrentPartEditor de l'editeur
+ @see QETElementEditor::updateCurrentPartEditor()
+ */
+ virtual void updateCurrentPartEditor() const;
/// @return un pointeur vers la scene d'edition parente
virtual ElementScene *elementScene() const;
/// @return la pile d'annulations a utiliser
virtual QUndoStack &undoStack() const;
/// @return le nom de la partie
virtual QString name() const = 0;
+ /// @return le nom qui sera utilise pour nommer l'element XML lors de l'export
+ virtual QString xmlName() const = 0;
};
#endif
diff --git a/sources/editor/elementitemeditor.cpp b/sources/editor/elementitemeditor.cpp
index 1f3aa623a..0675928dc 100644
--- a/sources/editor/elementitemeditor.cpp
+++ b/sources/editor/elementitemeditor.cpp
@@ -47,15 +47,23 @@ QUndoStack &ElementItemEditor::undoStack() const {
/**
Ajoute une ChangePartCommand a l'UndoStack. L'ancienne valeur sera
- automatiquement recuperee.
+ automatiquement recuperee. A noter que cette methode ne fait rien si
+ l'ancienne valeur et la nouvelle sont egales ou encore si part vaut 0
@param desc nom de la propriete modifiee
@param part partie modifiee
@param prop propriete modifiee
@param new_v nouvelle valeur
*/
void ElementItemEditor::addChangePartCommand(const QString &desc, CustomElementPart *part, const QString &prop, const QVariant &new_v) {
+ // ne fait rien si part vaut 0
+ if (!part) return;
+
+ // recupere l'ancienne valeur
QVariant old_v = part -> property(prop);
+
+ // ne fait rien si l'ancienne valeur et la nouvelle sont egales
if (old_v == new_v) return;
+
undoStack().push(
new ChangePartCommand(
desc + " " + element_type_name,
@@ -76,3 +84,12 @@ QString ElementItemEditor::elementTypeName() const {
void ElementItemEditor::setElementTypeName(const QString &name) {
element_type_name = name;
}
+
+/**
+ Detache l'editeur de la primitive qu'il edite.
+ Equivaut a setPart(0)
+ @see setPart
+*/
+void ElementItemEditor::detach() {
+ setPart(0);
+}
diff --git a/sources/editor/elementitemeditor.h b/sources/editor/elementitemeditor.h
index 6d7bb4ac2..c77cada0f 100644
--- a/sources/editor/elementitemeditor.h
+++ b/sources/editor/elementitemeditor.h
@@ -44,6 +44,10 @@ class ElementItemEditor : public QWidget {
virtual void addChangePartCommand(const QString &, CustomElementPart *, const QString &, const QVariant &);
virtual QString elementTypeName() const;
virtual void setElementTypeName(const QString &);
+ virtual void detach();
+ virtual bool setPart(CustomElementPart *) = 0;
+ virtual CustomElementPart *currentPart() const = 0;
+ virtual void updateForm() = 0;
// attributs
private:
diff --git a/sources/editor/ellipseeditor.cpp b/sources/editor/ellipseeditor.cpp
index 6c77a43de..e6c8d401e 100644
--- a/sources/editor/ellipseeditor.cpp
+++ b/sources/editor/ellipseeditor.cpp
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see .
*/
#include "ellipseeditor.h"
+#include "styleeditor.h"
#include "partellipse.h"
/**
@@ -24,9 +25,11 @@
@param ellipse L'ellipse a editer
@param parent le Widget parent
*/
-EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWidget *parent) : ElementItemEditor(editor, parent) {
-
- part = ellipse;
+EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(ellipse)
+{
+ style_ = new StyleEditor(editor);
x = new QLineEdit();
y = new QLineEdit();
@@ -38,7 +41,9 @@ EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWi
h -> setValidator(new QDoubleValidator(h));
v -> setValidator(new QDoubleValidator(v));
- QGridLayout *grid = new QGridLayout(this);
+ QVBoxLayout *v_layout = new QVBoxLayout(this);
+
+ QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Centre : ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0);
grid -> addWidget(x, 1, 1);
@@ -50,6 +55,9 @@ EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWi
grid -> addWidget(new QLabel(tr("vertical :")), 4, 0);
grid -> addWidget(v, 4, 1);
+ v_layout -> addWidget(style_);
+ v_layout -> addLayout(grid);
+
activeConnections(true);
updateForm();
}
@@ -58,10 +66,42 @@ EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWi
EllipseEditor::~EllipseEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur d'ellipse acceptera d'editer la primitive new_part s'il s'agit
+ d'un objet de la classe PartEllipse.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool EllipseEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ style_ -> setPart(0);
+ return(true);
+ }
+ if (PartEllipse *part_ellipse = dynamic_cast(new_part)) {
+ part = part_ellipse;
+ style_ -> setPart(part);
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *EllipseEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour l'ellipse a partir des donnees du formulaire
*/
void EllipseEditor::updateEllipse() {
+ if (!part) return;
part -> setProperty("x", x -> text().toDouble());
part -> setProperty("y", y -> text().toDouble());
part -> setProperty("diameter_h", h -> text().toDouble());
@@ -81,6 +121,7 @@ void EllipseEditor::updateEllipseV() { addChangePartCommand(tr("diam\350tre vert
Met a jour le formulaire d'edition
*/
void EllipseEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
x -> setText(part -> property("x").toString());
y -> setText(part -> property("y").toString());
diff --git a/sources/editor/ellipseeditor.h b/sources/editor/ellipseeditor.h
index fac4d3fea..db3fe967f 100644
--- a/sources/editor/ellipseeditor.h
+++ b/sources/editor/ellipseeditor.h
@@ -20,6 +20,7 @@
#include
#include "elementitemeditor.h"
class PartEllipse;
+class StyleEditor;
/**
Cette classe represente le widget d'edition d'une ellipse dans l'editeur
d'element.
@@ -28,17 +29,22 @@ class EllipseEditor : public ElementItemEditor {
Q_OBJECT
//constructeurs, destructeur
public:
- EllipseEditor(QETElementEditor *, PartEllipse *, QWidget * = 0);
- ~EllipseEditor();
+ EllipseEditor(QETElementEditor *, PartEllipse * = 0, QWidget * = 0);
+ virtual ~EllipseEditor();
private:
EllipseEditor(const EllipseEditor &);
// attributs
private:
PartEllipse *part;
+ StyleEditor *style_;
QLineEdit *x, *y, *h, *v;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateEllipse();
void updateEllipseX();
diff --git a/sources/editor/lineeditor.cpp b/sources/editor/lineeditor.cpp
index 566ded692..6e95105f4 100644
--- a/sources/editor/lineeditor.cpp
+++ b/sources/editor/lineeditor.cpp
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see .
*/
#include "lineeditor.h"
+#include "styleeditor.h"
#include "partline.h"
#include "qet.h"
#include "qeticons.h"
@@ -26,9 +27,11 @@
@param line La ligne a editer
@param parent le Widget parent
*/
-LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent) : ElementItemEditor(editor, parent) {
-
- part = line;
+LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(line)
+{
+ style_ = new StyleEditor(editor);
x1 = new QLineEdit();
y1 = new QLineEdit();
@@ -78,6 +81,7 @@ LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent
grid2 -> addWidget(end2_length, 1, 2);
QVBoxLayout *v_layout = new QVBoxLayout(this);
+ v_layout -> addWidget(style_);
v_layout -> addLayout(grid);
v_layout -> addLayout(grid2);
updateForm();
@@ -87,10 +91,42 @@ LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent
LineEditor::~LineEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de ligne acceptera d'editer la primitive new_part s'il s'agit d'un
+ objet de la classe PartLine.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool LineEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ style_ -> setPart(0);
+ return(true);
+ }
+ if (PartLine *part_line = dynamic_cast(new_part)) {
+ part = part_line;
+ style_ -> setPart(part);
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *LineEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour la ligne a partir des donnees du formulaire
*/
void LineEditor::updateLine() {
+ if (!part) return;
part -> setFirstEndType(static_cast(end1_type -> currentIndex()));
part -> setFirstEndLength(end1_length -> text().toDouble());
part -> setSecondEndType(static_cast(end2_type -> currentIndex()));
@@ -130,6 +166,7 @@ void LineEditor::updateLineEndLength2() { addChangePartCommand(tr("longueur fin
Met a jour le formulaire d'edition
*/
void LineEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
QPointF p1(part -> sceneP1());
QPointF p2(part -> sceneP2());
diff --git a/sources/editor/lineeditor.h b/sources/editor/lineeditor.h
index 81cc31897..aa7d87859 100644
--- a/sources/editor/lineeditor.h
+++ b/sources/editor/lineeditor.h
@@ -20,6 +20,7 @@
#include
#include "elementitemeditor.h"
class PartLine;
+class StyleEditor;
/**
Cette classe represente le widget d'edition d'une ligne dans l'editeur
d'element.
@@ -28,19 +29,24 @@ class LineEditor : public ElementItemEditor {
Q_OBJECT
//constructeurs, destructeur
public:
- LineEditor(QETElementEditor *, PartLine *, QWidget * = 0);
- ~LineEditor();
+ LineEditor(QETElementEditor *, PartLine * = 0, QWidget * = 0);
+ virtual ~LineEditor();
private:
LineEditor(const LineEditor &);
// attributs
private:
PartLine *part;
+ StyleEditor *style_;
QLineEdit *x1, *y1, *x2, *y2;
QComboBox *end1_type, *end2_type;
QLineEdit *end1_length, *end2_length;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateLine();
void updateLineX1();
diff --git a/sources/editor/partarc.cpp b/sources/editor/partarc.cpp
index 1b39fe3d3..4ff53ba1d 100644
--- a/sources/editor/partarc.cpp
+++ b/sources/editor/partarc.cpp
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see .
*/
#include "partarc.h"
-#include "arceditor.h"
/**
Constructeur
@@ -35,10 +34,6 @@ PartArc::PartArc(QETElementEditor *editor, QGraphicsItem *parent, QGraphicsScene
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setAcceptedMouseButtons(Qt::LeftButton);
- informations = new ArcEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
- style_editor -> appendWidget(informations);
- style_editor -> setElementTypeName(name());
}
/// Destructeur
@@ -209,8 +204,8 @@ QVariant PartArc::property(const QString &property) {
*/
QVariant PartArc::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsEllipseItem::itemChange(change, value));
diff --git a/sources/editor/partarc.h b/sources/editor/partarc.h
index 71343a10f..20385cd7b 100644
--- a/sources/editor/partarc.h
+++ b/sources/editor/partarc.h
@@ -19,7 +19,6 @@
#define PART_ARC_H
#include
#include "customelementgraphicpart.h"
-class ArcEditor;
/**
Cette classe represente un arc pouvant etre utilise pour composer le
dessin d'un element dans l'editeur d'element.
@@ -35,7 +34,6 @@ class PartArc : public QGraphicsEllipseItem, public CustomElementGraphicPart {
// attributs
private:
- ArcEditor *informations;
int _angle;
int start_angle;
@@ -49,6 +47,7 @@ class PartArc : public QGraphicsEllipseItem, public CustomElementGraphicPart {
virtual int type() const { return Type; }
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0);
virtual QString name() const { return(QObject::tr("arc", "element part name")); }
+ virtual QString xmlName() const { return(QString("arc")); }
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneTopLeft() const;
diff --git a/sources/editor/partcircle.cpp b/sources/editor/partcircle.cpp
index b8831b8a0..c25a9c30c 100644
--- a/sources/editor/partcircle.cpp
+++ b/sources/editor/partcircle.cpp
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see .
*/
#include "partcircle.h"
-#include "circleeditor.h"
/**
Constructeur
@@ -30,10 +29,6 @@ PartCircle::PartCircle(QETElementEditor *editor, QGraphicsItem *parent, QGraphic
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setAcceptedMouseButtons(Qt::LeftButton);
- informations = new CircleEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
- style_editor -> appendWidget(informations);
- style_editor -> setElementTypeName(name());
}
/// Destructeur
@@ -163,8 +158,8 @@ QVariant PartCircle::property(const QString &property) {
*/
QVariant PartCircle::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsEllipseItem::itemChange(change, value));
diff --git a/sources/editor/partcircle.h b/sources/editor/partcircle.h
index 8e6cb97aa..6f8e54186 100644
--- a/sources/editor/partcircle.h
+++ b/sources/editor/partcircle.h
@@ -19,7 +19,6 @@
#define PART_CIRCLE_H
#include
#include "customelementgraphicpart.h"
-class CircleEditor;
/**
Cette classe represente un cercle pouvant etre utilise pour composer le
dessin d'un element dans l'editeur d'element.
@@ -33,10 +32,6 @@ class PartCircle : public QGraphicsEllipseItem, public CustomElementGraphicPart
private:
PartCircle(const PartCircle &);
- // attributs
- private:
- CircleEditor *informations;
-
// methodes
public:
enum { Type = UserType + 1102 };
@@ -47,6 +42,7 @@ class PartCircle : public QGraphicsEllipseItem, public CustomElementGraphicPart
virtual int type() const { return Type; }
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0);
virtual QString name() const { return(QObject::tr("cercle", "element part name")); }
+ virtual QString xmlName() const { return(QString("circle")); }
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneTopLeft() const;
diff --git a/sources/editor/partellipse.cpp b/sources/editor/partellipse.cpp
index 5e535437e..fa380cecd 100644
--- a/sources/editor/partellipse.cpp
+++ b/sources/editor/partellipse.cpp
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see .
*/
#include "partellipse.h"
-#include "ellipseeditor.h"
/**
Constructeur
@@ -30,10 +29,6 @@ PartEllipse::PartEllipse(QETElementEditor *editor, QGraphicsItem *parent, QGraph
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setAcceptedMouseButtons(Qt::LeftButton);
- informations = new EllipseEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
- style_editor -> appendWidget(informations);
- style_editor -> setElementTypeName(name());
}
/// Destructeur
@@ -170,8 +165,8 @@ QVariant PartEllipse::property(const QString &property) {
*/
QVariant PartEllipse::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsEllipseItem::itemChange(change, value));
diff --git a/sources/editor/partellipse.h b/sources/editor/partellipse.h
index b3a1958c1..c7251b5ed 100644
--- a/sources/editor/partellipse.h
+++ b/sources/editor/partellipse.h
@@ -19,7 +19,6 @@
#define PART_ELLIPSE_H
#include
#include "customelementgraphicpart.h"
-class EllipseEditor;
/**
Cette classe represente une ellipse pouvant etre utilisee pour composer le
dessin d'un element dans l'editeur d'element.
@@ -33,10 +32,6 @@ class PartEllipse : public QGraphicsEllipseItem, public CustomElementGraphicPart
private:
PartEllipse(const PartEllipse &);
- // attributs
- private:
- EllipseEditor *informations;
-
// methodes
public:
enum { Type = UserType + 1103 };
@@ -47,6 +42,7 @@ class PartEllipse : public QGraphicsEllipseItem, public CustomElementGraphicPart
virtual int type() const { return Type; }
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0);
virtual QString name() const { return(QObject::tr("ellipse", "element part name")); }
+ virtual QString xmlName() const { return(QString("ellipse")); }
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneTopLeft() const;
diff --git a/sources/editor/partline.cpp b/sources/editor/partline.cpp
index 966b51db3..0e9bf696a 100644
--- a/sources/editor/partline.cpp
+++ b/sources/editor/partline.cpp
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see .
*/
#include "partline.h"
-#include "lineeditor.h"
#include
/**
@@ -38,10 +37,6 @@ PartLine::PartLine(QETElementEditor *editor, QGraphicsItem *parent, QGraphicsSce
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setAcceptedMouseButtons(Qt::LeftButton);
- informations = new LineEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
- style_editor -> appendWidget(informations);
- style_editor -> setElementTypeName(name());
}
/// Destructeur
@@ -287,8 +282,8 @@ QVariant PartLine::property(const QString &property) {
*/
QVariant PartLine::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsLineItem::itemChange(change, value));
diff --git a/sources/editor/partline.h b/sources/editor/partline.h
index e220fa033..22d41a86e 100644
--- a/sources/editor/partline.h
+++ b/sources/editor/partline.h
@@ -20,7 +20,6 @@
#include
#include "customelementgraphicpart.h"
#include "qet.h"
-class LineEditor;
/**
Cette classe represente une ligne pouvant etre utilisee pour composer le
dessin d'un element dans l'editeur d'element.
@@ -43,7 +42,6 @@ class PartLine : public QGraphicsLineItem, public CustomElementGraphicPart {
// attributs
private:
- LineEditor *informations;
QET::EndType first_end;
qreal first_length;
QET::EndType second_end;
@@ -60,6 +58,7 @@ class PartLine : public QGraphicsLineItem, public CustomElementGraphicPart {
virtual int type() const { return Type; }
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0);
virtual QString name() const { return(QObject::tr("ligne", "element part name")); }
+ virtual QString xmlName() const { return(QString("line")); }
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneP1() const;
diff --git a/sources/editor/partpolygon.cpp b/sources/editor/partpolygon.cpp
index 01eea254e..c1f8bebae 100644
--- a/sources/editor/partpolygon.cpp
+++ b/sources/editor/partpolygon.cpp
@@ -17,7 +17,6 @@
*/
#include "partpolygon.h"
#include "qet.h"
-#include "polygoneditor.h"
/**
Constructeur
@@ -35,10 +34,6 @@ PartPolygon::PartPolygon(QETElementEditor *editor, QGraphicsItem *parent, QGraph
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setAcceptedMouseButtons(Qt::LeftButton);
- informations = new PolygonEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
- style_editor -> appendWidget(informations);
- style_editor -> setElementTypeName(name());
}
/// Destructeur
@@ -142,8 +137,8 @@ QVariant PartPolygon::property(const QString &property) {
*/
QVariant PartPolygon::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsPolygonItem::itemChange(change, value));
diff --git a/sources/editor/partpolygon.h b/sources/editor/partpolygon.h
index 3804d1cb2..2a2b37714 100644
--- a/sources/editor/partpolygon.h
+++ b/sources/editor/partpolygon.h
@@ -19,7 +19,6 @@
#define PART_POLYGON_H
#include
#include "customelementgraphicpart.h"
-class PolygonEditor;
/**
Cette classe represente un polygone pouvant etre utilise pour composer le
dessin d'un element dans l'editeur d'element.
@@ -36,20 +35,7 @@ class PartPolygon : public QGraphicsPolygonItem, public CustomElementGraphicPart
// attributs
private:
bool closed;
- PolygonEditor *informations;
- /**
- constructeur
- paint()
- widget bidon pour l'edition
- methode pour poser le polygone :
- -mousePressEvent = pose un nouveau point
- -mouseMoveEvent = deplace ce point
- -mouveReleaseEvent = finalise ce point
- utiliser QPolygonF ; memoriser le point en cours (tout comme le
- partploygon en cours) et ne l'ajouter au qpolygonf que lors du
- mouseReleaseEvent
- */
// methodes
public:
enum { Type = UserType + 1105 };
@@ -59,6 +45,7 @@ class PartPolygon : public QGraphicsPolygonItem, public CustomElementGraphicPart
*/
virtual int type() const { return Type; }
virtual QString name() const { return(QObject::tr("polygone", "element part name")); }
+ virtual QString xmlName() const { return(QString("polygon")); }
void fromXml(const QDomElement &);
const QDomElement toXml(QDomDocument &) const;
virtual QRectF boundingRect() const;
diff --git a/sources/editor/partrectangle.cpp b/sources/editor/partrectangle.cpp
index 63e418ff7..a4f178466 100644
--- a/sources/editor/partrectangle.cpp
+++ b/sources/editor/partrectangle.cpp
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see .
*/
#include "partrectangle.h"
-#include "rectangleeditor.h"
/**
Constructeur
@@ -30,10 +29,6 @@ PartRectangle::PartRectangle(QETElementEditor *editor, QGraphicsItem *parent, QG
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setAcceptedMouseButtons(Qt::LeftButton);
- informations = new RectangleEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
- style_editor -> appendWidget(informations);
- style_editor -> setElementTypeName(name());
}
/// Destructeur
@@ -177,8 +172,8 @@ QVariant PartRectangle::property(const QString &property) {
*/
QVariant PartRectangle::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsRectItem::itemChange(change, value));
diff --git a/sources/editor/partrectangle.h b/sources/editor/partrectangle.h
index f972a120a..0cb5a3426 100644
--- a/sources/editor/partrectangle.h
+++ b/sources/editor/partrectangle.h
@@ -19,7 +19,6 @@
#define PART_RECTANGLE_H
#include
#include "customelementgraphicpart.h"
-class RectangleEditor;
/**
Cette classe represente un rectangle pouvant etre utilise pour composer le
dessin d'un element dans l'editeur d'element.
@@ -33,10 +32,6 @@ class PartRectangle : public QGraphicsRectItem, public CustomElementGraphicPart
private:
PartRectangle(const PartRectangle &);
- // attributs
- private:
- RectangleEditor *informations;
-
// methodes
public:
enum { Type = UserType + 1109 };
@@ -47,6 +42,7 @@ class PartRectangle : public QGraphicsRectItem, public CustomElementGraphicPart
virtual int type() const { return Type; }
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0);
virtual QString name() const { return(QObject::tr("rectangle", "element part name")); }
+ virtual QString xmlName() const { return(QString("rect")); }
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneTopLeft() const;
diff --git a/sources/editor/partterminal.cpp b/sources/editor/partterminal.cpp
index 8ca9df8f9..84219e01d 100644
--- a/sources/editor/partterminal.cpp
+++ b/sources/editor/partterminal.cpp
@@ -17,7 +17,6 @@
*/
#include "partterminal.h"
#include "terminal.h"
-#include "terminaleditor.h"
/**
Constructeur
@@ -30,8 +29,6 @@ PartTerminal::PartTerminal(QETElementEditor *editor, QGraphicsItem *parent, QGra
QGraphicsItem(parent, scene),
_orientation(QET::North)
{
- informations = new TerminalEditor(elementEditor(), this);
- informations -> setElementTypeName(name());
updateSecondPoint();
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
#if QT_VERSION >= 0x040600
@@ -42,9 +39,7 @@ PartTerminal::PartTerminal(QETElementEditor *editor, QGraphicsItem *parent, QGra
/// Destructeur
PartTerminal::~PartTerminal() {
- if (informations -> parentWidget()) return; // le widget sera supprime par son parent
- delete informations;
-};
+}
/**
Importe les proprietes d'une borne depuis un element XML
@@ -80,13 +75,6 @@ const QDomElement PartTerminal::toXml(QDomDocument &xml_document) const {
return(xml_element);
}
-/**
- @return Le widget permettant d'editer cette borne
-*/
-QWidget *PartTerminal::elementInformations() {
- return(informations);
-}
-
/**
Dessine la borne
@param p QPainter a utiliser pour rendre le dessin
@@ -152,7 +140,6 @@ void PartTerminal::setOrientation(QET::Orientation ori) {
prepareGeometryChange();
_orientation = ori;
updateSecondPoint();
- informations -> updateForm();
}
/**
@@ -202,8 +189,8 @@ QVariant PartTerminal::property(const QString &property) {
*/
QVariant PartTerminal::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
- if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- informations -> updateForm();
+ if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemPositionHasChanged) {
+ updateCurrentPartEditor();
}
}
return(QGraphicsItem::itemChange(change, value));
diff --git a/sources/editor/partterminal.h b/sources/editor/partterminal.h
index 1cad14e1b..46f0a1c29 100644
--- a/sources/editor/partterminal.h
+++ b/sources/editor/partterminal.h
@@ -20,8 +20,6 @@
#include "customelementpart.h"
#include "qet.h"
#include
-class TerminalEditor;
-class QETElementEditor;
/**
Cette classe represente une borne pouvant etre utilisee pour composer le
dessin d'un element dans l'editeur d'element.
@@ -38,7 +36,6 @@ class PartTerminal : public CustomElementPart, public QGraphicsItem {
private:
QET::Orientation _orientation;
QPointF second_point;
- TerminalEditor *informations;
// methodes
public:
@@ -49,9 +46,9 @@ class PartTerminal : public CustomElementPart, public QGraphicsItem {
*/
virtual int type() const { return Type; }
virtual QString name() const { return(QObject::tr("borne", "element part name")); }
+ virtual QString xmlName() const { return(QString("terminal")); }
virtual void fromXml(const QDomElement &);
virtual const QDomElement toXml(QDomDocument &) const;
- virtual QWidget *elementInformations();
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
virtual QRectF boundingRect() const;
QET::Orientation orientation() const;
diff --git a/sources/editor/parttext.cpp b/sources/editor/parttext.cpp
index e80529015..5a76d01d7 100644
--- a/sources/editor/parttext.cpp
+++ b/sources/editor/parttext.cpp
@@ -38,14 +38,10 @@ PartText::PartText(QETElementEditor *editor, QGraphicsItem *parent, ElementScene
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setPlainText(QObject::tr("T", "default text when adding a text in the element editor"));
- infos = new TextEditor(elementEditor(), this);
- infos -> setElementTypeName(name());
}
/// Destructeur
PartText::~PartText() {
- if (infos -> parentWidget()) return; // le widget sera supprime par son parent
- delete infos;
}
/**
@@ -79,13 +75,6 @@ const QDomElement PartText::toXml(QDomDocument &xml_document) const {
return(xml_element);
}
-/**
- @return Le widget permettant d'editer ce texte statique
-*/
-QWidget *PartText::elementInformations() {
- return(infos);
-}
-
/**
Retourne la position du texte, l'origine etant le point en bas a gauche du
texte (et pas du cadre)
@@ -220,7 +209,7 @@ QVariant PartText::property(const QString &property) {
QVariant PartText::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- infos -> updateForm();
+ updateCurrentPartEditor();
}
}
return(QGraphicsTextItem::itemChange(change, value));
diff --git a/sources/editor/parttext.h b/sources/editor/parttext.h
index 30cfe9650..d925f13cf 100644
--- a/sources/editor/parttext.h
+++ b/sources/editor/parttext.h
@@ -33,9 +33,6 @@ class PartText : public QGraphicsTextItem, public CustomElementPart {
private:
PartText(const PartText &);
- // attributs
- TextEditor *infos;
-
// methodes
public:
enum { Type = UserType + 1107 };
@@ -45,9 +42,9 @@ class PartText : public QGraphicsTextItem, public CustomElementPart {
*/
virtual int type() const { return Type; }
virtual QString name() const { return(QObject::tr("texte", "element part name")); }
+ virtual QString xmlName() const { return(QString("text")); }
void fromXml(const QDomElement &);
const QDomElement toXml(QDomDocument &) const;
- QWidget *elementInformations();
QPointF pos() const;
void setPos(const QPointF &);
void setPos(qreal, qreal);
diff --git a/sources/editor/parttextfield.cpp b/sources/editor/parttextfield.cpp
index ffcee2e85..07a1a7b3a 100644
--- a/sources/editor/parttextfield.cpp
+++ b/sources/editor/parttextfield.cpp
@@ -38,14 +38,10 @@ PartTextField::PartTextField(QETElementEditor *editor, QGraphicsItem *parent, QG
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setPlainText(QObject::tr("_", "default text when adding a textfield in the element editor"));
- infos = new TextFieldEditor(elementEditor(), this);
- infos -> setElementTypeName(name());
}
/// Destructeur
PartTextField::~PartTextField() {
- if (infos -> parentWidget()) return; // le widget sera supprime par son parent
- delete infos;
}
/**
@@ -82,13 +78,6 @@ const QDomElement PartTextField::toXml(QDomDocument &xml_document) const {
return(xml_element);
}
-/**
- @return Le widget permettant d'editer ce champ de texte
-*/
-QWidget *PartTextField::elementInformations() {
- return(infos);
-}
-
/**
Retourne la position du texte, l'origine etant le point en bas a gauche du
texte (et pas du cadre)
@@ -245,7 +234,7 @@ QVariant PartTextField::property(const QString &property) {
QVariant PartTextField::itemChange(GraphicsItemChange change, const QVariant &value) {
if (scene()) {
if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
- infos -> updateForm();
+ updateCurrentPartEditor();
}
}
return(QGraphicsTextItem::itemChange(change, value));
diff --git a/sources/editor/parttextfield.h b/sources/editor/parttextfield.h
index 39d5d2230..577ccd8ad 100644
--- a/sources/editor/parttextfield.h
+++ b/sources/editor/parttextfield.h
@@ -37,7 +37,6 @@ class PartTextField : public QGraphicsTextItem, public CustomElementPart {
PartTextField(const PartTextField &);
// attributs
- TextFieldEditor *infos;
bool follow_parent_rotations;
// methodes
@@ -49,9 +48,9 @@ class PartTextField : public QGraphicsTextItem, public CustomElementPart {
*/
virtual int type() const { return Type; }
virtual QString name() const { return(QObject::tr("champ de texte", "element part name")); }
+ virtual QString xmlName() const { return(QString("input")); }
void fromXml(const QDomElement &);
const QDomElement toXml(QDomDocument &) const;
- QWidget *elementInformations();
QPointF pos() const;
void setPos(const QPointF &);
void setPos(qreal, qreal);
diff --git a/sources/editor/polygoneditor.cpp b/sources/editor/polygoneditor.cpp
index 16d8cfd44..40e235cf8 100644
--- a/sources/editor/polygoneditor.cpp
+++ b/sources/editor/polygoneditor.cpp
@@ -29,10 +29,12 @@
*/
PolygonEditor::PolygonEditor(QETElementEditor *editor, PartPolygon *p, QWidget *parent) :
ElementItemEditor(editor, parent),
+ part(p),
points_list(this),
close_polygon(tr("Polygone ferm\351"), this)
{
- part = p;
+ style_ = new StyleEditor(editor);
+
// prepare la liste de points
points_list.setColumnCount(2);
QStringList headers;
@@ -43,6 +45,7 @@ PolygonEditor::PolygonEditor(QETElementEditor *editor, PartPolygon *p, QWidget *
// layout
QVBoxLayout *layout = new QVBoxLayout(this);
+ layout -> addWidget(style_);
layout -> addWidget(new QLabel(tr("Points du polygone :")));
layout -> addWidget(&points_list);
layout -> addWidget(&close_polygon);
@@ -66,6 +69,7 @@ void PolygonEditor::updatePolygon() {
Met a jour les points du polygone et cree un objet d'annulation
*/
void PolygonEditor::updatePolygonPoints() {
+ if (!part) return;
QVector points = getPointsFromTree();
if (points.count() < 2) {
QET::MessageBox::warning(
@@ -82,6 +86,7 @@ void PolygonEditor::updatePolygonPoints() {
Met a jour l'etat ferme ou non du polygone
*/
void PolygonEditor::updatePolygonClosedState() {
+ if (!part) return;
undoStack().push(
new ChangePartCommand(
tr("fermeture du polygone"),
@@ -97,6 +102,7 @@ void PolygonEditor::updatePolygonClosedState() {
Met a jour le formulaire d'edition
*/
void PolygonEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
while(points_list.takeTopLevelItem(0)) {}
foreach(QPointF point, part -> polygon()) {
@@ -111,11 +117,43 @@ void PolygonEditor::updateForm() {
activeConnections(true);
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de polygone acceptera d'editer la primitive new_part s'il s'agit
+ d'un objet de la classe PartPolygon.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool PolygonEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ style_ -> setPart(0);
+ return(true);
+ }
+ if (PartPolygon *part_polygon = dynamic_cast(new_part)) {
+ part = part_polygon;
+ style_ -> setPart(part);
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *PolygonEditor::currentPart() const {
+ return(part);
+}
+
/**
@return Un vecteur contenant les points composant le polygone a partir du
formulaire d'edition
*/
QVector PolygonEditor::getPointsFromTree() {
+ if (!part) return(QVector());
QVector points;
for(int i = 0 ; i < points_list.topLevelItemCount() ; ++ i) {
QTreeWidgetItem *qtwi = points_list.topLevelItem(i);
diff --git a/sources/editor/polygoneditor.h b/sources/editor/polygoneditor.h
index 81f423c63..f5b3b1091 100644
--- a/sources/editor/polygoneditor.h
+++ b/sources/editor/polygoneditor.h
@@ -19,6 +19,7 @@
#define POLYGON_EDITOR_H
#include "elementitemeditor.h"
class PartPolygon;
+class StyleEditor;
/**
Cette classe represente le widget d'edition d'un polygone dans l'editeur
d'element.
@@ -29,7 +30,7 @@ class PolygonEditor : public ElementItemEditor {
// constructeurs, destructeur
public:
- PolygonEditor(QETElementEditor *, PartPolygon *, QWidget * = 0);
+ PolygonEditor(QETElementEditor *, PartPolygon * = 0, QWidget * = 0);
virtual ~PolygonEditor();
private:
@@ -38,10 +39,15 @@ class PolygonEditor : public ElementItemEditor {
// attributs
private:
PartPolygon *part;
+ StyleEditor *style_;
QTreeWidget points_list;
QCheckBox close_polygon;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
private:
QVector getPointsFromTree();
diff --git a/sources/editor/qetelementeditor.cpp b/sources/editor/qetelementeditor.cpp
index 1d1ee0564..03d38c603 100644
--- a/sources/editor/qetelementeditor.cpp
+++ b/sources/editor/qetelementeditor.cpp
@@ -28,6 +28,17 @@
#include "qeticons.h"
#include "qetmessagebox.h"
+// editeurs de primitives
+#include "arceditor.h"
+#include "circleeditor.h"
+#include "ellipseeditor.h"
+#include "lineeditor.h"
+#include "polygoneditor.h"
+#include "rectangleeditor.h"
+#include "terminaleditor.h"
+#include "texteditor.h"
+#include "textfieldeditor.h"
+
/**
Constructeur
@param parent QWidget parent
@@ -60,11 +71,14 @@ QETElementEditor::QETElementEditor(QWidget *parent) :
/// Destructeur
QETElementEditor::~QETElementEditor() {
/*
- retire le widget d'edition de partie affiche par le dock
- cela evite qu'il ne soit supprime avant que la partie a laquelle il est
- rattache ne le supprime une fois de trop
+ retire le widget d'edition de primitives affiche par le dock
+ cela evite qu'il ne soit supprime par son widget parent
*/
clearToolsDock();
+
+ // supprime les editeurs de primitives
+ qDeleteAll(editors_.begin(), editors_.end());
+ editors_.clear();
}
/**
@@ -314,7 +328,14 @@ void QETElementEditor::setupActions() {
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(slot_updateMenus()));
connect(&(ce_scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(slot_updateMenus()));
connect(&(ce_scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(slot_updateTitle()));
+
+ // Annuler ou refaire une action met a jour la liste des primitives ; cela sert notamment pour les
+ // ajouts et suppressions de primitives ainsi que pour les actions entrainant un change
connect(&(ce_scene -> undoStack()), SIGNAL(indexChanged(int)), this, SLOT(slot_updatePartsList()));
+
+ // Annuler ou refaire une action met a jour les informations affichees sur les primitives selectionnees,
+ // celles-ci etant potentiellement impactees
+ connect(&(ce_scene -> undoStack()), SIGNAL(indexChanged(int)), this, SLOT(slot_updateInformations()));
}
/**
@@ -496,6 +517,17 @@ void QETElementEditor::setupInterface() {
tools_dock_stack_ -> insertWidget(0, default_informations);
tools_dock_stack_ -> insertWidget(1, tools_dock_scroll_area_);
+ // widgets d'editions pour les parties
+ editors_["arc"] = new ArcEditor(this);
+ editors_["circle"] = new CircleEditor(this);
+ editors_["ellipse"] = new EllipseEditor(this);
+ editors_["line"] = new LineEditor(this);
+ editors_["polygon"] = new PolygonEditor(this);
+ editors_["rect"] = new RectangleEditor(this);
+ editors_["terminal"] = new TerminalEditor(this);
+ editors_["text"] = new TextEditor(this);
+ editors_["input"] = new TextFieldEditor(this);
+
// panel sur le cote pour editer les parties
tools_dock = new QDockWidget(tr("Informations", "dock title"), this);
tools_dock -> setObjectName("informations");
@@ -564,33 +596,37 @@ void QETElementEditor::slot_setNormalMode() {
}
/**
- Met a jour la zone d'information et d'edition.
- Si plusieurs parties sont selectionnees, seul leur nombre est affiche.
- Sinon, le widget d'edition de la partie est insere.
- @see CustomElementPart::elementInformations()
+ Met a jour la zone d'information et d'edition des primitives.
+ Si plusieurs primitives sont selectionnees, seule leur quantite est
+ affichee. Sinon, un widget d'edition approprie est mis en place.
*/
void QETElementEditor::slot_updateInformations() {
QList selected_qgis = ce_scene -> selectedItems();
- QList selected_parts;
- foreach(QGraphicsItem *qgi, selected_qgis) {
- if (CustomElementPart *cep = dynamic_cast(qgi)) {
- selected_parts.append(cep);
- }
- }
clearToolsDock();
- if (selected_parts.size() == 1) {
- // recupere le premier CustomElementPart et en ajoute le widget d'edition
- QWidget *edit_widget = selected_parts.first() -> elementInformations();
- tools_dock_scroll_area_ -> setWidget(edit_widget);
- tools_dock_stack_ -> setCurrentIndex(1);
+ // s'il n'y a qu'une seule primitive selectionnee
+ if (selected_qgis.size() == 1) {
+ QGraphicsItem *qgi = selected_qgis.first();
+ if (CustomElementPart *selection = dynamic_cast(qgi)) {
+ // on en ajoute le widget d'edition
+ QString selection_xml_name = selection -> xmlName();
+ ElementItemEditor *selection_editor = editors_[selection_xml_name];
+ if (selection_editor) {
+ if (selection_editor -> setPart(selection)) {
+ tools_dock_scroll_area_ -> setWidget(selection_editor);
+ tools_dock_stack_ -> setCurrentIndex(1);
+ } else {
+ qDebug() << "Editor refused part.";
+ }
+ }
+ }
} else {
default_informations -> setText(
tr(
"%n partie(s) s\351lectionn\351e(s).",
"",
- selected_parts.size()
+ selected_qgis.size()
)
);
default_informations -> setAlignment(Qt::AlignHCenter | Qt::AlignTop);
@@ -1326,3 +1362,17 @@ void QETElementEditor::pasteFromElement() {
copyAndPasteXml(document_xml);
}
+
+/**
+ Met a jour l'editeur de primitive actuellement visible.
+ Si aucun editeur de primitive n'est visible, ce slot ne fait rien.
+*/
+void QETElementEditor::updateCurrentPartEditor() {
+ // si aucun widget d'edition n'est affiche, on ne fait rien
+ if (!tools_dock_stack_ -> currentIndex()) return;
+
+ // s'il y a un widget d'edition affiche, on le met a jour
+ if (ElementItemEditor *current_editor = dynamic_cast(tools_dock_scroll_area_ -> widget())) {
+ current_editor -> updateForm();
+ }
+}
diff --git a/sources/editor/qetelementeditor.h b/sources/editor/qetelementeditor.h
index 01150c3a5..4ec140c19 100644
--- a/sources/editor/qetelementeditor.h
+++ b/sources/editor/qetelementeditor.h
@@ -22,6 +22,7 @@
#include "elementscene.h"
#include "orientationset.h"
#include "elementslocation.h"
+class ElementItemEditor;
class ElementView;
/**
Cette classe represente un editeur d'element. Elle permet a l'utilisateur
@@ -54,6 +55,8 @@ class QETElementEditor : public QMainWindow {
QStackedWidget *tools_dock_stack_;
/// label affiche lors de la selection de plusieurs elements
QLabel *default_informations;
+ /// Hash permettant d'acceder aux widgets d'editions disponibles
+ QHash editors_;
/// ScrollArea pour le DockWidget affichant des infos sur la partie selectionnee
QScrollArea *tools_dock_scroll_area_;
/// container pour la liste des annulations
@@ -156,6 +159,7 @@ class QETElementEditor : public QMainWindow {
bool checkElement();
void pasteFromFile();
void pasteFromElement();
+ void updateCurrentPartEditor();
};
/**
diff --git a/sources/editor/rectangleeditor.cpp b/sources/editor/rectangleeditor.cpp
index c451c603c..1dc7c5272 100644
--- a/sources/editor/rectangleeditor.cpp
+++ b/sources/editor/rectangleeditor.cpp
@@ -24,9 +24,11 @@
@param rect Le rectangle a editer
@param parent le Widget parent
*/
-RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect, QWidget *parent) : ElementItemEditor(editor, parent) {
-
- part = rect;
+RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(rect)
+{
+ style_ = new StyleEditor(editor);
x = new QLineEdit();
y = new QLineEdit();
@@ -38,7 +40,9 @@ RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect,
w -> setValidator(new QDoubleValidator(w));
h -> setValidator(new QDoubleValidator(h));
- QGridLayout *grid = new QGridLayout(this);
+ QVBoxLayout *v_layout = new QVBoxLayout(this);
+
+ QGridLayout *grid = new QGridLayout();
grid -> addWidget(new QLabel(tr("Coin sup\351rieur gauche\240: ")), 0, 0);
grid -> addWidget(new QLabel("x"), 1, 0);
grid -> addWidget(x, 1, 1);
@@ -50,6 +54,9 @@ RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect,
grid -> addWidget(new QLabel(tr("Hauteur\240:")), 4, 0);
grid -> addWidget(h, 4, 1);
+ v_layout -> addWidget(style_);
+ v_layout -> addLayout(grid);
+
activeConnections(true);
updateForm();
}
@@ -58,10 +65,42 @@ RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect,
RectangleEditor::~RectangleEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de rectangle acceptera d'editer la primitive new_part s'il s'agit
+ d'un objet de la classe PartRectangle.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool RectangleEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ style_ -> setPart(0);
+ return(true);
+ }
+ if (PartRectangle *part_rectangle = dynamic_cast(new_part)) {
+ part = part_rectangle;
+ style_ -> setPart(part);
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *RectangleEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour le rectangle a partir des donnees du formulaire
*/
void RectangleEditor::updateRectangle() {
+ if (!part) return;
part -> setProperty("x", x -> text().toDouble());
part -> setProperty("y", y -> text().toDouble());
part -> setProperty("width", w -> text().toDouble());
@@ -81,6 +120,7 @@ void RectangleEditor::updateRectangleH() { addChangePartCommand(tr("hauteur"),
Met a jour le formulaire d'edition
*/
void RectangleEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
x -> setText(part -> property("x").toString());
y -> setText(part -> property("y").toString());
diff --git a/sources/editor/rectangleeditor.h b/sources/editor/rectangleeditor.h
index afa1523f6..364059c25 100644
--- a/sources/editor/rectangleeditor.h
+++ b/sources/editor/rectangleeditor.h
@@ -20,6 +20,7 @@
#include
#include "elementitemeditor.h"
class PartRectangle;
+class StyleEditor;
/**
Cette classe represente le widget d'edition d'un rectangle dans l'editeur
d'element.
@@ -28,17 +29,22 @@ class RectangleEditor : public ElementItemEditor {
Q_OBJECT
//constructeurs, destructeur
public:
- RectangleEditor(QETElementEditor *, PartRectangle *, QWidget * = 0);
- ~RectangleEditor();
+ RectangleEditor(QETElementEditor *, PartRectangle * = 0, QWidget * = 0);
+ virtual ~RectangleEditor();
private:
RectangleEditor(const RectangleEditor &);
// attributs
private:
PartRectangle *part;
+ StyleEditor *style_;
QLineEdit *x, *y, *w, *h;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateRectangle();
void updateRectangleX();
diff --git a/sources/editor/styleeditor.cpp b/sources/editor/styleeditor.cpp
index 17ce694ba..9d0fc9501 100644
--- a/sources/editor/styleeditor.cpp
+++ b/sources/editor/styleeditor.cpp
@@ -24,7 +24,10 @@
@param p La partie a editer
@param parent le Widget parent
*/
-StyleEditor::StyleEditor(QETElementEditor *editor, CustomElementGraphicPart *p, QWidget *parent) : ElementItemEditor(editor, parent), part(p) {
+StyleEditor::StyleEditor(QETElementEditor *editor, CustomElementGraphicPart *p, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(p)
+{
// couleur
color = new QButtonGroup(this);
color -> addButton(black_color = new QRadioButton(tr("Noir", "element part color")), CustomElementGraphicPart::BlackColor);
@@ -34,7 +37,7 @@ StyleEditor::StyleEditor(QETElementEditor *editor, CustomElementGraphicPart *p,
style = new QButtonGroup(this);
style -> addButton(normal_style = new QRadioButton(tr("Normal", "element part line style")), CustomElementGraphicPart::NormalStyle);
style -> addButton(dashed_style = new QRadioButton(tr("Pointill\351", "element part line style")), CustomElementGraphicPart::DashedStyle);
- style -> button(part -> lineStyle()) -> setChecked(true);
+ normal_style -> setChecked(true);
// epaisseur
weight = new QButtonGroup(this);
@@ -102,6 +105,7 @@ StyleEditor::~StyleEditor() {
Met a jour le style de la partie a partir des donnees du formulaire
*/
void StyleEditor::updatePart() {
+ if (!part) return;
// applique l'antialiasing
part -> setAntialiased(antialiasing -> isChecked());
@@ -133,6 +137,7 @@ void StyleEditor::updatePartFilling() { addChangePartCommand("style rempl
Met a jour le formulaire d'edition
*/
void StyleEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
// lit l'antialiasing
antialiasing -> setChecked(part -> antialiased());
@@ -152,11 +157,32 @@ void StyleEditor::updateForm() {
}
/**
- Ajoute un widget en bas de l'editeur de style
- @param w Widget a inserer
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de ligne acceptera d'editer la primitive new_part s'il s'agit d'un
+ objet de la classe CustomElementGraphicPart.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
*/
-void StyleEditor::appendWidget(QWidget *w) {
- main_layout -> insertWidget(7, w);
+bool StyleEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ return(true);
+ }
+ if (CustomElementGraphicPart *part_graphic = dynamic_cast(new_part)) {
+ part = part_graphic;
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *StyleEditor::currentPart() const {
+ return(part);
}
/**
diff --git a/sources/editor/styleeditor.h b/sources/editor/styleeditor.h
index 45a75bb42..2968de572 100644
--- a/sources/editor/styleeditor.h
+++ b/sources/editor/styleeditor.h
@@ -30,7 +30,7 @@ class StyleEditor : public ElementItemEditor {
Q_OBJECT
// constructeurs, destructeur
public:
- StyleEditor(QETElementEditor *, CustomElementGraphicPart *, QWidget * = 0);
+ StyleEditor(QETElementEditor *, CustomElementGraphicPart * = 0, QWidget * = 0);
virtual ~StyleEditor();
private:
@@ -46,9 +46,10 @@ class StyleEditor : public ElementItemEditor {
QRadioButton *black_filling, *white_filling;
QCheckBox *antialiasing;
- //methodes
+ // methodes
public:
- void appendWidget(QWidget *w);
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
public slots:
void updatePart();
diff --git a/sources/editor/terminaleditor.cpp b/sources/editor/terminaleditor.cpp
index 1ffbbc668..bf96d7478 100644
--- a/sources/editor/terminaleditor.cpp
+++ b/sources/editor/terminaleditor.cpp
@@ -25,9 +25,10 @@
@param term La borne a editer
@param parent QWidget parent de ce widget
*/
-TerminalEditor::TerminalEditor(QETElementEditor *editor, PartTerminal *term, QWidget *parent) : ElementItemEditor(editor, parent) {
- part = term;
-
+TerminalEditor::TerminalEditor(QETElementEditor *editor, PartTerminal *term, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(term)
+{
qle_x = new QLineEdit();
qle_y = new QLineEdit();
@@ -65,10 +66,40 @@ TerminalEditor::TerminalEditor(QETElementEditor *editor, PartTerminal *term, QWi
TerminalEditor::~TerminalEditor() {
};
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de borne acceptera d'editer la primitive new_part s'il s'agit d'un
+ objet de la classe PartTerminal.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool TerminalEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ return(true);
+ }
+ if (PartTerminal *part_terminal = dynamic_cast(new_part)) {
+ part = part_terminal;
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *TerminalEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour la borne a partir des donnees du formulaire
*/
void TerminalEditor::updateTerminal() {
+ if (!part) return;
part -> setPos(qle_x -> text().toDouble(), qle_y -> text().toDouble());
part -> setOrientation(
static_cast(
@@ -90,6 +121,7 @@ void TerminalEditor::updateTerminalO() { addChangePartCommand(tr("orientation"),
Met a jour le formulaire d'edition
*/
void TerminalEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
qle_x -> setText(part -> property("x").toString());
qle_y -> setText(part -> property("y").toString());
diff --git a/sources/editor/terminaleditor.h b/sources/editor/terminaleditor.h
index f0bfb0ca5..6f1a29f0f 100644
--- a/sources/editor/terminaleditor.h
+++ b/sources/editor/terminaleditor.h
@@ -29,7 +29,7 @@ class TerminalEditor : public ElementItemEditor {
Q_OBJECT
// Constructeurs, destructeur
public:
- TerminalEditor(QETElementEditor *, PartTerminal *, QWidget * = 0);
+ TerminalEditor(QETElementEditor *, PartTerminal * = 0, QWidget * = 0);
virtual ~TerminalEditor();
private:
TerminalEditor(const TerminalEditor &);
@@ -41,6 +41,10 @@ class TerminalEditor : public ElementItemEditor {
QComboBox *orientation;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateTerminal();
void updateTerminalX();
diff --git a/sources/editor/texteditor.cpp b/sources/editor/texteditor.cpp
index 90a5a5555..6669f8d6f 100644
--- a/sources/editor/texteditor.cpp
+++ b/sources/editor/texteditor.cpp
@@ -24,9 +24,10 @@
@param text Champ de texte a editer
@param parent QWidget parent de ce widget
*/
-TextEditor::TextEditor(QETElementEditor *editor, PartText *text, QWidget *parent) : ElementItemEditor(editor, parent) {
- part = text;
-
+TextEditor::TextEditor(QETElementEditor *editor, PartText *text, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(text)
+{
qle_x = new QLineEdit();
qle_y = new QLineEdit();
qle_text = new QLineEdit();
@@ -67,10 +68,40 @@ TextEditor::TextEditor(QETElementEditor *editor, PartText *text, QWidget *parent
TextEditor::~TextEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de texte statique acceptera d'editer la primitive new_part s'il
+ s'agit d'un objet de la classe PartText.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool TextEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ return(true);
+ }
+ if (PartText *part_text = dynamic_cast(new_part)) {
+ part = part_text;
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *TextEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour le champ de texte a partir des donnees du formulaire
*/
void TextEditor::updateText() {
+ if (!part) return;
part -> setProperty("size", font_size -> value());
part -> setPlainText(qle_text -> text());
part -> setPos(qle_x -> text().toDouble(), qle_y -> text().toDouble());
@@ -89,6 +120,7 @@ void TextEditor::updateTextS() { addChangePartCommand(tr("taille"), part, "
Met a jour le formulaire a partir du champ de texte
*/
void TextEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
qle_x -> setText(part -> property("x").toString());
qle_y -> setText(part -> property("y").toString());
diff --git a/sources/editor/texteditor.h b/sources/editor/texteditor.h
index f981cc96b..a3387fd56 100644
--- a/sources/editor/texteditor.h
+++ b/sources/editor/texteditor.h
@@ -29,7 +29,7 @@ class TextEditor : public ElementItemEditor {
Q_OBJECT
// Constructeurs, destructeur
public:
- TextEditor(QETElementEditor *, PartText *, QWidget * = 0);
+ TextEditor(QETElementEditor *, PartText * = 0, QWidget * = 0);
virtual ~TextEditor();
private:
TextEditor(const TextEditor &);
@@ -41,6 +41,10 @@ class TextEditor : public ElementItemEditor {
QSpinBox *font_size;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateText();
void updateTextX();
diff --git a/sources/editor/textfieldeditor.cpp b/sources/editor/textfieldeditor.cpp
index f2d4ba9d6..e08918f5c 100644
--- a/sources/editor/textfieldeditor.cpp
+++ b/sources/editor/textfieldeditor.cpp
@@ -24,9 +24,10 @@
@param textfield Le champ de texte a editer
@param parent QWidget parent
*/
-TextFieldEditor::TextFieldEditor(QETElementEditor *editor, PartTextField *textfield, QWidget *parent) : ElementItemEditor(editor, parent) {
- part = textfield;
-
+TextFieldEditor::TextFieldEditor(QETElementEditor *editor, PartTextField *textfield, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(textfield)
+{
qle_x = new QLineEdit();
qle_y = new QLineEdit();
qle_text = new QLineEdit();
@@ -71,10 +72,40 @@ TextFieldEditor::TextFieldEditor(QETElementEditor *editor, PartTextField *textfi
TextFieldEditor::~TextFieldEditor() {
}
+/**
+ Permet de specifier a cet editeur quelle primitive il doit editer. A noter
+ qu'un editeur peut accepter ou refuser d'editer une primitive.
+ L'editeur de texte dynamique acceptera d'editer la primitive new_part s'il
+ s'agit d'un objet de la classe PartTextField.
+ @param new_part Nouvelle primitive a editer
+ @return true si l'editeur a accepter d'editer la primitive, false sinon
+*/
+bool TextFieldEditor::setPart(CustomElementPart *new_part) {
+ if (!new_part) {
+ part = 0;
+ return(true);
+ }
+ if (PartTextField *part_textfield = dynamic_cast(new_part)) {
+ part = part_textfield;
+ updateForm();
+ return(true);
+ } else {
+ return(false);
+ }
+}
+
+/**
+ @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas
+*/
+CustomElementPart *TextFieldEditor::currentPart() const {
+ return(part);
+}
+
/**
Met a jour le champ de texte a partir des donnees du formulaire
*/
void TextFieldEditor::updateTextField() {
+ if (!part) return;
part -> setProperty("size", font_size -> value());
part -> setPlainText(qle_text -> text());
part -> setPos(qle_x -> text().toDouble(), qle_y -> text().toDouble());
@@ -96,6 +127,7 @@ void TextFieldEditor::updateTextFieldR() { addChangePartCommand(tr("propri\351t\
Met a jour le formulaire d'edition
*/
void TextFieldEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
qle_x -> setText(part -> property("x").toString());
qle_y -> setText(part -> property("y").toString());
diff --git a/sources/editor/textfieldeditor.h b/sources/editor/textfieldeditor.h
index 2f620105f..41318264b 100644
--- a/sources/editor/textfieldeditor.h
+++ b/sources/editor/textfieldeditor.h
@@ -30,7 +30,7 @@ class TextFieldEditor : public ElementItemEditor {
Q_OBJECT
// Constructeurs, destructeur
public:
- TextFieldEditor(QETElementEditor *, PartTextField *, QWidget * = 0);
+ TextFieldEditor(QETElementEditor *, PartTextField * = 0, QWidget * = 0);
virtual ~TextFieldEditor();
private:
TextFieldEditor(const TextFieldEditor &);
@@ -43,6 +43,10 @@ class TextFieldEditor : public ElementItemEditor {
QCheckBox *rotate;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateTextField();
void updateTextFieldX();