16 #ifndef QGSPROCESSINGTOOLBOXMODEL_H
17 #define QGSPROCESSINGTOOLBOXMODEL_H
21 #include <QAbstractItemModel>
22 #include <QSortFilterProxyModel>
29 class QgsProcessingToolboxModelGroupNode;
30 class QgsProcessingRecentAlgorithmLog;
40 class GUI_EXPORT QgsProcessingToolboxModelNode :
public QObject
46 if ( sipCpp->inherits(
"QgsProcessingToolboxModelNode" ) )
48 sipType = sipType_QgsProcessingToolboxModelNode;
49 QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
50 if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeProvider )
51 sipType = sipType_QgsProcessingToolboxModelProviderNode;
52 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeGroup )
53 sipType = sipType_QgsProcessingToolboxModelGroupNode;
54 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeAlgorithm )
55 sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
56 else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeRecent )
57 sipType = sipType_QgsProcessingToolboxModelRecentNode;
75 ~QgsProcessingToolboxModelNode()
override;
80 virtual NodeType nodeType()
const = 0;
85 QgsProcessingToolboxModelNode *parent() {
return mParent; }
90 QList<QgsProcessingToolboxModelNode *> children() {
return mChildren; }
96 QList<QgsProcessingToolboxModelNode *> children()
const {
return mChildren; }
SIP_SKIP
102 QgsProcessingToolboxModelNode *takeChild( QgsProcessingToolboxModelNode *node );
109 QgsProcessingToolboxModelGroupNode *getChildGroupNode(
const QString &
id );
115 void addChildNode( QgsProcessingToolboxModelNode *node
SIP_TRANSFER );
120 void deleteChildren();
124 NodeType mNodeType = NodeProvider;
125 QgsProcessingToolboxModelNode *mParent =
nullptr;
126 QList<QgsProcessingToolboxModelNode *> mChildren;
136 class GUI_EXPORT QgsProcessingToolboxModelRecentNode :
public QgsProcessingToolboxModelNode
145 QgsProcessingToolboxModelRecentNode() =
default;
147 NodeType nodeType()
const override {
return NodeRecent; }
157 class GUI_EXPORT QgsProcessingToolboxModelProviderNode :
public QgsProcessingToolboxModelNode
169 NodeType nodeType()
const override {
return NodeProvider; }
179 QString providerId()
const {
return mProviderId; }
189 QPointer< QgsProcessingProvider > mProvider;
199 class GUI_EXPORT QgsProcessingToolboxModelGroupNode :
public QgsProcessingToolboxModelNode
212 QgsProcessingToolboxModelGroupNode(
const QString &
id,
const QString &name );
214 NodeType nodeType()
const override {
return NodeGroup; }
219 QString id()
const {
return mId; }
224 QString name()
const {
return mName; }
238 class GUI_EXPORT QgsProcessingToolboxModelAlgorithmNode :
public QgsProcessingToolboxModelNode
250 NodeType nodeType()
const override {
return NodeAlgorithm; }
283 RoleNodeType = Qt::UserRole,
304 QgsProcessingRecentAlgorithmLog *recentLog =
nullptr );
306 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
307 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
308 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
309 int columnCount(
const QModelIndex & = QModelIndex() )
const override;
310 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
311 QModelIndex parent(
const QModelIndex &index )
const override;
312 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
318 QgsProcessingToolboxModelNode *index2node(
const QModelIndex &index )
const;
324 QModelIndex node2index( QgsProcessingToolboxModelNode *node )
const;
342 QString providerIdForIndex(
const QModelIndex &index )
const;
358 bool isAlgorithm(
const QModelIndex &index )
const;
364 QModelIndex indexForProvider(
const QString &providerId )
const;
369 QModelIndex indexOfParentTreeNode( QgsProcessingToolboxModelNode *parentNode )
const;
376 void recentAlgorithmAdded();
381 void repopulateRecentAlgorithms(
bool resetting =
false );
382 void providerAdded(
const QString &
id );
383 void providerRemoved(
const QString &
id );
387 QPointer< QgsProcessingRegistry > mRegistry;
388 QPointer< QgsProcessingRecentAlgorithmLog > mRecentLog;
390 std::unique_ptr< QgsProcessingToolboxModelGroupNode > mRootNode;
391 QgsProcessingToolboxModelRecentNode *mRecentNode =
nullptr;
399 static bool isTopLevelProvider(
const QString &providerId );
426 FilterToolbox = 1 << 1,
427 FilterModeler = 1 << 2,
428 FilterInPlace = 1 << 3,
429 FilterShowKnownIssues = 1 << 4,
431 Q_DECLARE_FLAGS( Filters, Filter )
447 QgsProcessingRecentAlgorithmLog *recentLog =
nullptr );
470 Filters filters()
const {
return mFilters; }
486 void setFilterString(
const QString &filter );
495 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const override;
496 bool lessThan(
const QModelIndex &left,
const QModelIndex &right )
const override;
497 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
502 Filters mFilters = Filters();
503 QString mFilterString;
504 QPointer<QgsVectorLayer> mInPlaceLayer;
508 #endif // QGSPROCESSINGTOOLBOXMODEL_H