%ModuleHeaderCode // fix to allow compilation with sip 4.7 that for some reason // doesn't add these includes to the file where the code from // ConvertToSubClassCode goes. #include #include #include #include %End class QgsMapTool : QObject { %TypeHeaderCode #include %End %ConvertToSubClassCode if (dynamic_cast(sipCpp) != NULL) sipType = sipType_QgsMapToolZoom; else if (dynamic_cast(sipCpp) != NULL) sipType = sipType_QgsMapToolPan; else if (dynamic_cast(sipCpp) != NULL) sipType = sipType_QgsMapToolEmitPoint; else if (dynamic_cast(sipCpp) != NULL) sipType = sipType_QgsMapToolIdentify; else sipType = NULL; %End public: //! Enumeration of flags that adjust the way the map tool operates //! @note added in QGIS 2.16 enum Flag { Transient, /*!< Indicates that this map tool performs a transient (one-off) operation. If it does, the tool can be operated once and then a previous map tool automatically restored. */ EditTool, /*!< Map tool is an edit tool, which can only be used when layer is editable*/ AllowZoomRect, /*!< Allow zooming by rectangle (by holding shift and dragging) while the tool is active*/ }; typedef QFlags Flags; /** Returns the flags for the map tool. * @note added in QGIS 2.16 */ virtual Flags flags() const; //! virtual destructor virtual ~QgsMapTool(); //! Mouse move event for overriding. Default implementation does nothing. virtual void canvasMoveEvent( QgsMapMouseEvent* e ); //! Mouse double click event for overriding. Default implementation does nothing. virtual void canvasDoubleClickEvent( QgsMapMouseEvent* e ); //! Mouse press event for overriding. Default implementation does nothing. virtual void canvasPressEvent( QgsMapMouseEvent* e ); //! Mouse release event for overriding. Default implementation does nothing. virtual void canvasReleaseEvent( QgsMapMouseEvent* e ); //! Mouse wheel event for overriding. Default implementation does nothing. virtual void wheelEvent( QWheelEvent* e ); //! Key event for overriding. Default implementation does nothing. virtual void keyPressEvent( QKeyEvent* e ); //! Key event for overriding. Default implementation does nothing. virtual void keyReleaseEvent( QKeyEvent* e ); //! gesture event for overriding. Default implementation does nothing. virtual bool gestureEvent( QGestureEvent* e ); /** Use this to associate a QAction to this maptool. Then when the setMapTool * method of mapcanvas is called the action state will be set to on. * Usually this will cause e.g. a toolbutton to appear pressed in and * the previously used toolbutton to pop out. */ void setAction( QAction* action ); /** Return associated action with map tool or NULL if no action is associated */ QAction* action(); /** Use this to associate a button to this maptool. It has the same meaning * as setAction() function except it works with a button instead of an QAction. */ void setButton( QAbstractButton* button ); /** Return associated button with map tool or NULL if no button is associated */ QAbstractButton* button(); /** Set a user defined cursor */ virtual void setCursor( const QCursor& cursor ); //! called when set as currently active map tool virtual void activate(); //! called when map tool is being deactivated virtual void deactivate(); //! returns pointer to the tool's map canvas QgsMapCanvas* canvas(); //! Emit map tool changed with the old tool //! @note added in 2.3 QString toolName(); /** Get search radius in mm. Used by identify, tip etc. * The values is currently set in identify tool options (move somewhere else?) * and defaults to Qgis::DEFAULT_SEARCH_RADIUS_MM. * @note added in 2.3 */ static double searchRadiusMM(); /** Get search radius in map units for given context. Used by identify, tip etc. * The values is calculated from searchRadiusMM(). * @note added in 2.3 */ static double searchRadiusMU( const QgsRenderContext& context ); /** Get search radius in map units for given canvas. Used by identify, tip etc. * The values is calculated from searchRadiusMM(). * @note added in 2.3 */ static double searchRadiusMU( QgsMapCanvas * canvas ); signals: //! emit a message void messageEmitted( const QString& message, QgsMessageBar::MessageLevel = QgsMessageBar::INFO ); //! emit signal to clear previous message void messageDiscarded(); //! signal emitted once the map tool is activated void activated(); //! signal emitted once the map tool is deactivated void deactivated(); protected: //! constructor takes map canvas as a parameter QgsMapTool( QgsMapCanvas* canvas /TransferThis/ ); //! transformation from screen coordinates to map coordinates QgsPoint toMapCoordinates( QPoint point ); //! transformation from screen coordinates to layer's coordinates QgsPoint toLayerCoordinates( const QgsMapLayer* layer, QPoint point ); //! transformation from map coordinates to layer's coordinates QgsPoint toLayerCoordinates( const QgsMapLayer* layer, const QgsPoint& point ); //!transformation from layer's coordinates to map coordinates (which is different in case reprojection is used) QgsPoint toMapCoordinates( const QgsMapLayer* layer, const QgsPoint& point ); //!transformation from layer's coordinates to map coordinates (which is different in case reprojection is used) //! @note available in python bindings as toMapCoordinatesV2 QgsPointV2 toMapCoordinates( const QgsMapLayer* layer, const QgsPointV2 &point ) /PyName=toMapCoordinatesV2/; //! trnasformation of the rect from map coordinates to layer's coordinates QgsRectangle toLayerCoordinates( const QgsMapLayer* layer, const QgsRectangle& rect ); //! transformation from map coordinates to screen coordinates QPoint toCanvasCoordinates( const QgsPoint& point ); }; QFlags operator|(QgsMapTool::Flag f1, QFlags f2);