QGIS API Documentation  2.9.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
qgsmaptool.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmaptool.cpp - 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 #include "qgslogger.h"
17 #include "qgsmaptool.h"
18 #include "qgsmapcanvas.h"
19 #include "qgsmaptopixel.h"
20 #include "qgsmaprenderer.h"
21 #include "qgsrendercontext.h"
22 #include <QAction>
23 #include <QAbstractButton>
24 
26  : QObject( canvas )
27  , mCanvas( canvas )
28  , mCursor( Qt::CrossCursor )
29  , mAction( NULL )
30  , mButton( NULL )
31  , mToolName( QString() )
32 {
33 }
34 
35 
37 {
38  mCanvas->unsetMapTool( this );
39 }
40 
41 
42 QgsPoint QgsMapTool::toMapCoordinates( const QPoint& point )
43 {
45 }
46 
47 
48 QgsPoint QgsMapTool::toLayerCoordinates( QgsMapLayer* layer, const QPoint& point )
49 {
50  QgsPoint pt = toMapCoordinates( point );
51  return toLayerCoordinates( layer, pt );
52 }
53 
55 {
56  return mCanvas->mapSettings().mapToLayerCoordinates( layer, point );
57 }
58 
60 {
61  return mCanvas->mapSettings().layerToMapCoordinates( layer, point );
62 }
63 
65 {
66  return mCanvas->mapSettings().mapToLayerCoordinates( layer, rect );
67 }
68 
70 {
71  qreal x = point.x(), y = point.y();
73  return QPoint( qRound( x ), qRound( y ) );
74 }
75 
76 
78 {
79  // make action and/or button active
80  if ( mAction )
81  mAction->setChecked( true );
82  if ( mButton )
83  mButton->setChecked( true );
84 
85  // set cursor (map tools usually set it in constructor)
86  mCanvas->setCursor( mCursor );
87  QgsDebugMsg( "Cursor has been set" );
88 
89  emit activated();
90 }
91 
92 
94 {
95  if ( mAction )
96  mAction->setChecked( false );
97  if ( mButton )
98  mButton->setChecked( false );
99 
100  emit deactivated();
101 }
102 
103 void QgsMapTool::setAction( QAction* action )
104 {
105  if ( mAction )
106  disconnect( mAction, SIGNAL( destroyed() ), this, SLOT( actionDestroyed() ) );
107  mAction = action;
108  if ( mAction )
109  connect( mAction, SIGNAL( destroyed() ), this, SLOT( actionDestroyed() ) );
110 }
111 
112 void QgsMapTool::actionDestroyed()
113 {
114  if ( mAction == sender() )
115  mAction = 0;
116 }
117 
119 {
120  return mAction;
121 }
122 
123 void QgsMapTool::setButton( QAbstractButton* button )
124 {
125  mButton = button;
126 }
127 
128 QAbstractButton* QgsMapTool::button()
129 {
130  return mButton;
131 }
132 
133 void QgsMapTool::setCursor( QCursor cursor )
134 {
135  mCursor = cursor;
136 }
137 
138 
139 void QgsMapTool::canvasMoveEvent( QMouseEvent *e )
140 {
141  Q_UNUSED( e );
142 }
143 
145 {
146  Q_UNUSED( e );
147 }
148 
149 void QgsMapTool::canvasPressEvent( QMouseEvent *e )
150 {
151  Q_UNUSED( e );
152 }
153 
154 void QgsMapTool::canvasReleaseEvent( QMouseEvent *e )
155 {
156  Q_UNUSED( e );
157 }
158 
159 void QgsMapTool::wheelEvent( QWheelEvent *e )
160 {
161  Q_UNUSED( e );
162 }
163 
164 void QgsMapTool::keyPressEvent( QKeyEvent *e )
165 {
166  Q_UNUSED( e );
167 }
168 
169 void QgsMapTool::keyReleaseEvent( QKeyEvent *e )
170 {
171  Q_UNUSED( e );
172 }
173 
174 #ifdef HAVE_TOUCH
175 bool QgsMapTool::gestureEvent( QGestureEvent *e )
176 {
177  Q_UNUSED( e );
178  return true;
179 }
180 #endif
181 
183 {
184 }
185 
187 {
188  return false;
189 }
190 
192 {
193  return false;
194 }
195 
197 {
198  return mCanvas;
199 }
200 
202 {
203  QSettings settings;
204  double radius = settings.value( "/Map/searchRadiusMM", QGis::DEFAULT_SEARCH_RADIUS_MM ).toDouble();
205 
206  if ( radius > 0 )
207  {
208  return radius;
209  }
211 }
212 
214 {
215  return searchRadiusMM() * context.scaleFactor() * context.mapToPixel().mapUnitsPerPixel();
216 }
217 
219 {
220  if ( !canvas )
221  {
222  return 0;
223  }
224  QgsMapSettings mapSettings = canvas->mapSettings();
225  QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings );
226  return searchRadiusMU( context );
227 }
void unsetMapTool(QgsMapTool *mapTool)
Unset the current map tool or last non zoom tool.
A rectangle specified with double values.
Definition: qgsrectangle.h:35
Base class for all map layer types.
Definition: qgsmaplayer.h:49
QgsPoint layerToMapCoordinates(QgsMapLayer *theLayer, QgsPoint point) const
transform point coordinates from layer's CRS to output CRS
static double searchRadiusMU(const QgsRenderContext &context)
Get search radius in map units for given context.
Definition: qgsmaptool.cpp:213
QgsPoint toMapCoordinates(const QPoint &point)
transformation from screen coordinates to map coordinates
Definition: qgsmaptool.cpp:42
QAbstractButton * button()
Return associated button with map tool or NULL if no button is associated.
Definition: qgsmaptool.cpp:128
#define QgsDebugMsg(str)
Definition: qgslogger.h:33
void transformInPlace(qreal &x, qreal &y) const
virtual void canvasMoveEvent(QMouseEvent *e)
Mouse move event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:139
QAbstractButton * mButton
optionally map tool can have pointer to a button which will be used to set that action as active ...
Definition: qgsmaptool.h:199
const QgsMapSettings & mapSettings() const
Get access to properties used for map rendering.
double scaleFactor() const
virtual void canvasDoubleClickEvent(QMouseEvent *e)
Mouse double click event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:144
virtual void canvasPressEvent(QMouseEvent *e)
Mouse press event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:149
QgsPoint mapToLayerCoordinates(QgsMapLayer *theLayer, QgsPoint point) const
transform point coordinates from output CRS to layer's CRS
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:105
double x() const
Definition: qgspoint.h:126
virtual Q_DECL_DEPRECATED void renderComplete()
Called when rendering has finished.
Definition: qgsmaptool.cpp:182
void setButton(QAbstractButton *button)
Use this to associate a button to this maptool.
Definition: qgsmaptool.cpp:123
The QgsMapSettings class contains configuration for rendering of the map.
virtual void activate()
called when set as currently active map tool
Definition: qgsmaptool.cpp:77
QgsMapCanvas * mCanvas
pointer to map canvas
Definition: qgsmaptool.h:188
virtual void keyReleaseEvent(QKeyEvent *e)
Key event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:169
QCursor mCursor
cursor used in map tool
Definition: qgsmaptool.h:191
QgsMapCanvas * canvas()
returns pointer to the tool's map canvas
Definition: qgsmaptool.cpp:196
void setAction(QAction *action)
Use this to associate a QAction to this maptool.
Definition: qgsmaptool.cpp:103
QgsPoint toLayerCoordinates(QgsMapLayer *layer, const QPoint &point)
transformation from screen coordinates to layer's coordinates
Definition: qgsmaptool.cpp:48
double mapUnitsPerPixel() const
Return current map units per pixel.
virtual void deactivate()
called when map tool is being deactivated
Definition: qgsmaptool.cpp:93
virtual bool isEditTool()
Check whether this MapTool performs an edit operation.
Definition: qgsmaptool.cpp:191
virtual void wheelEvent(QWheelEvent *e)
Mouse wheel event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:159
A class to represent a point.
Definition: qgspoint.h:63
void activated()
signal emitted once the map tool is activated
static const double DEFAULT_SEARCH_RADIUS_MM
Identify search radius in mm.
Definition: qgis.h:292
QAction * action()
Return associated action with map tool or NULL if no action is associated.
Definition: qgsmaptool.cpp:118
virtual void keyPressEvent(QKeyEvent *e)
Key event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:164
QgsPoint toMapCoordinates(int x, int y) const
Contains information about the context of a rendering operation.
void deactivated()
signal emitted once the map tool is deactivated
virtual void canvasReleaseEvent(QMouseEvent *e)
Mouse release event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:154
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
virtual ~QgsMapTool()
virtual destructor
Definition: qgsmaptool.cpp:36
QPoint toCanvasCoordinates(const QgsPoint &point)
transformation from map coordinates to screen coordinates
Definition: qgsmaptool.cpp:69
QAction * mAction
optionally map tool can have pointer to action which will be used to set that action as active ...
Definition: qgsmaptool.h:195
const QgsMapToPixel * getCoordinateTransform()
Get the current coordinate transform.
const QgsMapToPixel & mapToPixel() const
virtual bool isTransient()
Check whether this MapTool performs a zoom or pan operation.
Definition: qgsmaptool.cpp:186
double y() const
Definition: qgspoint.h:134
virtual void setCursor(QCursor cursor)
Set a user defined cursor.
Definition: qgsmaptool.cpp:133
QgsMapTool(QgsMapCanvas *canvas)
constructor takes map canvas as a parameter
Definition: qgsmaptool.cpp:25
static double searchRadiusMM()
Get search radius in mm.
Definition: qgsmaptool.cpp:201