16#ifndef QGSPROCESSINGTOOLBOXMODEL_H
17#define QGSPROCESSINGTOOLBOXMODEL_H
22#include <QAbstractItemModel>
23#include <QSortFilterProxyModel>
30class QgsProcessingToolboxModelGroupNode;
31class QgsProcessingRecentAlgorithmLog;
32class QgsProcessingFavoriteAlgorithmManager;
42class GUI_EXPORT QgsProcessingToolboxModelNode :
public QObject
48 if ( sipCpp->inherits(
"QgsProcessingToolboxModelNode" ) )
50 sipType = sipType_QgsProcessingToolboxModelNode;
51 QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
52 if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Provider )
53 sipType = sipType_QgsProcessingToolboxModelProviderNode;
54 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Group )
55 sipType = sipType_QgsProcessingToolboxModelGroupNode;
56 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm )
57 sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
58 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Parameter )
59 sipType = sipType_QgsProcessingToolboxModelParameterNode;
60 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent )
61 sipType = sipType_QgsProcessingToolboxModelRecentNode;
62 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Favorite )
63 sipType = sipType_QgsProcessingToolboxModelFavoriteNode;
64 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::ParameterGroup )
65 sipType = sipType_QgsProcessingToolboxModelParameterGroupNode;
89 ~QgsProcessingToolboxModelNode()
override;
94 virtual NodeType nodeType()
const = 0;
99 QgsProcessingToolboxModelNode *parent() {
return mParent; }
104 QList<QgsProcessingToolboxModelNode *> children() {
return mChildren; }
110 QList<QgsProcessingToolboxModelNode *> children() const
SIP_SKIP
119 QgsProcessingToolboxModelNode *takeChild( QgsProcessingToolboxModelNode *node );
126 QgsProcessingToolboxModelGroupNode *getChildGroupNode(
const QString &
id );
132 void addChildNode( QgsProcessingToolboxModelNode *node
SIP_TRANSFER );
137 void deleteChildren();
140 QgsProcessingToolboxModelNode *mParent =
nullptr;
141 QList<QgsProcessingToolboxModelNode *> mChildren;
150class GUI_EXPORT QgsProcessingToolboxModelRecentNode :
public QgsProcessingToolboxModelNode
155 QgsProcessingToolboxModelRecentNode() =
default;
157 NodeType nodeType()
const override {
return NodeType::Recent; }
166class GUI_EXPORT QgsProcessingToolboxModelFavoriteNode :
public QgsProcessingToolboxModelNode
171 QgsProcessingToolboxModelFavoriteNode() =
default;
173 NodeType nodeType()
const override {
return NodeType::Favorite; }
182class GUI_EXPORT QgsProcessingToolboxModelParameterGroupNode :
public QgsProcessingToolboxModelNode
187 QgsProcessingToolboxModelParameterGroupNode() =
default;
189 NodeType nodeType()
const override {
return NodeType::ParameterGroup; }
198class GUI_EXPORT QgsProcessingToolboxModelProviderNode :
public QgsProcessingToolboxModelNode
209 NodeType nodeType()
const override {
return NodeType::Provider; }
219 QString providerId()
const {
return mProviderId; }
228 QPointer<QgsProcessingProvider> mProvider;
237class GUI_EXPORT QgsProcessingToolboxModelGroupNode :
public QgsProcessingToolboxModelNode
249 QgsProcessingToolboxModelGroupNode(
const QString &
id,
const QString &name );
251 NodeType nodeType()
const override {
return NodeType::Group; }
256 QString id()
const {
return mId; }
261 QString name()
const {
return mName; }
274class GUI_EXPORT QgsProcessingToolboxModelAlgorithmNode :
public QgsProcessingToolboxModelNode
285 NodeType nodeType()
const override {
return NodeType::Algorithm; }
303class GUI_EXPORT QgsProcessingToolboxModelParameterNode :
public QgsProcessingToolboxModelNode
314 NodeType nodeType()
const override {
return NodeType::Parameter; }
379 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
380 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
381 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
382 int columnCount(
const QModelIndex & = QModelIndex() )
const override;
383 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
384 QModelIndex parent(
const QModelIndex &index )
const override;
385 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
391 QgsProcessingToolboxModelNode *index2node(
const QModelIndex &index )
const;
397 QModelIndex node2index( QgsProcessingToolboxModelNode *node )
const;
415 QString providerIdForIndex(
const QModelIndex &index )
const;
431 bool isAlgorithm(
const QModelIndex &index )
const;
449 bool isParameter(
const QModelIndex &index )
const;
455 QModelIndex indexForProvider(
const QString &providerId )
const;
460 QModelIndex indexOfParentTreeNode( QgsProcessingToolboxModelNode *parentNode )
const;
477 void repopulateRecentAlgorithms(
bool resetting =
false );
478 void repopulateFavoriteAlgorithms(
bool resetting =
false );
481 QPointer<QgsProcessingRegistry> mRegistry;
482 QPointer<QgsProcessingRecentAlgorithmLog> mRecentLog;
483 QPointer<QgsProcessingFavoriteAlgorithmManager> mFavoriteManager;
485 std::unique_ptr<QgsProcessingToolboxModelGroupNode> mRootNode;
486 QgsProcessingToolboxModelRecentNode *mRecentNode =
nullptr;
487 QgsProcessingToolboxModelFavoriteNode *mFavoriteNode =
nullptr;
495 static bool isTopLevelProvider(
const QString &providerId );
586 void setFilterString(
const QString &filter );
595 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const override;
596 bool lessThan(
const QModelIndex &left,
const QModelIndex &right )
const override;
597 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
601 Filters mFilters = Filters();
602 QString mFilterString;
603 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)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)