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;
40class QgsModelArrowItem;
50class GUI_EXPORT QgsModelComponentGraphicItem :
public QGraphicsObject
69 Q_DECLARE_FLAGS( Flags, Flag )
79 QgsModelComponentGraphicItem( QgsProcessingModelComponent *component
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
81 ~QgsModelComponentGraphicItem()
override;
86 virtual Flags flags()
const;
91 QgsProcessingModelComponent *component();
96 const QgsProcessingModelComponent *component() const
SIP_SKIP;
101 QgsProcessingModelAlgorithm *model();
106 const QgsProcessingModelAlgorithm *model() const
SIP_SKIP;
111 QgsModelGraphicsView *view();
123 void setFont( const QFont &font );
130 void moveComponentBy( qreal dx, qreal dy );
135 void previewItemMove( qreal dx, qreal dy );
140 void setItemRect( QRectF rect );
149 virtual QColor linkColor( Qt::Edge edge,
int index )
const;
154 QRectF previewItemRectChange( QRectF rect );
159 void finalizePreviewedItemRectChange( QRectF rect );
164 virtual void modelHoverEnterEvent( QgsModelViewMouseEvent *event );
169 virtual void modelHoverMoveEvent( QgsModelViewMouseEvent *event );
174 virtual void modelHoverLeaveEvent( QgsModelViewMouseEvent *event );
179 virtual void modelDoubleClickEvent( QgsModelViewMouseEvent *event );
181 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
182 void hoverEnterEvent( QGraphicsSceneHoverEvent *event )
override;
183 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
184 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
185 QVariant itemChange( GraphicsItemChange change,
const QVariant &value )
override;
186 QRectF boundingRect()
const override;
187 bool contains(
const QPointF &point )
const override;
188 void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
193 QRectF itemRect(
bool storedRect =
false )
const;
200 QString label()
const;
207 void setLabel(
const QString &label );
217 virtual int linkPointCount( Qt::Edge edge )
const;
222 virtual QString linkPointText( Qt::Edge edge,
int index )
const;
227 QPointF linkPoint( Qt::Edge edge,
int index,
bool incoming )
const;
236 QPointF calculateAutomaticLinkPoint( QgsModelComponentGraphicItem *other, Qt::Edge &edge
SIP_OUT )
const;
245 QPointF calculateAutomaticLinkPoint(
const QPointF &point, Qt::Edge &edge
SIP_OUT )
const;
253 QgsModelDesignerSocketGraphicItem *outSocketAt(
int index )
const;
261 virtual void editComment() {}
266 virtual bool canDeleteComponent() {
return false; }
273 virtual void deleteComponent() {}
281 QList< QgsModelArrowItem * > incomingArrows();
289 QList< QgsModelArrowItem * > outgoingArrows();
298 void requestModelRepaint();
307 void aboutToChange(
const QString &text,
const QString &
id = QString() );
318 void repaintArrows();
323 void updateArrowPaths();
328 void sizePositionChanged();
337 virtual void editComponent() {}
345 virtual void paintBackground( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
350 void paintOutline( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
356 QString truncatedTextForItem(
const QString &text )
const;
361 virtual QColor fillColor( State state )
const = 0;
366 virtual QColor strokeColor( State state )
const = 0;
371 virtual QColor textColor( State state )
const = 0;
376 virtual Qt::PenStyle strokeStyle( State state )
const;
383 virtual QColor outlineColor()
const {
return QColor(); }
388 virtual Qt::Alignment titleAlignment()
const;
393 virtual QPicture iconPicture()
const;
398 virtual QPixmap iconPixmap()
const;
403 virtual void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size ) = 0;
408 void updateButtonPositions();
415 SIP_SKIP static constexpr QColor FALLBACK_COLOR = QColor( 128, 128, 128 );
418 QSizeF itemSize()
const;
420 void updateToolTip(
const QPointF &pos );
422 void fold( Qt::Edge edge,
bool folded );
424 std::unique_ptr<QgsProcessingModelComponent> mComponent;
425 QgsProcessingModelAlgorithm *mModel =
nullptr;
427 bool mInitialized =
false;
428 QgsModelDesignerFoldButtonGraphicItem *mExpandTopButton =
nullptr;
429 QgsModelDesignerFoldButtonGraphicItem *mExpandBottomButton =
nullptr;
433 QgsModelDesignerFlatButtonGraphicItem *mEditButton =
nullptr;
434 QgsModelDesignerFlatButtonGraphicItem *mDeleteButton =
nullptr;
436 QList< QgsModelDesignerSocketGraphicItem * > mInSockets;
437 QList< QgsModelDesignerSocketGraphicItem * > mOutSockets;
440 static constexpr double MIN_COMPONENT_WIDTH = 70;
441 static constexpr double MIN_COMPONENT_HEIGHT = 30;
443 static constexpr double DEFAULT_BUTTON_WIDTH = 16;
444 static constexpr double DEFAULT_BUTTON_HEIGHT = 16;
445 static constexpr double BUTTON_MARGIN = 2;
446 static constexpr double TEXT_MARGIN = 4;
447 static constexpr double RECT_PEN_SIZE = 2;
448 static constexpr double RECT_OUTLINE_SIZE = 10;
449 QSizeF mButtonSize { DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT };
453 bool mIsHovering =
false;
464class GUI_EXPORT QgsModelParameterGraphicItem :
public QgsModelComponentGraphicItem
477 QgsModelParameterGraphicItem( QgsProcessingModelParameter *parameter
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
479 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
480 bool canDeleteComponent()
override;
482 QColor linkColor( Qt::Edge edge,
int index )
const override;
485 QColor fillColor( State state )
const override;
486 QColor strokeColor( State state )
const override;
487 QColor textColor( State state )
const override;
488 QPicture iconPicture()
const override;
490 int linkPointCount( Qt::Edge edge )
const override;
491 QString linkPointText( Qt::Edge edge,
int index )
const override;
492 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
496 void deleteComponent()
override;
508class GUI_EXPORT QgsModelChildAlgorithmGraphicItem :
public QgsModelComponentGraphicItem
521 QgsModelChildAlgorithmGraphicItem( QgsProcessingModelChildAlgorithm *child
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
522 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
523 bool canDeleteComponent()
override;
528 void setResults(
const QgsProcessingModelChildAlgorithmResult &results );
537 void setSourceFeatureCount(
const QString ¶meterName,
long long featureCount );
546 void setSinkFeatureCount(
const QString &outputName,
long long featureCount );
553 QgsProcessingModelChildAlgorithmResult results() {
return mResults; };
558 void setProgress(
double progress );
580 int indexForInput(
const QString ¶meterName )
const;
588 int indexForOutput(
const QString &output )
const;
611 void showPreviousResults();
626 void rebuildConfigurationDockWidget();
629 void paintBackground( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
631 QColor fillColor( State state )
const override;
632 QColor strokeColor( State state )
const override;
633 QColor textColor( State state )
const override;
634 QColor outlineColor()
const override;
635 QPixmap iconPixmap()
const override;
636 QPicture iconPicture()
const override;
638 int linkPointCount( Qt::Edge edge )
const override;
639 QString linkPointText( Qt::Edge edge,
int index )
const override;
640 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
644 void deleteComponent()
override;
647 void deactivateAlgorithm();
648 void activateAlgorithm();
653 bool mStarted =
false;
654 bool mOutdated =
false;
655 QgsProcessingModelChildAlgorithmResult mResults;
656 double mProgress = -1;
657 bool mIsValid =
true;
667class GUI_EXPORT QgsModelOutputGraphicItem :
public QgsModelComponentGraphicItem
680 QgsModelOutputGraphicItem( QgsProcessingModelOutput *output
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
682 bool canDeleteComponent()
override;
685 QColor fillColor( State state )
const override;
686 QColor strokeColor( State state )
const override;
687 QColor textColor( State state )
const override;
688 QPicture iconPicture()
const override;
689 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
693 void deleteComponent()
override;
706class GUI_EXPORT QgsModelCommentGraphicItem :
public QgsModelComponentGraphicItem
719 QgsModelCommentGraphicItem( QgsProcessingModelComment *comment
SIP_TRANSFER, QgsModelComponentGraphicItem *parentItem, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
720 ~QgsModelCommentGraphicItem()
override;
721 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
722 bool canDeleteComponent()
override;
727 QgsModelComponentGraphicItem *parentComponentItem()
const;
730 QColor fillColor( State state )
const override;
731 QColor strokeColor( State state )
const override;
732 QColor textColor( State state )
const override;
733 Qt::PenStyle strokeStyle( State state )
const override;
734 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
738 void deleteComponent()
override;
739 void editComponent()
override;
742 QgsProcessingModelComment *modelComponent();
744 std::unique_ptr<QgsProcessingModelComponent> mParentComponent;
745 QPointer<QgsModelComponentGraphicItem> mParentItem;
755class GUI_EXPORT QgsModelGroupBoxGraphicItem :
public QgsModelComponentGraphicItem
768 QgsModelGroupBoxGraphicItem( QgsProcessingModelGroupBox *box
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
769 ~QgsModelGroupBoxGraphicItem()
override;
770 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
771 bool canDeleteComponent()
override;
778 void applyEdit(
const QgsProcessingModelGroupBox &groupBox );
781 QColor fillColor( State state )
const override;
782 QColor strokeColor( State state )
const override;
783 QColor textColor( State state )
const override;
784 Qt::PenStyle strokeStyle( State state )
const override;
785 Qt::Alignment titleAlignment()
const override;
786 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
790 void deleteComponent()
override;
791 void editComponent()
override;
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
#define SIP_ENUM_BASETYPE(type)