Skip to content

Commit ee4afe2

Browse files
troopa81nyalldawson
authored andcommittedOct 1, 2018
Fixes #19836
Keep layer order when using different way for passing layer (layer id or layer pointer for instance)
1 parent 3ecb154 commit ee4afe2

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed
 

‎src/core/processing/qgsprocessingparameters.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,19 +1280,19 @@ QList<QgsMapLayer *> QgsProcessingParameters::parameterAsLayerList( const QgsPro
12801280
{
12811281
Q_FOREACH ( const QString &s, var.toStringList() )
12821282
{
1283-
resultStringList << s;
1283+
processVariant( s );
12841284
}
12851285
}
12861286
else if ( var.canConvert<QgsProperty>() )
1287-
resultStringList << var.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() );
1287+
processVariant( var.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() ) );
12881288
else if ( var.canConvert<QgsProcessingOutputLayerDefinition>() )
12891289
{
12901290
// input is a QgsProcessingOutputLayerDefinition - get extra properties from it
12911291
QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( var );
12921292
QVariant sink = fromVar.sink;
12931293
if ( sink.canConvert<QgsProperty>() )
12941294
{
1295-
resultStringList << sink.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() );
1295+
processVariant( sink.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() ) );
12961296
}
12971297
}
12981298
else if ( QgsMapLayer *layer = qobject_cast< QgsMapLayer * >( qvariant_cast<QObject *>( var ) ) )
@@ -1301,15 +1301,16 @@ QList<QgsMapLayer *> QgsProcessingParameters::parameterAsLayerList( const QgsPro
13011301
}
13021302
else
13031303
{
1304-
resultStringList << var.toString();
1304+
QgsMapLayer *alayer = QgsProcessingUtils::mapLayerFromString( var.toString(), context );
1305+
if ( alayer )
1306+
layers << alayer;
13051307
}
13061308
};
13071309

13081310
processVariant( val );
13091311

1310-
if ( layers.isEmpty() && ( resultStringList.isEmpty() || resultStringList.at( 0 ).isEmpty() ) )
1312+
if ( layers.isEmpty() )
13111313
{
1312-
resultStringList.clear();
13131314
// check default
13141315
if ( QgsMapLayer *layer = qobject_cast< QgsMapLayer * >( qvariant_cast<QObject *>( definition->defaultValue() ) ) )
13151316
{
@@ -1325,19 +1326,12 @@ QList<QgsMapLayer *> QgsProcessingParameters::parameterAsLayerList( const QgsPro
13251326
}
13261327
else
13271328
{
1328-
resultStringList << var.toString();
1329+
processVariant( var );
13291330
}
13301331
}
13311332
}
13321333
else
1333-
resultStringList << definition->defaultValue().toString();
1334-
}
1335-
1336-
Q_FOREACH ( const QString &s, resultStringList )
1337-
{
1338-
QgsMapLayer *layer = QgsProcessingUtils::mapLayerFromString( s, context );
1339-
if ( layer )
1340-
layers << layer;
1334+
processVariant( definition->defaultValue() );
13411335
}
13421336

13431337
return layers;

‎tests/src/analysis/testqgsprocessing.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3066,6 +3066,13 @@ void TestQgsProcessing::parameterLayerList()
30663066
QCOMPARE( layers.at( 0 ), v1 );
30673067
QCOMPARE( layers.at( 1 )->publicSource(), raster2 );
30683068

3069+
// mix of existing layer and ID (and check we keep order)
3070+
params.insert( "non_optional", QVariantList() << QVariant::fromValue( v1 ) << v2->id() );
3071+
QCOMPARE( QgsProcessingParameters::parameterAsLayerList( def.get(), params, context ), QList< QgsMapLayer *>() << v1 << v2 );
3072+
3073+
params.insert( "non_optional", QVariantList() << v1->id() << QVariant::fromValue( v2 ) );
3074+
QCOMPARE( QgsProcessingParameters::parameterAsLayerList( def.get(), params, context ), QList< QgsMapLayer *>() << v1 << v2 );
3075+
30693076
// empty string
30703077
params.insert( "non_optional", QString( "" ) );
30713078
QVERIFY( QgsProcessingParameters::parameterAsLayerList( def.get(), params, context ).isEmpty() );

0 commit comments

Comments
 (0)
Please sign in to comment.