16#ifndef QGSMODELCOMPONENTGRAPHICITEM_H
17#define QGSMODELCOMPONENTGRAPHICITEM_H
25#include <QGraphicsObject>
31class QgsProcessingModelComponent;
32class QgsProcessingModelParameter;
33class QgsProcessingModelChildAlgorithm;
34class QgsProcessingModelOutput;
35class QgsProcessingModelComment;
36class QgsProcessingModelAlgorithm;
37class QgsModelDesignerFlatButtonGraphicItem;
38class QgsModelDesignerFoldButtonGraphicItem;
39class QgsModelDesignerSocketGraphicItem;
40class QgsModelGraphicsView;
42class QgsProcessingModelGroupBox;
43class QgsModelArrowItem;
73 Q_DECLARE_FLAGS( Flags, Flag )
83 QgsModelComponentGraphicItem( QgsProcessingModelComponent *component, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent );
85 ~QgsModelComponentGraphicItem()
override;
90 virtual Flags flags()
const;
95 QgsProcessingModelComponent *component();
100 const QgsProcessingModelComponent *component()
const;
105 QgsProcessingModelAlgorithm *model();
110 const QgsProcessingModelAlgorithm *model()
const;
115 QgsModelGraphicsView *view();
127 void setFont(
const QFont &font );
134 void moveComponentBy( qreal dx, qreal dy );
139 void previewItemMove( qreal dx, qreal dy );
144 void setItemRect( QRectF rect );
151 virtual QColor linkColor( Qt::Edge edge,
int index )
const;
156 QRectF previewItemRectChange( QRectF rect );
161 void finalizePreviewedItemRectChange( QRectF rect );
166 virtual void modelHoverEnterEvent( QgsModelViewMouseEvent *event );
171 virtual void modelHoverMoveEvent( QgsModelViewMouseEvent *event );
176 virtual void modelHoverLeaveEvent( QgsModelViewMouseEvent *event );
181 virtual void modelDoubleClickEvent( QgsModelViewMouseEvent *event );
183 void mouseDoubleClickEvent( QGraphicsSceneMouseEvent *event )
override;
184 void hoverEnterEvent( QGraphicsSceneHoverEvent *event )
override;
185 void hoverMoveEvent( QGraphicsSceneHoverEvent *event )
override;
186 void hoverLeaveEvent( QGraphicsSceneHoverEvent *event )
override;
187 QVariant itemChange( GraphicsItemChange change,
const QVariant &value )
override;
188 QRectF boundingRect()
const override;
189 bool contains(
const QPointF &point )
const override;
190 void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
195 QRectF itemRect(
bool storedRect =
false )
const;
202 QString label()
const;
209 void setLabel(
const QString &label );
219 virtual int linkPointCount( Qt::Edge edge )
const;
224 virtual QString linkPointText( Qt::Edge edge,
int index )
const;
229 QPointF linkPoint( Qt::Edge edge,
int index,
bool incoming )
const;
238 QPointF calculateAutomaticLinkPoint( QgsModelComponentGraphicItem *other, Qt::Edge &edge )
const;
247 QPointF calculateAutomaticLinkPoint(
const QPointF &point, Qt::Edge &edge )
const;
255 QgsModelDesignerSocketGraphicItem *outSocketAt(
int index )
const;
263 virtual void editComment() {}
268 virtual bool canDeleteComponent() {
return false; }
275 virtual void deleteComponent() {}
283 QList< QgsModelArrowItem * > incomingArrows();
291 QList< QgsModelArrowItem * > outgoingArrows();
298 void registerWidgetContextGenerator( QgsProcessingWidgetContextGenerator *generator );
309 void requestModelRepaint();
318 void aboutToChange(
const QString &text,
const QString &
id = QString() );
329 void repaintArrows();
334 void updateArrowPaths();
339 void sizePositionChanged();
348 virtual void editComponent() {}
356 virtual void paintBackground( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
361 void paintOutline( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr );
367 QString truncatedTextForItem(
const QString &text )
const;
372 virtual QColor fillColor( State state )
const = 0;
377 virtual QColor strokeColor( State state )
const = 0;
382 virtual QColor textColor( State state )
const = 0;
387 virtual Qt::PenStyle strokeStyle( State state )
const;
394 virtual QColor outlineColor()
const {
return QColor(); }
399 virtual Qt::Alignment titleAlignment()
const;
404 virtual QPicture iconPicture()
const;
409 virtual QPixmap iconPixmap()
const;
414 virtual void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size ) = 0;
419 void updateButtonPositions();
426 static constexpr QColor FALLBACK_COLOR = QColor( 128, 128, 128 );
429 QSizeF itemSize()
const;
431 void updateToolTip(
const QPointF &pos );
433 void fold( Qt::Edge edge,
bool folded );
435 std::unique_ptr<QgsProcessingModelComponent> mComponent;
436 QgsProcessingModelAlgorithm *mModel =
nullptr;
438 bool mInitialized =
false;
439 QgsModelDesignerFoldButtonGraphicItem *mExpandTopButton =
nullptr;
440 QgsModelDesignerFoldButtonGraphicItem *mExpandBottomButton =
nullptr;
444 QgsModelDesignerFlatButtonGraphicItem *mEditButton =
nullptr;
445 QgsModelDesignerFlatButtonGraphicItem *mDeleteButton =
nullptr;
447 QList< QgsModelDesignerSocketGraphicItem * > mInSockets;
448 QList< QgsModelDesignerSocketGraphicItem * > mOutSockets;
450 QgsProcessingWidgetContextGenerator *mWidgetContextGenerator =
nullptr;
452 static constexpr double MIN_COMPONENT_WIDTH = 70;
453 static constexpr double MIN_COMPONENT_HEIGHT = 30;
455 static constexpr double DEFAULT_BUTTON_WIDTH = 16;
456 static constexpr double DEFAULT_BUTTON_HEIGHT = 16;
457 static constexpr double BUTTON_MARGIN = 2;
458 static constexpr double SOCKET_MARGIN = 25;
459 static constexpr double TEXT_MARGIN = 4;
460 static constexpr double RECT_PEN_SIZE = 2;
461 static constexpr double RECT_OUTLINE_SIZE = 10;
462 QSizeF mButtonSize { DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT };
466 bool mIsHovering =
false;
477class GUI_EXPORT QgsModelParameterGraphicItem :
public QgsModelComponentGraphicItem
490 QgsModelParameterGraphicItem( QgsProcessingModelParameter *parameter, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent );
492 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
493 bool canDeleteComponent()
override;
494 void editComponent()
override;
495 void editComment()
override;
496 QColor linkColor( Qt::Edge edge,
int index )
const override;
503 QString applyEdit( std::unique_ptr< QgsProcessingParameterDefinition > newParameter,
const QString &oldDescription,
const QString &oldName,
const QString &comment,
const QColor &commentColor );
506 QColor fillColor( State state )
const override;
507 QColor strokeColor( State state )
const override;
508 QColor textColor( State state )
const override;
509 QPicture iconPicture()
const override;
511 int linkPointCount( Qt::Edge edge )
const override;
512 QString linkPointText( Qt::Edge edge,
int index )
const override;
513 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
517 void deleteComponent()
override;
525 void edit(
bool editComment =
false );
536class GUI_EXPORT QgsModelChildAlgorithmGraphicItem :
public QgsModelComponentGraphicItem
549 QgsModelChildAlgorithmGraphicItem( QgsProcessingModelChildAlgorithm *child, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent );
550 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
551 bool canDeleteComponent()
override;
556 void setResults(
const QgsProcessingModelChildAlgorithmResult &results );
565 void setSourceFeatureCount(
const QString ¶meterName,
long long featureCount );
574 void setSinkFeatureCount(
const QString &outputName,
long long featureCount );
581 QgsProcessingModelChildAlgorithmResult results() {
return mResults; };
586 void setProgress(
double progress );
608 int indexForInput(
const QString ¶meterName )
const;
616 int indexForOutput(
const QString &output )
const;
618 void editComponent()
override;
619 void editComment()
override;
626 void applyEdit(
const QgsProcessingModelChildAlgorithm &
algorithm );
649 void showPreviousResults();
664 void rebuildConfigurationDockWidget();
667 void paintBackground( QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget =
nullptr )
override;
669 QColor fillColor( State state )
const override;
670 QColor strokeColor( State state )
const override;
671 QColor textColor( State state )
const override;
672 QColor outlineColor()
const override;
673 QPixmap iconPixmap()
const override;
674 QPicture iconPicture()
const override;
676 int linkPointCount( Qt::Edge edge )
const override;
677 QString linkPointText( Qt::Edge edge,
int index )
const override;
678 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
682 void deleteComponent()
override;
685 void deactivateAlgorithm();
686 void activateAlgorithm();
694 void edit(
bool editComment =
false );
698 bool mStarted =
false;
699 bool mOutdated =
false;
700 QgsProcessingModelChildAlgorithmResult mResults;
701 double mProgress = -1;
702 bool mIsValid =
true;
711class GUI_EXPORT QgsModelOutputGraphicItem :
public QgsModelComponentGraphicItem
724 QgsModelOutputGraphicItem( QgsProcessingModelOutput *output, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent );
726 bool canDeleteComponent()
override;
727 void editComponent()
override;
728 void editComment()
override;
734 void applyEdit(
const QString &name,
const QString &description,
const QVariant &defaultValue,
bool mandatory,
const QString &comment,
const QColor &commentColor );
737 QColor fillColor( State state )
const override;
738 QColor strokeColor( State state )
const override;
739 QColor textColor( State state )
const override;
740 QPicture iconPicture()
const override;
741 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
745 void deleteComponent()
override;
748 void edit(
bool editComment =
false );
759class GUI_EXPORT QgsModelCommentGraphicItem :
public QgsModelComponentGraphicItem
772 QgsModelCommentGraphicItem( QgsProcessingModelComment *comment, QgsModelComponentGraphicItem *parentItem, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent );
773 ~QgsModelCommentGraphicItem()
override;
774 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
775 bool canDeleteComponent()
override;
780 QgsModelComponentGraphicItem *parentComponentItem()
const;
783 QColor fillColor( State state )
const override;
784 QColor strokeColor( State state )
const override;
785 QColor textColor( State state )
const override;
786 Qt::PenStyle strokeStyle( State state )
const override;
787 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
791 void deleteComponent()
override;
792 void editComponent()
override;
795 QgsProcessingModelComment *modelComponent();
797 std::unique_ptr<QgsProcessingModelComponent> mParentComponent;
798 QPointer<QgsModelComponentGraphicItem> mParentItem;
807class GUI_EXPORT QgsModelGroupBoxGraphicItem :
public QgsModelComponentGraphicItem
820 QgsModelGroupBoxGraphicItem( QgsProcessingModelGroupBox *box, QgsProcessingModelAlgorithm *model, QGraphicsItem *parent );
821 ~QgsModelGroupBoxGraphicItem()
override;
822 void contextMenuEvent( QGraphicsSceneContextMenuEvent *event )
override;
823 bool canDeleteComponent()
override;
830 void applyEdit(
const QgsProcessingModelGroupBox &groupBox );
833 QColor fillColor( State state )
const override;
834 QColor strokeColor( State state )
const override;
835 QColor textColor( State state )
const override;
836 Qt::PenStyle strokeStyle( State state )
const override;
837 Qt::Alignment titleAlignment()
const override;
838 void updateStoredComponentPosition(
const QPointF &pos,
const QSizeF &size )
override;
842 void deleteComponent()
override;
843 void editComponent()
override;
A mouse event which is the result of a user interaction with a QgsModelGraphicsView.
Base class for the definition of processing parameters.
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...
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call