QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsmaptool.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaptool.h - base class for map canvas tools
3 ----------------------
4 begin : January 2006
5 copyright : (C) 2006 by Martin Dobias
6 email : wonder.sk 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
16#ifndef QGSMAPTOOL_H
17#define QGSMAPTOOL_H
18
19#include "qgsconfig.h"
20#include "qgis.h"
21
22#include <QCursor>
23#include <QString>
24#include <QObject>
25#include <QPointer>
26#include <QGestureEvent>
27#include "qgis_gui.h"
28
29
30class QgsMapLayer;
31class QgsMapCanvas;
33class QKeyEvent;
34class QMouseEvent;
35class QWheelEvent;
36class QgsPoint;
37class QgsPointXY;
38class QgsRectangle;
39class QPoint;
40class QAction;
41class QAbstractButton;
43class QMenu;
44
45#ifdef SIP_RUN
46% ModuleHeaderCode
47// fix to allow compilation with sip 4.7 that for some reason
48// doesn't add these includes to the file where the code from
49// ConvertToSubClassCode goes.
50#include <qgsmaptoolzoom.h>
51#include <qgsmaptoolpan.h>
52#include <qgsmaptoolemitpoint.h>
53#include <qgsmaptoolidentify.h>
55#include <qgsmaptoolextent.h>
57#include <qgsmaptoolcapture.h>
59#include <qgsmaptooledit.h>
60% End
61#endif
62
70class GUI_EXPORT QgsMapTool : public QObject
71{
72
73#ifdef SIP_RUN
75 if ( dynamic_cast<QgsMapToolZoom *>( sipCpp ) != NULL )
76 sipType = sipType_QgsMapToolZoom;
77 else if ( dynamic_cast<QgsMapToolPan *>( sipCpp ) != NULL )
78 sipType = sipType_QgsMapToolPan;
79 else if ( dynamic_cast<QgsMapToolEmitPoint *>( sipCpp ) != NULL )
80 sipType = sipType_QgsMapToolEmitPoint;
81 else if ( dynamic_cast<QgsMapToolExtent *>( sipCpp ) != NULL )
82 sipType = sipType_QgsMapToolExtent;
83 else if ( dynamic_cast<QgsMapToolIdentifyFeature *>( sipCpp ) != NULL )
84 sipType = sipType_QgsMapToolIdentifyFeature;
85 else if ( dynamic_cast<QgsMapToolIdentify *>( sipCpp ) != NULL )
86 sipType = sipType_QgsMapToolIdentify;
87 else if ( dynamic_cast<QgsMapToolDigitizeFeature *>( sipCpp ) != NULL )
88 sipType = sipType_QgsMapToolDigitizeFeature;
89 else if ( dynamic_cast<QgsMapToolCapture *>( sipCpp ) != NULL )
90 sipType = sipType_QgsMapToolCapture;
91 else if ( dynamic_cast<QgsMapToolAdvancedDigitizing *>( sipCpp ) != NULL )
92 sipType = sipType_QgsMapToolAdvancedDigitizing;
93 else if ( dynamic_cast<QgsMapToolEdit *>( sipCpp ) != NULL )
94 sipType = sipType_QgsMapToolEdit;
95 else if ( sipCpp->inherits( "QgsMapTool" ) ) // e.g. map tools from QGIS app library, which aren't exposed to SIP
96 sipType = sipType_QgsMapTool;
97 else
98 sipType = nullptr;
100#endif
101
102 Q_OBJECT
103
104 public:
105
109 enum Flag SIP_ENUM_BASETYPE( IntFlag )
110 {
111 Transient = 1 << 1,
112 EditTool = 1 << 2,
113 AllowZoomRect = 1 << 3,
114 ShowContextMenu = 1 << 4,
115 };
116 Q_DECLARE_FLAGS( Flags, Flag )
117
118
121 virtual Flags flags() const { return Flags(); }
122
123 ~QgsMapTool() override;
124
126 virtual void canvasMoveEvent( QgsMapMouseEvent *e );
127
129 virtual void canvasDoubleClickEvent( QgsMapMouseEvent *e );
130
132 virtual void canvasPressEvent( QgsMapMouseEvent *e );
133
135 virtual void canvasReleaseEvent( QgsMapMouseEvent *e );
136
138 virtual void wheelEvent( QWheelEvent *e );
139
141 virtual void keyPressEvent( QKeyEvent *e );
142
144 virtual void keyReleaseEvent( QKeyEvent *e );
145
147 virtual bool gestureEvent( QGestureEvent *e );
148
154 virtual bool canvasToolTipEvent( QHelpEvent *e );
155
162 void setAction( QAction *action );
163
165 QAction *action();
166
171 bool isActive() const;
172
177 void setButton( QAbstractButton *button );
178
180 QAbstractButton *button();
181
183 virtual void setCursor( const QCursor &cursor );
184
186 virtual void activate();
187
189 virtual void deactivate();
190
197 virtual void reactivate();
198
200 virtual void clean();
201
203 QgsMapCanvas *canvas() const;
204
209 QString toolName() { return mToolName; }
210
216 static double searchRadiusMM();
217
222 static double searchRadiusMU( const QgsRenderContext &context );
223
228 static double searchRadiusMU( QgsMapCanvas *canvas );
229
244 virtual void populateContextMenu( QMenu *menu );
245
264 virtual bool populateContextMenuWithEvent( QMenu *menu, QgsMapMouseEvent *event );
265
267 QgsPointXY toMapCoordinates( QPoint point );
268
269 signals:
271 void messageEmitted( const QString &message, Qgis::MessageLevel = Qgis::MessageLevel::Info );
272
275
277 void activated();
278
281
284
285 private slots:
287 void actionDestroyed();
288
289 protected:
290
293
298 QgsPoint toLayerCoordinates( const QgsMapLayer *layer, const QgsPoint &point ) SIP_PYNAME( toLayerCoordinatesV2 );
299
301 QgsPointXY toLayerCoordinates( const QgsMapLayer *layer, QPoint point );
302
304 QgsPointXY toLayerCoordinates( const QgsMapLayer *layer, const QgsPointXY &point );
305
307 QgsPointXY toMapCoordinates( const QgsMapLayer *layer, const QgsPointXY &point );
308
313 QgsPoint toMapCoordinates( const QgsMapLayer *layer, const QgsPoint &point ) SIP_PYNAME( toMapCoordinatesV2 );
314
316 QgsRectangle toLayerCoordinates( const QgsMapLayer *layer, const QgsRectangle &rect );
317
319 QPoint toCanvasCoordinates( const QgsPointXY &point ) const;
320
330 QgsMapLayer *layer( const QString &id );
331
338 void setToolName( const QString &name );
339
341 QPointer< QgsMapCanvas > mCanvas;
342
344 QCursor mCursor;
345
350 QAction *mAction = nullptr;
351
356 QAbstractButton *mButton = nullptr;
357
359 QString mToolName;
360
361 friend class QgsMapCanvas;
362 friend class TestQgsMapToolEdit;
363
364};
365
367
368#endif
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition: qgis.h:99
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:93
Base class for all map layer types.
Definition: qgsmaplayer.h:75
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
The QgsMapToolAdvancedDigitizing class is a QgsMapTool which gives event directly in map coordinates ...
QgsMapToolCapture is a base class capable of capturing point, lines and polygons.
This tool digitizes geometry of new point/line/polygon features on already existing vector layers Onc...
Base class for map tools that edit vector geometry.
A map tool that simply emits a point when clicking on the map.
A map tool that emits an extent from a rectangle drawn onto the map canvas.
The QgsMapToolIdentifyFeature class is a map tool to identify a feature on a chosen layer.
Map tool for identifying features in layers.
A map tool for panning the map.
Definition: qgsmaptoolpan.h:31
A map tool for zooming into the map.
Abstract base class for all map tools.
Definition: qgsmaptool.h:71
QString toolName()
Emit map tool changed with the old tool.
Definition: qgsmaptool.h:209
void deactivated()
signal emitted once the map tool is deactivated
QPointer< QgsMapCanvas > mCanvas
The pointer to the map canvas.
Definition: qgsmaptool.h:341
void messageDiscarded()
emit signal to clear previous message
QFlags< Flag > Flags
Definition: qgsmaptool.h:116
QString mToolName
The translated name of the map tool.
Definition: qgsmaptool.h:359
void messageEmitted(const QString &message, Qgis::MessageLevel=Qgis::MessageLevel::Info)
emit a message
void activated()
signal emitted once the map tool is activated
void reactivated()
Flag
Enumeration of flags that adjust the way the map tool operates.
Definition: qgsmaptool.h:110
QCursor mCursor
The cursor used in the map tool.
Definition: qgsmaptool.h:344
A class to represent a 2D point.
Definition: qgspointxy.h:60
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Contains information about the context of a rendering operation.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:191
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_END
Definition: qgis_sip.h:208
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)