Skip to content

Commit

Permalink
Fix handling optional multiple table field parameter with no fields set
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jun 11, 2017
1 parent b40f409 commit 9f018e6
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 12 deletions.
30 changes: 18 additions & 12 deletions src/core/processing/qgsprocessingparameters.cpp
Expand Up @@ -672,27 +672,33 @@ QStringList QgsProcessingParameters::parameterAsFields( const QgsProcessingParam

QStringList resultStringList;
QVariant val = parameters.value( definition->name() );
if ( val.canConvert<QgsProperty>() )
resultStringList << val.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() );
else if ( val.type() == QVariant::List )
if ( val.isValid() )
{
Q_FOREACH ( const QVariant &var, val.toList() )
resultStringList << var.toString();
if ( val.canConvert<QgsProperty>() )
resultStringList << val.value< QgsProperty >().valueAsString( context.expressionContext(), definition->defaultValue().toString() );
else if ( val.type() == QVariant::List )
{
Q_FOREACH ( const QVariant &var, val.toList() )
resultStringList << var.toString();
}
else
resultStringList.append( val.toString().split( ';' ) );
}
else
resultStringList.append( val.toString().split( ';' ) );

if ( ( resultStringList.isEmpty() || resultStringList.at( 0 ).isEmpty() ) )
{
resultStringList.clear();
// check default
if ( definition->defaultValue().type() == QVariant::List )
if ( definition->defaultValue().isValid() )
{
Q_FOREACH ( const QVariant &var, definition->defaultValue().toList() )
resultStringList << var.toString();
if ( definition->defaultValue().type() == QVariant::List )
{
Q_FOREACH ( const QVariant &var, definition->defaultValue().toList() )
resultStringList << var.toString();
}
else
resultStringList.append( definition->defaultValue().toString().split( ';' ) );
}
else
resultStringList.append( definition->defaultValue().toString().split( ';' ) );
}

return resultStringList;
Expand Down
6 changes: 6 additions & 0 deletions tests/src/core/testqgsprocessing.cpp
Expand Up @@ -2288,6 +2288,12 @@ void TestQgsProcessing::parameterField()
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
QCOMPARE( fields, QStringList() << "def" );

// optional, no default
def.reset( new QgsProcessingParameterTableField( "optional", QString(), QVariant(), QString(), QgsProcessingParameterTableField::Any, false, true ) );
params.insert( "optional", QVariant() );
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
QVERIFY( fields.isEmpty() );

//optional with multiples
def.reset( new QgsProcessingParameterTableField( "optional", QString(), QString( "abc;def" ), QString(), QgsProcessingParameterTableField::Any, true, true ) );
QVERIFY( def->checkValueIsAcceptable( 1 ) );
Expand Down

0 comments on commit 9f018e6

Please sign in to comment.