16#ifndef QGSPROCESSINGTOOLBOXMODEL_H
17#define QGSPROCESSINGTOOLBOXMODEL_H
24#include <QAbstractItemModel>
26#include <QSortFilterProxyModel>
32class QgsProcessingToolboxModelGroupNode;
33class QgsProcessingRecentAlgorithmLog;
34class QgsProcessingFavoriteAlgorithmManager;
44class GUI_EXPORT QgsProcessingToolboxModelNode :
public QObject
50 if ( sipCpp->inherits(
"QgsProcessingToolboxModelNode" ) )
52 sipType = sipType_QgsProcessingToolboxModelNode;
53 QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
54 if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Provider )
55 sipType = sipType_QgsProcessingToolboxModelProviderNode;
56 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Group )
57 sipType = sipType_QgsProcessingToolboxModelGroupNode;
58 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm )
59 sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
60 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Parameter )
61 sipType = sipType_QgsProcessingToolboxModelParameterNode;
62 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent )
63 sipType = sipType_QgsProcessingToolboxModelRecentNode;
64 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Favorite )
65 sipType = sipType_QgsProcessingToolboxModelFavoriteNode;
66 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::ParameterGroup )
67 sipType = sipType_QgsProcessingToolboxModelParameterGroupNode;
91 ~QgsProcessingToolboxModelNode()
override;
96 virtual NodeType nodeType()
const = 0;
101 QgsProcessingToolboxModelNode *parent() {
return mParent; }
106 QList<QgsProcessingToolboxModelNode *> children() {
return mChildren; }
112 QList<QgsProcessingToolboxModelNode *> children() const
SIP_SKIP {
return mChildren; }
118 QgsProcessingToolboxModelNode *takeChild( QgsProcessingToolboxModelNode *node );
125 QgsProcessingToolboxModelGroupNode *getChildGroupNode(
const QString &
id );
131 void addChildNode( QgsProcessingToolboxModelNode *node
SIP_TRANSFER );
136 void deleteChildren();
139 QgsProcessingToolboxModelNode *mParent =
nullptr;
140 QList<QgsProcessingToolboxModelNode *> mChildren;
149class GUI_EXPORT QgsProcessingToolboxModelRecentNode :
public QgsProcessingToolboxModelNode
154 QgsProcessingToolboxModelRecentNode() =
default;
156 NodeType nodeType()
const override {
return NodeType::Recent; }
165class GUI_EXPORT QgsProcessingToolboxModelFavoriteNode :
public QgsProcessingToolboxModelNode
170 QgsProcessingToolboxModelFavoriteNode() =
default;
172 NodeType nodeType()
const override {
return NodeType::Favorite; }
181class GUI_EXPORT QgsProcessingToolboxModelParameterGroupNode :
public QgsProcessingToolboxModelNode
186 QgsProcessingToolboxModelParameterGroupNode() =
default;
188 NodeType nodeType()
const override {
return NodeType::ParameterGroup; }
197class GUI_EXPORT QgsProcessingToolboxModelProviderNode :
public QgsProcessingToolboxModelNode
206 QgsProcessingToolboxModelProviderNode( QgsProcessingProvider *provider );
208 NodeType nodeType()
const override {
return NodeType::Provider; }
213 QgsProcessingProvider *provider();
218 QString providerId()
const {
return mProviderId; }
227 QPointer<QgsProcessingProvider> mProvider;
236class GUI_EXPORT QgsProcessingToolboxModelGroupNode :
public QgsProcessingToolboxModelNode
248 QgsProcessingToolboxModelGroupNode(
const QString &
id,
const QString &name );
250 NodeType nodeType()
const override {
return NodeType::Group; }
255 QString id()
const {
return mId; }
260 QString name()
const {
return mName; }
273class GUI_EXPORT QgsProcessingToolboxModelAlgorithmNode :
public QgsProcessingToolboxModelNode
282 QgsProcessingToolboxModelAlgorithmNode(
const QgsProcessingAlgorithm *
algorithm );
284 NodeType nodeType()
const override {
return NodeType::Algorithm; }
289 const QgsProcessingAlgorithm *
algorithm()
const;
292 const QgsProcessingAlgorithm *mAlgorithm =
nullptr;
302class GUI_EXPORT QgsProcessingToolboxModelParameterNode :
public QgsProcessingToolboxModelNode
311 QgsProcessingToolboxModelParameterNode(
const QgsProcessingParameterType *paramType );
313 NodeType nodeType()
const override {
return NodeType::Parameter; }
318 const QgsProcessingParameterType *parameterType()
const;
321 const QgsProcessingParameterType *mParamType =
nullptr;
379 QgsProcessingRecentAlgorithmLog *recentLog =
nullptr,
380 QgsProcessingFavoriteAlgorithmManager *favoriteManager =
nullptr
383 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
384 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
385 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
386 int columnCount(
const QModelIndex & = QModelIndex() )
const override;
387 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
388 QModelIndex parent(
const QModelIndex &index )
const override;
389 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
395 QgsProcessingToolboxModelNode *index2node(
const QModelIndex &index )
const;
401 QModelIndex node2index( QgsProcessingToolboxModelNode *node )
const;
419 QString providerIdForIndex(
const QModelIndex &index )
const;
435 bool isAlgorithm(
const QModelIndex &index )
const;
453 bool isParameter(
const QModelIndex &index )
const;
459 QModelIndex indexForProvider(
const QString &providerId )
const;
464 QModelIndex indexOfParentTreeNode( QgsProcessingToolboxModelNode *parentNode )
const;
481 void repopulateRecentAlgorithms(
bool resetting =
false );
482 void repopulateFavoriteAlgorithms(
bool resetting =
false );
485 QPointer<QgsProcessingRegistry> mRegistry;
486 QPointer<QgsProcessingRecentAlgorithmLog> mRecentLog;
487 QPointer<QgsProcessingFavoriteAlgorithmManager> mFavoriteManager;
489 std::unique_ptr<QgsProcessingToolboxModelGroupNode> mRootNode;
490 QgsProcessingToolboxModelRecentNode *mRecentNode =
nullptr;
491 QgsProcessingToolboxModelFavoriteNode *mFavoriteNode =
nullptr;
499 static bool isTopLevelProvider(
const QString &providerId );
560 QgsProcessingRecentAlgorithmLog *recentLog =
nullptr,
561 QgsProcessingFavoriteAlgorithmManager *favoriteManager =
nullptr
601 void setFilterString(
const QString &filter );
638 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const override;
639 bool lessThan(
const QModelIndex &left,
const QModelIndex &right )
const override;
640 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
644 Filters mFilters = Filters();
645 QString mFilterString;
646 QPointer<QgsVectorLayer> mInPlaceLayer;
653 std::unique_ptr<QgsProcessingOutputDefinition> mFilterOutputDefinition;
660 std::unique_ptr<QgsProcessingParameterDefinition> mFilterParameterDefinition;
Abstract base class for processing algorithms.
Base class for the definition of processing outputs.
Base class for the definition of processing parameters.
Makes metadata of processing parameters available.
Abstract base class for processing providers.
Registry for various processing components, including providers, algorithms and various parameters an...
Represents a vector layer which manages a vector based dataset.
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
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
#define SIP_ENUM_BASETYPE(type)
#define SIP_MONKEYPATCH_SCOPEENUM_UNNEST(OUTSIDE_CLASS, FORMERNAME)
#define SIP_MONKEYPATCH_COMPAT_NAME(FORMERNAME)