diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index 3718007de..4c533ee3b 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -293,7 +293,7 @@ void DiagramView::handleTitleBlockDrop(QDropEvent *e) { } /** - Passe le Diagram en mode visualisation + Set the Diagram in visualisation mode */ void DiagramView::setVisualisationMode() { setDragMode(ScrollHandDrag); @@ -303,7 +303,7 @@ void DiagramView::setVisualisationMode() { } /** - Passe le Diagram en mode Selection + Set the Diagram in Selection mode */ void DiagramView::setSelectionMode() { setDragMode(RubberBandDrag); @@ -457,17 +457,6 @@ void DiagramView::wheelEvent(QWheelEvent *e) { QAbstractScrollArea::wheelEvent(e); } } - // Or select visualisation or selection mode - else{ - if (!is_moving_view_) { - setVisualisationMode(); - is_moving_view_ = true; - } - else{ - setSelectionMode(); - is_moving_view_ = false; - } - } } /** diff --git a/sources/editor/elementview.cpp b/sources/editor/elementview.cpp index fb3938524..95be3acd5 100644 --- a/sources/editor/elementview.cpp +++ b/sources/editor/elementview.cpp @@ -74,6 +74,24 @@ void ElementView::setScene(ElementScene *s) { scene_ = s; } +/** + Set the Diagram in visualisation mode +*/ +void ElementView::setVisualisationMode() { + setDragMode(ScrollHandDrag); + setInteractive(false); + emit(modeChanged()); +} + +/** + Set the Diagram in Selection mode +*/ +void ElementView::setSelectionMode() { + setDragMode(RubberBandDrag); + setInteractive(true); + emit(modeChanged()); +} + /** Agrandit le schema (+33% = inverse des -25 % de zoomMoins()) */ @@ -316,8 +334,16 @@ ElementContent ElementView::pasteWithOffset(const QDomDocument &xml_document) { @param e QMouseEvent decrivant l'evenement souris */ void ElementView::mousePressEvent(QMouseEvent *e) { - if (e -> buttons() & Qt::MidButton) { - paste(mapToScene(e -> pos())); + // Select visualisation or selection mode + if (e -> buttons() == Qt::MidButton) { + if (!is_moving_view_) { + setVisualisationMode(); + is_moving_view_ = true; + } + else{ + setSelectionMode(); + is_moving_view_ = false; + } } QGraphicsView::mousePressEvent(e); } @@ -327,15 +353,19 @@ void ElementView::mousePressEvent(QMouseEvent *e) { @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(); + //Zoom and scrolling + if (e->buttons() != Qt::MidButton) { + if (!(e -> modifiers() & Qt::ControlModifier)) { + if (e -> delta() > 0){ + zoomIn(); + } + else{ + zoomOut(); + } + } + else { + QAbstractScrollArea::wheelEvent(e); } - } else { - QAbstractScrollArea::wheelEvent(e); } } diff --git a/sources/editor/elementview.h b/sources/editor/elementview.h index a42c9e997..f51075086 100644 --- a/sources/editor/elementview.h +++ b/sources/editor/elementview.h @@ -50,6 +50,8 @@ class ElementView : public QGraphicsView { QRectF applyMovement(const QRectF &, const QET::OrientedMovement &, const QPointF &); public slots: + void setVisualisationMode(); + void setSelectionMode(); void zoomIn(); void zoomOut(); void zoomFit(); @@ -60,6 +62,10 @@ class ElementView : public QGraphicsView { void paste(); void pasteInArea(); + signals: + /// Signal emitted after the mode changed + void modeChanged(); + private slots: void getPasteArea(const QRectF &); ElementContent pasteAreaDefined(const QRectF &); @@ -73,5 +79,6 @@ class ElementView : public QGraphicsView { QString to_paste_in_area_; int offset_paste_count_; QPointF start_top_left_corner_; + bool is_moving_view_; ///< Indicate whether the visualisation mode has been enabled due to mouse/keyboard interactions }; #endif