Skip to content

Commit 72d6cbf

Browse files
committedFeb 12, 2019
[processing] Fix incorrect parameter definition used when evaluating
parent layer parameter in the gui for dynamic properties data defined buttons (cherry picked from commit d3bd137)
1 parent a2b5ee9 commit 72d6cbf

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed
 

‎src/gui/processing/qgsprocessingwidgetwrapper.cpp

Lines changed: 4 additions & 4 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,20 @@ class TestProcessingContextGenerator : public QgsProcessingContextGenerator
346346
QgsProcessingContext &mContext;
347347
};
348348

349+
350+
class TestLayerWrapper : public QgsAbstractProcessingParameterWidgetWrapper
351+
{
352+
public:
353+
TestLayerWrapper( const QgsProcessingParameterDefinition *parameter = nullptr )
354+
: QgsAbstractProcessingParameterWidgetWrapper( parameter )
355+
{}
356+
QWidget *createWidget() override { return nullptr; }
357+
void setWidgetValue( const QVariant &val, QgsProcessingContext & ) override { v = val;}
358+
QVariant widgetValue() const override { return v; }
359+
360+
QVariant v;
361+
};
362+
349363
void TestProcessingGui::testWrapperDynamic()
350364
{
351365
const QgsProcessingAlgorithm *centroidAlg = QgsApplication::processingRegistry()->algorithmById( QStringLiteral( "native:centroids" ) );
@@ -379,15 +393,20 @@ void TestProcessingGui::testWrapperDynamic()
379393
QgsVectorLayer *vl = new QgsVectorLayer( QStringLiteral( "LineString" ), QStringLiteral( "x" ), QStringLiteral( "memory" ) );
380394
p.addMapLayer( vl );
381395

396+
TestLayerWrapper layerWrapper( layerDef );
397+
382398
QVERIFY( !allPartsWrapper.mPropertyButton->vectorLayer() );
383-
allPartsWrapper.setDynamicParentLayerParameter( QVariant::fromValue( vl ) );
399+
layerWrapper.setWidgetValue( QVariant::fromValue( vl ), context );
400+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
384401
QCOMPARE( allPartsWrapper.mPropertyButton->vectorLayer(), vl );
385402
// should not be owned by wrapper
386403
QVERIFY( !allPartsWrapper.mDynamicLayer.get() );
387-
allPartsWrapper.setDynamicParentLayerParameter( QVariant() );
404+
layerWrapper.setWidgetValue( QVariant(), context );
405+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
388406
QVERIFY( !allPartsWrapper.mPropertyButton->vectorLayer() );
389407

390-
allPartsWrapper.setDynamicParentLayerParameter( vl->id() );
408+
layerWrapper.setWidgetValue( vl->id(), context );
409+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
391410
QVERIFY( !allPartsWrapper.mPropertyButton->vectorLayer() );
392411
QVERIFY( !allPartsWrapper.mDynamicLayer.get() );
393412

@@ -396,13 +415,15 @@ void TestProcessingGui::testWrapperDynamic()
396415
TestProcessingContextGenerator generator( context );
397416
allPartsWrapper.registerProcessingContextGenerator( &generator );
398417

399-
allPartsWrapper.setDynamicParentLayerParameter( vl->id() );
418+
layerWrapper.setWidgetValue( vl->id(), context );
419+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
400420
QCOMPARE( allPartsWrapper.mPropertyButton->vectorLayer(), vl );
401421
QVERIFY( !allPartsWrapper.mDynamicLayer.get() );
402422

403423
// non-project layer
404424
QString pointFileName = TEST_DATA_DIR + QStringLiteral( "/points.shp" );
405-
allPartsWrapper.setDynamicParentLayerParameter( pointFileName );
425+
layerWrapper.setWidgetValue( pointFileName, context );
426+
allPartsWrapper.setDynamicParentLayerParameter( &layerWrapper );
406427
QCOMPARE( allPartsWrapper.mPropertyButton->vectorLayer()->publicSource(), pointFileName );
407428
// must be owned by wrapper, or layer may be deleted while still required by wrapper
408429
QCOMPARE( allPartsWrapper.mDynamicLayer->publicSource(), pointFileName );

0 commit comments

Comments
 (0)
Please sign in to comment.