16#ifndef QGSMODELCOMPONENTGRAPHICITEM_H
17#define QGSMODELCOMPONENTGRAPHICITEM_H
25#include <QGraphicsObject>
29class QgsProcessingModelComponent;
30class QgsProcessingModelParameter;
31class QgsProcessingModelChildAlgorithm;
32class QgsProcessingModelOutput;
33class QgsProcessingModelComment;
34class QgsProcessingModelAlgorithm;
35class QgsModelDesignerFlatButtonGraphicItem;
36class QgsModelDesignerFoldButtonGraphicItem;
37class QgsModelDesignerSocketGraphicItem;
38class QgsModelGraphicsView;
40class QgsProcessingModelGroupBox;
41class QgsModelArrowItem;
70 Q_DECLARE_FLAGS( Flags, Flag )
80 QgsModelComponentGraphicItem( QgsProcessingModelComponent *component
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
82 ~QgsModelComponentGraphicItem()
override;
87 virtual Flags flags()
const;
92 QgsProcessingModelComponent *component();
97 const QgsProcessingModelComponent *component() const
SIP_SKIP;
102 QgsProcessingModelAlgorithm *model();
107 const QgsProcessingModelAlgorithm *model() const
SIP_SKIP;
112 QgsModelGraphicsView *view();
124 void setFont( const QFont &font );
131 void moveComponentBy( qreal dx, qreal dy );
136 void previewItemMove( qreal dx, qreal dy );
141 void setItemRect( QRectF rect );
150 virtual QColor linkColor( Qt::Edge edge,
int index )
const;
155 QRectF previewItemRectChange( QRectF rect );
160 void finalizePreviewedItemRectChange( QRectF rect );
165 virtual void modelHoverEnterEvent( QgsModelViewMouseEvent *event );
170 virtual void modelHoverMoveEvent( QgsModelViewMouseEvent *event );
175 virtual void modelHoverLeaveEvent( QgsModelViewMouseEvent *event );
180 virtual void modelDoubleClickEvent( QgsModelViewMouseEvent *event );
182 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
183 void hoverEnterEvent( QGraphicsSceneHoverEvent *event )
override;
184 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
185 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
186 QVariant itemChange( GraphicsItemChange change,
const QVariant &value )
override;
187 QRectF boundingRect()
const override;
188 bool contains(
const QPointF &point )
const override;
189 void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
194 QRectF itemRect(
bool storedRect =
false )
const;
201 QString label()
const;
208 void setLabel(
const QString &label );
218 virtual int linkPointCount( Qt::Edge edge )
const;
223 virtual QString linkPointText( Qt::Edge edge,
int index )
const;
228 QPointF linkPoint( Qt::Edge edge,
int index,
bool incoming )
const;
237 QPointF calculateAutomaticLinkPoint( QgsModelComponentGraphicItem *other, Qt::Edge &edge
SIP_OUT )
const;
246 QPointF calculateAutomaticLinkPoint(
const QPointF &point, Qt::Edge &edge
SIP_OUT )
const;
254 QgsModelDesignerSocketGraphicItem *outSocketAt(
int index )
const;
262 virtual void editComment() {}
267 virtual bool canDeleteComponent() {
return false; }
274 virtual void deleteComponent() {}
282 QList< QgsModelArrowItem * > incomingArrows();
290 QList< QgsModelArrowItem * > outgoingArrows();
297 void registerWidgetContextGenerator( QgsProcessingWidgetContextGenerator *generator );
308 void requestModelRepaint();
317 void aboutToChange(
const QString &text,
const QString &
id = QString() );
328 void repaintArrows();
333 void updateArrowPaths();
338 void sizePositionChanged();
347 virtual void editComponent() {}
355 virtual void paintBackground( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
360 void paintOutline( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
366 QString truncatedTextForItem(
const QString &text )
const;
371 virtual QColor fillColor( State state )
const = 0;
376 virtual QColor strokeColor( State state )
const = 0;
381 virtual QColor textColor( State state )
const = 0;
386 virtual Qt::PenStyle strokeStyle( State state )
const;
393 virtual QColor outlineColor()
const {
return QColor(); }
398 virtual Qt::Alignment titleAlignment()
const;
403 virtual QPicture iconPicture()
const;
408 virtual QPixmap iconPixmap()
const;
413 virtual void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size ) = 0;
418 void updateButtonPositions();
425 SIP_SKIP static constexpr QColor FALLBACK_COLOR = QColor( 128, 128, 128 );
428 QSizeF itemSize()
const;
430 void updateToolTip(
const QPointF &pos );
432 void fold( Qt::Edge edge,
bool folded );
434 std::unique_ptr<QgsProcessingModelComponent> mComponent;
435 QgsProcessingModelAlgorithm *mModel =
nullptr;
437 bool mInitialized =
false;
438 QgsModelDesignerFoldButtonGraphicItem *mExpandTopButton =
nullptr;
439 QgsModelDesignerFoldButtonGraphicItem *mExpandBottomButton =
nullptr;
443 QgsModelDesignerFlatButtonGraphicItem *mEditButton =
nullptr;
444 QgsModelDesignerFlatButtonGraphicItem *mDeleteButton =
nullptr;
446 QList< QgsModelDesignerSocketGraphicItem * > mInSockets;
447 QList< QgsModelDesignerSocketGraphicItem * > mOutSockets;
449 QgsProcessingWidgetContextGenerator *mWidgetContextGenerator =
nullptr;
451 static constexpr double MIN_COMPONENT_WIDTH = 70;
452 static constexpr double MIN_COMPONENT_HEIGHT = 30;
454 static constexpr double DEFAULT_BUTTON_WIDTH = 16;
455 static constexpr double DEFAULT_BUTTON_HEIGHT = 16;
456 static constexpr double BUTTON_MARGIN = 2;
457 static constexpr double TEXT_MARGIN = 4;
458 static constexpr double RECT_PEN_SIZE = 2;
459 static constexpr double RECT_OUTLINE_SIZE = 10;
460 QSizeF mButtonSize { DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT };
464 bool mIsHovering =
false;
475class GUI_EXPORT QgsModelParameterGraphicItem :
public QgsModelComponentGraphicItem
488 QgsModelParameterGraphicItem( QgsProcessingModelParameter *parameter
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
490 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
491 bool canDeleteComponent()
override;
493 QColor linkColor( Qt::Edge edge,
int index )
const override;
496 QColor fillColor( State state )
const override;
497 QColor strokeColor( State state )
const override;
498 QColor textColor( State state )
const override;
499 QPicture iconPicture()
const override;
501 int linkPointCount( Qt::Edge edge )
const override;
502 QString linkPointText( Qt::Edge edge,
int index )
const override;
503 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
507 void deleteComponent()
override;
519class GUI_EXPORT QgsModelChildAlgorithmGraphicItem :
public QgsModelComponentGraphicItem
532 QgsModelChildAlgorithmGraphicItem( QgsProcessingModelChildAlgorithm *child
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
533 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
534 bool canDeleteComponent()
override;
539 void setResults(
const QgsProcessingModelChildAlgorithmResult &results );
548 void setSourceFeatureCount(
const QString ¶meterName,
long long featureCount );
557 void setSinkFeatureCount(
const QString &outputName,
long long featureCount );
564 QgsProcessingModelChildAlgorithmResult results() {
return mResults; };
569 void setProgress(
double progress );
591 int indexForInput(
const QString ¶meterName )
const;
599 int indexForOutput(
const QString &output )
const;
622 void showPreviousResults();
637 void rebuildConfigurationDockWidget();
640 void paintBackground( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
642 QColor fillColor( State state )
const override;
643 QColor strokeColor( State state )
const override;
644 QColor textColor( State state )
const override;
645 QColor outlineColor()
const override;
646 QPixmap iconPixmap()
const override;
647 QPicture iconPicture()
const override;
649 int linkPointCount( Qt::Edge edge )
const override;
650 QString linkPointText( Qt::Edge edge,
int index )
const override;
651 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
655 void deleteComponent()
override;
658 void deactivateAlgorithm();
659 void activateAlgorithm();
664 bool mStarted =
false;
665 bool mOutdated =
false;
666 QgsProcessingModelChildAlgorithmResult mResults;
667 double mProgress = -1;
668 bool mIsValid =
true;
678class GUI_EXPORT QgsModelOutputGraphicItem :
public QgsModelComponentGraphicItem
691 QgsModelOutputGraphicItem( QgsProcessingModelOutput *output
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
693 bool canDeleteComponent()
override;
696 QColor fillColor( State state )
const override;
697 QColor strokeColor( State state )
const override;
698 QColor textColor( State state )
const override;
699 QPicture iconPicture()
const override;
700 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
704 void deleteComponent()
override;
717class GUI_EXPORT QgsModelCommentGraphicItem :
public QgsModelComponentGraphicItem
730 QgsModelCommentGraphicItem( QgsProcessingModelComment *comment
SIP_TRANSFER, QgsModelComponentGraphicItem *parentItem, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
731 ~QgsModelCommentGraphicItem()
override;
732 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
733 bool canDeleteComponent()
override;
738 QgsModelComponentGraphicItem *parentComponentItem()
const;
741 QColor fillColor( State state )
const override;
742 QColor strokeColor( State state )
const override;
743 QColor textColor( State state )
const override;
744 Qt::PenStyle strokeStyle( State state )
const override;
745 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
749 void deleteComponent()
override;
750 void editComponent()
override;
753 QgsProcessingModelComment *modelComponent();
755 std::unique_ptr<QgsProcessingModelComponent> mParentComponent;
756 QPointer<QgsModelComponentGraphicItem> mParentItem;
766class GUI_EXPORT QgsModelGroupBoxGraphicItem :
public QgsModelComponentGraphicItem
779 QgsModelGroupBoxGraphicItem( QgsProcessingModelGroupBox *box
SIP_TRANSFER, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent
SIP_TRANSFERTHIS );
780 ~QgsModelGroupBoxGraphicItem()
override;
781 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
782 bool canDeleteComponent()
override;
789 void applyEdit(
const QgsProcessingModelGroupBox &groupBox );
792 QColor fillColor( State state )
const override;
793 QColor strokeColor( State state )
const override;
794 QColor textColor( State state )
const override;
795 Qt::PenStyle strokeStyle( State state )
const override;
796 Qt::Alignment titleAlignment()
const override;
797 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
801 void deleteComponent()
override;
802 void editComponent()
override;
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
An interface for objects which can create Processing widget contexts.
virtual QgsProcessingParameterWidgetContext createWidgetContext()=0
This method needs to be reimplemented in all classes which implement this interface and return a Proc...
#define SIP_ENUM_BASETYPE(type)