[qet] [855] Optimisation de l'editeur d'element. |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 855
Author: xavier
Date: 2010-02-18 01:17:34 +0100 (Thu, 18 Feb 2010)
Log Message:
-----------
Optimisation de l'editeur d'element.
L'organisation interne de l'editeur d'element a ete completement revue.
Auparavant, chaque primitive instanciait son propre widget d'edition et le
gardait durant toute sa duree de vie, entrainant ainsi une consommation memoire
et un temps de chargement importants.
Desormais, l'editeur instancie des son demarrage 9 widgets d'edition qu'il
conserve durant toute sa duree de vie. Il choisit alors lequel afficher en
fonction des primitives selectionnees.
Modified Paths:
--------------
trunk/sources/editor/arceditor.cpp
trunk/sources/editor/arceditor.h
trunk/sources/editor/circleeditor.cpp
trunk/sources/editor/circleeditor.h
trunk/sources/editor/customelementgraphicpart.cpp
trunk/sources/editor/customelementgraphicpart.h
trunk/sources/editor/customelementpart.cpp
trunk/sources/editor/customelementpart.h
trunk/sources/editor/elementitemeditor.cpp
trunk/sources/editor/elementitemeditor.h
trunk/sources/editor/ellipseeditor.cpp
trunk/sources/editor/ellipseeditor.h
trunk/sources/editor/lineeditor.cpp
trunk/sources/editor/lineeditor.h
trunk/sources/editor/partarc.cpp
trunk/sources/editor/partarc.h
trunk/sources/editor/partcircle.cpp
trunk/sources/editor/partcircle.h
trunk/sources/editor/partellipse.cpp
trunk/sources/editor/partellipse.h
trunk/sources/editor/partline.cpp
trunk/sources/editor/partline.h
trunk/sources/editor/partpolygon.cpp
trunk/sources/editor/partpolygon.h
trunk/sources/editor/partrectangle.cpp
trunk/sources/editor/partrectangle.h
trunk/sources/editor/partterminal.cpp
trunk/sources/editor/partterminal.h
trunk/sources/editor/parttext.cpp
trunk/sources/editor/parttext.h
trunk/sources/editor/parttextfield.cpp
trunk/sources/editor/parttextfield.h
trunk/sources/editor/polygoneditor.cpp
trunk/sources/editor/polygoneditor.h
trunk/sources/editor/qetelementeditor.cpp
trunk/sources/editor/qetelementeditor.h
trunk/sources/editor/rectangleeditor.cpp
trunk/sources/editor/rectangleeditor.h
trunk/sources/editor/styleeditor.cpp
trunk/sources/editor/styleeditor.h
trunk/sources/editor/terminaleditor.cpp
trunk/sources/editor/terminaleditor.h
trunk/sources/editor/texteditor.cpp
trunk/sources/editor/texteditor.h
trunk/sources/editor/textfieldeditor.cpp
trunk/sources/editor/textfieldeditor.h
Modified: trunk/sources/editor/arceditor.cpp
===================================================================
--- trunk/sources/editor/arceditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/arceditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#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 @@
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 @@
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);
@@ -67,15 +75,47 @@
}
/**
+ 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<PartArc *>(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 @@
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());
Modified: trunk/sources/editor/arceditor.h
===================================================================
--- trunk/sources/editor/arceditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/arceditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,6 +20,7 @@
#include <QtGui>
#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 @@
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();
Modified: trunk/sources/editor/circleeditor.cpp
===================================================================
--- trunk/sources/editor/circleeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/circleeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "circleeditor.h"
+#include "styleeditor.h"
#include "partcircle.h"
/**
@@ -24,10 +25,12 @@
@param circle Le cercle a editer
@param parent le Widget parent
*/
-CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget *parent) : ElementItemEditor(editor, parent) {
+CircleEditor::CircleEditor(QETElementEditor *editor, PartCircle *circle, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(circle)
+{
+ style_ = new StyleEditor(editor);
- part = circle;
-
x = new QLineEdit();
y = new QLineEdit();
r = new QLineEdit();
@@ -36,7 +39,9 @@
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 @@
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();
}
@@ -54,9 +62,41 @@
}
/**
+ 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<PartCircle *>(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 @@
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());
Modified: trunk/sources/editor/circleeditor.h
===================================================================
--- trunk/sources/editor/circleeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/circleeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,6 +20,7 @@
#include <QtGui>
#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 @@
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 @@
// 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();
Modified: trunk/sources/editor/customelementgraphicpart.cpp
===================================================================
--- trunk/sources/editor/customelementgraphicpart.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/customelementgraphicpart.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -83,9 +83,6 @@
// recupere l'antialiasing
_antialiased = qde.attribute("antialias") == "true";
-
- // met a jour l'editeur de style
- style_editor -> updateForm();
}
/**
@@ -143,13 +140,6 @@
}
/**
- @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 :
* line-style : type de trait (@see LineStyle)
@@ -177,9 +167,6 @@
setAntialiased(value.toBool());
change_made = true;
}
- if (change_made) {
- style_editor -> updateForm();
- }
}
/**
Modified: trunk/sources/editor/customelementgraphicpart.h
===================================================================
--- trunk/sources/editor/customelementgraphicpart.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/customelementgraphicpart.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -69,13 +69,10 @@
_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 @@
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 @@
Color color() const;
bool antialiased() const;
- QWidget *elementInformations();
void setProperty(const QString &, const QVariant &);
QVariant property(const QString &);
Modified: trunk/sources/editor/customelementpart.cpp
===================================================================
--- trunk/sources/editor/customelementpart.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/customelementpart.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -24,6 +24,16 @@
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());
Modified: trunk/sources/editor/customelementpart.h
===================================================================
--- trunk/sources/editor/customelementpart.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/customelementpart.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -59,8 +59,6 @@
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 @@
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
Modified: trunk/sources/editor/elementitemeditor.cpp
===================================================================
--- trunk/sources/editor/elementitemeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/elementitemeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -47,15 +47,23 @@
/**
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 @@
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);
+}
Modified: trunk/sources/editor/elementitemeditor.h
===================================================================
--- trunk/sources/editor/elementitemeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/elementitemeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -44,6 +44,10 @@
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:
Modified: trunk/sources/editor/ellipseeditor.cpp
===================================================================
--- trunk/sources/editor/ellipseeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/ellipseeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ellipseeditor.h"
+#include "styleeditor.h"
#include "partellipse.h"
/**
@@ -24,10 +25,12 @@
@param ellipse L'ellipse a editer
@param parent le Widget parent
*/
-EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWidget *parent) : ElementItemEditor(editor, parent) {
+EllipseEditor::EllipseEditor(QETElementEditor *editor, PartEllipse *ellipse, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(ellipse)
+{
+ style_ = new StyleEditor(editor);
- part = ellipse;
-
x = new QLineEdit();
y = new QLineEdit();
h = new QLineEdit();
@@ -38,7 +41,9 @@
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 @@
grid -> addWidget(new QLabel(tr("vertical :")), 4, 0);
grid -> addWidget(v, 4, 1);
+ v_layout -> addWidget(style_);
+ v_layout -> addLayout(grid);
+
activeConnections(true);
updateForm();
}
@@ -59,9 +67,41 @@
}
/**
+ 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<PartEllipse *>(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 @@
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());
Modified: trunk/sources/editor/ellipseeditor.h
===================================================================
--- trunk/sources/editor/ellipseeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/ellipseeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,6 +20,7 @@
#include <QtGui>
#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 @@
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();
Modified: trunk/sources/editor/lineeditor.cpp
===================================================================
--- trunk/sources/editor/lineeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/lineeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,6 +16,7 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "lineeditor.h"
+#include "styleeditor.h"
#include "partline.h"
#include "qet.h"
#include "qeticons.h"
@@ -26,10 +27,12 @@
@param line La ligne a editer
@param parent le Widget parent
*/
-LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent) : ElementItemEditor(editor, parent) {
+LineEditor::LineEditor(QETElementEditor *editor, PartLine *line, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(line)
+{
+ style_ = new StyleEditor(editor);
- part = line;
-
x1 = new QLineEdit();
y1 = new QLineEdit();
x2 = new QLineEdit();
@@ -78,6 +81,7 @@
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();
@@ -88,9 +92,41 @@
}
/**
+ 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<PartLine *>(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<QET::EndType>(end1_type -> currentIndex()));
part -> setFirstEndLength(end1_length -> text().toDouble());
part -> setSecondEndType(static_cast<QET::EndType>(end2_type -> currentIndex()));
@@ -130,6 +166,7 @@
Met a jour le formulaire d'edition
*/
void LineEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
QPointF p1(part -> sceneP1());
QPointF p2(part -> sceneP2());
Modified: trunk/sources/editor/lineeditor.h
===================================================================
--- trunk/sources/editor/lineeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/lineeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,6 +20,7 @@
#include <QtGui>
#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 @@
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();
Modified: trunk/sources/editor/partarc.cpp
===================================================================
--- trunk/sources/editor/partarc.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partarc.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "partarc.h"
-#include "arceditor.h"
/**
Constructeur
@@ -35,10 +34,6 @@
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::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));
Modified: trunk/sources/editor/partarc.h
===================================================================
--- trunk/sources/editor/partarc.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partarc.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -19,7 +19,6 @@
#define PART_ARC_H
#include <QtGui>
#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 @@
// attributs
private:
- ArcEditor *informations;
int _angle;
int start_angle;
@@ -49,6 +47,7 @@
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;
Modified: trunk/sources/editor/partcircle.cpp
===================================================================
--- trunk/sources/editor/partcircle.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partcircle.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "partcircle.h"
-#include "circleeditor.h"
/**
Constructeur
@@ -30,10 +29,6 @@
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::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));
Modified: trunk/sources/editor/partcircle.h
===================================================================
--- trunk/sources/editor/partcircle.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partcircle.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -19,7 +19,6 @@
#define PART_CIRCLE_H
#include <QtGui>
#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 @@
private:
PartCircle(const PartCircle &);
- // attributs
- private:
- CircleEditor *informations;
-
// methodes
public:
enum { Type = UserType + 1102 };
@@ -47,6 +42,7 @@
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;
Modified: trunk/sources/editor/partellipse.cpp
===================================================================
--- trunk/sources/editor/partellipse.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partellipse.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "partellipse.h"
-#include "ellipseeditor.h"
/**
Constructeur
@@ -30,10 +29,6 @@
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::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));
Modified: trunk/sources/editor/partellipse.h
===================================================================
--- trunk/sources/editor/partellipse.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partellipse.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -19,7 +19,6 @@
#define PART_ELLIPSE_H
#include <QtGui>
#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 @@
private:
PartEllipse(const PartEllipse &);
- // attributs
- private:
- EllipseEditor *informations;
-
// methodes
public:
enum { Type = UserType + 1103 };
@@ -47,6 +42,7 @@
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;
Modified: trunk/sources/editor/partline.cpp
===================================================================
--- trunk/sources/editor/partline.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partline.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "partline.h"
-#include "lineeditor.h"
#include <cmath>
/**
@@ -38,10 +37,6 @@
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::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));
Modified: trunk/sources/editor/partline.h
===================================================================
--- trunk/sources/editor/partline.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partline.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,7 +20,6 @@
#include <QtGui>
#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 @@
// attributs
private:
- LineEditor *informations;
QET::EndType first_end;
qreal first_length;
QET::EndType second_end;
@@ -60,6 +58,7 @@
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;
Modified: trunk/sources/editor/partpolygon.cpp
===================================================================
--- trunk/sources/editor/partpolygon.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partpolygon.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -17,7 +17,6 @@
*/
#include "partpolygon.h"
#include "qet.h"
-#include "polygoneditor.h"
/**
Constructeur
@@ -35,10 +34,6 @@
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::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));
Modified: trunk/sources/editor/partpolygon.h
===================================================================
--- trunk/sources/editor/partpolygon.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partpolygon.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -19,7 +19,6 @@
#define PART_POLYGON_H
#include <QtGui>
#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 @@
// 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 @@
*/
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;
Modified: trunk/sources/editor/partrectangle.cpp
===================================================================
--- trunk/sources/editor/partrectangle.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partrectangle.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -16,7 +16,6 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "partrectangle.h"
-#include "rectangleeditor.h"
/**
Constructeur
@@ -30,10 +29,6 @@
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::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));
Modified: trunk/sources/editor/partrectangle.h
===================================================================
--- trunk/sources/editor/partrectangle.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partrectangle.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -19,7 +19,6 @@
#define PART_RECTANGLE_H
#include <QtGui>
#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 @@
private:
PartRectangle(const PartRectangle &);
- // attributs
- private:
- RectangleEditor *informations;
-
// methodes
public:
enum { Type = UserType + 1109 };
@@ -47,6 +42,7 @@
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;
Modified: trunk/sources/editor/partterminal.cpp
===================================================================
--- trunk/sources/editor/partterminal.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partterminal.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -17,7 +17,6 @@
*/
#include "partterminal.h"
#include "terminal.h"
-#include "terminaleditor.h"
/**
Constructeur
@@ -30,8 +29,6 @@
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 @@
/// 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
@@ -81,13 +76,6 @@
}
/**
- @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
@param options Options pour affiner le rendu
@@ -152,7 +140,6 @@
prepareGeometryChange();
_orientation = ori;
updateSecondPoint();
- informations -> updateForm();
}
/**
@@ -202,8 +189,8 @@
*/
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));
Modified: trunk/sources/editor/partterminal.h
===================================================================
--- trunk/sources/editor/partterminal.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/partterminal.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,8 +20,6 @@
#include "customelementpart.h"
#include "qet.h"
#include <QtGui>
-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 @@
private:
QET::Orientation _orientation;
QPointF second_point;
- TerminalEditor *informations;
// methodes
public:
@@ -49,9 +46,9 @@
*/
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;
Modified: trunk/sources/editor/parttext.cpp
===================================================================
--- trunk/sources/editor/parttext.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/parttext.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -38,14 +38,10 @@
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;
}
/**
@@ -80,13 +76,6 @@
}
/**
- @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)
@return la position du texte
@@ -220,7 +209,7 @@
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));
Modified: trunk/sources/editor/parttext.h
===================================================================
--- trunk/sources/editor/parttext.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/parttext.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -33,9 +33,6 @@
private:
PartText(const PartText &);
- // attributs
- TextEditor *infos;
-
// methodes
public:
enum { Type = UserType + 1107 };
@@ -45,9 +42,9 @@
*/
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);
Modified: trunk/sources/editor/parttextfield.cpp
===================================================================
--- trunk/sources/editor/parttextfield.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/parttextfield.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -38,14 +38,10 @@
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;
}
/**
@@ -83,13 +79,6 @@
}
/**
- @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)
@return la position du texte
@@ -245,7 +234,7 @@
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));
Modified: trunk/sources/editor/parttextfield.h
===================================================================
--- trunk/sources/editor/parttextfield.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/parttextfield.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -37,7 +37,6 @@
PartTextField(const PartTextField &);
// attributs
- TextFieldEditor *infos;
bool follow_parent_rotations;
// methodes
@@ -49,9 +48,9 @@
*/
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);
Modified: trunk/sources/editor/polygoneditor.cpp
===================================================================
--- trunk/sources/editor/polygoneditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/polygoneditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -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 @@
// 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 @@
Met a jour les points du polygone et cree un objet d'annulation
*/
void PolygonEditor::updatePolygonPoints() {
+ if (!part) return;
QVector<QPointF> points = getPointsFromTree();
if (points.count() < 2) {
QET::MessageBox::warning(
@@ -82,6 +86,7 @@
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 @@
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()) {
@@ -112,10 +118,42 @@
}
/**
+ 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<PartPolygon *>(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<QPointF> PolygonEditor::getPointsFromTree() {
+ if (!part) return(QVector<QPointF>());
QVector<QPointF> points;
for(int i = 0 ; i < points_list.topLevelItemCount() ; ++ i) {
QTreeWidgetItem *qtwi = points_list.topLevelItem(i);
Modified: trunk/sources/editor/polygoneditor.h
===================================================================
--- trunk/sources/editor/polygoneditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/polygoneditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -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 @@
// constructeurs, destructeur
public:
- PolygonEditor(QETElementEditor *, PartPolygon *, QWidget * = 0);
+ PolygonEditor(QETElementEditor *, PartPolygon * = 0, QWidget * = 0);
virtual ~PolygonEditor();
private:
@@ -38,10 +39,15 @@
// attributs
private:
PartPolygon *part;
+ StyleEditor *style_;
QTreeWidget points_list;
QCheckBox close_polygon;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
private:
QVector<QPointF> getPointsFromTree();
Modified: trunk/sources/editor/qetelementeditor.cpp
===================================================================
--- trunk/sources/editor/qetelementeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/qetelementeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -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 @@
/// 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 @@
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 @@
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 @@
}
/**
- 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<QGraphicsItem *> selected_qgis = ce_scene -> selectedItems();
- QList<CustomElementPart *> selected_parts;
- foreach(QGraphicsItem *qgi, selected_qgis) {
- if (CustomElementPart *cep = dynamic_cast<CustomElementPart *>(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<CustomElementPart *>(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 @@
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<ElementItemEditor *>(tools_dock_scroll_area_ -> widget())) {
+ current_editor -> updateForm();
+ }
+}
Modified: trunk/sources/editor/qetelementeditor.h
===================================================================
--- trunk/sources/editor/qetelementeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/qetelementeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -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 @@
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<QString, ElementItemEditor *> 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 @@
bool checkElement();
void pasteFromFile();
void pasteFromElement();
+ void updateCurrentPartEditor();
};
/**
Modified: trunk/sources/editor/rectangleeditor.cpp
===================================================================
--- trunk/sources/editor/rectangleeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/rectangleeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -24,10 +24,12 @@
@param rect Le rectangle a editer
@param parent le Widget parent
*/
-RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect, QWidget *parent) : ElementItemEditor(editor, parent) {
+RectangleEditor::RectangleEditor(QETElementEditor *editor, PartRectangle *rect, QWidget *parent) :
+ ElementItemEditor(editor, parent),
+ part(rect)
+{
+ style_ = new StyleEditor(editor);
- part = rect;
-
x = new QLineEdit();
y = new QLineEdit();
w = new QLineEdit();
@@ -38,7 +40,9 @@
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 @@
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();
}
@@ -59,9 +66,41 @@
}
/**
+ 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<PartRectangle *>(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 @@
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());
Modified: trunk/sources/editor/rectangleeditor.h
===================================================================
--- trunk/sources/editor/rectangleeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/rectangleeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -20,6 +20,7 @@
#include <QtGui>
#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 @@
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();
Modified: trunk/sources/editor/styleeditor.cpp
===================================================================
--- trunk/sources/editor/styleeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/styleeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -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 @@
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 @@
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 @@
Met a jour le formulaire d'edition
*/
void StyleEditor::updateForm() {
+ if (!part) return;
activeConnections(false);
// lit l'antialiasing
antialiasing -> setChecked(part -> antialiased());
@@ -152,14 +157,35 @@
}
/**
- 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<CustomElementGraphicPart *>(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);
+}
+
+/**
Active ou desactive les connexionx signaux/slots entre les widgets internes.
@param active true pour activer les connexions, false pour les desactiver
*/
Modified: trunk/sources/editor/styleeditor.h
===================================================================
--- trunk/sources/editor/styleeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/styleeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -30,7 +30,7 @@
Q_OBJECT
// constructeurs, destructeur
public:
- StyleEditor(QETElementEditor *, CustomElementGraphicPart *, QWidget * = 0);
+ StyleEditor(QETElementEditor *, CustomElementGraphicPart * = 0, QWidget * = 0);
virtual ~StyleEditor();
private:
@@ -46,9 +46,10 @@
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();
Modified: trunk/sources/editor/terminaleditor.cpp
===================================================================
--- trunk/sources/editor/terminaleditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/terminaleditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -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();
@@ -66,9 +67,39 @@
};
/**
+ 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<PartTerminal *>(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<QET::Orientation>(
@@ -90,6 +121,7 @@
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());
Modified: trunk/sources/editor/terminaleditor.h
===================================================================
--- trunk/sources/editor/terminaleditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/terminaleditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -29,7 +29,7 @@
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 @@
QComboBox *orientation;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateTerminal();
void updateTerminalX();
Modified: trunk/sources/editor/texteditor.cpp
===================================================================
--- trunk/sources/editor/texteditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/texteditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -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();
@@ -68,9 +69,39 @@
}
/**
+ 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<PartText *>(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 @@
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());
Modified: trunk/sources/editor/texteditor.h
===================================================================
--- trunk/sources/editor/texteditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/texteditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -29,7 +29,7 @@
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 @@
QSpinBox *font_size;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateText();
void updateTextX();
Modified: trunk/sources/editor/textfieldeditor.cpp
===================================================================
--- trunk/sources/editor/textfieldeditor.cpp 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/textfieldeditor.cpp 2010-02-18 00:17:34 UTC (rev 855)
@@ -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();
@@ -72,9 +73,39 @@
}
/**
+ 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<PartTextField *>(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 @@
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());
Modified: trunk/sources/editor/textfieldeditor.h
===================================================================
--- trunk/sources/editor/textfieldeditor.h 2010-02-14 16:28:45 UTC (rev 854)
+++ trunk/sources/editor/textfieldeditor.h 2010-02-18 00:17:34 UTC (rev 855)
@@ -30,7 +30,7 @@
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 @@
QCheckBox *rotate;
// methodes
+ public:
+ virtual bool setPart(CustomElementPart *);
+ virtual CustomElementPart *currentPart() const;
+
public slots:
void updateTextField();
void updateTextFieldX();