Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add basic drag and drop support in the model designer #60664

Open
wants to merge 46 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
1e9b89f
Add sockets for model parameter
ValentinBuira Dec 30, 2024
7dc5f9d
Add rubber band for link (not used yet)
ValentinBuira Jan 6, 2025
d7e439f
Add basic socket grpahic item
ValentinBuira Jan 13, 2025
7063d33
Add a link took for the sockets
ValentinBuira Jan 13, 2025
452831e
Merge branch 'master' into modeler-drag-and-drop
ValentinBuira Jan 13, 2025
ba7fa61
Cleanup if statement in modeler
ValentinBuira Jan 14, 2025
2a2fd13
Add edge and model component to socket members
ValentinBuira Jan 16, 2025
0617ab8
Don't render end of arrow unless necessary
ValentinBuira Jan 16, 2025
67395c6
Improve link tool
ValentinBuira Jan 27, 2025
673761c
basic detach
ValentinBuira Jan 28, 2025
965d36a
Add model parameter as well
ValentinBuira Jan 28, 2025
59e103e
Add undo/redo to links
ValentinBuira Jan 28, 2025
90b8772
Update image UI image for the move and link tool
ValentinBuira Jan 29, 2025
994665f
convenient method to tell if a socket is input
ValentinBuira Feb 12, 2025
0dee5ad
Add a way to get the parent component graphic item
ValentinBuira Feb 12, 2025
40d18bd
Merge branch 'master' into modeler-drag-and-drop
ValentinBuira Feb 17, 2025
753fac7
Fix crashes because of pointer logic not pointing to the actual object
ValentinBuira Feb 17, 2025
5079b86
Improve socket visual
ValentinBuira Feb 18, 2025
c1b7b15
useless error message
ValentinBuira Feb 18, 2025
d63086f
Fix socket appearing even when collapsed on open model
ValentinBuira Feb 18, 2025
73fa813
Apply style
ValentinBuira Feb 18, 2025
94e3edf
Fix sipify
ValentinBuira Feb 18, 2025
ef795a3
Remove bounding box
ValentinBuira Feb 19, 2025
cc1906f
Fix build warning
ValentinBuira Feb 19, 2025
e40a8c7
cleanup PR
ValentinBuira Feb 19, 2025
362cf49
spelling
ValentinBuira Feb 19, 2025
3598137
Fix crash when connecting from an input to an output socket
ValentinBuira Feb 20, 2025
27ea4c8
Add interactivity on the other sockets during drag
ValentinBuira Feb 20, 2025
377a584
Clean up PR 2 (rename, qdebug...)
ValentinBuira Feb 20, 2025
1861f3f
small review suggestions
ValentinBuira Feb 20, 2025
c8ac3ce
Merge branch 'master' into modeler-drag-and-drop
ValentinBuira Feb 20, 2025
0fcc765
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 20, 2025
12f3911
* Sipify
ValentinBuira Feb 24, 2025
ea799df
Adress simple suggestions
ValentinBuira Feb 24, 2025
32e4188
Revert "Update image UI image for the move and link tool"
ValentinBuira Feb 24, 2025
cfb26d0
* Add docs
ValentinBuira Feb 26, 2025
10ca12a
Move outputDefinitionIndex to QgsProcessingUtils
ValentinBuira Feb 26, 2025
2a97ece
Avoid external emit
ValentinBuira Feb 27, 2025
4b65984
Update docs
ValentinBuira Feb 27, 2025
16b1623
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 27, 2025
afbadd3
Spelling
ValentinBuira Feb 27, 2025
f6697a4
Merge remote-tracking branch 'refs/remotes/origin/modeler-drag-and-dr…
ValentinBuira Feb 27, 2025
b437076
Adress rewiew:
ValentinBuira Mar 3, 2025
13b73b8
Return nullptr instead of crash when looking for a socket in model de…
ValentinBuira Mar 3, 2025
4ad347d
spelling
ValentinBuira Mar 3, 2025
6cfb68f
Fix code indentation
ValentinBuira Mar 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions python/PyQt6/core/auto_additions/qgsprocessingutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
QgsProcessingUtils.tempFolder = staticmethod(QgsProcessingUtils.tempFolder)
QgsProcessingUtils.generateTempFilename = staticmethod(QgsProcessingUtils.generateTempFilename)
QgsProcessingUtils.formatHelpMapAsHtml = staticmethod(QgsProcessingUtils.formatHelpMapAsHtml)
QgsProcessingUtils.outputDefinitionIndex = staticmethod(QgsProcessingUtils.outputDefinitionIndex)
QgsProcessingUtils.convertToCompatibleFormat = staticmethod(QgsProcessingUtils.convertToCompatibleFormat)
QgsProcessingUtils.convertToCompatibleFormatAndLayerName = staticmethod(QgsProcessingUtils.convertToCompatibleFormatAndLayerName)
QgsProcessingUtils.combineFields = staticmethod(QgsProcessingUtils.combineFields)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,12 @@ but not changing the ``basename``.
%Docstring
Returns a HTML formatted version of the help text encoded in a variant ``map`` for
a specified ``algorithm``.
%End

