17#ifndef QGSGRAPHICSVIEWMOUSEHANDLES_H
18#define QGSGRAPHICSVIEWMOUSEHANDLES_H
27#include <QGraphicsRectItem>
48class GUI_EXPORT QgsGraphicsViewMouseHandles :
public QObject,
public QGraphicsRectItem
71 QgsGraphicsViewMouseHandles( QGraphicsView *view );
77 bool isDragging()
const {
return mIsDragging; }
80 bool isResizing()
const {
return mIsResizing; }
87 bool isRotating()
const {
return mIsRotating; }
89 bool shouldBlockEvent( QInputEvent *event )
const;
92 void startMove( QPointF sceneCoordPos );
101 bool isRotationEnabled()
const {
return mRotationEnabled; }
111 void setRotationEnabled(
bool enable );
120 void setCadMouseDigitizingModeEnabled(
bool enable );
129 bool isResizeEnabled()
const {
return mResizeEnabled; }
139 void setResizeEnabled(
bool enable );
144 void selectedItemSizeChanged();
147 void selectedItemRotationChanged();
150 void paintInternal( QPainter *painter,
bool showHandles,
bool showStaticBoundingBoxes,
bool showTemporaryBoundingBoxes,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
153 virtual void setViewportCursor( Qt::CursorShape cursor ) = 0;
155 virtual QList<QGraphicsItem *> sceneItemsAtPoint( QPointF scenePoint ) = 0;
156 virtual QList<QGraphicsItem *> selectedSceneItems(
bool includeLockedItems =
true )
const = 0;
157 virtual bool itemIsLocked( QGraphicsItem *item )
162 virtual bool itemIsGroupMember( QGraphicsItem *item )
167 virtual QRectF itemRect( QGraphicsItem *item )
const = 0;
168 virtual QRectF storedItemRect( QGraphicsItem *item )
const;
169 virtual void moveItem( QGraphicsItem *item,
double deltaX,
double deltaY ) = 0;
170 virtual void rotateItem( QGraphicsItem *item,
double deltaDegree,
double deltaCenterX,
double deltaCenterY );
171 virtual void previewItemMove( QGraphicsItem *item,
double deltaX,
double deltaY );
172 virtual void setItemRect( QGraphicsItem *item, QRectF rect );
182 virtual QRectF previewSetItemRect( QGraphicsItem *item, QRectF rect );
184 virtual void startMacroCommand(
const QString &text );
185 virtual void endMacroCommand();
186 virtual void createItemCommand( QGraphicsItem *item );
187 virtual void endItemCommand( QGraphicsItem *item );
188 virtual void showStatusMessage(
const QString &message ) { Q_UNUSED( message ) }
189 virtual void hideAlignItems() {}
191 virtual QPointF snapPoint( QPointF originalPoint, SnapGuideMode mode,
bool snapHorizontal =
true,
bool snapVertical =
true );
194 virtual void expandItemList(
const QList<QGraphicsItem *> &items, QList<QGraphicsItem *> &collected )
const;
196 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
197 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
198 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
199 void mousePressEvent( QGraphicsSceneMouseEvent *event )
override;
200 void mouseMoveEvent( QGraphicsSceneMouseEvent *event )
override;
201 void mouseReleaseEvent( QGraphicsSceneMouseEvent *event )
override;
204 void resetStatusBar();
207 bool selectionRotation(
double &rotation )
const;
210 void updateHandles();
213 void dragMouseMove( QPointF currentPosition,
bool lockMovement,
bool preventSnap );
216 void resizeMouseMove( QPointF currentPosition,
bool lockAspect,
bool fromCenter );
219 void rotateMouseMove( QPointF currentPosition,
bool snapToCommonAngles );
221 void setHandleSize(
double size );
227 QSizeF calcCursorEdgeOffset( QPointF cursorPos );
230 QRectF selectionBounds()
const;
240 static void relativeResizeRect( QRectF &rectToResize,
const QRectF &boundsBefore,
const QRectF &boundsAfter );
251 static double relativePosition(
double position,
double beforeMin,
double beforeMax,
double afterMin,
double afterMax );
254 QGraphicsView *mView =
nullptr;
256 double mHandleSize = 10;
257 double mRotationHandleSize = 20;
258 QPainterPath mRotationHandlePath;
260 QSizeF mCursorOffset;
261 double mResizeMoveX = 0;
262 double mResizeMoveY = 0;
265 double mBeginHandleWidth = 0;
266 double mBeginHandleHeight = 0;
270 bool mCadMouseDigitizingMode =
false;
272 bool mRotationEnabled =
false;
273 bool mResizeEnabled =
true;
275 QPointF mRotationCenter;
277 double mRotationBegin = 0.0;
279 double mRotationCurrent = 0.0;
281 double mRotationDelta = 0.0;
284 QPointF mMouseMoveStartPos;
287 bool mDoubleClickInProgress =
false;
291 bool mIsDragging =
false;
293 bool mIsDragStarting =
false;
295 bool mIsResizing =
false;
297 bool mIsRotating =
false;
300 QPointF mBeginMouseEventPos;
303 QPointF mBeginHandlePos;
306 void drawHandles( QPainter *painter,
double rectHandlerSize );
309 void drawSelectedItemBounds( QPainter *painter );
315 double rectHandlerBorderTolerance()
const;
318 Qt::CursorShape cursorForPosition( QPointF itemCoordPos );
320 friend class QgsMapToolSelectAnnotation;
MouseHandlesAction
Action to be performed by the mouse handles.