diff --git a/src/gui/processing/qgsprocessingtoolboxtreeview.cpp b/src/gui/processing/qgsprocessingtoolboxtreeview.cpp index 9c34bf176cf9..47791dd3e869 100644 --- a/src/gui/processing/qgsprocessingtoolboxtreeview.cpp +++ b/src/gui/processing/qgsprocessingtoolboxtreeview.cpp @@ -31,7 +31,7 @@ QgsProcessingToolboxTreeView::QgsProcessingToolboxTreeView( QWidget *parent, void QgsProcessingToolboxTreeView::setRegistry( QgsProcessingRegistry *registry, QgsProcessingRecentAlgorithmLog *recentLog ) { QgsProcessingToolboxProxyModel *newModel = new QgsProcessingToolboxProxyModel( this, registry, recentLog ); - mToolboxModel = mModel->toolboxModel(); + mToolboxModel = newModel->toolboxModel(); setModel( newModel ); mModel->deleteLater(); mModel = newModel; diff --git a/src/gui/processing/qgsprocessingtoolboxtreeview.h b/src/gui/processing/qgsprocessingtoolboxtreeview.h index 2c213ecfcfc3..fdee7cc0e93f 100644 --- a/src/gui/processing/qgsprocessingtoolboxtreeview.h +++ b/src/gui/processing/qgsprocessingtoolboxtreeview.h @@ -109,6 +109,8 @@ class GUI_EXPORT QgsProcessingToolboxTreeView : public QTreeView */ QModelIndex findFirstVisibleAlgorithm( const QModelIndex &parent ); + friend class TestQgsProcessingModel; + }; ///@endcond diff --git a/tests/src/gui/testqgsprocessingmodel.cpp b/tests/src/gui/testqgsprocessingmodel.cpp index c6bea38d58d1..b7a6ebe5531d 100644 --- a/tests/src/gui/testqgsprocessingmodel.cpp +++ b/tests/src/gui/testqgsprocessingmodel.cpp @@ -154,6 +154,10 @@ void TestQgsProcessingModel::testModel() QVERIFY( !model.providerForIndex( model.index( 0, 0, QModelIndex() ) ) ); QVERIFY( !model.providerForIndex( model.index( 1, 0, QModelIndex() ) ) ); QVERIFY( !model.indexForProvider( nullptr ).isValid() ); + QVERIFY( model.index2node( QModelIndex() ) ); // root node + QCOMPARE( model.index2node( QModelIndex() )->nodeType(), QgsProcessingToolboxModelNode::NodeGroup ); + QVERIFY( model.index2node( model.index( -1, 0, QModelIndex() ) ) ); // root node + QCOMPARE( model.index2node( QModelIndex() ), model.index2node( model.index( -1, 0, QModelIndex() ) ) ); // add a provider DummyProvider *p1 = new DummyProvider( "p1", "provider1" ); @@ -559,6 +563,11 @@ void TestQgsProcessingModel::testView() QgsProcessingRecentAlgorithmLog recentLog; QgsProcessingToolboxTreeView view( nullptr, ®istry, &recentLog ); + // Check view model consistency + QVERIFY( view.mModel ); + QVERIFY( view.mToolboxModel ); + QCOMPARE( view.mModel->toolboxModel(), view.mToolboxModel ); + QVERIFY( !view.algorithmForIndex( QModelIndex() ) ); // add a provider @@ -636,6 +645,13 @@ void TestQgsProcessingModel::testView() // but if it doesn't remove the selected one, that algorithm should not be deselected view.setFilterString( QStringLiteral( "a" ) ); QCOMPARE( view.selectedAlgorithm()->id(), QStringLiteral( "p2:a1" ) ); + + // Check view model consistency after resetting registry + view.setRegistry( ®istry ); + QVERIFY( view.mModel ); + QVERIFY( view.mToolboxModel ); + QCOMPARE( view.mModel->toolboxModel(), view.mToolboxModel ); + } QGSTEST_MAIN( TestQgsProcessingModel )