static int outputDefinitionIndex( const QgsProcessingAlgorithm *algorithm, const QString &name ) /HoldGIL/;
%Docstring
Returns the index of the output matching ``name`` for a specified ``algorithm``.
Matching is done in a case-insensitive manner.
%End

static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
Expand Down
1 change: 1 addition & 0 deletions python/PyQt6/gui/auto_additions/qgsmodelarrowitem.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# The following has been generated automatically from src/gui/processing/models/qgsmodelarrowitem.h
QgsModelArrowItem.Circle = QgsModelArrowItem.Marker.Circle
QgsModelArrowItem.ArrowHead = QgsModelArrowItem.Marker.ArrowHead
QgsModelArrowItem.NoMarker = QgsModelArrowItem.Marker.NoMarker
try:
QgsModelArrowItem.__group__ = ['processing', 'models']
except (NameError, AttributeError):
Expand Down
4 changes: 4 additions & 0 deletions python/PyQt6/gui/auto_additions/qgsmodelgraphicitem.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@
QgsModelDesignerFoldButtonGraphicItem.__group__ = ['processing', 'models']
except (NameError, AttributeError):
pass
try:
QgsModelDesignerSocketGraphicItem.__group__ = ['processing', 'models']
except (NameError, AttributeError):
pass
4 changes: 2 additions & 2 deletions python/PyQt6/gui/auto_additions/qgsmodelgraphicsview.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
QgsModelGraphicsView.PasteModeCenter = QgsModelGraphicsView.PasteMode.PasteModeCenter
QgsModelGraphicsView.PasteModeInPlace = QgsModelGraphicsView.PasteMode.PasteModeInPlace
try:
QgsModelGraphicsView.__attribute_docs__ = {'algorithmDropped': 'Emitted when an algorithm is dropped onto the view.\n', 'inputDropped': 'Emitted when an input parameter is dropped onto the view.\n', 'itemFocused': 'Emitted when an ``item`` is "focused" in the view, i.e. it becomes the active\nitem and should have its properties displayed in any designer windows.\n', 'willBeDeleted': 'Emitted in the destructor when the view is about to be deleted,\nbut is still in a perfectly valid state.\n', 'macroCommandStarted': 'Emitted when a macro command containing a group of interactions is started in the view.\n', 'macroCommandEnded': 'Emitted when a macro command containing a group of interactions in the view has ended.\n', 'beginCommand': 'Emitted when an undo command is started in the view.\n', 'endCommand': 'Emitted when an undo command in the view has ended.\n', 'deleteSelectedItems': 'Emitted when the selected items should be deleted;\n'}
QgsModelGraphicsView.__signal_arguments__ = {'algorithmDropped': ['algorithmId: str', 'pos: QPointF'], 'inputDropped': ['inputId: str', 'pos: QPointF'], 'itemFocused': ['item: QgsModelComponentGraphicItem'], 'macroCommandStarted': ['text: str'], 'beginCommand': ['text: str']}
QgsModelGraphicsView.__attribute_docs__ = {'algorithmDropped': 'Emitted when an algorithm is dropped onto the view.\n', 'inputDropped': 'Emitted when an input parameter is dropped onto the view.\n', 'itemFocused': 'Emitted when an ``item`` is "focused" in the view, i.e. it becomes the active\nitem and should have its properties displayed in any designer windows.\n', 'willBeDeleted': 'Emitted in the destructor when the view is about to be deleted,\nbut is still in a perfectly valid state.\n', 'macroCommandStarted': 'Emitted when a macro command containing a group of interactions is started in the view.\n', 'macroCommandEnded': 'Emitted when a macro command containing a group of interactions in the view has ended.\n', 'commandBegun': 'Emitted when an undo command is started in the view.\n', 'commandEnded': 'Emitted when an undo command in the view has ended.\n', 'deleteSelectedItems': 'Emitted when the selected items should be deleted;\n'}
QgsModelGraphicsView.__signal_arguments__ = {'algorithmDropped': ['algorithmId: str', 'pos: QPointF'], 'inputDropped': ['inputId: str', 'pos: QPointF'], 'itemFocused': ['item: QgsModelComponentGraphicItem'], 'macroCommandStarted': ['text: str'], 'commandBegun': ['text: str']}
QgsModelGraphicsView.__group__ = ['processing', 'models']
except (NameError, AttributeError):
pass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ A link arrow item for use in the model designer.
{
Circle,
ArrowHead,
NoMarker
};

