From 2f5ad6b51febbbbbabe8156054bdea5b2ec34cb5 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 22 Apr 2024 13:46:48 +1000 Subject: [PATCH] Add Run Selected option to right click menu for selected algorithms --- .../models/qgsmodelcomponentgraphicitem.sip.in | 7 +++++++ .../processing/models/qgsmodelgraphicsscene.sip.in | 7 +++++++ .../models/qgsmodelcomponentgraphicitem.sip.in | 7 +++++++ .../processing/models/qgsmodelgraphicsscene.sip.in | 7 +++++++ .../processing/models/qgsmodelcomponentgraphicitem.cpp | 9 +++++++++ src/gui/processing/models/qgsmodelcomponentgraphicitem.h | 7 +++++++ src/gui/processing/models/qgsmodeldesignerdialog.cpp | 1 + src/gui/processing/models/qgsmodelgraphicsscene.cpp | 1 + src/gui/processing/models/qgsmodelgraphicsscene.h | 7 +++++++ 9 files changed, 53 insertions(+) diff --git a/python/PyQt6/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in b/python/PyQt6/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in index f4d4fa7c043..a7e625dab85 100644 --- a/python/PyQt6/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in +++ b/python/PyQt6/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in @@ -407,6 +407,13 @@ Sets the ``results`` obtained for this child algorithm for the last model execut %Docstring Emitted when the user opts to run the model from this child algorithm. +.. versionadded:: 3.38 +%End + + void runSelected(); +%Docstring +Emitted when the user opts to run selected steps from the model. + .. versionadded:: 3.38 %End diff --git a/python/PyQt6/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in b/python/PyQt6/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in index 8bcad0a6d73..94e778a804b 100644 --- a/python/PyQt6/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in +++ b/python/PyQt6/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in @@ -172,6 +172,13 @@ Emitted whenever a component of the model is changed. %Docstring Emitted whenever the selected item changes. If ``None``, no item is selected. +%End + + void runSelected(); +%Docstring +Emitted when the user opts to run selected steps from the model. + +.. versionadded:: 3.38 %End void runFromChild( const QString &childId ); diff --git a/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in b/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in index 1f5f79a0ec9..1c74dcbe860 100644 --- a/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in +++ b/python/gui/auto_generated/processing/models/qgsmodelcomponentgraphicitem.sip.in @@ -407,6 +407,13 @@ Sets the ``results`` obtained for this child algorithm for the last model execut %Docstring Emitted when the user opts to run the model from this child algorithm. +.. versionadded:: 3.38 +%End + + void runSelected(); +%Docstring +Emitted when the user opts to run selected steps from the model. + .. versionadded:: 3.38 %End diff --git a/python/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in b/python/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in index bf93297c016..eeba83f625e 100644 --- a/python/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in +++ b/python/gui/auto_generated/processing/models/qgsmodelgraphicsscene.sip.in @@ -172,6 +172,13 @@ Emitted whenever a component of the model is changed. %Docstring Emitted whenever the selected item changes. If ``None``, no item is selected. +%End + + void runSelected(); +%Docstring +Emitted when the user opts to run selected steps from the model. + +.. versionadded:: 3.38 %End void runFromChild( const QString &childId ); diff --git a/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp b/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp index e52c81a63cf..a5356caebe8 100644 --- a/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp +++ b/src/gui/processing/models/qgsmodelcomponentgraphicitem.cpp @@ -870,9 +870,18 @@ QgsModelChildAlgorithmGraphicItem::QgsModelChildAlgorithmGraphicItem( QgsProcess void QgsModelChildAlgorithmGraphicItem::contextMenuEvent( QGraphicsSceneContextMenuEvent *event ) { QMenu *popupmenu = new QMenu( event->widget() ); + + if ( isSelected() ) + { + QAction *runSelectedStepsAction = popupmenu->addAction( QObject::tr( "Run Selected Steps…" ) ); + runSelectedStepsAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionStart.svg" ) ) ); + connect( runSelectedStepsAction, &QAction::triggered, this, &QgsModelChildAlgorithmGraphicItem::runSelected ); + } + QAction *runFromHereAction = popupmenu->addAction( QObject::tr( "Run from Here…" ) ); runFromHereAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionStart.svg" ) ) ); connect( runFromHereAction, &QAction::triggered, this, &QgsModelChildAlgorithmGraphicItem::runFromHere ); + popupmenu->addSeparator(); QAction *removeAction = popupmenu->addAction( QObject::tr( "Remove" ) ); diff --git a/src/gui/processing/models/qgsmodelcomponentgraphicitem.h b/src/gui/processing/models/qgsmodelcomponentgraphicitem.h index d96ee0ade28..9ba6aa585d3 100644 --- a/src/gui/processing/models/qgsmodelcomponentgraphicitem.h +++ b/src/gui/processing/models/qgsmodelcomponentgraphicitem.h @@ -475,6 +475,13 @@ class GUI_EXPORT QgsModelChildAlgorithmGraphicItem : public QgsModelComponentGra */ void runFromHere(); + /** + * Emitted when the user opts to run selected steps from the model. + * + * \since QGIS 3.38 + */ + void runSelected(); + /** * Emitted when the user opts to view previous results from this child algorithm. * diff --git a/src/gui/processing/models/qgsmodeldesignerdialog.cpp b/src/gui/processing/models/qgsmodeldesignerdialog.cpp index ffa2d4304ed..ca4ba4ab42d 100644 --- a/src/gui/processing/models/qgsmodeldesignerdialog.cpp +++ b/src/gui/processing/models/qgsmodeldesignerdialog.cpp @@ -514,6 +514,7 @@ void QgsModelDesignerDialog::setModelScene( QgsModelGraphicsScene *scene ) connect( mScene, &QgsModelGraphicsScene::componentAboutToChange, this, [ = ]( const QString & description, int id ) { beginUndoCommand( description, id ); } ); connect( mScene, &QgsModelGraphicsScene::componentChanged, this, [ = ] { endUndoCommand(); } ); connect( mScene, &QgsModelGraphicsScene::runFromChild, this, &QgsModelDesignerDialog::runFromChild ); + connect( mScene, &QgsModelGraphicsScene::runSelected, this, &QgsModelDesignerDialog::runSelectedSteps ); connect( mScene, &QgsModelGraphicsScene::showChildAlgorithmOutputs, this, &QgsModelDesignerDialog::showChildAlgorithmOutputs ); connect( mScene, &QgsModelGraphicsScene::showChildAlgorithmLog, this, &QgsModelDesignerDialog::showChildAlgorithmLog ); diff --git a/src/gui/processing/models/qgsmodelgraphicsscene.cpp b/src/gui/processing/models/qgsmodelgraphicsscene.cpp index 4a915859905..87deb39e79a 100644 --- a/src/gui/processing/models/qgsmodelgraphicsscene.cpp +++ b/src/gui/processing/models/qgsmodelgraphicsscene.cpp @@ -149,6 +149,7 @@ void QgsModelGraphicsScene::createItems( QgsProcessingModelAlgorithm *model, Qgs { emit runFromChild( childId ); } ); + connect( item, &QgsModelChildAlgorithmGraphicItem::runSelected, this, &QgsModelGraphicsScene::runSelected ); connect( item, &QgsModelChildAlgorithmGraphicItem::showPreviousResults, this, [this, childId] { emit showChildAlgorithmOutputs( childId ); diff --git a/src/gui/processing/models/qgsmodelgraphicsscene.h b/src/gui/processing/models/qgsmodelgraphicsscene.h index 8dab3ac9e7e..ed6ace85827 100644 --- a/src/gui/processing/models/qgsmodelgraphicsscene.h +++ b/src/gui/processing/models/qgsmodelgraphicsscene.h @@ -187,6 +187,13 @@ class GUI_EXPORT QgsModelGraphicsScene : public QGraphicsScene */ void selectedItemChanged( QgsModelComponentGraphicItem *selected ); + /** + * Emitted when the user opts to run selected steps from the model. + * + * \since QGIS 3.38 + */ + void runSelected(); + /** * Emitted when the user opts to run the part of the model starting from the specified child algorithm. *