diff options
author | Jochen Becher <jochen_becher@gmx.de> | 2024-04-21 19:44:43 +0200 |
---|---|---|
committer | Jochen Becher <jochen_becher@gmx.de> | 2024-04-22 10:46:19 +0000 |
commit | faf96c14a1bb67cf03713c52106a56ac5a7a33e1 (patch) | |
tree | de3722db1664e7db2fd4130b3ee2ec0f404ae4e8 /src/libs | |
parent | e50646b6772565617a2bde07dcaf82433ba03c6f (diff) |
ModelEditor: Improve panning
Change-Id: Iacb3e2bb9006d306852f18b50bbec322abb5acdf
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.cpp | 39 | ||||
-rw-r--r-- | src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.h | 7 |
2 files changed, 45 insertions, 1 deletions
diff --git a/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.cpp b/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.cpp index 5634c4eb7f..eba246676d 100644 --- a/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.cpp +++ b/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.cpp @@ -14,9 +14,14 @@ #include <QDragLeaveEvent> #include <QDropEvent> #include <QMimeData> +#include <QScrollBar> namespace qmt { +namespace { +const qreal ADJUSTMENT = 80; +}; + DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent) { @@ -25,6 +30,9 @@ DiagramView::DiagramView(QWidget *parent) setDragMode(QGraphicsView::RubberBandDrag); setFrameShape(QFrame::NoFrame); setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); + m_panTimer.setInterval(200); + m_panTimer.setSingleShot(false); + connect(&m_panTimer, &QTimer::timeout, this, &DiagramView::onPanTimeout); } DiagramView::~DiagramView() @@ -130,12 +138,41 @@ void DiagramView::dropEvent(QDropEvent *event) } } +void DiagramView::mousePressEvent(QMouseEvent *event) +{ + m_panTimer.start(); + QGraphicsView::mousePressEvent(event); +} + +void DiagramView::mouseReleaseEvent(QMouseEvent *event) +{ + m_panTimer.stop(); + QGraphicsView::mouseReleaseEvent(event); +} + +void DiagramView::mouseMoveEvent(QMouseEvent *event) +{ + QGraphicsView::mouseMoveEvent(event); + m_lastMouse = event->pos(); +} + void DiagramView::onSceneRectChanged(const QRectF &sceneRect) { // add some adjustment to all 4 sides - static const qreal ADJUSTMENT = 80; QRectF rect = sceneRect.adjusted(-ADJUSTMENT, -ADJUSTMENT, ADJUSTMENT, ADJUSTMENT); setSceneRect(rect); } +void DiagramView::onPanTimeout() +{ + if (m_lastMouse.x() < ADJUSTMENT) + horizontalScrollBar()->triggerAction(QScrollBar::SliderSingleStepSub); + else if (m_lastMouse.x() > viewport()->size().width() - ADJUSTMENT) + horizontalScrollBar()->triggerAction(QScrollBar::SliderSingleStepAdd); + if (m_lastMouse.y() < ADJUSTMENT) + verticalScrollBar()->triggerAction(QScrollBar::SliderSingleStepSub); + else if (m_lastMouse.y() > viewport()->size().height() - ADJUSTMENT) + verticalScrollBar()->triggerAction(QScrollBar::SliderSingleStepAdd); +} + } // namespace qmt diff --git a/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.h b/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.h index 41386f09bd..4eee60ff44 100644 --- a/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.h +++ b/src/libs/modelinglib/qmt/diagram_widgets_ui/diagramview.h @@ -7,6 +7,7 @@ #include "qmt/infrastructure/qmt_global.h" #include <QPointer> +#include <QTimer> namespace qmt { @@ -27,11 +28,17 @@ protected: void dragLeaveEvent(QDragLeaveEvent *event) override; void dragMoveEvent(QDragMoveEvent *event) override; void dropEvent(QDropEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; private: void onSceneRectChanged(const QRectF &sceneRect); + void onPanTimeout(); QPointer<DiagramSceneModel> m_diagramSceneModel; + QPointF m_lastMouse; + QTimer m_panTimer; }; } // namespace qmt |