27#include "moc_qgslayoutviewtoolselect.cpp"
29const double QgsLayoutViewToolSelect::sSearchToleranceInMillimeters = 2.0;
37 mRubberBand = std::make_unique<QgsLayoutViewRectangularRubberBand>(
view );
38 mRubberBand->setBrush( QBrush( QColor( 224, 178, 76, 63 ) ) );
39 mRubberBand->setPen( QPen( QBrush( QColor( 254, 58, 29, 100 ) ), 0, Qt::DotLine ) );
47 if ( mMouseHandles->scene() )
48 mMouseHandles->scene()->removeItem( mMouseHandles );
49 mMouseHandles->deleteLater();
55 if ( mMouseHandles->shouldBlockEvent( event ) )
60 if ( mMouseHandles->isVisible() )
73 if ( event->button() != Qt::LeftButton )
78 mRubberBand->finish();
89 if ( event->modifiers() & Qt::ControlModifier )
93 if ( !selectedItems.isEmpty() )
95 previousSelectedItem = selectedItems.at( 0 );
99 if ( previousSelectedItem )
124 selectedItem = group;
130 mMousePressStartPos =
event->pos();
131 mRubberBand->start( event->
layoutPoint(), Qt::KeyboardModifiers() );
135 if ( ( event->modifiers() & Qt::ShiftModifier ) && ( selectedItem->isSelected() ) )
142 if ( !selectedItems.isEmpty() )
153 if ( ( !selectedItem->isSelected() ) &&
154 !( event->modifiers() & Qt::ShiftModifier ) )
166 mMouseHandles->startMove(
view()->mapToScene( event->pos() ) );
176 mRubberBand->update( event->
layoutPoint(), Qt::KeyboardModifiers() );
180 if ( !mMouseHandles->isDragging() && !mMouseHandles->isResizing() )
184 view()->viewport()->setCursor( Qt::SizeAllCursor );
188 view()->viewport()->setCursor( Qt::ArrowCursor );
197 if ( event->button() != Qt::LeftButton && mMouseHandles->shouldBlockEvent( event ) )
203 if ( !mIsSelecting || event->button() != Qt::LeftButton )
209 mIsSelecting =
false;
210 bool wasClick = !
isClickAndDrag( mMousePressStartPos, event->pos() );
214 QRectF rect = mRubberBand->finish( event->
layoutPoint() );
216 bool subtractingSelection =
false;
217 if ( event->modifiers() & Qt::ShiftModifier )
221 else if ( event->modifiers() & Qt::ControlModifier )
224 subtractingSelection =
true;
233 Qt::ItemSelectionMode selectionMode = Qt::IntersectsItemShape;
234 if ( event->modifiers() & Qt::AltModifier )
237 selectionMode = Qt::ContainsItemShape;
241 QList<QGraphicsItem *> itemList;
245 itemList =
layout()->items( QRectF( rect.center().x() - tolerance, rect.center().y() - tolerance, 2 * tolerance, 2 * tolerance ), selectionMode );
248 itemList =
layout()->items( rect, selectionMode );
251 for ( QGraphicsItem *item : std::as_const( itemList ) )
256 focusedPaperItem = paperItem;
258 if ( layoutItem && !paperItem )
262 if ( subtractingSelection )
282 if ( !selectedItemList.isEmpty() )
286 else if ( focusedPaperItem )
294 mMouseHandles->selectionChanged();
299 if ( mMouseHandles->shouldBlockEvent( event ) )
312 if ( mMouseHandles->isDragging() || mMouseHandles->isResizing() )
326 mRubberBand->finish();
327 mIsSelecting =
false;
333QgsLayoutMouseHandles *QgsLayoutViewToolSelect::mouseHandles()
335 return mMouseHandles;
342 mMouseHandles->deleteLater();
345 mMouseHandles =
new QgsLayoutMouseHandles(
layout,
view() );
346 mMouseHandles->hide();
348 layout->addItem( mMouseHandles );
352 const double pixelsPerMm =
view()->physicalDpiX() / 25.4;
353 return sSearchToleranceInMillimeters * pixelsPerMm /
view()->transform().m11();
MouseHandlesAction
Action to be performed by the mouse handles.
A container for grouping several QgsLayoutItems.
Item representing the paper in a layout.
Base class for graphical items within a QgsLayout.
QgsLayoutItemGroup * parentGroup() const
Returns the item's parent group, if the item is part of a QgsLayoutItemGroup group.
virtual void setSelected(bool selected)
Sets whether the item should be selected.
bool isLocked() const
Returns true if the item is locked, and cannot be interacted with using the mouse.
A mouse event which is the result of a user interaction with a QgsLayoutView.
QPointF layoutPoint() const
Returns the event point location in layout coordinates.
A graphical widget to display and interact with QgsLayouts.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
QgsLayoutItem * layoutItemAt(QPointF position, bool ignoreLocked=false, double searchTolerance=0) const
Returns the topmost layout item at a specified position.
QList< QgsLayoutItem * > selectedLayoutItems(bool includeLockedItems=true)
Returns list of selected layout items.
void setSelectedItem(QgsLayoutItem *item)
Clears any selected items and sets item as the current selection.
@ ZMouseHandles
Z-value for mouse handles.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.