QgsModelArrowItem( QgsModelComponentGraphicItem *startItem, Qt::Edge startEdge, int startIndex, bool startIsOutgoing, Marker startMarker, QgsModelComponentGraphicItem *endItem, Qt::Edge endEdge, int endIndex, bool endIsIncoming, Marker endMarker );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Returns the model component associated with this item.
Returns the model associated with this item.
%End


QgsModelGraphicsView *view();
%Docstring
Returns the associated view.
Expand Down Expand Up @@ -183,6 +184,14 @@ Returns the best link point to use for a link originating at a specified ``other
- edge: item edge for calculated best link point
%End

QgsModelDesignerSocketGraphicItem *outSocketAt( int index ) const;
%Docstring
Returns the output socket graphics items at the specified ``index``.

May return ``None`` if no corresponding output socket exists.
%End


virtual void editComment();
%Docstring
Called when the comment attached to the item should be edited.
Expand Down Expand Up @@ -345,6 +354,11 @@ Ownership of ``parameter`` is transferred to the item.

virtual QPicture iconPicture() const;


virtual int linkPointCount( Qt::Edge edge ) const;

virtual QString linkPointText( Qt::Edge edge, int index ) const;

virtual void updateStoredComponentPosition( const QPointF &pos, const QSizeF &size );


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ for the button. The button will be rendered at the specified ``position`` and ``



QPointF getPosition();
%Docstring
Returns the button's position.
%End

void setPosition( const QPointF &position );
%Docstring
Sets the button's ``position``.
Expand Down Expand Up @@ -114,6 +119,65 @@ If ``folded`` is ``True``, the button represents the collapsed state for the ite
};


class QgsModelDesignerSocketGraphicItem : QgsModelDesignerFlatButtonGraphicItem
{
%Docstring(signature="appended")
A socket allowing linking component together

.. warning::

Not stable API

.. versionadded:: 3.42
%End

%TypeHeaderCode
#include "qgsmodelgraphicitem.h"
%End
public:
QgsModelDesignerSocketGraphicItem( QgsModelComponentGraphicItem *parent /TransferThis/, QgsProcessingModelComponent *component, int index, const QPointF &position, Qt::Edge edge, const QSizeF &size = QSizeF( 11, 11 ) );
%Docstring
Constructor for QgsModelDesignerSocketGraphicItem, with the specified ``parent`` item.

The ``index`` argument specifies whether the input or output index of this socket inside the component
And the ``edge`` argument specifies if it's an input socket( Qt.Edge.TopEdge ) or output ( Qt.Edge.BottomEdge )

The sockets will be rendered at the specified ``position``
%End

virtual void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0 );

