diff --git a/python/plugins/processing/gui/BatchPanel.py b/python/plugins/processing/gui/BatchPanel.py index 67867ecc217..a517e07749e 100644 --- a/python/plugins/processing/gui/BatchPanel.py +++ b/python/plugins/processing/gui/BatchPanel.py @@ -35,7 +35,8 @@ from qgis.PyQt.QtCore import QDir, QFileInfo from qgis.core import (Qgis, QgsApplication, QgsSettings, - QgsProcessingParameterDefinition) + QgsProcessingParameterDefinition, + QgsProcessingModelAlgorithm) from qgis.gui import (QgsProcessingParameterWidgetContext, QgsProcessingContextGenerator) from qgis.utils import iface @@ -273,6 +274,9 @@ class BatchPanel(BASE, WIDGET): widget_context = QgsProcessingParameterWidgetContext() if iface is not None: widget_context.setMapCanvas(iface.mapCanvas()) + if isinstance(self.alg, QgsProcessingModelAlgorithm): + widget_context.setModel(self.alg) + wrapper.setWidgetContext(widget_context) widget = wrapper.createWrappedWidget(context) wrapper.registerProcessingContextGenerator(self.context_generator) diff --git a/python/plugins/processing/gui/ParametersPanel.py b/python/plugins/processing/gui/ParametersPanel.py index 3251d3cb608..a82954097e0 100644 --- a/python/plugins/processing/gui/ParametersPanel.py +++ b/python/plugins/processing/gui/ParametersPanel.py @@ -41,7 +41,8 @@ from qgis.core import (QgsProcessingParameterDefinition, QgsProcessingParameterRasterDestination, QgsProcessingParameterFeatureSink, QgsProcessingParameterVectorDestination, - QgsProject) + QgsProject, + QgsProcessingModelAlgorithm) from qgis.gui import (QgsProcessingContextGenerator, QgsProcessingParameterWidgetContext) from qgis.utils import iface @@ -128,6 +129,8 @@ class ParametersPanel(BASE, WIDGET): widget_context = QgsProcessingParameterWidgetContext() if iface is not None: widget_context.setMapCanvas(iface.mapCanvas()) + if isinstance(self.alg, QgsProcessingModelAlgorithm): + widget_context.setModel(self.alg) # Create widgets and put them in layouts for param in self.alg.parameterDefinitions(): diff --git a/src/gui/processing/qgsprocessingwidgetwrapper.cpp b/src/gui/processing/qgsprocessingwidgetwrapper.cpp index 6eb2191d902..43a6bb3981d 100644 --- a/src/gui/processing/qgsprocessingwidgetwrapper.cpp +++ b/src/gui/processing/qgsprocessingwidgetwrapper.cpp @@ -245,7 +245,7 @@ QgsExpressionContext QgsAbstractProcessingParameterWidgetWrapper::createExpressi if ( mWidgetContext.model()->childAlgorithms().contains( mWidgetContext.modelChildAlgorithmId() ) ) alg = mWidgetContext.model()->childAlgorithm( mWidgetContext.modelChildAlgorithmId() ).algorithm(); - QgsExpressionContextScope *algorithmScope = QgsExpressionContextUtils::processingAlgorithmScope( alg, QVariantMap(), *context ); + QgsExpressionContextScope *algorithmScope = QgsExpressionContextUtils::processingAlgorithmScope( alg ? alg : mParameterDefinition->algorithm(), QVariantMap(), *context ); c << algorithmScope; QgsExpressionContextScope *childScope = mWidgetContext.model()->createExpressionContextScopeForChildAlgorithm( mWidgetContext.modelChildAlgorithmId(), *context, QVariantMap(), QVariantMap() ); c << childScope; @@ -257,6 +257,11 @@ QgsExpressionContext QgsAbstractProcessingParameterWidgetWrapper::createExpressi c.setHighlightedVariables( highlightedVariables ); c.setHighlightedFunctions( highlightedFunctions ); } + else + { + if ( mParameterDefinition->algorithm() ) + c << QgsExpressionContextUtils::processingAlgorithmScope( mParameterDefinition->algorithm(), QVariantMap(), *context ); + } if ( linkedVectorLayer() ) c << QgsExpressionContextUtils::layerScope( linkedVectorLayer() );