Skip to content

Commit 5a85e20

Browse files
committed
[processing] Expose additional expression variables for parameters in GUI
1 parent d3016d7 commit 5a85e20

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/gui/processing/qgsprocessingwidgetwrapper.cpp

+17-1
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,23 @@ void QgsAbstractProcessingParameterWidgetWrapper::postInitialize( const QList<Qg
235235

236236
QgsExpressionContext QgsAbstractProcessingParameterWidgetWrapper::createExpressionContext() const
237237
{
238-
return QgsProcessingGuiUtils::createExpressionContext( mProcessingContextGenerator, mWidgetContext, mParameterDefinition ? mParameterDefinition->algorithm() : nullptr, linkedVectorLayer() );
238+
QgsExpressionContext context = QgsProcessingGuiUtils::createExpressionContext( mProcessingContextGenerator, mWidgetContext, mParameterDefinition ? mParameterDefinition->algorithm() : nullptr, linkedVectorLayer() );
239+
if ( mParameterDefinition && !mParameterDefinition->additionalExpressionContextVariables().isEmpty() )
240+
{
241+
std::unique_ptr< QgsExpressionContextScope > paramScope = qgis::make_unique< QgsExpressionContextScope >();
242+
const QStringList additional = mParameterDefinition->additionalExpressionContextVariables();
243+
for ( const QString &var : additional )
244+
{
245+
paramScope->setVariable( var, QVariant() );
246+
}
247+
context.appendScope( paramScope.release() );
248+
249+
// we always highlight additional variables for visibility
250+
QStringList highlighted = context.highlightedVariables();
251+
highlighted.append( additional );
252+
context.setHighlightedVariables( highlighted );
253+
}
254+
return context;
239255
}
240256

241257
void QgsAbstractProcessingParameterWidgetWrapper::setDialog( QDialog * )

tests/src/gui/testprocessinggui.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -360,9 +360,15 @@ void TestProcessingGui::testWrapperFactoryRegistry()
360360
void TestProcessingGui::testWrapperGeneral()
361361
{
362362
TestParamType param( QStringLiteral( "boolean" ), QStringLiteral( "bool" ) );
363+
param.setAdditionalExpressionContextVariables( QStringList() << QStringLiteral( "a" ) << QStringLiteral( "b" ) );
363364
QgsProcessingBooleanWidgetWrapper wrapper( &param );
364365
QCOMPARE( wrapper.type(), QgsProcessingGui::Standard );
365366

367+
QgsExpressionContext expContext = wrapper.createExpressionContext();
368+
QVERIFY( expContext.hasVariable( QStringLiteral( "a" ) ) );
369+
QVERIFY( expContext.hasVariable( QStringLiteral( "b" ) ) );
370+
QCOMPARE( expContext.highlightedVariables(), QStringList() << QStringLiteral( "a" ) << QStringLiteral( "b" ) );
371+
366372
QgsProcessingBooleanWidgetWrapper wrapper2( &param, QgsProcessingGui::Batch );
367373
QCOMPARE( wrapper2.type(), QgsProcessingGui::Batch );
368374
QCOMPARE( wrapper2.parameterDefinition()->name(), QStringLiteral( "bool" ) );

0 commit comments

Comments
 (0)