int index() const;
%Docstring
Returns the index of this socket in either QgsModelDesignerSocketGraphicItem.mInSockets
or QgsModelDesignerSocketGraphicItem.mOutSockets array
%End
Qt::Edge edge() const;
%Docstring
Returns on which edge this socket is:
* Qt.Edge.TopEdge for input socket
* Qt.Edge.BottomEdge for output socket
%End
bool isInput() const;
%Docstring
Returns whether the socket is an input socket or not

Convenient function around mEdge member
%End
QgsProcessingModelComponent *component();
%Docstring
Return the component associated to the socket */
%End
QgsModelComponentGraphicItem *componentItem();
%Docstring
Return the parent GraphicItem (:py:class:`QgsModelComponentGraphicItem`) associated to the socket */
%End
signals:


};


/************************************************************************
* This file has been generated automatically from *
* *
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,16 @@ Returns the topmost component item at a specified ``position``.
QgsModelComponentGraphicItem *groupBoxItem( const QString &uuid );
%Docstring
Returns the graphic item corresponding to the specified group box ``uuid``.
%End

QgsModelChildAlgorithmGraphicItem *childAlgorithmItem( const QString &childId );
%Docstring
Returns the graphic item corresponding to the specified specified child algorithm
%End

QgsModelComponentGraphicItem *parameterItem( const QString &name );
%Docstring
Returns the :py:class:`QgsModelComponentGraphicItem` corresponding to the specified child algorithm
%End

void selectAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,16 @@ Starts a macro command, containing a group of interactions in the view.
Ends a macro command, containing a group of interactions in the view.
%End

void beginCommand( const QString &text );
%Docstring
Starts a single undo command
%End

void endCommand();
%Docstring
Ends a single undo command
%End


enum ClipboardOperation /BaseType=IntEnum/
{
Expand Down Expand Up @@ -162,12 +172,12 @@ Emitted when a macro command containing a group of interactions is started in th
Emitted when a macro command containing a group of interactions in the view has ended.
%End

void beginCommand( const QString &text );
void commandBegun( const QString &text );
%Docstring
Emitted when an undo command is started in the view.
%End

void endCommand();
void commandEnded();
%Docstring
Emitted when an undo command in the view has ended.
%End
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,17 @@ The ``compatibleDataTypes`` list corresponds to the compatible data types
from :py:class:`QgsProcessing`.SourceType.
%End

QList<QgsProcessingModelChildParameterSource> availableSourcesForChild();
%Docstring
HACK : Ugly workaround to expose the compatible sources for a parameter definition ( :py:class:`QgsProcessingParameterDefinition`)
Idealy we should no rely on any UI-related function to get this

see also :py:class:`QgsProcessingModelAlgorithm`.availableSourcesForChild

The available sources are created on widget creation in :py:func:`populateSources`
%End


void setExpressionHelpText( const QString &text );
%Docstring
Set the expected expression format ``text``, which is shown in the expression builder dialog for the widget
Expand Down
1 change: 1 addition & 0 deletions python/core/auto_additions/qgsprocessingutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
QgsProcessingUtils.tempFolder = staticmethod(QgsProcessingUtils.tempFolder)
QgsProcessingUtils.generateTempFilename = staticmethod(QgsProcessingUtils.generateTempFilename)
QgsProcessingUtils.formatHelpMapAsHtml = staticmethod(QgsProcessingUtils.formatHelpMapAsHtml)
QgsProcessingUtils.outputDefinitionIndex = staticmethod(QgsProcessingUtils.outputDefinitionIndex)
QgsProcessingUtils.convertToCompatibleFormat = staticmethod(QgsProcessingUtils.convertToCompatibleFormat)
QgsProcessingUtils.convertToCompatibleFormatAndLayerName = staticmethod(QgsProcessingUtils.convertToCompatibleFormatAndLayerName)
QgsProcessingUtils.combineFields = staticmethod(QgsProcessingUtils.combineFields)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,12 @@ but not changing the ``basename``.
%Docstring
Returns a HTML formatted version of the help text encoded in a variant ``map`` for
a specified ``algorithm``.
%End

static int outputDefinitionIndex( const QgsProcessingAlgorithm *algorithm, const QString &name ) /HoldGIL/;
%Docstring
Returns the index of the output matching ``name`` for a specified ``algorithm``.
Matching is done in a case-insensitive manner.
%End

static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
Expand Down
4 changes: 4 additions & 0 deletions python/gui/auto_additions/qgsmodelgraphicitem.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@
QgsModelDesignerFoldButtonGraphicItem.__group__ = ['processing', 'models']
except (NameError, AttributeError):
pass
try:
QgsModelDesignerSocketGraphicItem.__group__ = ['processing', 'models']
except (NameError, AttributeError):
pass
4 changes: 2 additions & 2 deletions python/gui/auto_additions/qgsmodelgraphicsview.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# The following has been generated automatically from src/gui/processing/models/qgsmodelgraphicsview.h
try:
QgsModelGraphicsView.__attribute_docs__ = {'algorithmDropped': 'Emitted when an algorithm is dropped onto the view.\n', 'inputDropped': 'Emitted when an input parameter is dropped onto the view.\n', 'itemFocused': 'Emitted when an ``item`` is "focused" in the view, i.e. it becomes the active\nitem and should have its properties displayed in any designer windows.\n', 'willBeDeleted': 'Emitted in the destructor when the view is about to be deleted,\nbut is still in a perfectly valid state.\n', 'macroCommandStarted': 'Emitted when a macro command containing a group of interactions is started in the view.\n', 'macroCommandEnded': 'Emitted when a macro command containing a group of interactions in the view has ended.\n', 'beginCommand': 'Emitted when an undo command is started in the view.\n', 'endCommand': 'Emitted when an undo command in the view has ended.\n', 'deleteSelectedItems': 'Emitted when the selected items should be deleted;\n'}
QgsModelGraphicsView.__signal_arguments__ = {'algorithmDropped': ['algorithmId: str', 'pos: QPointF'], 'inputDropped': ['inputId: str', 'pos: QPointF'], 'itemFocused': ['item: QgsModelComponentGraphicItem'], 'macroCommandStarted': ['text: str'], 'beginCommand': ['text: str']}
QgsModelGraphicsView.__attribute_docs__ = {'algorithmDropped': 'Emitted when an algorithm is dropped onto the view.\n', 'inputDropped': 'Emitted when an input parameter is dropped onto the view.\n', 'itemFocused': 'Emitted when an ``item`` is "focused" in the view, i.e. it becomes the active\nitem and should have its properties displayed in any designer windows.\n', 'willBeDeleted': 'Emitted in the destructor when the view is about to be deleted,\nbut is still in a perfectly valid state.\n', 'macroCommandStarted': 'Emitted when a macro command containing a group of interactions is started in the view.\n', 'macroCommandEnded': 'Emitted when a macro command containing a group of interactions in the view has ended.\n', 'commandBegun': 'Emitted when an undo command is started in the view.\n', 'commandEnded': 'Emitted when an undo command in the view has ended.\n', 'deleteSelectedItems': 'Emitted when the selected items should be deleted;\n'}
QgsModelGraphicsView.__signal_arguments__ = {'algorithmDropped': ['algorithmId: str', 'pos: QPointF'], 'inputDropped': ['inputId: str', 'pos: QPointF'], 'itemFocused': ['item: QgsModelComponentGraphicItem'], 'macroCommandStarted': ['text: str'], 'commandBegun': ['text: str']}
QgsModelGraphicsView.__group__ = ['processing', 'models']
except (NameError, AttributeError):
pass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ A link arrow item for use in the model designer.
{
Circle,
ArrowHead,
NoMarker
};

QgsModelArrowItem( QgsModelComponentGraphicItem *startItem, Qt::Edge startEdge, int startIndex, bool startIsOutgoing, Marker startMarker, QgsModelComponentGraphicItem *endItem, Qt::Edge endEdge, int endIndex, bool endIsIncoming, Marker endMarker );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Returns the model component associated with this item.
Returns the model associated with this item.
%End


QgsModelGraphicsView *view();
%Docstring
Returns the associated view.
Expand Down Expand Up @@ -183,6 +184,14 @@ Returns the best link point to use for a link originating at a specified ``other
- edge: item edge for calculated best link point
%End

QgsModelDesignerSocketGraphicItem *outSocketAt( int index ) const;
%Docstring
Returns the output socket graphics items at the specified ``index``.

May return ``None`` if no corresponding output socket exists.
%End


virtual void editComment();
%Docstring
Called when the comment attached to the item should be edited.
Expand Down Expand Up @@ -345,6 +354,11 @@ Ownership of ``parameter`` is transferred to the item.

virtual QPicture iconPicture() const;


virtual int linkPointCount( Qt::Edge edge ) const;

virtual QString linkPointText( Qt::Edge edge, int index ) const;

virtual void updateStoredComponentPosition( const QPointF &pos, const QSizeF &size );


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ for the button. The button will be rendered at the specified ``position`` and ``



QPointF getPosition();
%Docstring
Returns the button's position.
%End

void setPosition( const QPointF &position );
%Docstring
Sets the button's ``position``.
Expand Down Expand Up @@ -114,6 +119,65 @@ If ``folded`` is ``True``, the button represents the collapsed state for the ite
};


class QgsModelDesignerSocketGraphicItem : QgsModelDesignerFlatButtonGraphicItem
{
%Docstring(signature="appended")
A socket allowing linking component together

.. warning::

Not stable API

.. versionadded:: 3.42
%End

%TypeHeaderCode
#include "qgsmodelgraphicitem.h"
%End
public:
QgsModelDesignerSocketGraphicItem( QgsModelComponentGraphicItem *parent /TransferThis/, QgsProcessingModelComponent *component, int index, const QPointF &position, Qt::Edge edge, const QSizeF &size = QSizeF( 11, 11 ) );
%Docstring
Constructor for QgsModelDesignerSocketGraphicItem, with the specified ``parent`` item.

The ``index`` argument specifies whether the input or output index of this socket inside the component
And the ``edge`` argument specifies if it's an input socket( Qt.Edge.TopEdge ) or output ( Qt.Edge.BottomEdge )

The sockets will be rendered at the specified ``position``
%End

virtual void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0 );

int index() const;
%Docstring
Returns the index of this socket in either QgsModelDesignerSocketGraphicItem.mInSockets
or QgsModelDesignerSocketGraphicItem.mOutSockets array
%End
Qt::Edge edge() const;
%Docstring
Returns on which edge this socket is:
* Qt.Edge.TopEdge for input socket
* Qt.Edge.BottomEdge for output socket
%End
bool isInput() const;
%Docstring
Returns whether the socket is an input socket or not

Convenient function around mEdge member
%End
QgsProcessingModelComponent *component();
%Docstring
Return the component associated to the socket */
%End
QgsModelComponentGraphicItem *componentItem();
%Docstring
Return the parent GraphicItem (:py:class:`QgsModelComponentGraphicItem`) associated to the socket */
%End
signals:


};


/************************************************************************
* This file has been generated automatically from *
* *
Expand Down
Loading