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;
 
  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;
 
Abstract base class for processing algorithms.
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 data sets.
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)