QGIS API Documentation 4.1.0-Master (4aad578bf8d)
Loading...
Searching...
No Matches
qgsmaptoolextraitem.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaptoolextraitem.h
3 ---------------------
4 begin : 2026/01/22
5 copyright : (C) 2026 by Julien Cabieces
6 email : julien dot cabieces at oslandia 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 QGSMAPTOOLEXTRAITEM_H
17#define QGSMAPTOOLEXTRAITEM_H
18
20#include "qgsmapcanvas.h"
21#include "qgsmaptool.h"
23#include "qgsrubberband.h"
24#include "qobjectuniqueptr.h"
25
26#define SIP_NO_FILE
27
31
42class GUI_EXPORT QgsMapToolExtraItemBase : public QgsMapTool
43{
44 Q_OBJECT
45
46 public:
55
64
65 protected:
69 void loadFeatureExtraItems();
74 void updateAttribute();
75
79 void selectFeature( QgsMapMouseEvent *event );
80
81 QPointer<QgsVectorLayer> mLayer;
86 std::vector<QObjectUniquePtr<QgsExtraItemRubberBand>> mExtraItems;
88
90};
91
104{
105 Q_OBJECT
106
107 public:
116
117 void canvasPressEvent( QgsMapMouseEvent *e ) override;
118 void keyPressEvent( QKeyEvent *event ) override;
119
120 private:
122};
123
136{
137 Q_OBJECT
138
139 public:
148
149 void activate() override;
150 void deactivate() override;
151
155 QList<QGraphicsItem *> selectedItems() const;
156
157 void canvasPressEvent( QgsMapMouseEvent *event ) override;
158 void canvasMoveEvent( QgsMapMouseEvent *event ) override;
159 void canvasReleaseEvent( QgsMapMouseEvent *event ) override;
160 void keyPressEvent( QKeyEvent *event ) override;
161
166 void attemptMoveBy( QGraphicsItem *item, double deltaX, double deltaY );
167
172 void attemptRotateBy( QGraphicsItem *item, double deltaDegree, double deltaCenterX, double deltaCenterY );
173
174 signals:
175
180
181 private slots:
182
186 void onMapCanvasExtentsChanged();
187
188 private:
195 QgsPointXY movePosition( const QgsPointXY &position, double deltaX, double deltaY ) const;
196
209 class QgsMapToolModifyExtraItemMouseHandles : public QgsGraphicsViewMouseHandles
210 {
211 public:
217 QgsMapToolModifyExtraItemMouseHandles( QgsMapToolModifyExtraItems *mapTool, QgsMapCanvas *canvas );
218
219 void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget ) override;
220 void setViewportCursor( Qt::CursorShape cursor ) override;
221 QList<QGraphicsItem *> sceneItemsAtPoint( QPointF scenePoint ) override;
222 QList<QGraphicsItem *> selectedSceneItems( bool includeLockedItems = true ) const override;
223 QRectF itemRect( QGraphicsItem *item ) const override;
224 void moveItem( QGraphicsItem *item, double deltaX, double deltaY ) override;
225 void rotateItem( QGraphicsItem *item, double deltaDegree, double deltaCenterX, double deltaCenterY ) override;
226 void setItemRect( QGraphicsItem *item, QRectF rect ) override;
227
228 using QgsGraphicsViewMouseHandles::hoverMoveEvent;
229 using QgsGraphicsViewMouseHandles::mouseMoveEvent;
230 using QgsGraphicsViewMouseHandles::mousePressEvent;
231 using QgsGraphicsViewMouseHandles::mouseReleaseEvent;
232 using QgsGraphicsViewMouseHandles::updateHandles;
233
234 private:
235 QgsMapToolModifyExtraItems *mMapTool = nullptr;
236 QgsMapCanvas *mCanvas = nullptr;
237
238 friend class TestQgsMapToolExtraItem;
239 };
240
241 QList<QGraphicsItem *> mSelectedItems;
242 QList<std::tuple<double, double, double>> mCopiedItems;
244 bool mHoveringMouseHandles = false;
245 bool mCanceled = false;
246 bool mDragging = false;
247 QRect mSelectionRect;
248 QPoint mLastPos;
249 QPointF mCopiedItemsTopLeft;
250 QObjectUniquePtr<QgsRubberBand> mSelectionRubberBand;
251
253};
254
255#endif
Keeps a pointer to a QObject and deletes it whenever this object is deleted.
Rubber band for one extra item.
A mouse event which is the result of a user interaction with a QgsMapCanvas.
QgsMapToolAddExtraItem(QgsMapCanvas *canvas, QgsVectorLayer *layer, QgsTemplatedLineSymbolLayerBase *symbolLayer, QgsPropertyOverrideButton *propertyButton)
Constructor.
@ SelectFeature
User needs to select a feature.
@ FeatureSelected
User has selected a feature.
QPointer< QgsVectorLayer > mLayer
QgsTemplatedLineSymbolLayerBase * mSymbolLayer
QgsMapToolExtraItemBase(QgsMapCanvas *canvas, QgsVectorLayer *layer, QgsTemplatedLineSymbolLayerBase *symbolLayer, QgsPropertyOverrideButton *propertyButton)
Constructor.
std::vector< QObjectUniquePtr< QgsExtraItemRubberBand > > mExtraItems
QgsPropertyOverrideButton * mPropertyButton
Map tool to select and modify extra items for a giving vector layer and symbol layer.
QgsMapToolModifyExtraItems(QgsMapCanvas *canvas, QgsVectorLayer *layer, QgsTemplatedLineSymbolLayerBase *symbolLayer, QgsPropertyOverrideButton *propertyButton)
Constructor.
void attemptRotateBy(QGraphicsItem *item, double deltaDegree, double deltaCenterX, double deltaCenterY)
Attempt to rotate item by deltaDegree around its center.
void attemptMoveBy(QGraphicsItem *item, double deltaX, double deltaY)
Attempt to move item by deltaX horizontally and deltaY vertically.
QList< QGraphicsItem * > selectedItems() const
Returns currently selected items.
void selectedItemsChanged()
Emitted whenever selected items has changed.
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.
QPointer< QgsMapCanvas > mCanvas
The pointer to the map canvas.
Definition qgsmaptool.h:403
friend class QgsMapCanvas
Definition qgsmaptool.h:423
virtual void canvasPressEvent(QgsMapMouseEvent *e)
Mouse press event for overriding. Default implementation does nothing.
virtual void canvasMoveEvent(QgsMapMouseEvent *e)
Mouse move event for overriding. Default implementation does nothing.
virtual void keyPressEvent(QKeyEvent *e)
Key event for overriding. Default implementation does nothing.
virtual void canvasReleaseEvent(QgsMapMouseEvent *e)
Mouse release event for overriding. Default implementation does nothing.
virtual void activate()
called when set as currently active map tool
virtual void deactivate()
called when map tool is being deactivated
Represents a 2D point.
Definition qgspointxy.h:62
A button for controlling property overrides which may apply to a widget.
Base class for templated line symbols, e.g.
Represents a vector layer which manages a vector based dataset.
#define FID_NULL
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features