16#ifndef QGSMODELCOMPONENTGRAPHICITEM_H
17#define QGSMODELCOMPONENTGRAPHICITEM_H
24#include <QGraphicsObject>
28class QgsProcessingModelComponent;
29class QgsProcessingModelParameter;
30class QgsProcessingModelChildAlgorithm;
31class QgsProcessingModelOutput;
32class QgsProcessingModelComment;
33class QgsProcessingModelAlgorithm;
34class QgsModelDesignerFlatButtonGraphicItem;
35class QgsModelDesignerFoldButtonGraphicItem;
36class QgsModelDesignerSocketGraphicItem;
37class QgsModelGraphicsView;
39class QgsProcessingModelGroupBox;
49class GUI_EXPORT QgsModelComponentGraphicItem :
public QGraphicsObject
68 Q_DECLARE_FLAGS( Flags, Flag )
78 QgsModelComponentGraphicItem( QgsProcessingModelComponent *component
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
80 ~QgsModelComponentGraphicItem()
override;
85 virtual Flags flags()
const;
90 QgsProcessingModelComponent *component();
95 const QgsProcessingModelComponent *component() const
SIP_SKIP;
100 QgsProcessingModelAlgorithm *model();
105 const QgsProcessingModelAlgorithm *model() const
SIP_SKIP;
110 QgsModelGraphicsView *view();
122 void setFont( const QFont &font );
129 void moveComponentBy( qreal dx, qreal dy );
134 void previewItemMove( qreal dx, qreal dy );
139 void setItemRect( QRectF rect );
148 virtual QColor linkColor( Qt::Edge edge,
int index )
const;
153 QRectF previewItemRectChange( QRectF rect );
158 void finalizePreviewedItemRectChange( QRectF rect );
163 virtual void modelHoverEnterEvent( QgsModelViewMouseEvent *event );
168 virtual void modelHoverMoveEvent( QgsModelViewMouseEvent *event );
173 virtual void modelHoverLeaveEvent( QgsModelViewMouseEvent *event );
178 virtual void modelDoubleClickEvent( QgsModelViewMouseEvent *event );
180 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
181 void hoverEnterEvent( QGraphicsSceneHoverEvent *event )
override;
182 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
183 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
184 QVariant itemChange( GraphicsItemChange change,
const QVariant &value )
override;
185 QRectF boundingRect()
const override;
186 bool contains(
const QPointF &point )
const override;
187 void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
192 QRectF itemRect(
bool storedRect =
false )
const;
199 QString label()
const;
206 void setLabel(
const QString &label );
216 virtual int linkPointCount( Qt::Edge edge )
const;
221 virtual QString linkPointText( Qt::Edge edge,
int index )
const;
226 QPointF linkPoint( Qt::Edge edge,
int index,
bool incoming )
const;
235 QPointF calculateAutomaticLinkPoint( QgsModelComponentGraphicItem *other, Qt::Edge &edge
SIP_OUT )
const;
244 QPointF calculateAutomaticLinkPoint(
const QPointF &point, Qt::Edge &edge
SIP_OUT )
const;
252 QgsModelDesignerSocketGraphicItem *outSocketAt(
int index )
const;
260 virtual void editComment() {}
265 virtual bool canDeleteComponent() {
return false; }
272 virtual void deleteComponent() {}
281 void requestModelRepaint();
290 void aboutToChange(
const QString &text,
int id = 0 );
301 void repaintArrows();
306 void updateArrowPaths();
311 void sizePositionChanged();
320 virtual void editComponent() {}
327 QString truncatedTextForItem(
const QString &text )
const;
332 virtual QColor fillColor( State state )
const = 0;
337 virtual QColor strokeColor( State state )
const = 0;
342 virtual QColor textColor( State state )
const = 0;
347 virtual Qt::PenStyle strokeStyle( State state )
const;
352 virtual Qt::Alignment titleAlignment()
const;
357 virtual QPicture iconPicture()
const;
362 virtual QPixmap iconPixmap()
const;
367 virtual void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size ) = 0;
372 void updateButtonPositions();
379 SIP_SKIP static constexpr QColor FALLBACK_COLOR = QColor( 128, 128, 128 );
382 QSizeF itemSize()
const;
384 void updateToolTip(
const QPointF &pos );
386 void fold( Qt::Edge edge,
bool folded );
388 std::unique_ptr<QgsProcessingModelComponent> mComponent;
389 QgsProcessingModelAlgorithm *mModel =
nullptr;
391 bool mInitialized =
false;
392 QgsModelDesignerFoldButtonGraphicItem *mExpandTopButton =
nullptr;
393 QgsModelDesignerFoldButtonGraphicItem *mExpandBottomButton =
nullptr;
397 QgsModelDesignerFlatButtonGraphicItem *mEditButton =
nullptr;
398 QgsModelDesignerFlatButtonGraphicItem *mDeleteButton =
nullptr;
400 QList< QgsModelDesignerSocketGraphicItem * > mInSockets;
401 QList< QgsModelDesignerSocketGraphicItem * > mOutSockets;
404 static constexpr double MIN_COMPONENT_WIDTH = 70;
405 static constexpr double MIN_COMPONENT_HEIGHT = 30;
407 static constexpr double DEFAULT_BUTTON_WIDTH = 16;
408 static constexpr double DEFAULT_BUTTON_HEIGHT = 16;
409 static constexpr double BUTTON_MARGIN = 2;
410 static constexpr double TEXT_MARGIN = 4;
411 static constexpr double RECT_PEN_SIZE = 2;
412 QSizeF mButtonSize { DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT };
416 bool mIsHovering =
false;
427class GUI_EXPORT QgsModelParameterGraphicItem :
public QgsModelComponentGraphicItem
440 QgsModelParameterGraphicItem( QgsProcessingModelParameter *parameter
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
442 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
443 bool canDeleteComponent()
override;
445 QColor linkColor( Qt::Edge edge,
int index )
const override;
448 QColor fillColor( State state )
const override;
449 QColor strokeColor( State state )
const override;
450 QColor textColor( State state )
const override;
451 QPicture iconPicture()
const override;
453 int linkPointCount( Qt::Edge edge )
const override;
454 QString linkPointText( Qt::Edge edge,
int index )
const override;
455 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
459 void deleteComponent()
override;
471class GUI_EXPORT QgsModelChildAlgorithmGraphicItem :
public QgsModelComponentGraphicItem
484 QgsModelChildAlgorithmGraphicItem( QgsProcessingModelChildAlgorithm *child
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
485 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
486 bool canDeleteComponent()
override;
491 void setResults(
const QgsProcessingModelChildAlgorithmResult &results );
514 void showPreviousResults();
524 QColor fillColor( State state )
const override;
525 QColor strokeColor( State state )
const override;
526 QColor textColor( State state )
const override;
527 QPixmap iconPixmap()
const override;
528 QPicture iconPicture()
const override;
530 int linkPointCount( Qt::Edge edge )
const override;
531 QString linkPointText( Qt::Edge edge,
int index )
const override;
532 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
536 void deleteComponent()
override;
539 void deactivateAlgorithm();
540 void activateAlgorithm();
545 QgsProcessingModelChildAlgorithmResult mResults;
546 bool mIsValid =
true;
556class GUI_EXPORT QgsModelOutputGraphicItem :
public QgsModelComponentGraphicItem
569 QgsModelOutputGraphicItem( QgsProcessingModelOutput *output
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
571 bool canDeleteComponent()
override;
574 QColor fillColor( State state )
const override;
575 QColor strokeColor( State state )
const override;
576 QColor textColor( State state )
const override;
577 QPicture iconPicture()
const override;
578 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
582 void deleteComponent()
override;
595class GUI_EXPORT QgsModelCommentGraphicItem :
public QgsModelComponentGraphicItem
608 QgsModelCommentGraphicItem( QgsProcessingModelComment *comment
SIP_TRANSFER, QgsModelComponentGraphicItem *parentItem, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
609 ~QgsModelCommentGraphicItem()
override;
610 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
611 bool canDeleteComponent()
override;
616 QgsModelComponentGraphicItem *parentComponentItem()
const;
619 QColor fillColor( State state )
const override;
620 QColor strokeColor( State state )
const override;
621 QColor textColor( State state )
const override;
622 Qt::PenStyle strokeStyle( State state )
const override;
623 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
627 void deleteComponent()
override;
628 void editComponent()
override;
631 QgsProcessingModelComment *modelComponent();
633 std::unique_ptr<QgsProcessingModelComponent> mParentComponent;
634 QPointer<QgsModelComponentGraphicItem> mParentItem;
644class GUI_EXPORT QgsModelGroupBoxGraphicItem :
public QgsModelComponentGraphicItem
657 QgsModelGroupBoxGraphicItem( QgsProcessingModelGroupBox *box
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
658 ~QgsModelGroupBoxGraphicItem()
override;
659 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
660 bool canDeleteComponent()
override;
663 QColor fillColor( State state )
const override;
664 QColor strokeColor( State state )
const override;
665 QColor textColor( State state )
const override;
666 Qt::PenStyle strokeStyle( State state )
const override;
667 Qt::Alignment titleAlignment()
const override;
668 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
672 void deleteComponent()
override;
673 void editComponent()
override;
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
#define SIP_ENUM_BASETYPE(type)