17#include "moc_qgsmodelviewtoolselect.cpp" 
   32  mRubberBand->setBrush( QBrush( QColor( 224, 178, 76, 63 ) ) );
 
   33  mRubberBand->setPen( QPen( QBrush( QColor( 254, 58, 29, 100 ) ), 0, Qt::DotLine ) );
 
 
   43    if ( mMouseHandles->scene() )
 
   44      mMouseHandles->scene()->removeItem( mMouseHandles );
 
 
   51  if ( mMouseHandles->shouldBlockEvent( event ) )
 
   57  if ( mMouseHandles->isVisible() )
 
   72  if ( event->button() != Qt::LeftButton )
 
   79  QgsModelComponentGraphicItem *selectedItem = 
nullptr;
 
   88    mMousePressStartPos = 
event->pos();
 
   89    mRubberBand->start( event->
modelPoint(), Qt::KeyboardModifiers() );
 
   93  if ( ( event->modifiers() & Qt::ShiftModifier ) && ( selectedItem->isSelected() ) )
 
   96    selectedItem->setSelected( 
false );
 
   99    const QList<QgsModelComponentGraphicItem *> selectedItems = 
scene()->selectedComponentItems();
 
  100    if ( !selectedItems.isEmpty() )
 
  111    if ( ( !selectedItem->isSelected() ) &&            
 
  112         !( event->modifiers() & Qt::ShiftModifier ) ) 
 
  114      scene()->setSelectedItem( selectedItem ); 
 
  118      selectedItem->setSelected( 
true );
 
  123    if ( !( event->modifiers() & Qt::ShiftModifier ) )
 
  128      for ( QGraphicsItem *item : items )
 
  130        if ( QgsModelDesignerSocketGraphicItem *socket = 
dynamic_cast<QgsModelDesignerSocketGraphicItem *
>( item ) )
 
  133          mLinkTool->setFromSocket( socket );
 
  134          view()->setTool( mLinkTool.get() );
 
  136        else if ( QgsModelDesignerFlatButtonGraphicItem *button = 
dynamic_cast<QgsModelDesignerFlatButtonGraphicItem *
>( item ) )
 
  139          if ( mMouseHandles->sceneBoundingRect().contains( event->
modelPoint() ) )
 
  141            button->modelPressEvent( event );
 
 
  157    mRubberBand->update( event->
modelPoint(), Qt::KeyboardModifiers() );
 
  164    for ( QGraphicsItem *item : items )
 
  166      if ( mHoverEnteredItems.contains( item ) )
 
  168        if ( QgsModelComponentGraphicItem *component = 
dynamic_cast<QgsModelComponentGraphicItem *
>( item ) )
 
  170          component->modelHoverMoveEvent( event );
 
  175        mHoverEnteredItems.append( item );
 
  176        if ( QgsModelComponentGraphicItem *component = 
dynamic_cast<QgsModelComponentGraphicItem *
>( item ) )
 
  178          component->modelHoverEnterEvent( event );
 
  180        else if ( QgsModelDesignerFlatButtonGraphicItem *button = 
dynamic_cast<QgsModelDesignerFlatButtonGraphicItem *
>( item ) )
 
  183          if ( mMouseHandles->sceneBoundingRect().contains( event->
modelPoint() ) )
 
  184            button->modelHoverEnterEvent( event );
 
  188    const QList<QGraphicsItem *> prevHovered = mHoverEnteredItems;
 
  189    for ( QGraphicsItem *item : prevHovered )
 
  191      if ( !items.contains( item ) )
 
  193        mHoverEnteredItems.removeAll( item );
 
  194        if ( QgsModelComponentGraphicItem *component = 
dynamic_cast<QgsModelComponentGraphicItem *
>( item ) )
 
  196          component->modelHoverLeaveEvent( event );
 
  198        else if ( QgsModelDesignerFlatButtonGraphicItem *button = 
dynamic_cast<QgsModelDesignerFlatButtonGraphicItem *
>( item ) )
 
  201          if ( mMouseHandles->sceneBoundingRect().contains( event->
modelPoint() ) )
 
  202            button->modelHoverLeaveEvent( event );
 
 
  218    for ( QGraphicsItem *item : items )
 
  220      if ( QgsModelComponentGraphicItem *component = 
dynamic_cast<QgsModelComponentGraphicItem *
>( item ) )
 
  222        scene()->setSelectedItem( component ); 
 
  223        component->modelDoubleClickEvent( event );
 
 
  232  if ( event->button() != Qt::LeftButton && mMouseHandles->shouldBlockEvent( event ) )
 
  238  if ( !mIsSelecting || event->button() != Qt::LeftButton )
 
  244  mIsSelecting = 
false;
 
  245  bool wasClick = !
isClickAndDrag( mMousePressStartPos, event->pos() );
 
  249  QRectF rect = mRubberBand->finish( event->
modelPoint() );
 
  251  bool subtractingSelection = 
false;
 
  252  if ( event->modifiers() & Qt::ShiftModifier )
 
  256  else if ( event->modifiers() & Qt::ControlModifier )
 
  259    subtractingSelection = 
true;
 
  268  Qt::ItemSelectionMode selectionMode = Qt::IntersectsItemShape;
 
  269  if ( event->modifiers() & Qt::AltModifier )
 
  272    selectionMode = Qt::ContainsItemShape;
 
  276  QList<QGraphicsItem *> itemList;
 
  278    itemList = 
scene()->items( rect.center(), selectionMode );
 
  280    itemList = 
scene()->items( rect, selectionMode );
 
  281  for ( QGraphicsItem *item : std::as_const( itemList ) )
 
  283    if ( QgsModelComponentGraphicItem *componentItem = 
dynamic_cast<QgsModelComponentGraphicItem *
>( item ) )
 
  285      if ( subtractingSelection )
 
  287        componentItem->setSelected( 
false );
 
  291        componentItem->setSelected( 
true );
 
  302  const QList<QgsModelComponentGraphicItem *> selectedItemList = 
scene()->selectedComponentItems();
 
  303  if ( !selectedItemList.isEmpty() )
 
  311  mMouseHandles->selectionChanged();
 
 
  316  if ( mMouseHandles->shouldBlockEvent( event ) )
 
 
  329  if ( mMouseHandles->isDragging() || mMouseHandles->isResizing() )
 
 
  343    mRubberBand->finish();
 
  344    mIsSelecting = 
false;
 
 
  351  return !mIsSelecting;
 
 
  356  return mMouseHandles;
 
 
  363    mMouseHandles->deleteLater();
 
  366  mMouseHandles = 
new QgsModelViewMouseHandles( 
view() );
 
  367  mMouseHandles->hide();
 
  368  mMouseHandles->setZValue( QgsModelGraphicsScene::MouseHandles );
 
  369  scene->addItem( mMouseHandles );
 
 
  374  mHoverEnteredItems.clear();
 
 
MouseHandlesAction
Action to be performed by the mouse handles.
 
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
 
QPointF modelPoint() const
Returns the event point location in model coordinates.
 
A rectangular rubber band for use within QgsModelGraphicsView widgets.
 
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.