Skip to content

Commit d3bd137

Browse files
committed
[processing] Fix incorrect parameter definition used when evaluating
parent layer parameter in the gui for dynamic properties data defined buttons
1 parent 2a917f4 commit d3bd137

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

src/gui/processing/qgsprocessingwidgetwrapper.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ void QgsAbstractProcessingParameterWidgetWrapper::postInitialize( const QList<Qg
200200
{
201201
if ( wrapper->parameterDefinition()->name() == parameterDefinition()->dynamicLayerParameterName() )
202202
{
203-
setDynamicParentLayerParameter( wrapper->parameterValue() );
203+
setDynamicParentLayerParameter( wrapper );
204204
connect( wrapper, &QgsAbstractProcessingParameterWidgetWrapper::widgetValueHasChanged, this, &QgsAbstractProcessingParameterWidgetWrapper::parentLayerChanged );
205205
break;
206206
}
@@ -259,11 +259,11 @@ void QgsAbstractProcessingParameterWidgetWrapper::parentLayerChanged( QgsAbstrac
259259
{
260260
if ( wrapper )
261261
{
262-
setDynamicParentLayerParameter( wrapper->parameterValue() );
262+
setDynamicParentLayerParameter( wrapper );
263263
}
264264
}
265265

266-
void QgsAbstractProcessingParameterWidgetWrapper::setDynamicParentLayerParameter( const QVariant &value )
266+
void QgsAbstractProcessingParameterWidgetWrapper::setDynamicParentLayerParameter( const QgsAbstractProcessingParameterWidgetWrapper *parentWrapper )
267267
{
268268
if ( mPropertyButton )
269269
{
@@ -279,7 +279,7 @@ void QgsAbstractProcessingParameterWidgetWrapper::setDynamicParentLayerParameter
279279
context = tmpContext.get();
280280
}
281281

282-
QgsVectorLayer *layer = QgsProcessingParameters::parameterAsVectorLayer( parameterDefinition(), value, *context );
282+
QgsVectorLayer *layer = QgsProcessingParameters::parameterAsVectorLayer( parentWrapper->parameterDefinition(), parentWrapper->parameterValue(), *context );
283283
if ( !layer )
284284
{
285285
mPropertyButton->setVectorLayer( nullptr );

src/gui/processing/qgsprocessingwidgetwrapper.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ class GUI_EXPORT QgsAbstractProcessingParameterWidgetWrapper : public QObject, p
334334
QgsProcessingGui::WidgetType mType = QgsProcessingGui::Standard;
335335
const QgsProcessingParameterDefinition *mParameterDefinition = nullptr;
336336

337-
void setDynamicParentLayerParameter( const QVariant &value );
337+
void setDynamicParentLayerParameter( const QgsAbstractProcessingParameterWidgetWrapper *parentWrapper );
338338

339339
QPointer< QWidget > mWidget;
340340
QPointer< QgsPropertyOverrideButton > mPropertyButton;

tests/src/gui/testprocessinggui.cpp

+26-5
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,20 @@ class TestProcessingContextGenerator : public QgsProcessingContextGenerator
408408
QgsProcessingContext &mContext;
409409
};
410410

411+
412+
class TestLayerWrapper : public QgsAbstractProcessingParameterWidgetWrapper
413+
{
414+
public:
415+
TestLayerWrapper( const QgsProcessingParameterDefinition *parameter = nullptr )
416+
: QgsAbstractProcessingParameterWidgetWrapper( parameter )
417+
{}
418+
QWidget *createWidget() override { return nullptr; }
419+
void setWidgetValue( const QVariant &val, QgsProcessingContext & ) override { v = val;}
420+
QVariant widgetValue() const override { return v; }
421+
422+
QVariant v;
423+
};
424+
411425
void TestProcessingGui::testWrapperDynamic()
412426
{
413427
const QgsProcessingAlgorithm *centroidAlg = QgsApplication::processingRegistry()->algorithmById( QStringLiteral( "native:centroids" ) );
@@ -441,15 +455,20 @@ void TestProcessingGui::testWrapperDynamic()
441455
QgsVectorLayer *vl = new QgsVectorLayer( QStringLiteral( "LineString" ), QStringLiteral( "x" ), QStringLiteral( "memory" ) );
442456
p.addMapLayer( vl );
443457

458+
TestLayerWrapper layerWrapper( layerDef );
459+
444460
QVERIFY( !allPartsWrapper.mPropertyButton->vectorLayer() );
445-
allPartsWrapper.setDynamicParentLayerParameter( QVariant::fromValue( vl ) );
461+
layerWrapper.setWidgetValue( QVariant::fromValue( vl ), context );
462+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
446463
QCOMPARE( allPartsWrapper.mPropertyButton->vectorLayer(), vl );
447464
// should not be owned by wrapper
448465
QVERIFY( !allPartsWrapper.mDynamicLayer.get() );
449-
allPartsWrapper.setDynamicParentLayerParameter( QVariant() );
466+
layerWrapper.setWidgetValue( QVariant(), context );
467+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
450468
QVERIFY( !allPartsWrapper.mPropertyButton->vectorLayer() );
451469

452-
allPartsWrapper.setDynamicParentLayerParameter( vl->id() );
470+
layerWrapper.setWidgetValue( vl->id(), context );
471+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
453472
QVERIFY( !allPartsWrapper.mPropertyButton->vectorLayer() );
454473
QVERIFY( !allPartsWrapper.mDynamicLayer.get() );
455474

@@ -458,13 +477,15 @@ void TestProcessingGui::testWrapperDynamic()
458477
TestProcessingContextGenerator generator( context );
459478
allPartsWrapper.registerProcessingContextGenerator( &generator );
460479

461-
allPartsWrapper.setDynamicParentLayerParameter( vl->id() );
480+
layerWrapper.setWidgetValue( vl->id(), context );
481+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
462482
QCOMPARE( allPartsWrapper.mPropertyButton->vectorLayer(), vl );
463483
QVERIFY( !allPartsWrapper.mDynamicLayer.get() );
464484

465485
// non-project layer
466486
QString pointFileName = TEST_DATA_DIR + QStringLiteral( "/points.shp" );
467-
allPartsWrapper.setDynamicParentLayerParameter( pointFileName );
487+
layerWrapper.setWidgetValue( pointFileName, context );
488+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
468489
QCOMPARE( allPartsWrapper.mPropertyButton->vectorLayer()->publicSource(), pointFileName );
469490
// must be owned by wrapper, or layer may be deleted while still required by wrapper
470491
QCOMPARE( allPartsWrapper.mDynamicLayer->publicSource(), pointFileName );

0 commit comments

Comments
 (0)