17#ifndef QGSGRAPHICSVIEWMOUSEHANDLES_H
18#define QGSGRAPHICSVIEWMOUSEHANDLES_H
28#include <QGraphicsRectItem>
47class GUI_EXPORT QgsGraphicsViewMouseHandles :
public QObject,
public QGraphicsRectItem
70 QgsGraphicsViewMouseHandles( QGraphicsView *view );
76 bool isDragging()
const {
return mIsDragging; }
79 bool isResizing()
const {
return mIsResizing; }
86 bool isRotating()
const {
return mIsRotating; }
88 bool shouldBlockEvent( QInputEvent *event )
const;
91 void startMove( QPointF sceneCoordPos );
100 bool isRotationEnabled()
const {
return mRotationEnabled; }
110 void setRotationEnabled(
bool enable );
119 void setCadMouseDigitizingModeEnabled(
bool enable );
124 void selectedItemSizeChanged();
127 void selectedItemRotationChanged();
130 void paintInternal( QPainter *painter,
bool showHandles,
bool showStaticBoundingBoxes,
bool showTemporaryBoundingBoxes,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
133 virtual void setViewportCursor( Qt::CursorShape cursor ) = 0;
135 virtual QList<QGraphicsItem *> sceneItemsAtPoint( QPointF scenePoint ) = 0;
136 virtual QList<QGraphicsItem *> selectedSceneItems(
bool includeLockedItems =
true )
const = 0;
137 virtual bool itemIsLocked( QGraphicsItem *item )
142 virtual bool itemIsGroupMember( QGraphicsItem *item )
147 virtual QRectF itemRect( QGraphicsItem *item )
const = 0;
148 virtual QRectF storedItemRect( QGraphicsItem *item )
const;
149 virtual void moveItem( QGraphicsItem *item,
double deltaX,
double deltaY ) = 0;
150 virtual void rotateItem( QGraphicsItem *item,
double deltaDegree,
double deltaCenterX,
double deltaCenterY );
151 virtual void previewItemMove( QGraphicsItem *item,
double deltaX,
double deltaY );
152 virtual void setItemRect( QGraphicsItem *item, QRectF rect ) = 0;
162 virtual QRectF previewSetItemRect( QGraphicsItem *item, QRectF rect );
164 virtual void startMacroCommand(
const QString &text );
165 virtual void endMacroCommand();
166 virtual void createItemCommand( QGraphicsItem *item );
167 virtual void endItemCommand( QGraphicsItem *item );
168 virtual void showStatusMessage(
const QString &message ) { Q_UNUSED( message ) }
169 virtual void hideAlignItems() {}
171 virtual QPointF snapPoint( QPointF originalPoint, SnapGuideMode mode,
bool snapHorizontal =
true,
bool snapVertical =
true );
174 virtual void expandItemList(
const QList<QGraphicsItem *> &items, QList<QGraphicsItem *> &collected )
const;
176 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
177 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
178 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
179 void mousePressEvent( QGraphicsSceneMouseEvent *event )
override;
180 void mouseMoveEvent( QGraphicsSceneMouseEvent *event )
override;
181 void mouseReleaseEvent( QGraphicsSceneMouseEvent *event )
override;
184 void resetStatusBar();
187 bool selectionRotation(
double &rotation )
const;
190 void updateHandles();
193 void dragMouseMove( QPointF currentPosition,
bool lockMovement,
bool preventSnap );
196 void resizeMouseMove( QPointF currentPosition,
bool lockAspect,
bool fromCenter );
199 void rotateMouseMove( QPointF currentPosition,
bool snapToCommonAngles );
201 void setHandleSize(
double size );
207 QSizeF calcCursorEdgeOffset( QPointF cursorPos );
210 QRectF selectionBounds()
const;
220 static void relativeResizeRect( QRectF &rectToResize,
const QRectF &boundsBefore,
const QRectF &boundsAfter );
231 static double relativePosition(
double position,
double beforeMin,
double beforeMax,
double afterMin,
double afterMax );
234 QGraphicsView *mView =
nullptr;
236 double mHandleSize = 10;
237 double mRotationHandleSize = 20;
238 QPainterPath mRotationHandlePath;
240 QSizeF mCursorOffset;
241 double mResizeMoveX = 0;
242 double mResizeMoveY = 0;
245 double mBeginHandleWidth = 0;
246 double mBeginHandleHeight = 0;
250 bool mCadMouseDigitizingMode =
false;
252 bool mRotationEnabled =
false;
254 QPointF mRotationCenter;
256 double mRotationBegin = 0.0;
258 double mRotationCurrent = 0.0;
260 double mRotationDelta = 0.0;
263 QPointF mMouseMoveStartPos;
266 bool mDoubleClickInProgress =
false;
270 bool mIsDragging =
false;
272 bool mIsDragStarting =
false;
274 bool mIsResizing =
false;
276 bool mIsRotating =
false;
279 QPointF mBeginMouseEventPos;
282 QPointF mBeginHandlePos;
285 void drawHandles( QPainter *painter,
double rectHandlerSize );
288 void drawSelectedItemBounds( QPainter *painter );
294 double rectHandlerBorderTolerance()
const;
297 Qt::CursorShape cursorForPosition( QPointF itemCoordPos );
299 friend class QgsMapToolSelectAnnotation;
MouseHandlesAction
Action to be performed by the mouse handles.