QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsmodelviewtooltemporarykeyzoom.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmodelviewtooltemporarykeyzoom.cpp
3 -------------------------------------
4 Date : March 2020
5 Copyright : (C) 2020 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
19#include "qgsapplication.h"
20#include <QScrollBar>
21#include <QApplication>
22
24 : QgsModelViewToolZoom( view )
25{
26}
27
29{
31 if ( !event->isAccepted() )
32 return;
33
34 //end of temporary zoom tool
35 if ( mDeactivateOnMouseRelease )
36 view()->setTool( mPreviousViewTool );
37}
38
40{
41 if ( event->isAutoRepeat() )
42 {
43 event->ignore();
44 return;
45 }
46
47 //respond to changes in ctrl key status
48 if ( !( event->modifiers() & Qt::ControlModifier ) )
49 {
50 if ( !mMarqueeZoom )
51 {
52 //space pressed, but control key was released, end of temporary zoom tool
53 view()->setTool( mPreviousViewTool );
54 }
55 else
56 {
57 mDeactivateOnMouseRelease = true;
58 }
59 }
60 else
61 {
62 //both control and space pressed
63 //set cursor to zoom in/out depending on alt key status
64 updateCursor( event->modifiers() );
65 if ( event->key() == Qt::Key_Space )
66 {
67 mDeactivateOnMouseRelease = false;
68 }
69 }
70}
71
73{
74 if ( event->isAutoRepeat() )
75 {
76 event->ignore();
77 return;
78 }
79
80 if ( event->key() == Qt::Key_Space )
81 {
82 //temporary keyboard-based zoom tool is active and space key has been released
83 if ( !mMarqueeZoom )
84 {
85 //not mid-way through an operation, so immediately switch tool back
86 view()->setTool( mPreviousViewTool );
87 }
88 else
89 {
90 mDeactivateOnMouseRelease = true;
91 }
92 }
93 else
94 {
95 updateCursor( event->modifiers() );
96 event->ignore();
97 }
98}
99
101{
102 mDeactivateOnMouseRelease = false;
103 mPreviousViewTool = view()->tool();
105 updateCursor( QApplication::keyboardModifiers() );
106}
107
108void QgsModelViewToolTemporaryKeyZoom::updateCursor( Qt::KeyboardModifiers modifiers )
109{
110 view()->viewport()->setCursor( ( modifiers & Qt::AltModifier ) ?
111 QgsApplication::getThemeCursor( QgsApplication::Cursor::ZoomOut ) :
112 QgsApplication::getThemeCursor( QgsApplication::Cursor::ZoomIn ) );
113}
static QCursor getThemeCursor(Cursor cursor)
Helper to get a theme cursor.
A QgsModelViewMouseEvent is the result of a user interaction with the mouse on a QgsModelGraphicsView...
void modelReleaseEvent(QgsModelViewMouseEvent *event) override
Mouse release event for overriding.
void keyReleaseEvent(QKeyEvent *event) override
Key release event for overriding.
void keyPressEvent(QKeyEvent *event) override
Key press event for overriding.
QgsModelViewToolTemporaryKeyZoom(QgsModelGraphicsView *view)
Constructor for QgsModelViewToolTemporaryKeyZoom.
void activate() override
Called when tool is set as the currently active model tool.
Model view tool for zooming into and out of the model.
bool mMarqueeZoom
Will be true will marquee zoom operation is in progress.
void modelReleaseEvent(QgsModelViewMouseEvent *event) override
Mouse release event for overriding.
QgsModelGraphicsView * view() const
Returns the view associated with the tool.
virtual void activate()
Called when tool is set as the currently active model tool.