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 );
498 QgsProcessingModelChildAlgorithmResult results() {
return mResults; };
522 void showPreviousResults();
532 QColor fillColor( State state )
const override;
533 QColor strokeColor( State state )
const override;
534 QColor textColor( State state )
const override;
535 QPixmap iconPixmap()
const override;
536 QPicture iconPicture()
const override;
538 int linkPointCount( Qt::Edge edge )
const override;
539 QString linkPointText( Qt::Edge edge,
int index )
const override;
540 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
544 void deleteComponent()
override;
547 void deactivateAlgorithm();
548 void activateAlgorithm();
553 QgsProcessingModelChildAlgorithmResult mResults;
554 bool mIsValid =
true;
564class GUI_EXPORT QgsModelOutputGraphicItem :
public QgsModelComponentGraphicItem
577 QgsModelOutputGraphicItem( QgsProcessingModelOutput *output
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
579 bool canDeleteComponent()
override;
582 QColor fillColor( State state )
const override;
583 QColor strokeColor( State state )
const override;
584 QColor textColor( State state )
const override;
585 QPicture iconPicture()
const override;
586 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
590 void deleteComponent()
override;
603class GUI_EXPORT QgsModelCommentGraphicItem :
public QgsModelComponentGraphicItem
616 QgsModelCommentGraphicItem( QgsProcessingModelComment *comment
SIP_TRANSFER, QgsModelComponentGraphicItem *parentItem, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
617 ~QgsModelCommentGraphicItem()
override;
618 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
619 bool canDeleteComponent()
override;
624 QgsModelComponentGraphicItem *parentComponentItem()
const;
627 QColor fillColor( State state )
const override;
628 QColor strokeColor( State state )
const override;
629 QColor textColor( State state )
const override;
630 Qt::PenStyle strokeStyle( State state )
const override;
631 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
635 void deleteComponent()
override;
636 void editComponent()
override;
639 QgsProcessingModelComment *modelComponent();
641 std::unique_ptr<QgsProcessingModelComponent> mParentComponent;
642 QPointer<QgsModelComponentGraphicItem> mParentItem;
652class GUI_EXPORT QgsModelGroupBoxGraphicItem :
public QgsModelComponentGraphicItem
665 QgsModelGroupBoxGraphicItem( QgsProcessingModelGroupBox *box
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
666 ~QgsModelGroupBoxGraphicItem()
override;
667 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
668 bool canDeleteComponent()
override;
671 QColor fillColor( State state )
const override;
672 QColor strokeColor( State state )
const override;
673 QColor textColor( State state )
const override;
674 Qt::PenStyle strokeStyle( State state )
const override;
675 Qt::Alignment titleAlignment()
const override;
676 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
680 void deleteComponent()
override;
681 void editComponent()
override;
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
#define SIP_ENUM_BASETYPE(type)