QGIS API Documentation 3.99.0-Master (21b3aa880ba)
Loading...
Searching...
No Matches
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
21#include "qgis.h"
22#include "qgis_gui.h"
23
24#include <QCursor>
25#include <QGestureEvent>
26#include <QObject>
27#include <QPointer>
28#include <QString>
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:
105
109 enum Flag SIP_ENUM_BASETYPE( IntFlag )
110 {
111 Transient = 1 << 1,
112 EditTool = 1 << 2,
113 AllowZoomRect = 1 << 3,
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:
270
276 void messageEmitted( const QString &message, Qgis::MessageLevel level = Qgis::MessageLevel::Info );
277
284
290 void activated();
291
298
305
306 private slots:
308 void actionDestroyed();
309
310 protected:
313
318 QgsPoint toLayerCoordinates( const QgsMapLayer *layer, const QgsPoint &point ) SIP_PYNAME( toLayerCoordinatesV2 );
319
321 QgsPointXY toLayerCoordinates( const QgsMapLayer *layer, QPoint point );
322
325
328
333 QgsPoint toMapCoordinates( const QgsMapLayer *layer, const QgsPoint &point ) SIP_PYNAME( toMapCoordinatesV2 );
334
337
339 QPoint toCanvasCoordinates( const QgsPointXY &point ) const;
340
350 QgsMapLayer *layer( const QString &id );
351
358 void setToolName( const QString &name );
359
361 QPointer<QgsMapCanvas> mCanvas;
362
364 QCursor mCursor;
365
370 QAction *mAction = nullptr;
371
376 QAbstractButton *mButton = nullptr;
377
379 QString mToolName;
380
381 friend class QgsMapCanvas;
382 friend class TestQgsMapToolEdit;
383};
384
386
387#endif
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition qgis.h:156
@ Info
Information message.
Definition qgis.h:157
Map canvas is a class for displaying all GIS data types on a canvas.
Base class for all map layer types.
Definition qgsmaplayer.h:80
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:209
QgsPoint toLayerCoordinates(const QgsMapLayer *layer, const QgsPoint &point)
Transforms a point from map coordinates to layer coordinates.
void deactivated()
Emitted when the map tool is deactivated.
QgsMapLayer * layer(const QString &id)
Returns the map layer with the matching ID, or nullptr if no layers could be found.
QgsMapCanvas * canvas() const
returns pointer to the tool's map canvas
QgsMapTool(QgsMapCanvas *canvas)
Constructor takes a map canvas as a parameter.
void messageDiscarded()
Emitted when the previous message from the tool should be cleared from the application message bar.
QAbstractButton * mButton
Optional pointer to a button that will be checked on map tool activation and unchecked on map tool de...
Definition qgsmaptool.h:376
void setToolName(const QString &name)
Sets the tool's name.
QFlags< Flag > Flags
Definition qgsmaptool.h:116
QgsPointXY toMapCoordinates(QPoint point)
Transforms a point from screen coordinates to map coordinates.
QPointer< QgsMapCanvas > mCanvas
The pointer to the map canvas.
Definition qgsmaptool.h:361
QString mToolName
The translated name of the map tool.
Definition qgsmaptool.h:379
friend class QgsMapCanvas
Definition qgsmaptool.h:381
friend class TestQgsMapToolEdit
Definition qgsmaptool.h:382
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.
QAction * mAction
Optional pointer to an action that will be checked on map tool activation and unchecked on map tool d...
Definition qgsmaptool.h:370
virtual Flags flags() const
Returns the flags for the map tool.
Definition qgsmaptool.h:121
QPoint toCanvasCoordinates(const QgsPointXY &point) const
Transforms a point from map coordinates to screen coordinates.
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:110
@ AllowZoomRect
Allow zooming by rectangle (by holding shift and dragging) while the tool is active.
Definition qgsmaptool.h:113
@ EditTool
Map tool is an edit tool, which can only be used when layer is editable.
Definition qgsmaptool.h:112
@ Transient
Deprecated since QGIS 3.36 – no longer used by QGIS and will be removed in QGIS 4....
Definition qgsmaptool.h:111
@ ShowContextMenu
Show a context menu when right-clicking with the tool (since QGIS 3.14). See populateContextMenu().
Definition qgsmaptool.h:114
QCursor mCursor
The cursor used in the map tool.
Definition qgsmaptool.h:364
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:199
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:275
#define SIP_PYNAME(name)
Definition qgis_sip.h:89
#define SIP_END
Definition qgis_sip.h:216
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)