Skip to content

Commit 48b18d4

Browse files
committedSep 4, 2018
[processing] add parameterAsInts function
1 parent 97adef2 commit 48b18d4

File tree

8 files changed

+114
-13
lines changed

8 files changed

+114
-13
lines changed
 

‎python/core/auto_generated/processing/qgsprocessingalgorithm.sip.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,13 @@ Evaluates the parameter with matching ``name`` to a static double value.
583583
int parameterAsInt( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const;
584584
%Docstring
585585
Evaluates the parameter with matching ``name`` to a static integer value.
586+
%End
587+
588+
QList<int> parameterAsInts( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const;
589+
%Docstring
590+
Evaluates the parameter with matching ``name`` to a list of integer values.
591+
592+
.. versionadded:: 3.4
586593
%End
587594

588595
int parameterAsEnum( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const;

‎python/core/auto_generated/processing/qgsprocessingparameters.sip.in

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,20 @@ Evaluates the parameter with matching ``definition`` to a static integer value.
533533
%Docstring
534534
Evaluates the parameter with matching ``definition`` and ``value`` to a static integer value.
535535

536+
.. versionadded:: 3.4
537+
%End
538+
539+
static QList<int> parameterAsInts( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context );
540+
%Docstring
541+
Evaluates the parameter with matching ``definition`` to a list of integer values.
542+
543+
.. versionadded:: 3.4
544+
%End
545+
546+
static QList<int> parameterAsInts( const QgsProcessingParameterDefinition *definition, const QVariant &value, const QgsProcessingContext &context );
547+
%Docstring
548+
Evaluates the parameter with matching ``definition`` and ``value`` to a list of integer values.
549+
536550
.. versionadded:: 3.4
537551
%End
538552

‎python/plugins/processing/algs/gdal/rearrange_bands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
117117

118118
arguments = []
119119

120-
bands = self.parameterAsFields(parameters, self.BANDS, context)
120+
bands = self.parameterAsInts(parameters, self.BANDS, context)
121121
for band in bands:
122122
arguments.append('-b {}'.format(band))
123123

‎src/core/processing/qgsprocessingalgorithm.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,11 @@ int QgsProcessingAlgorithm::parameterAsInt( const QVariantMap &parameters, const
565565
return QgsProcessingParameters::parameterAsInt( parameterDefinition( name ), parameters, context );
566566
}
567567

568+
QList<int> QgsProcessingAlgorithm::parameterAsInts( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
569+
{
570+
return QgsProcessingParameters::parameterAsInts( parameterDefinition( name ), parameters, context );
571+
}
572+
568573
int QgsProcessingAlgorithm::parameterAsEnum( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
569574
{
570575
return QgsProcessingParameters::parameterAsEnum( parameterDefinition( name ), parameters, context );

‎src/core/processing/qgsprocessingalgorithm.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,12 @@ class CORE_EXPORT QgsProcessingAlgorithm
582582
*/
583583
int parameterAsInt( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const;
584584

585+
/**
586+
* Evaluates the parameter with matching \a name to a list of integer values.
587+
* \since QGIS 3.4
588+
*/
589+
QList<int> parameterAsInts( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const;
590+
585591
/**
586592
* Evaluates the parameter with matching \a name to a enum value.
587593
*/

‎src/core/processing/qgsprocessingparameters.cpp

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,63 @@ int QgsProcessingParameters::parameterAsInt( const QgsProcessingParameterDefinit
178178
return val.toInt();
179179
}
180180

181+
QList< int > QgsProcessingParameters::parameterAsInts( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context )
182+
{
183+
if ( !definition )
184+
return QList< int >();
185+
186+
return parameterAsInts( definition, parameters.value( definition->name() ), context );
187+
}
188+
189+
QList< int > QgsProcessingParameters::parameterAsInts( const QgsProcessingParameterDefinition *definition, const QVariant &value, const QgsProcessingContext &context )
190+
{
191+
if ( !definition )
192+
return QList< int >();
193+
194+
QList< int > resultList;
195+
QVariant val = value;
196+
if ( val.isValid() )
197+
{
198+
if ( val.canConvert<QgsProperty>() )
199+
resultList << val.value< QgsProperty >().valueAsInt( context.expressionContext(), definition->defaultValue().toInt() );
200+
else if ( val.type() == QVariant::List )
201+
{
202+
QVariantList list = val.toList();
203+
for ( auto it = list.constBegin(); it != list.constEnd(); ++it )
204+
resultList << it->toInt();
205+
}
206+
else
207+
{
208+
QStringList parts = val.toString().split( ';' );
209+
for ( auto it = parts.constBegin(); it != parts.constEnd(); ++it )
210+
resultList << it->toInt();
211+
}
212+
}
213+
214+
if ( ( resultList.isEmpty() || resultList.at( 0 ) == 0 ) )
215+
{
216+
resultList.clear();
217+
// check default
218+
if ( definition->defaultValue().isValid() )
219+
{
220+
if ( definition->defaultValue().type() == QVariant::List )
221+
{
222+
QVariantList list = definition->defaultValue().toList();
223+
for ( auto it = list.constBegin(); it != list.constEnd(); ++it )
224+
resultList << it->toInt();
225+
}
226+
else
227+
{
228+
QStringList parts = definition->defaultValue().toString().split( ';' );
229+
for ( auto it = parts.constBegin(); it != parts.constEnd(); ++it )
230+
resultList << it->toInt();
231+
}
232+
}
233+
}
234+
235+
return resultList;
236+
}
237+
181238
int QgsProcessingParameters::parameterAsEnum( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context )
182239
{
183240
if ( !definition )
@@ -4342,7 +4399,7 @@ QString QgsProcessingParameterBand::valueAsPythonString( const QVariant &value,
43424399
QVariantList values = value.toList();
43434400
for ( auto it = values.constBegin(); it != values.constEnd(); ++it )
43444401
{
4345-
parts << QgsProcessingUtils::stringToPythonLiteral( it->toString() );
4402+
parts << QString::number( static_cast< int >( it->toDouble() ) );
43464403
}
43474404
return parts.join( ',' ).prepend( '[' ).append( ']' );
43484405
}
@@ -4352,7 +4409,7 @@ QString QgsProcessingParameterBand::valueAsPythonString( const QVariant &value,
43524409
QStringList values = value.toStringList();
43534410
for ( auto it = values.constBegin(); it != values.constEnd(); ++it )
43544411
{
4355-
parts << QgsProcessingUtils::stringToPythonLiteral( *it );
4412+
parts << QString::number( static_cast< int >( it->toDouble() ) );
43564413
}
43574414
return parts.join( ',' ).prepend( '[' ).append( ']' );
43584415
}

‎src/core/processing/qgsprocessingparameters.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,18 @@ class CORE_EXPORT QgsProcessingParameters
602602
*/
603603
static int parameterAsInt( const QgsProcessingParameterDefinition *definition, const QVariant &value, const QgsProcessingContext &context );
604604

605+
/**
606+
* Evaluates the parameter with matching \a definition to a list of integer values.
607+
* \since QGIS 3.4
608+
*/
609+
static QList<int> parameterAsInts( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context );
610+
611+
/**
612+
* Evaluates the parameter with matching \a definition and \a value to a list of integer values.
613+
* \since QGIS 3.4
614+
*/
615+
static QList<int> parameterAsInts( const QgsProcessingParameterDefinition *definition, const QVariant &value, const QgsProcessingContext &context );
616+
605617
/**
606618
* Evaluates the parameter with matching \a definition to a enum value.
607619
*/

‎tests/src/analysis/testqgsprocessing.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5105,23 +5105,23 @@ void TestQgsProcessing::parameterBand()
51055105

51065106
// multiple
51075107
def.reset( new QgsProcessingParameterBand( "non_optional", QString(), QVariant(), QString(), false, true ) );
5108-
QVERIFY( def->checkValueIsAcceptable( QStringList() << "Band 1" << "Band 2" ) );
5109-
QVERIFY( def->checkValueIsAcceptable( QVariantList() << "Band 1" << "Band 2" ) );
5108+
QVERIFY( def->checkValueIsAcceptable( QStringList() << "1" << "2" ) );
5109+
QVERIFY( def->checkValueIsAcceptable( QVariantList() << 1 << 2 ) );
51105110
QVERIFY( !def->checkValueIsAcceptable( "" ) );
51115111
QVERIFY( !def->checkValueIsAcceptable( QVariant() ) );
51125112
QVERIFY( !def->checkValueIsAcceptable( QStringList() ) );
51135113
QVERIFY( !def->checkValueIsAcceptable( QVariantList() ) );
51145114

5115-
params.insert( "non_optional", QString( "Band 1;Band 2" ) );
5116-
QStringList bands = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
5117-
QCOMPARE( bands, QStringList() << "Band 1" << "Band 2" );
5118-
params.insert( "non_optional", QVariantList() << "Band 1" << "Band 2" );
5119-
bands = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
5120-
QCOMPARE( bands, QStringList() << "Band 1" << "Band 2" );
5115+
params.insert( "non_optional", QString( "1;2" ) );
5116+
QList<int> bands = QgsProcessingParameters::parameterAsInts( def.get(), params, context );
5117+
QCOMPARE( bands, QList<int>() << 1 << 2 );
5118+
params.insert( "non_optional", QVariantList() << 1 << 2 );
5119+
bands = QgsProcessingParameters::parameterAsInts( def.get(), params, context );
5120+
QCOMPARE( bands, QList<int>() << 1 << 2 );
51215121

51225122
QCOMPARE( def->valueAsPythonString( QVariant(), context ), QStringLiteral( "None" ) );
5123-
QCOMPARE( def->valueAsPythonString( QStringList() << "Band 1" << "Band 2", context ), QStringLiteral( "['Band 1','Band 2']" ) );
5124-
QCOMPARE( def->valueAsPythonString( QVariantList() << "Band 1" << "Band 2", context ), QStringLiteral( "['Band 1','Band 2']" ) );
5123+
QCOMPARE( def->valueAsPythonString( QStringList() << "1" << "2", context ), QStringLiteral( "[1,2]" ) );
5124+
QCOMPARE( def->valueAsPythonString( QVariantList() << 1 << 2, context ), QStringLiteral( "[1,2]" ) );
51255125

51265126
QVariantMap map = def->toVariantMap();
51275127
QgsProcessingParameterBand fromMap( "x" );

0 commit comments

Comments
 (0)
Please sign in to comment.