16#ifndef QGSMODELCOMPONENTGRAPHICITEM_H
17#define QGSMODELCOMPONENTGRAPHICITEM_H
22#include <QGraphicsObject>
27class QgsProcessingModelComponent;
28class QgsProcessingModelParameter;
29class QgsProcessingModelChildAlgorithm;
30class QgsProcessingModelOutput;
31class QgsProcessingModelComment;
32class QgsProcessingModelAlgorithm;
33class QgsModelDesignerFlatButtonGraphicItem;
34class QgsModelDesignerFoldButtonGraphicItem;
35class QgsModelDesignerSocketGraphicItem;
36class QgsModelGraphicsView;
38class QgsProcessingModelGroupBox;
48class GUI_EXPORT QgsModelComponentGraphicItem :
public QGraphicsObject
67 Q_DECLARE_FLAGS( Flags, Flag )
77 QgsModelComponentGraphicItem( QgsProcessingModelComponent *component
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
79 ~QgsModelComponentGraphicItem()
override;
84 virtual Flags flags()
const;
89 QgsProcessingModelComponent *component();
94 const QgsProcessingModelComponent *component() const
SIP_SKIP;
99 QgsProcessingModelAlgorithm *model();
104 const QgsProcessingModelAlgorithm *model() const
SIP_SKIP;
109 QgsModelGraphicsView *view();
121 void setFont( const QFont &font );
128 void moveComponentBy( qreal dx, qreal dy );
133 void previewItemMove( qreal dx, qreal dy );
138 void setItemRect( QRectF rect );
145 QRectF previewItemRectChange( QRectF rect );
150 void finalizePreviewedItemRectChange( QRectF rect );
172 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
173 void hoverEnterEvent( QGraphicsSceneHoverEvent *event )
override;
174 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
175 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
176 QVariant itemChange( GraphicsItemChange change,
const QVariant &value )
override;
177 QRectF boundingRect()
const override;
178 bool contains(
const QPointF &point )
const override;
179 void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
184 QRectF itemRect(
bool storedRect =
false )
const;
191 QString label()
const;
198 void setLabel(
const QString &label );
208 virtual int linkPointCount( Qt::Edge edge )
const;
213 virtual QString linkPointText( Qt::Edge edge,
int index )
const;
218 QPointF linkPoint( Qt::Edge edge,
int index,
bool incoming )
const;
227 QPointF calculateAutomaticLinkPoint( QgsModelComponentGraphicItem *other, Qt::Edge &edge
SIP_OUT )
const;
236 QPointF calculateAutomaticLinkPoint(
const QPointF &point, Qt::Edge &edge
SIP_OUT )
const;
244 QgsModelDesignerSocketGraphicItem *outSocketAt(
int index )
const;
252 virtual void editComment() {}
257 virtual bool canDeleteComponent() {
return false; }
264 virtual void deleteComponent() {}
273 void requestModelRepaint();
282 void aboutToChange(
const QString &text,
int id = 0 );
293 void repaintArrows();
298 void updateArrowPaths();
303 void sizePositionChanged();
312 virtual void editComponent() {}
319 QString truncatedTextForItem(
const QString &text )
const;
324 virtual QColor fillColor( State state )
const = 0;
329 virtual QColor strokeColor( State state )
const = 0;
334 virtual QColor textColor( State state )
const = 0;
339 virtual Qt::PenStyle strokeStyle( State state )
const;
344 virtual Qt::Alignment titleAlignment()
const;
349 virtual QPicture iconPicture()
const;
354 virtual QPixmap iconPixmap()
const;
359 virtual void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size ) = 0;
364 void updateButtonPositions();
367 QSizeF itemSize()
const;
369 void updateToolTip(
const QPointF &pos );
371 void fold( Qt::Edge edge,
bool folded );
373 std::unique_ptr<QgsProcessingModelComponent> mComponent;
374 QgsProcessingModelAlgorithm *mModel =
nullptr;
376 bool mInitialized =
false;
377 QgsModelDesignerFoldButtonGraphicItem *mExpandTopButton =
nullptr;
378 QgsModelDesignerFoldButtonGraphicItem *mExpandBottomButton =
nullptr;
382 QgsModelDesignerFlatButtonGraphicItem *mEditButton =
nullptr;
383 QgsModelDesignerFlatButtonGraphicItem *mDeleteButton =
nullptr;
385 QList< QgsModelDesignerSocketGraphicItem * > mInSockets;
386 QList< QgsModelDesignerSocketGraphicItem * > mOutSockets;
389 static constexpr double MIN_COMPONENT_WIDTH = 70;
390 static constexpr double MIN_COMPONENT_HEIGHT = 30;
392 static constexpr double DEFAULT_BUTTON_WIDTH = 16;
393 static constexpr double DEFAULT_BUTTON_HEIGHT = 16;
394 static constexpr double BUTTON_MARGIN = 2;
395 static constexpr double TEXT_MARGIN = 4;
396 static constexpr double RECT_PEN_SIZE = 2;
397 QSizeF mButtonSize { DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT };
401 bool mIsHovering =
false;
412class GUI_EXPORT QgsModelParameterGraphicItem :
public QgsModelComponentGraphicItem
425 QgsModelParameterGraphicItem( QgsProcessingModelParameter *parameter
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
427 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
428 bool canDeleteComponent()
override;
431 QColor fillColor( State state )
const override;
432 QColor strokeColor( State state )
const override;
433 QColor textColor( State state )
const override;
434 QPicture iconPicture()
const override;
436 int linkPointCount( Qt::Edge edge )
const override;
437 QString linkPointText( Qt::Edge edge,
int index )
const override;
438 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
442 void deleteComponent()
override;
454class GUI_EXPORT QgsModelChildAlgorithmGraphicItem :
public QgsModelComponentGraphicItem
467 QgsModelChildAlgorithmGraphicItem( QgsProcessingModelChildAlgorithm *child
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
468 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
469 bool canDeleteComponent()
override;
497 void showPreviousResults();
507 QColor fillColor( State state )
const override;
508 QColor strokeColor( State state )
const override;
509 QColor textColor( State state )
const override;
510 QPixmap iconPixmap()
const override;
511 QPicture iconPicture()
const override;
513 int linkPointCount( Qt::Edge edge )
const override;
514 QString linkPointText( Qt::Edge edge,
int index )
const override;
515 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
519 void deleteComponent()
override;
522 void deactivateAlgorithm();
523 void activateAlgorithm();
529 bool mIsValid =
true;
539class GUI_EXPORT QgsModelOutputGraphicItem :
public QgsModelComponentGraphicItem
552 QgsModelOutputGraphicItem( QgsProcessingModelOutput *output
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
554 bool canDeleteComponent()
override;
557 QColor fillColor( State state )
const override;
558 QColor strokeColor( State state )
const override;
559 QColor textColor( State state )
const override;
560 QPicture iconPicture()
const override;
561 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
565 void deleteComponent()
override;
578class GUI_EXPORT QgsModelCommentGraphicItem :
public QgsModelComponentGraphicItem
591 QgsModelCommentGraphicItem( QgsProcessingModelComment *comment
SIP_TRANSFER, QgsModelComponentGraphicItem *parentItem, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
592 ~QgsModelCommentGraphicItem()
override;
593 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
594 bool canDeleteComponent()
override;
599 QgsModelComponentGraphicItem *parentComponentItem()
const;
602 QColor fillColor( State state )
const override;
603 QColor strokeColor( State state )
const override;
604 QColor textColor( State state )
const override;
605 Qt::PenStyle strokeStyle( State state )
const override;
606 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
610 void deleteComponent()
override;
611 void editComponent()
override;
614 QgsProcessingModelComment *modelComponent();
616 std::unique_ptr<QgsProcessingModelComponent> mParentComponent;
617 QPointer<QgsModelComponentGraphicItem> mParentItem;
627class GUI_EXPORT QgsModelGroupBoxGraphicItem :
public QgsModelComponentGraphicItem
640 QgsModelGroupBoxGraphicItem( QgsProcessingModelGroupBox *box
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
641 ~QgsModelGroupBoxGraphicItem()
override;
642 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
643 bool canDeleteComponent()
override;
646 QColor fillColor( State state )
const override;
647 QColor strokeColor( State state )
const override;
648 QColor textColor( State state )
const override;
649 Qt::PenStyle strokeStyle( State state )
const override;
650 Qt::Alignment titleAlignment()
const override;
651 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
655 void deleteComponent()
override;
656 void editComponent()
override;
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
Encapsulates the results of running a child algorithm within a model.
#define SIP_ENUM_BASETYPE(type)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)