Fix some missing expression context variables in processing expression based widgets

This commit is contained in:
Nyall Dawson 2019-02-12 14:33:33 +10:00
parent e533a4078c
commit 60a1d6306f
3 changed files with 15 additions and 3 deletions

View File

@ -35,7 +35,8 @@ from qgis.PyQt.QtCore import QDir, QFileInfo
from qgis.core import (Qgis, from qgis.core import (Qgis,
QgsApplication, QgsApplication,
QgsSettings, QgsSettings,
QgsProcessingParameterDefinition) QgsProcessingParameterDefinition,
QgsProcessingModelAlgorithm)
from qgis.gui import (QgsProcessingParameterWidgetContext, from qgis.gui import (QgsProcessingParameterWidgetContext,
QgsProcessingContextGenerator) QgsProcessingContextGenerator)
from qgis.utils import iface from qgis.utils import iface
@ -273,6 +274,9 @@ class BatchPanel(BASE, WIDGET):
widget_context = QgsProcessingParameterWidgetContext() widget_context = QgsProcessingParameterWidgetContext()
if iface is not None: if iface is not None:
widget_context.setMapCanvas(iface.mapCanvas()) widget_context.setMapCanvas(iface.mapCanvas())
if isinstance(self.alg, QgsProcessingModelAlgorithm):
widget_context.setModel(self.alg)
wrapper.setWidgetContext(widget_context) wrapper.setWidgetContext(widget_context)
widget = wrapper.createWrappedWidget(context) widget = wrapper.createWrappedWidget(context)
wrapper.registerProcessingContextGenerator(self.context_generator) wrapper.registerProcessingContextGenerator(self.context_generator)

View File

@ -41,7 +41,8 @@ from qgis.core import (QgsProcessingParameterDefinition,
QgsProcessingParameterRasterDestination, QgsProcessingParameterRasterDestination,
QgsProcessingParameterFeatureSink, QgsProcessingParameterFeatureSink,
QgsProcessingParameterVectorDestination, QgsProcessingParameterVectorDestination,
QgsProject) QgsProject,
QgsProcessingModelAlgorithm)
from qgis.gui import (QgsProcessingContextGenerator, from qgis.gui import (QgsProcessingContextGenerator,
QgsProcessingParameterWidgetContext) QgsProcessingParameterWidgetContext)
from qgis.utils import iface from qgis.utils import iface
@ -128,6 +129,8 @@ class ParametersPanel(BASE, WIDGET):
widget_context = QgsProcessingParameterWidgetContext() widget_context = QgsProcessingParameterWidgetContext()
if iface is not None: if iface is not None:
widget_context.setMapCanvas(iface.mapCanvas()) widget_context.setMapCanvas(iface.mapCanvas())
if isinstance(self.alg, QgsProcessingModelAlgorithm):
widget_context.setModel(self.alg)
# Create widgets and put them in layouts # Create widgets and put them in layouts
for param in self.alg.parameterDefinitions(): for param in self.alg.parameterDefinitions():

View File

@ -245,7 +245,7 @@ QgsExpressionContext QgsAbstractProcessingParameterWidgetWrapper::createExpressi
if ( mWidgetContext.model()->childAlgorithms().contains( mWidgetContext.modelChildAlgorithmId() ) ) if ( mWidgetContext.model()->childAlgorithms().contains( mWidgetContext.modelChildAlgorithmId() ) )
alg = mWidgetContext.model()->childAlgorithm( mWidgetContext.modelChildAlgorithmId() ).algorithm(); 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; c << algorithmScope;
QgsExpressionContextScope *childScope = mWidgetContext.model()->createExpressionContextScopeForChildAlgorithm( mWidgetContext.modelChildAlgorithmId(), *context, QVariantMap(), QVariantMap() ); QgsExpressionContextScope *childScope = mWidgetContext.model()->createExpressionContextScopeForChildAlgorithm( mWidgetContext.modelChildAlgorithmId(), *context, QVariantMap(), QVariantMap() );
c << childScope; c << childScope;
@ -257,6 +257,11 @@ QgsExpressionContext QgsAbstractProcessingParameterWidgetWrapper::createExpressi
c.setHighlightedVariables( highlightedVariables ); c.setHighlightedVariables( highlightedVariables );
c.setHighlightedFunctions( highlightedFunctions ); c.setHighlightedFunctions( highlightedFunctions );
} }
else
{
if ( mParameterDefinition->algorithm() )
c << QgsExpressionContextUtils::processingAlgorithmScope( mParameterDefinition->algorithm(), QVariantMap(), *context );
}
if ( linkedVectorLayer() ) if ( linkedVectorLayer() )
c << QgsExpressionContextUtils::layerScope( linkedVectorLayer() ); c << QgsExpressionContextUtils::layerScope( linkedVectorLayer() );