diff --git a/python/gui/auto_generated/processing/qgsprocessingtoolboxtreeview.sip.in b/python/gui/auto_generated/processing/qgsprocessingtoolboxtreeview.sip.in index e604575a568..94a92fffcc9 100644 --- a/python/gui/auto_generated/processing/qgsprocessingtoolboxtreeview.sip.in +++ b/python/gui/auto_generated/processing/qgsprocessingtoolboxtreeview.sip.in @@ -47,7 +47,7 @@ level group containing recently used algorithms. %Docstring Sets the processing ``registry`` associated with the view. -If \recentLog is specified then it will be used to create a "Recently used" top +If ``recentLog`` is specified then it will be used to create a "Recently used" top level group containing recently used algorithms. %End diff --git a/src/gui/processing/qgsprocessingtoolboxmodel.cpp b/src/gui/processing/qgsprocessingtoolboxmodel.cpp index 229f53be33f..072b0eaaaab 100644 --- a/src/gui/processing/qgsprocessingtoolboxmodel.cpp +++ b/src/gui/processing/qgsprocessingtoolboxmodel.cpp @@ -138,10 +138,13 @@ void QgsProcessingToolboxModel::rebuild() repopulateRecentAlgorithms( true ); } - const QList< QgsProcessingProvider * > providers = mRegistry->providers(); - for ( QgsProcessingProvider *provider : providers ) + if ( mRegistry ) { - addProvider( provider ); + const QList< QgsProcessingProvider * > providers = mRegistry->providers(); + for ( QgsProcessingProvider *provider : providers ) + { + addProvider( provider ); + } } endResetModel(); } @@ -160,6 +163,12 @@ void QgsProcessingToolboxModel::repopulateRecentAlgorithms( bool resetting ) endRemoveRows(); } + if ( !mRegistry ) + { + emit recentAlgorithmAdded(); + return; + } + const QStringList recentAlgIds = mRecentLog->recentAlgorithmIds(); QList< const QgsProcessingAlgorithm * > recentAlgorithms; recentAlgorithms.reserve( recentAlgIds.count() ); @@ -196,6 +205,9 @@ void QgsProcessingToolboxModel::repopulateRecentAlgorithms( bool resetting ) void QgsProcessingToolboxModel::providerAdded( const QString &id ) { + if ( !mRegistry ) + return; + QgsProcessingProvider *provider = mRegistry->providerById( id ); if ( !provider ) return; diff --git a/src/gui/processing/qgsprocessingtoolboxmodel.h b/src/gui/processing/qgsprocessingtoolboxmodel.h index e70a4c8be50..3bec00d412d 100644 --- a/src/gui/processing/qgsprocessingtoolboxmodel.h +++ b/src/gui/processing/qgsprocessingtoolboxmodel.h @@ -20,6 +20,7 @@ #include "qgis_gui.h" #include #include +#include class QgsProcessingRegistry; class QgsProcessingProvider; @@ -375,8 +376,8 @@ class GUI_EXPORT QgsProcessingToolboxModel : public QAbstractItemModel private: - QgsProcessingRegistry *mRegistry = nullptr; - QgsProcessingRecentAlgorithmLog *mRecentLog = nullptr; + QPointer< QgsProcessingRegistry > mRegistry; + QPointer< QgsProcessingRecentAlgorithmLog > mRecentLog; std::unique_ptr< QgsProcessingToolboxModelGroupNode > mRootNode; QgsProcessingToolboxModelRecentNode *mRecentNode = nullptr; diff --git a/src/gui/processing/qgsprocessingtoolboxtreeview.h b/src/gui/processing/qgsprocessingtoolboxtreeview.h index 4f8ecc79255..a3d984a6a66 100644 --- a/src/gui/processing/qgsprocessingtoolboxtreeview.h +++ b/src/gui/processing/qgsprocessingtoolboxtreeview.h @@ -56,7 +56,7 @@ class GUI_EXPORT QgsProcessingToolboxTreeView : public QTreeView /** * Sets the processing \a registry associated with the view. * - * If \recentLog is specified then it will be used to create a "Recently used" top + * If \a recentLog is specified then it will be used to create a "Recently used" top * level group containing recently used algorithms. */ void setRegistry(