QGIS API Documentation 3.43.0-Master (c67cf405802)
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
71class GUI_EXPORT QgsMapTool : public QObject
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:
108 enum Flag SIP_ENUM_BASETYPE( IntFlag )
109 {
110 Transient = 1 << 1,
111 EditTool = 1 << 2,
112 AllowZoomRect = 1 << 3,
113 ShowContextMenu = 1 << 4,
114 };
115 Q_DECLARE_FLAGS( Flags, Flag )
116
117
120 virtual Flags flags() const { return Flags(); }
121
122 ~QgsMapTool() override;
123
125 virtual void canvasMoveEvent( QgsMapMouseEvent *e );
126
128 virtual void canvasDoubleClickEvent( QgsMapMouseEvent *e );
129
131 virtual void canvasPressEvent( QgsMapMouseEvent *e );
132
134 virtual void canvasReleaseEvent( QgsMapMouseEvent *e );
135
137 virtual void wheelEvent( QWheelEvent *e );
138
140 virtual void keyPressEvent( QKeyEvent *e );
141
143 virtual void keyReleaseEvent( QKeyEvent *e );
144
146 virtual bool gestureEvent( QGestureEvent *e );
147
153 virtual bool canvasToolTipEvent( QHelpEvent *e );
154
161 void setAction( QAction *action );
162
164 QAction *action();
165
170 bool isActive() const;
171
176 void setButton( QAbstractButton *button );
177
179 QAbstractButton *button();
180
182 virtual void setCursor( const QCursor &cursor );
183
185 virtual void activate();
186
188 virtual void deactivate();
189
196 virtual void reactivate();
197
199 virtual void clean();
200
202 QgsMapCanvas *canvas() const;
203
208 QString toolName() { return mToolName; }
209
215 static double searchRadiusMM();
216
221 static double searchRadiusMU( const QgsRenderContext &context );
222
227 static double searchRadiusMU( QgsMapCanvas *canvas );
228
243 virtual void populateContextMenu( QMenu *menu );
244
263 virtual bool populateContextMenuWithEvent( QMenu *menu, QgsMapMouseEvent *event );
264
266 QgsPointXY toMapCoordinates( QPoint point );
267
268 signals:
269
275 void messageEmitted( const QString &message, Qgis::MessageLevel level = Qgis::MessageLevel::Info );
276
283
289 void activated();
290
297
304
305 private slots:
307 void actionDestroyed();
308
309 protected:
312
317 QgsPoint toLayerCoordinates( const QgsMapLayer *layer, const QgsPoint &point ) SIP_PYNAME( toLayerCoordinatesV2 );
318
320 QgsPointXY toLayerCoordinates( const QgsMapLayer *layer, QPoint point );
321
323 QgsPointXY toLayerCoordinates( const QgsMapLayer *layer, const QgsPointXY &point );
324
326 QgsPointXY toMapCoordinates( const QgsMapLayer *layer, const QgsPointXY &point );
327
332 QgsPoint toMapCoordinates( const QgsMapLayer *layer, const QgsPoint &point ) SIP_PYNAME( toMapCoordinatesV2 );
333
335 QgsRectangle toLayerCoordinates( const QgsMapLayer *layer, const QgsRectangle &rect );
336
338 QPoint toCanvasCoordinates( const QgsPointXY &point ) const;
339
349 QgsMapLayer *layer( const QString &id );
350
357 void setToolName( const QString &name );
358
360 QPointer<QgsMapCanvas> mCanvas;
361
363 QCursor mCursor;
364
369 QAction *mAction = nullptr;
370
375 QAbstractButton *mButton = nullptr;
376
378 QString mToolName;
379
380 friend class QgsMapCanvas;
381 friend class TestQgsMapToolEdit;
382};
383
385
386#endif
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition qgis.h:154
@ Info
Information message.
Definition qgis.h:155
Map canvas is a class for displaying all GIS data types on a canvas.
Base class for all map layer types.
Definition qgsmaplayer.h:77
A mouse event which is the result of a user interaction with a QgsMapCanvas.
A QgsMapTool which gives events directly in map coordinates and allows filtering of events.
Base class for map tools capable of capturing point, lines and polygons.
This tool digitizes geometry of new point/line/polygon features on already existing vector layers.
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.
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.
A map tool for zooming into the map.
Abstract base class for all map tools.
Definition qgsmaptool.h:72
QString toolName()
Emit map tool changed with the old tool.
Definition qgsmaptool.h:208
void deactivated()
Emitted when the map tool is deactivated.
void messageDiscarded()
Emitted when the previous message from the tool should be cleared from the application message bar.
QFlags< Flag > Flags
Definition qgsmaptool.h:115
QPointer< QgsMapCanvas > mCanvas
The pointer to the map canvas.
Definition qgsmaptool.h:360
QString mToolName
The translated name of the map tool.
Definition qgsmaptool.h:378
void messageEmitted(const QString &message, Qgis::MessageLevel level=Qgis::MessageLevel::Info)
Emitted when a message should be shown to the user in the application message bar.
void activated()
Emitted when the map tool is activated.
void reactivated()
Emitted when the map tool is activated, while it is already active.
Flag
Enumeration of flags that adjust the way the map tool operates.
Definition qgsmaptool.h:109
QCursor mCursor
The cursor used in the map tool.
Definition qgsmaptool.h:363
Represents 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.
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)