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 {
return mChildren; }
117 QgsProcessingToolboxModelNode *takeChild( QgsProcessingToolboxModelNode *node );
124 QgsProcessingToolboxModelGroupNode *getChildGroupNode(
const QString &
id );
130 void addChildNode( QgsProcessingToolboxModelNode *node
SIP_TRANSFER );
135 void deleteChildren();
138 QgsProcessingToolboxModelNode *mParent =
nullptr;
139 QList<QgsProcessingToolboxModelNode *> mChildren;
148class GUI_EXPORT QgsProcessingToolboxModelRecentNode :
public QgsProcessingToolboxModelNode
153 QgsProcessingToolboxModelRecentNode() =
default;
155 NodeType nodeType()
const override {
return NodeType::Recent; }
164class GUI_EXPORT QgsProcessingToolboxModelFavoriteNode :
public QgsProcessingToolboxModelNode
169 QgsProcessingToolboxModelFavoriteNode() =
default;
171 NodeType nodeType()
const override {
return NodeType::Favorite; }
180class GUI_EXPORT QgsProcessingToolboxModelParameterGroupNode :
public QgsProcessingToolboxModelNode
185 QgsProcessingToolboxModelParameterGroupNode() =
default;
187 NodeType nodeType()
const override {
return NodeType::ParameterGroup; }
196class GUI_EXPORT QgsProcessingToolboxModelProviderNode :
public QgsProcessingToolboxModelNode
205 QgsProcessingToolboxModelProviderNode( QgsProcessingProvider *provider );
207 NodeType nodeType()
const override {
return NodeType::Provider; }
212 QgsProcessingProvider *provider();
217 QString providerId()
const {
return mProviderId; }
226 QPointer<QgsProcessingProvider> mProvider;
235class GUI_EXPORT QgsProcessingToolboxModelGroupNode :
public QgsProcessingToolboxModelNode
247 QgsProcessingToolboxModelGroupNode(
const QString &
id,
const QString &name );
249 NodeType nodeType()
const override {
return NodeType::Group; }
254 QString id()
const {
return mId; }
259 QString name()
const {
return mName; }
272class GUI_EXPORT QgsProcessingToolboxModelAlgorithmNode :
public QgsProcessingToolboxModelNode
281 QgsProcessingToolboxModelAlgorithmNode(
const QgsProcessingAlgorithm *
algorithm );
283 NodeType nodeType()
const override {
return NodeType::Algorithm; }
288 const QgsProcessingAlgorithm *
algorithm()
const;
291 const QgsProcessingAlgorithm *mAlgorithm =
nullptr;
301class GUI_EXPORT QgsProcessingToolboxModelParameterNode :
public QgsProcessingToolboxModelNode
310 QgsProcessingToolboxModelParameterNode(
const QgsProcessingParameterType *paramType );
312 NodeType nodeType()
const override {
return NodeType::Parameter; }
317 const QgsProcessingParameterType *parameterType()
const;
320 const QgsProcessingParameterType *mParamType =
nullptr;
378 QgsProcessingRecentAlgorithmLog *recentLog =
nullptr,
379 QgsProcessingFavoriteAlgorithmManager *favoriteManager =
nullptr
382 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
383 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
384 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
385 int columnCount(
const QModelIndex & = QModelIndex() )
const override;
386 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
387 QModelIndex parent(
const QModelIndex &index )
const override;
388 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
394 QgsProcessingToolboxModelNode *index2node(
const QModelIndex &index )
const;
400 QModelIndex node2index( QgsProcessingToolboxModelNode *node )
const;
418 QString providerIdForIndex(
const QModelIndex &index )
const;
434 bool isAlgorithm(
const QModelIndex &index )
const;
452 bool isParameter(
const QModelIndex &index )
const;
458 QModelIndex indexForProvider(
const QString &providerId )
const;
463 QModelIndex indexOfParentTreeNode( QgsProcessingToolboxModelNode *parentNode )
const;
480 void repopulateRecentAlgorithms(
bool resetting =
false );
481 void repopulateFavoriteAlgorithms(
bool resetting =
false );
484 QPointer<QgsProcessingRegistry> mRegistry;
485 QPointer<QgsProcessingRecentAlgorithmLog> mRecentLog;
486 QPointer<QgsProcessingFavoriteAlgorithmManager> mFavoriteManager;
488 std::unique_ptr<QgsProcessingToolboxModelGroupNode> mRootNode;
489 QgsProcessingToolboxModelRecentNode *mRecentNode =
nullptr;
490 QgsProcessingToolboxModelFavoriteNode *mFavoriteNode =
nullptr;
498 static bool isTopLevelProvider(
const QString &providerId );
553 QgsProcessingRecentAlgorithmLog *recentLog =
nullptr,
554 QgsProcessingFavoriteAlgorithmManager *favoriteManager =
nullptr
594 void setFilterString(
const QString &filter );
603 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const override;
604 bool lessThan(
const QModelIndex &left,
const QModelIndex &right )
const override;
605 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
609 Filters mFilters = Filters();
610 QString mFilterString;
611 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)