19 #include "qgsprocessingmodelalgorithm.h" 
   31   mRubberBand->setBrush( QBrush( QColor( 224, 178, 76, 63 ) ) );
 
   32   mRubberBand->setPen( QPen( QBrush( QColor( 254, 58, 29, 100 ) ), 0, Qt::DotLine ) );
 
   40     if ( mMouseHandles->scene() )
 
   41       mMouseHandles->scene()->removeItem( mMouseHandles );
 
   48   if ( mMouseHandles->shouldBlockEvent( event ) )
 
   54   if ( mMouseHandles->isVisible() )
 
   57     QgsGraphicsViewMouseHandles::MouseAction mouseAction = mMouseHandles->mouseActionForScenePos( event->
modelPoint() );
 
   59     if ( mouseAction != QgsGraphicsViewMouseHandles::MoveItem
 
   60          && mouseAction != QgsGraphicsViewMouseHandles::NoAction
 
   61          && mouseAction != QgsGraphicsViewMouseHandles::SelectItem )
 
   69   if ( event->button() != Qt::LeftButton )
 
   76   QgsModelComponentGraphicItem *selectedItem = 
nullptr;
 
   78   QList<QgsModelComponentGraphicItem *> selectedItems = 
scene()->selectedComponentItems();
 
   87     mMousePressStartPos = 
event->pos();
 
   88     mRubberBand->start( event->
modelPoint(), Qt::KeyboardModifiers() );
 
   92   if ( ( event->modifiers() & Qt::ShiftModifier ) && ( selectedItem->isSelected() ) )
 
   95     selectedItem->setSelected( 
false );
 
   98     const QList<QgsModelComponentGraphicItem *> selectedItems = 
scene()->selectedComponentItems();
 
   99     if ( !selectedItems.isEmpty() )
 
  110     if ( ( !selectedItem->isSelected() ) &&       
 
  111          !( event->modifiers() & Qt::ShiftModifier ) ) 
 
  113       scene()->setSelectedItem( selectedItem ); 
 
  117       selectedItem->setSelected( 
true );
 
  122     if ( !( event->modifiers() & Qt::ShiftModifier ) )
 
  126       QList< QGraphicsItem * > items = 
scene()->items( event->
modelPoint() );
 
  127       for ( QGraphicsItem *item : items )
 
  129         if ( QgsModelDesignerFlatButtonGraphicItem *button = 
dynamic_cast< QgsModelDesignerFlatButtonGraphicItem * 
>( item ) )
 
  132           if ( mMouseHandles->sceneBoundingRect().contains( event->
modelPoint() ) )
 
  134             button->modelPressEvent( event );
 
  150     mRubberBand->update( event->
modelPoint(), Qt::KeyboardModifiers() );
 
  156     QList< QGraphicsItem * > items = 
scene()->items( event->
modelPoint() );
 
  157     for ( QGraphicsItem *item : items )
 
  159       if ( mHoverEnteredItems.contains( item ) )
 
  161         if ( QgsModelComponentGraphicItem *component = 
dynamic_cast< QgsModelComponentGraphicItem * 
>( item ) )
 
  163           component->modelHoverMoveEvent( event );
 
  168         mHoverEnteredItems.append( item );
 
  169         if ( QgsModelComponentGraphicItem *component = 
dynamic_cast< QgsModelComponentGraphicItem * 
>( item ) )
 
  171           component->modelHoverEnterEvent( event );
 
  173         else if ( QgsModelDesignerFlatButtonGraphicItem *button = 
dynamic_cast<QgsModelDesignerFlatButtonGraphicItem *
>( item ) )
 
  176           if ( mMouseHandles->sceneBoundingRect().contains( event->
modelPoint() ) )
 
  177             button->modelHoverEnterEvent( event );
 
  181     const QList< QGraphicsItem * > prevHovered = mHoverEnteredItems;
 
  182     for ( QGraphicsItem *item : prevHovered )
 
  184       if ( ! items.contains( item ) )
 
  186         mHoverEnteredItems.removeAll( item );
 
  187         if ( QgsModelComponentGraphicItem *component = 
dynamic_cast< QgsModelComponentGraphicItem * 
>( item ) )
 
  189           component->modelHoverLeaveEvent( event );
 
  191         else if ( QgsModelDesignerFlatButtonGraphicItem *button = 
dynamic_cast<QgsModelDesignerFlatButtonGraphicItem *
>( item ) )
 
  194           if ( mMouseHandles->sceneBoundingRect().contains( event->
modelPoint() ) )
 
  195             button->modelHoverLeaveEvent( event );
 
  210     QList< QGraphicsItem * > items = 
scene()->items( event->
modelPoint() );
 
  211     for ( QGraphicsItem *item : items )
 
  213       if ( QgsModelComponentGraphicItem *component = 
dynamic_cast< QgsModelComponentGraphicItem * 
>( item ) )
 
  215         scene()->setSelectedItem( component ); 
 
  216         component->modelDoubleClickEvent( event );
 
  225   if ( event->button() != Qt::LeftButton && mMouseHandles->shouldBlockEvent( event ) )
 
  231   if ( !mIsSelecting || event->button() != Qt::LeftButton )
 
  237   mIsSelecting = 
false;
 
  238   bool wasClick = !
isClickAndDrag( mMousePressStartPos, event->pos() );
 
  242   QRectF rect = mRubberBand->finish( event->
modelPoint() );
 
  244   bool subtractingSelection = 
false;
 
  245   if ( event->modifiers() & Qt::ShiftModifier )
 
  249   else if ( event->modifiers() & Qt::ControlModifier )
 
  252     subtractingSelection = 
true;
 
  261   Qt::ItemSelectionMode selectionMode = Qt::IntersectsItemShape;
 
  262   if ( event->modifiers() & Qt::AltModifier )
 
  265     selectionMode = Qt::ContainsItemShape;
 
  269   QList<QGraphicsItem *> itemList;
 
  271     itemList = 
scene()->items( rect.center(), selectionMode );
 
  273     itemList = 
scene()->items( rect, selectionMode );
 
  274   for ( QGraphicsItem *item : std::as_const( itemList ) )
 
  276     if ( QgsModelComponentGraphicItem *componentItem = 
dynamic_cast<QgsModelComponentGraphicItem *
>( item ) )
 
  278       if ( subtractingSelection )
 
  280         componentItem->setSelected( 
false );
 
  284         componentItem->setSelected( 
true );
 
  295   const QList<QgsModelComponentGraphicItem *> selectedItemList = 
scene()->selectedComponentItems();
 
  296   if ( !selectedItemList.isEmpty() )
 
  304   mMouseHandles->selectionChanged();
 
  309   if ( mMouseHandles->shouldBlockEvent( event ) )
 
  322   if ( mMouseHandles->isDragging() || mMouseHandles->isResizing() )
 
  336     mRubberBand->finish();
 
  337     mIsSelecting = 
false;
 
  344   return !mIsSelecting;
 
  349   return mMouseHandles;
 
  356     mMouseHandles->deleteLater();
 
  359   mMouseHandles = 
new QgsModelViewMouseHandles( 
view() );
 
  360   mMouseHandles->hide();
 
  361   mMouseHandles->setZValue( QgsModelGraphicsScene::MouseHandles );
 
  362   scene->addItem( mMouseHandles );
 
  367   mHoverEnteredItems.clear();
 
A QgsModelViewMouseEvent is the result of a user interaction with the mouse on a QgsModelGraphicsView...
QPointF modelPoint() const
Returns the event point location in model coordinates.
QgsModelViewRectangularRubberBand is rectangular rubber band for use within QgsModelGraphicsView widg...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.