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)