diff --git a/editor/elementview.cpp b/editor/elementview.cpp
index 6a87ae083..4fe3fcf37 100644
--- a/editor/elementview.cpp
+++ b/editor/elementview.cpp
@@ -27,10 +27,8 @@ ElementView::ElementView(ElementScene *scene, QWidget *parent) :
{
setInteractive(true);
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
- //setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
- //setSceneRect(QRectF(0.0, 0.0, 50.0, 200.0));
- scale(4.0, 4.0);
+ zoomReset();
}
/// Destructeur
@@ -64,3 +62,67 @@ bool ElementView::event(QEvent *e) {
}
return(QGraphicsView::event(e));
}
+
+
+/**
+ Agrandit le schema (+33% = inverse des -25 % de zoomMoins())
+*/
+void ElementView::zoomIn() {
+ scale(4.0/3.0, 4.0/3.0);
+}
+
+/**
+ Retrecit le schema (-25% = inverse des +33 % de zoomPlus())
+*/
+void ElementView::zoomOut() {
+ scale(0.75, 0.75);
+}
+
+/**
+ Agrandit ou rectrecit le schema de facon a ce que tous les elements du
+ schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema,
+ le zoom est reinitialise
+*/
+void ElementView::zoomFit() {
+ adjustSceneRect();
+ fitInView(sceneRect(), Qt::KeepAspectRatio);
+}
+
+/**
+ Reinitialise le zoom
+*/
+void ElementView::zoomReset() {
+ resetMatrix();
+ scale(4.0, 4.0);
+}
+
+/**
+ Ajuste le sceneRect (zone du schema visualisee par l'ElementView) afin que
+ celui inclut a la fois les parties dans et en dehors du cadre et le cadre
+ lui-meme.
+*/
+void ElementView::adjustSceneRect() {
+ QRectF old_scene_rect = scene_ -> sceneRect();
+ QRectF new_scene_rect = scene_ -> sceneContent();
+ setSceneRect(new_scene_rect);
+
+ // met a jour la scene
+ scene_ -> update(old_scene_rect.united(new_scene_rect));
+}
+
+/**
+ Gere les actions liees a la rollette de la souris
+ @param e QWheelEvent decrivant l'evenement rollette
+*/
+void ElementView::wheelEvent(QWheelEvent *e) {
+ // si la touche Ctrl est enfoncee, on zoome / dezoome
+ if (e -> modifiers() & Qt::ControlModifier) {
+ if (e -> delta() > 0) {
+ zoomIn();
+ } else {
+ zoomOut();
+ }
+ } else {
+ QAbstractScrollArea::wheelEvent(e);
+ }
+}
diff --git a/editor/elementview.h b/editor/elementview.h
index 7149ec249..62264c8e9 100644
--- a/editor/elementview.h
+++ b/editor/elementview.h
@@ -39,6 +39,15 @@ class ElementView : public QGraphicsView {
void setScene(ElementScene *);
protected:
bool event(QEvent *);
+ void wheelEvent(QWheelEvent *);
+
+ // slots
+ public slots:
+ void zoomIn();
+ void zoomOut();
+ void zoomFit();
+ void zoomReset();
+ void adjustSceneRect();
//attributs
private:
diff --git a/editor/partarc.cpp b/editor/partarc.cpp
index a49b682e8..c22b3438c 100644
--- a/editor/partarc.cpp
+++ b/editor/partarc.cpp
@@ -251,3 +251,13 @@ int PartArc::startAngle() const {
bool PartArc::isUseless() const {
return(rect().isNull() || !angle());
}
+
+/**
+ @return le rectangle delimitant cette partie.
+*/
+QRectF PartArc::boundingRect() const {
+ qreal adjust = 1.5;
+ QRectF r(QGraphicsEllipseItem::boundingRect().normalized());
+ r.adjust(-adjust, -adjust, adjust, adjust);
+ return(r);
+}
diff --git a/editor/partarc.h b/editor/partarc.h
index 168e882de..e754e37d2 100644
--- a/editor/partarc.h
+++ b/editor/partarc.h
@@ -52,6 +52,7 @@ class PartArc : public QGraphicsEllipseItem, public CustomElementGraphicPart {
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneTopLeft() const;
+ virtual QRectF boundingRect() const;
virtual void setAngle(int);
virtual void setStartAngle(int);
virtual int angle() const;
diff --git a/editor/partellipse.cpp b/editor/partellipse.cpp
index 1130db886..43ee4fab8 100644
--- a/editor/partellipse.cpp
+++ b/editor/partellipse.cpp
@@ -187,3 +187,13 @@ QPointF PartEllipse::sceneTopLeft() const {
bool PartEllipse::isUseless() const {
return(rect().isNull());
}
+
+/**
+ @return le rectangle delimitant cette partie.
+*/
+QRectF PartEllipse::boundingRect() const {
+ qreal adjust = 1.5;
+ QRectF r(QGraphicsEllipseItem::boundingRect().normalized());
+ r.adjust(-adjust, -adjust, adjust, adjust);
+ return(r);
+}
diff --git a/editor/partellipse.h b/editor/partellipse.h
index 35e660112..b16af8bd0 100644
--- a/editor/partellipse.h
+++ b/editor/partellipse.h
@@ -50,6 +50,7 @@ class PartEllipse : public QGraphicsEllipseItem, public CustomElementGraphicPart
virtual const QDomElement toXml(QDomDocument &) const;
virtual void fromXml(const QDomElement &);
virtual QPointF sceneTopLeft() const;
+ virtual QRectF boundingRect() const;
virtual void setProperty(const QString &, const QVariant &);
virtual QVariant property(const QString &);
virtual bool isUseless() const;
diff --git a/editor/partpolygon.cpp b/editor/partpolygon.cpp
index b797f2756..ba791f66c 100644
--- a/editor/partpolygon.cpp
+++ b/editor/partpolygon.cpp
@@ -163,3 +163,13 @@ bool PartPolygon::isUseless() const {
return(true);
}
+
+/**
+ @return le rectangle delimitant cette partie.
+*/
+QRectF PartPolygon::boundingRect() const {
+ qreal adjust = 1.5;
+ QRectF r(QGraphicsPolygonItem::boundingRect());
+ r.adjust(-adjust, -adjust, adjust, adjust);
+ return(r);
+}
diff --git a/editor/partpolygon.h b/editor/partpolygon.h
index 02dc1aef7..69a74e8fb 100644
--- a/editor/partpolygon.h
+++ b/editor/partpolygon.h
@@ -61,6 +61,7 @@ class PartPolygon : public QGraphicsPolygonItem, public CustomElementGraphicPart
virtual QString name() const { return(QObject::tr("polygone")); }
void fromXml(const QDomElement &);
const QDomElement toXml(QDomDocument &) const;
+ virtual QRectF boundingRect() const;
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
void setClosed(bool c);
bool isClosed() const;
diff --git a/editor/qetelementeditor.cpp b/editor/qetelementeditor.cpp
index b305cbcef..21537691a 100644
--- a/editor/qetelementeditor.cpp
+++ b/editor/qetelementeditor.cpp
@@ -69,6 +69,10 @@ void QETElementEditor::setupActions() {
deselectall = new QAction( tr("D\351s\351lectionner tout"), this);
inv_select = new QAction( tr("Inverser la s\351lection"), this);
edit_delete = new QAction(QIcon(":/ico/delete.png"), tr("&Supprimer"), this);
+ zoom_in = new QAction(QIcon(":/ico/viewmag+.png"), tr("Zoom avant"), this);
+ zoom_out = new QAction(QIcon(":/ico/viewmag-.png"), tr("Zoom arri\350re"), this);
+ zoom_fit = new QAction(QIcon(":/ico/viewmagfit.png"), tr("Zoom adapt\351"), this);
+ zoom_reset = new QAction(QIcon(":/ico/viewmag.png"), tr("Pas de zoom"), this);
edit_size_hs = new QAction(QIcon(":/ico/hotspot.png"), tr("\311diter la taille et le point de saisie"), this);
edit_names = new QAction(QIcon(":/ico/names.png"), tr("\311diter les noms"), this);
edit_ori = new QAction(QIcon(":/ico/orientations.png"), tr("\311diter les orientations"), this);
@@ -102,6 +106,12 @@ void QETElementEditor::setupActions() {
deselectall -> setShortcut(QKeySequence(tr("Ctrl+Shift+A")));
inv_select -> setShortcut(QKeySequence(tr("Ctrl+I")));
edit_delete -> setShortcut(QKeySequence(tr("Suppr")));
+
+ zoom_in -> setShortcut(QKeySequence::ZoomIn);
+ zoom_out -> setShortcut(QKeySequence::ZoomOut);
+ zoom_fit -> setShortcut(QKeySequence(tr("Ctrl+9")));
+ zoom_reset -> setShortcut(QKeySequence(tr("Ctrl+0")));
+
edit_names -> setShortcut(QKeySequence(tr("Ctrl+E")));
edit_size_hs -> setShortcut(QKeySequence(tr("Ctrl+R")));
edit_ori -> setShortcut(QKeySequence(tr("Ctrl+T")));
@@ -120,6 +130,10 @@ void QETElementEditor::setupActions() {
connect(selectall, SIGNAL(triggered()), ce_scene, SLOT(slot_selectAll()));
connect(deselectall, SIGNAL(triggered()), ce_scene, SLOT(slot_deselectAll()));
connect(inv_select, SIGNAL(triggered()), ce_scene, SLOT(slot_invertSelection()));
+ connect(zoom_in, SIGNAL(triggered()), ce_view, SLOT(zoomIn()));
+ connect(zoom_out, SIGNAL(triggered()), ce_view, SLOT(zoomOut()));
+ connect(zoom_fit, SIGNAL(triggered()), ce_view, SLOT(zoomFit()));
+ connect(zoom_reset, SIGNAL(triggered()), ce_view, SLOT(zoomReset()));
connect(edit_delete, SIGNAL(triggered()), ce_scene, SLOT(slot_delete()));
connect(edit_size_hs, SIGNAL(triggered()), ce_scene, SLOT(slot_editSizeHotSpot()));
connect(edit_names, SIGNAL(triggered()), ce_scene, SLOT(slot_editNames()));
@@ -186,6 +200,8 @@ void QETElementEditor::setupActions() {
main_toolbar = new QToolBar(tr("Outils"), this);
main_toolbar -> setObjectName("main_toolbar");
+ view_toolbar = new QToolBar(tr("Affichage"), this);
+ view_toolbar -> setObjectName("display");
element_toolbar = new QToolBar(tr("\311l\351ment"), this);
element_toolbar -> setObjectName("element_toolbar");
depth_toolbar = new QToolBar(tr("Profondeur"), this);
@@ -201,6 +217,10 @@ void QETElementEditor::setupActions() {
main_toolbar -> addAction(redo);
main_toolbar -> addSeparator();
main_toolbar -> addAction(edit_delete);
+ view_toolbar -> addAction(zoom_in);
+ view_toolbar -> addAction(zoom_out);
+ view_toolbar -> addAction(zoom_fit);
+ view_toolbar -> addAction(zoom_reset);
element_toolbar -> addAction(edit_size_hs);
element_toolbar -> addAction(edit_names);
element_toolbar -> addAction(edit_ori);
@@ -210,6 +230,7 @@ void QETElementEditor::setupActions() {
depth_toolbar -> addAction(edit_backward);
addToolBar(Qt::TopToolBarArea, main_toolbar);
+ addToolBar(Qt::TopToolBarArea, view_toolbar);
addToolBar(Qt::TopToolBarArea, element_toolbar);
addToolBar(Qt::TopToolBarArea, depth_toolbar);
addToolBar(Qt::LeftToolBarArea, parts_toolbar);
diff --git a/editor/qetelementeditor.h b/editor/qetelementeditor.h
index 6f10c45ae..a41a139dc 100644
--- a/editor/qetelementeditor.h
+++ b/editor/qetelementeditor.h
@@ -59,10 +59,11 @@ class QETElementEditor : public QMainWindow {
/// actions du menu edition
QAction *selectall, *deselectall, *inv_select;
QAction *undo, *redo;
+ QAction *zoom_in, *zoom_out, *zoom_fit, *zoom_reset;
QAction *edit_delete, *edit_size_hs, *edit_names, *edit_ori;
QAction *edit_raise, *edit_lower, *edit_backward, *edit_forward;
/// barres d'outils
- QToolBar *parts_toolbar, *main_toolbar, *depth_toolbar, *element_toolbar;
+ QToolBar *parts_toolbar, *main_toolbar, *view_toolbar, *depth_toolbar, *element_toolbar;
/// actions de la barre d'outils
QActionGroup *parts;
QAction *move, *add_line, *add_circle, *add_ellipse, *add_polygon, *add_text;
diff --git a/lang/qet_en.qm b/lang/qet_en.qm
index 77c0eb79f..cc11db4f5 100644
Binary files a/lang/qet_en.qm and b/lang/qet_en.qm differ
diff --git a/lang/qet_en.ts b/lang/qet_en.ts
index c9e6e1e50..627f79e66 100644
--- a/lang/qet_en.ts
+++ b/lang/qet_en.ts
@@ -1960,7 +1960,7 @@ Available options:
&Save
-
+
Enregistrer sous
Save as
@@ -1990,292 +1990,292 @@ Available options:
&Delete
-
+
Éditer la taille et le point de saisie
Edit size and hotspot
-
+
Éditer les noms
Edit names
-
+
Éditer les orientations
Edit orientations
-
+
Déplacer un objet
Move an object
-
+
Ajouter une ligne
Add a line
-
+
Ajouter une ellipse
Add an ellipse
-
+
Ajouter un cercle
Add a circle
-
+
Ajouter un polygone
Add a polygon
-
+
Ajouter du texte
Add text
-
+
Ajouter un arc de cercle
Add an arc
-
+
Ajouter une borne
Add a terminal
-
+
Ajouter un champ de texte
Add a textfield
-
+
Annuler
Undo
-
+
Refaire
Redo
-
+
Ctrl+Q
Ctrl+Q
-
+
Ctrl+Shift+A
Ctrl+Shift+A
-
+
Ctrl+I
Ctrl+I
-
+
Parties
Parts
-
+
Fichier
File
-
+
Édition
Edit
-
+
Affichage
Display
-
+
Outils
Tools
-
+
Aide
Help
-
+
[Modifié]
[Changed]
-
+
[lecture seule]
[Read only]
-
+
Informations
Informations
-
+
Annulations
Undo
-
+
Éditeur d'éléments
Elements Editor
-
+
parties sélectionnées.
selected parts.
-
+
Aucune partie sélectionnée.
No part selected.
-
+
Le fichier
The file
-
+
n'existe pas.
does not exist.
-
+
Impossible d'ouvrir le fichier
Unable to open file
-
+
Ce fichier n'est pas un document XML valide
This file is not a valid XML document
-
+
Erreur
Error
-
+
Édition en lecture seule
Read only edition
-
+
Vous n'avez pas les privilèges nécessaires pour modifier cet élement. Il sera donc ouvert en lecture seule.
You are not allowed to modify this element. Thus it will be edited read-only.
-
+
Impossible d'ecrire dans ce fichier
Can't write to the file
-
+
Ouvrir un fichier
Open a file
-
+
Éléments QElectroTech (*.elmt);;Fichiers XML (*.xml);;Tous les fichiers (*)
QElectroTech elements (*.elmt);;XML files (*.xml);;All files (*)
-
+
Éléments QElectroTech (*.elmt)
QElectroTech elements (*.elmt)
-
+
Enregistrer l'élément en cours ?
Save current element ?
-
+
Voulez-vous enregistrer l'élément
Do you wish to save the element
-
+
?
?
-
+
Afficher
Display
-
+
Suppr
Del
-
+
Ctrl+E
Ctrl+E
-
+
Ctrl+R
Ctrl+R
-
+
Ctrl+T
Ctrl+T
-
+
Rapprocher
Raise
-
+
Éloigner
Lower
-
+
Envoyer au fond
Send backward
-
+
Amener au premier plan
Bring forward
-
+
Ctrl+Shift+Up
Ctrl+Shift+Up
-
+
Ctrl+Shift+Down
Ctrl+Shift+Down
-
+
Ctrl+Shift+End
Ctrl+Shift+End
-
+
Ctrl+Shift+Home
Ctrl+Shift+Home
-
+
Aucune modification
No modification
@@ -2285,15 +2285,55 @@ Available options:
Reload
-
+
Recharger l'élément
Reload element
-
+
Vous avez efffectué des modifications sur cet élément. Si vous le rechargez, ces modifications seront perdues. Voulez-vous vraiment recharger l'élément ?
This element has been modified since last save. If you reload it, these changes will be lost. Do you really want to reload this element ?
+
+
+ Zoom avant
+ Zoom In
+
+
+
+ Zoom arrière
+ Zoom Out
+
+
+
+ Zoom adapté
+ Fit in view
+
+
+
+ Pas de zoom
+ Reset zoom
+
+
+
+ Ctrl+9
+ Ctrl+9
+
+
+
+ Ctrl+0
+ Ctrl+0
+
+
+
+ Élément
+ Element
+
+
+
+ Profondeur
+ Depth
+
QObject