QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgslayoutviewtoolpan.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutviewtoolpan.cpp
3 ------------------------
4 Date : July 2017
5 Copyright : (C) 2017 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgslayoutview.h"
20
21#include <QScrollBar>
22
23#include "moc_qgslayoutviewtoolpan.cpp"
24
26 : QgsLayoutViewTool( view, tr( "Pan" ) )
27{
28 setCursor( Qt::OpenHandCursor );
29}
30
32{
33 mMousePressStartPos = event->pos();
34
35 if ( event->button() != Qt::LeftButton )
36 {
37 event->ignore();
38 return;
39 }
40
41 mIsPanning = true;
42 mLastMousePos = event->pos();
43 view()->viewport()->setCursor( Qt::ClosedHandCursor );
44}
45
47{
48 if ( !mIsPanning )
49 {
50 event->ignore();
51 return;
52 }
53
54 view()->horizontalScrollBar()->setValue( view()->horizontalScrollBar()->value() - ( event->x() - mLastMousePos.x() ) );
55 view()->verticalScrollBar()->setValue( view()->verticalScrollBar()->value() - ( event->y() - mLastMousePos.y() ) );
56 mLastMousePos = event->pos();
57 view()->viewChanged();
58}
59
61{
62 const bool clickOnly = !isClickAndDrag( mMousePressStartPos, event->pos() );
63
64 if ( event->button() == Qt::MiddleButton && clickOnly )
65 {
66 //middle mouse button click = recenter on point
67
68 //get current visible part of scene
69 const QRect viewportRect( 0, 0, view()->viewport()->width(), view()->viewport()->height() );
70 QgsRectangle visibleRect = QgsRectangle( view()->mapToScene( viewportRect ).boundingRect() );
71 const QPointF scenePoint = event->layoutPoint();
72 visibleRect.scale( 1, scenePoint.x(), scenePoint.y() );
73 const QRectF boundsRect = visibleRect.toRectF();
74
75 //zoom view to fit desired bounds
76 view()->fitInView( boundsRect, Qt::KeepAspectRatio );
78 view()->viewChanged();
79 return;
80 }
81
82 if ( !mIsPanning || event->button() != Qt::LeftButton )
83 {
85 view()->viewChanged();
86 event->ignore();
87 return;
88 }
89
90 mIsPanning = false;
91 view()->viewport()->setCursor( Qt::OpenHandCursor );
92}
93
95{
96 mIsPanning = false;
98}
A mouse event which is the result of a user interaction with a QgsLayoutView.
void layoutPressEvent(QgsLayoutViewMouseEvent *event) override
Mouse press event for overriding.
void deactivate() override
Called when tool is deactivated.
void layoutReleaseEvent(QgsLayoutViewMouseEvent *event) override
Mouse release event for overriding.
QgsLayoutViewToolPan(QgsLayoutView *view)
Constructor for QgsLayoutViewToolPan.
void layoutMoveEvent(QgsLayoutViewMouseEvent *event) override
Mouse move event for overriding.
void setCursor(const QCursor &cursor)
Sets a user defined cursor for use when the tool is active.
QgsLayoutView * view() const
Returns the view associated with the tool.
virtual void deactivate()
Called when tool is deactivated.
bool isClickAndDrag(QPoint startViewPoint, QPoint endViewPoint) const
Returns true if a mouse press/release operation which started at startViewPoint and ended at endViewP...
QgsLayoutViewTool(QgsLayoutView *view, const QString &name)
Constructor for QgsLayoutViewTool, taking a layout view and tool name as parameters.
A graphical widget to display and interact with QgsLayouts.
void viewChanged()
Updates associated rulers and other widgets after view extent or zoom has changed.
void emitZoomLevelChanged()
Emits the zoomLevelChanged() signal.
A rectangle specified with double values.
void scale(double scaleFactor, const QgsPointXY *c=nullptr)
Scale the rectangle around its center point.
QRectF toRectF() const
Returns a QRectF with same coordinates as the rectangle.