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();