16#ifndef QGSPROCESSINGTOOLBOXMODEL_H
17#define QGSPROCESSINGTOOLBOXMODEL_H
23#include <QAbstractItemModel>
25#include <QSortFilterProxyModel>
31class QgsProcessingToolboxModelGroupNode;
32class QgsProcessingRecentAlgorithmLog;
33class QgsProcessingFavoriteAlgorithmManager;
43class GUI_EXPORT QgsProcessingToolboxModelNode :
public QObject
49 if ( sipCpp->inherits(
"QgsProcessingToolboxModelNode" ) )
51 sipType = sipType_QgsProcessingToolboxModelNode;
52 QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
53 if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Provider )
54 sipType = sipType_QgsProcessingToolboxModelProviderNode;
55 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Group )
56 sipType = sipType_QgsProcessingToolboxModelGroupNode;
57 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm )
58 sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
59 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Parameter )
60 sipType = sipType_QgsProcessingToolboxModelParameterNode;
61 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent )
62 sipType = sipType_QgsProcessingToolboxModelRecentNode;
63 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Favorite )
64 sipType = sipType_QgsProcessingToolboxModelFavoriteNode;
65 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::ParameterGroup )
66 sipType = sipType_QgsProcessingToolboxModelParameterGroupNode;
90 ~QgsProcessingToolboxModelNode()
override;
95 virtual NodeType nodeType()
const = 0;
100 QgsProcessingToolboxModelNode *parent() {
return mParent; }
105 QList<QgsProcessingToolboxModelNode *> children() {
return mChildren; }
111 QList<QgsProcessingToolboxModelNode *> children() const
SIP_SKIP
120 QgsProcessingToolboxModelNode *takeChild( QgsProcessingToolboxModelNode *node );
127 QgsProcessingToolboxModelGroupNode *getChildGroupNode(
const QString &
id );
133 void addChildNode( QgsProcessingToolboxModelNode *node
SIP_TRANSFER );
138 void deleteChildren();
141 QgsProcessingToolboxModelNode *mParent =
nullptr;
142 QList<QgsProcessingToolboxModelNode *> mChildren;
151class GUI_EXPORT QgsProcessingToolboxModelRecentNode :
public QgsProcessingToolboxModelNode
156 QgsProcessingToolboxModelRecentNode() =
default;
158 NodeType nodeType()
const override {
return NodeType::Recent; }
167class GUI_EXPORT QgsProcessingToolboxModelFavoriteNode :
public QgsProcessingToolboxModelNode
172 QgsProcessingToolboxModelFavoriteNode() =
default;
174 NodeType nodeType()
const override {
return NodeType::Favorite; }
183class GUI_EXPORT QgsProcessingToolboxModelParameterGroupNode :
public QgsProcessingToolboxModelNode
188 QgsProcessingToolboxModelParameterGroupNode() =
default;
190 NodeType nodeType()
const override {
return NodeType::ParameterGroup; }
199class GUI_EXPORT QgsProcessingToolboxModelProviderNode :
public QgsProcessingToolboxModelNode
209 QgsProcessingToolboxModelProviderNode( QgsProcessingProvider *provider );
211 NodeType nodeType()
const override {
return NodeType::Provider; }
216 QgsProcessingProvider *provider();
221 QString providerId()
const {
return mProviderId; }
230 QPointer<QgsProcessingProvider> mProvider;
239class GUI_EXPORT QgsProcessingToolboxModelGroupNode :
public QgsProcessingToolboxModelNode
252 QgsProcessingToolboxModelGroupNode(
const QString &
id,
const QString &name );
254 NodeType nodeType()
const override {
return NodeType::Group; }
259 QString id()
const {
return mId; }
264 QString name()
const {
return mName; }
277class GUI_EXPORT QgsProcessingToolboxModelAlgorithmNode :
public QgsProcessingToolboxModelNode
287 QgsProcessingToolboxModelAlgorithmNode(
const QgsProcessingAlgorithm *
algorithm );
289 NodeType nodeType()
const override {
return NodeType::Algorithm; }
294 const QgsProcessingAlgorithm *
algorithm()
const;
297 const QgsProcessingAlgorithm *mAlgorithm =
nullptr;
307class GUI_EXPORT QgsProcessingToolboxModelParameterNode :
public QgsProcessingToolboxModelNode
317 QgsProcessingToolboxModelParameterNode(
const QgsProcessingParameterType *paramType );
319 NodeType nodeType()
const override {
return NodeType::Parameter; }
324 const QgsProcessingParameterType *parameterType()
const;
327 const QgsProcessingParameterType *mParamType =
nullptr;
384 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
385 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
386 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
387 int columnCount(
const QModelIndex & = QModelIndex() )
const override;
388 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
389 QModelIndex parent(
const QModelIndex &index )
const override;
390 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
396 QgsProcessingToolboxModelNode *index2node(
const QModelIndex &index )
const;
402 QModelIndex node2index( QgsProcessingToolboxModelNode *node )
const;
420 QString providerIdForIndex(
const QModelIndex &index )
const;
436 bool isAlgorithm(
const QModelIndex &index )
const;
454 bool isParameter(
const QModelIndex &index )
const;
460 QModelIndex indexForProvider(
const QString &providerId )
const;
465 QModelIndex indexOfParentTreeNode( QgsProcessingToolboxModelNode *parentNode )
const;
482 void repopulateRecentAlgorithms(
bool resetting =
false );
483 void repopulateFavoriteAlgorithms(
bool resetting =
false );
486 QPointer<QgsProcessingRegistry> mRegistry;
487 QPointer<QgsProcessingRecentAlgorithmLog> mRecentLog;
488 QPointer<QgsProcessingFavoriteAlgorithmManager> mFavoriteManager;
490 std::unique_ptr<QgsProcessingToolboxModelGroupNode> mRootNode;
491 QgsProcessingToolboxModelRecentNode *mRecentNode =
nullptr;
492 QgsProcessingToolboxModelFavoriteNode *mFavoriteNode =
nullptr;
500 static bool isTopLevelProvider(
const QString &providerId );
591 void setFilterString(
const QString &filter );
600 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const override;
601 bool lessThan(
const QModelIndex &left,
const QModelIndex &right )
const override;
602 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
606 Filters mFilters = Filters();
607 QString mFilterString;
608 QPointer<QgsVectorLayer> mInPlaceLayer;
Abstract base class for processing algorithms.
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)