Skip to content

Commit a951424

Browse files
committed
QgsProcessingParameterVectorLayer accepts lists of vector layer types
1 parent bdf051a commit a951424

6 files changed

Lines changed: 61 additions & 51 deletions

File tree

‎python/core/processing/qgsprocessingparameters.sip‎

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,13 @@ class QgsProcessingParameterDefinition
168168
@see flags()
169169
%End
170170

171-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
171+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
172172
%Docstring
173173
Checks whether the specified ``input`` value is acceptable for the
174174
parameter. Returns true if the value can be accepted.
175+
The optional ``context`` parameter can be specified to allow a more stringent
176+
check to be performed, capable of checking for the presence of required
177+
layers and other factors within the context.
175178
:rtype: bool
176179
%End
177180

@@ -384,6 +387,8 @@ class QgsProcessingParameterCrs : QgsProcessingParameterDefinition
384387
%End
385388
386389
virtual QString type() const;
390+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
391+
387392
};
388393
389394
class QgsProcessingParameterMapLayer : QgsProcessingParameterDefinition
@@ -405,6 +410,8 @@ class QgsProcessingParameterMapLayer : QgsProcessingParameterDefinition
405410
%End
406411
407412
virtual QString type() const;
413+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
414+
408415
};
409416
410417
class QgsProcessingParameterExtent : QgsProcessingParameterDefinition
@@ -426,6 +433,8 @@ class QgsProcessingParameterExtent : QgsProcessingParameterDefinition
426433
%End
427434
428435
virtual QString type() const;
436+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
437+
429438
430439
};
431440
@@ -449,7 +458,7 @@ class QgsProcessingParameterPoint : QgsProcessingParameterDefinition
449458
%End
450459
451460
virtual QString type() const;
452-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
461+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
453462
454463
455464
};
@@ -479,7 +488,7 @@ class QgsProcessingParameterFile : QgsProcessingParameterDefinition
479488
%End
480489
481490
virtual QString type() const;
482-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
491+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
483492
484493
485494
Behavior behavior() const;
@@ -531,7 +540,7 @@ class QgsProcessingParameterMatrix : QgsProcessingParameterDefinition
531540
%End
532541
533542
virtual QString type() const;
534-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
543+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
535544
536545
537546
QStringList headers() const;
@@ -601,7 +610,7 @@ class QgsProcessingParameterMultipleLayers : QgsProcessingParameterDefinition
601610
%End
602611
603612
virtual QString type() const;
604-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
613+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
605614
606615
607616
QgsProcessingParameterDefinition::LayerType layerType() const;
@@ -664,7 +673,7 @@ class QgsProcessingParameterNumber : QgsProcessingParameterDefinition
664673
%End
665674
666675
virtual QString type() const;
667-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
676+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
668677
669678
670679
double minimum() const;
@@ -729,7 +738,7 @@ class QgsProcessingParameterRange : QgsProcessingParameterDefinition
729738
%End
730739
731740
virtual QString type() const;
732-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
741+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
733742
734743
735744
QgsProcessingParameterNumber::Type dataType() const;
@@ -766,6 +775,8 @@ class QgsProcessingParameterRasterLayer : QgsProcessingParameterDefinition
766775
%End
767776
768777
virtual QString type() const;
778+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
779+
769780
770781
};
771782
@@ -790,7 +801,7 @@ class QgsProcessingParameterEnum : QgsProcessingParameterDefinition
790801
%End
791802
792803
virtual QString type() const;
793-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
804+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
794805
795806
796807
QStringList options() const;
@@ -945,7 +956,7 @@ class QgsProcessingParameterTableField : QgsProcessingParameterDefinition
945956
%End
946957
947958
virtual QString type() const;
948-
virtual bool checkValueIsAcceptable( const QVariant &input ) const;
959+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
949960
950961
951962
QString parentLayerParameter() const;
@@ -1001,26 +1012,28 @@ class QgsProcessingParameterVectorLayer : QgsProcessingParameterDefinition
10011012
%End
10021013
public:
10031014
1004-
QgsProcessingParameterVectorLayer( const QString &name, const QString &description = QString(), QgsProcessingParameterDefinition::LayerType type = QgsProcessingParameterDefinition::TypeVectorAny, const QVariant &defaultValue = QVariant(),
1005-
bool optional = false );
1015+
QgsProcessingParameterVectorLayer( const QString &name, const QString &description = QString(),
1016+
const QList< int > &types = QList< int >(),
1017+
const QVariant &defaultValue = QVariant(), bool optional = false );
10061018
%Docstring
10071019
Constructor for QgsProcessingParameterVectorLayer.
10081020
%End
10091021
10101022
virtual QString type() const;
1023+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
10111024
10121025
1013-
QgsProcessingParameterDefinition::LayerType dataType() const;
1026+
QList< int > dataTypes() const;
10141027
%Docstring
1015-
Returns the layer type for layers acceptable by the parameter.
1016-
.. seealso:: setDataType()
1017-
:rtype: QgsProcessingParameterDefinition.LayerType
1028+
Returns the layer types for layers acceptable by the parameter.
1029+
.. seealso:: setDataTypes()
1030+
:rtype: list of int
10181031
%End
10191032
1020-
void setDataType( QgsProcessingParameterDefinition::LayerType type );
1033+
void setDataTypes( const QList< int > &types );
10211034
%Docstring
1022-
Sets the layer ``type`` for layers acceptable by the parameter.
1023-
.. seealso:: dataType()
1035+
Sets the layer ``types`` for layers acceptable by the parameter.
1036+
.. seealso:: dataTypes()
10241037
%End
10251038
10261039
};
@@ -1048,6 +1061,8 @@ class QgsProcessingParameterOutputVectorLayer : QgsProcessingParameterDefinition
10481061
10491062
virtual QString type() const;
10501063
virtual bool isDestination() const;
1064+
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
1065+
10511066
10521067
QgsProcessingParameterDefinition::LayerType dataType() const;
10531068
%Docstring

‎python/plugins/processing/algs/qgis/Boundary.py‎

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from qgis.core import (QgsGeometry,
3131
QgsWkbTypes,
3232
QgsProcessingUtils,
33+
QgsProcessingParameterDefinition,
3334
QgsProcessingParameterVectorLayer,
3435
QgsProcessingParameterOutputVectorLayer,
3536
QgsProcessingOutputVectorLayer)
@@ -52,17 +53,10 @@ class Boundary(QgisAlgorithm):
5253

5354
def __init__(self):
5455
super().__init__()
55-
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT_LAYER, self.tr('Input layer')))
56-
56+
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT_LAYER, self.tr('Input layer'), [QgsProcessingParameterDefinition.TypeVectorLine, QgsProcessingParameterDefinition.TypeVectorPolygon]))
5757
self.addParameter(QgsProcessingParameterOutputVectorLayer(self.OUTPUT_LAYER, self.tr('Boundary')))
58-
5958
self.addOutput(QgsProcessingOutputVectorLayer(self.OUTPUT_LAYER, self.tr("Boundaries")))
6059

61-
# self.addParameter(ParameterVector(self.INPUT_LAYER,
62-
# self.tr('Input layer'), [dataobjects.TYPE_VECTOR_LINE,
63-
# dataobjects.TYPE_VECTOR_POLYGON]))
64-
# self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Boundary')))
65-
6660
def icon(self):
6761
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'convex_hull.png'))
6862

‎python/plugins/processing/gui/wrappers.py‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -763,13 +763,13 @@ def createWidget(self):
763763
widget.setLayout(layout)
764764

765765
filters = QgsMapLayerProxyModel.Filters()
766-
if QgsProcessingParameterDefinition.TypeVectorAny == self.param.dataType():
766+
if QgsProcessingParameterDefinition.TypeVectorAny in self.param.dataTypes():
767767
filters = QgsMapLayerProxyModel.HasGeometry
768-
if QgsProcessingParameterDefinition.TypeVectorPoint == self.param.dataType():
768+
if QgsProcessingParameterDefinition.TypeVectorPoint in self.param.dataTypes():
769769
filters |= QgsMapLayerProxyModel.PointLayer
770-
if QgsProcessingParameterDefinition.TypeVectorLine == self.param.dataType():
770+
if QgsProcessingParameterDefinition.TypeVectorLine in self.param.dataTypes():
771771
filters |= QgsMapLayerProxyModel.LineLayer
772-
if QgsProcessingParameterDefinition.TypeVectorPolygon == self.param.dataType():
772+
if QgsProcessingParameterDefinition.TypeVectorPolygon in self.param.dataTypes():
773773
filters |= QgsMapLayerProxyModel.PolygonLayer
774774

775775
try:
@@ -783,7 +783,8 @@ def createWidget(self):
783783
if ProcessingConfig.getSetting(ProcessingConfig.SHOW_CRS_DEF):
784784
self.combo.setShowCrs(True)
785785

786-
self.combo.setFilters(filters)
786+
if filters:
787+
self.combo.setFilters(filters)
787788
self.combo.setExcludedProviders(['grass'])
788789

789790
self.combo.currentIndexChanged.connect(lambda: self.widgetValueHasChanged.emit(self))

‎src/core/processing/qgsprocessingparameters.cpp‎

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,9 +1130,9 @@ void QgsProcessingParameterTableField::setAllowMultiple( bool allowMultiple )
11301130
mAllowMultiple = allowMultiple;
11311131
}
11321132

1133-
QgsProcessingParameterVectorLayer::QgsProcessingParameterVectorLayer( const QString &name, const QString &description, LayerType type, const QVariant &defaultValue, bool optional )
1133+
QgsProcessingParameterVectorLayer::QgsProcessingParameterVectorLayer( const QString &name, const QString &description, const QList<int> &types, const QVariant &defaultValue, bool optional )
11341134
: QgsProcessingParameterDefinition( name, description, defaultValue, optional )
1135-
, mDataType( type )
1135+
, mDataTypes( types )
11361136
{
11371137

11381138
}
@@ -1163,18 +1163,17 @@ bool QgsProcessingParameterVectorLayer::checkValueIsAcceptable( const QVariant &
11631163
return false;
11641164
}
11651165

1166-
QgsProcessingParameterDefinition::LayerType QgsProcessingParameterVectorLayer::dataType() const
1166+
QList< int > QgsProcessingParameterVectorLayer::dataTypes() const
11671167
{
1168-
return mDataType;
1168+
return mDataTypes;
11691169
}
11701170

1171-
void QgsProcessingParameterVectorLayer::setDataType( QgsProcessingParameterDefinition::LayerType dataType )
1171+
void QgsProcessingParameterVectorLayer::setDataTypes( const QList<int> &types )
11721172
{
1173-
mDataType = dataType;
1173+
mDataTypes = types;
11741174
}
11751175

11761176

1177-
11781177
QgsProcessingParameterOutputVectorLayer::QgsProcessingParameterOutputVectorLayer( const QString &name, const QString &description, QgsProcessingParameterDefinition::LayerType type, const QVariant &defaultValue, bool optional )
11791178
: QgsProcessingParameterDefinition( name, description, defaultValue, optional )
11801179
, mDataType( type )

‎src/core/processing/qgsprocessingparameters.h‎

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -999,29 +999,30 @@ class CORE_EXPORT QgsProcessingParameterVectorLayer : public QgsProcessingParame
999999
public:
10001000

10011001
/**
1002-
* Constructor for QgsProcessingParameterVectorLayer.
1003-
*/
1004-
QgsProcessingParameterVectorLayer( const QString &name, const QString &description = QString(), QgsProcessingParameterDefinition::LayerType type = QgsProcessingParameterDefinition::TypeVectorAny, const QVariant &defaultValue = QVariant(),
1005-
bool optional = false );
1002+
* Constructor for QgsProcessingParameterVectorLayer.
1003+
*/
1004+
QgsProcessingParameterVectorLayer( const QString &name, const QString &description = QString(),
1005+
const QList< int > &types = QList< int >(),
1006+
const QVariant &defaultValue = QVariant(), bool optional = false );
10061007

10071008
QString type() const override { return QStringLiteral( "vector" ); }
10081009
bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = nullptr ) const override;
10091010

10101011
/**
1011-
* Returns the layer type for layers acceptable by the parameter.
1012-
* \see setDataType()
1012+
* Returns the layer types for layers acceptable by the parameter.
1013+
* \see setDataTypes()
10131014
*/
1014-
QgsProcessingParameterDefinition::LayerType dataType() const;
1015+
QList< int > dataTypes() const;
10151016

10161017
/**
1017-
* Sets the layer \a type for layers acceptable by the parameter.
1018-
* \see dataType()
1018+
* Sets the layer \a types for layers acceptable by the parameter.
1019+
* \see dataTypes()
10191020
*/
1020-
void setDataType( QgsProcessingParameterDefinition::LayerType type );
1021+
void setDataTypes( const QList< int > &types );
10211022

10221023
private:
10231024

1024-
QgsProcessingParameterDefinition::LayerType mDataType = QgsProcessingParameterDefinition::TypeVectorAny;
1025+
QList< int > mDataTypes = QList< int >() << QgsProcessingParameterDefinition::TypeVectorAny;
10251026

10261027
};
10271028

‎tests/src/core/testqgsprocessing.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,7 @@ void TestQgsProcessing::parameterVectorLayer()
20982098
context.setProject( &p );
20992099

21002100
// not optional!
2101-
QgsProcessingParameterVectorLayer *def = new QgsProcessingParameterVectorLayer( "non_optional", QString(), QgsProcessingParameterDefinition::TypeVectorAny, QString( "EPSG:3113" ), false );
2101+
QgsProcessingParameterVectorLayer *def = new QgsProcessingParameterVectorLayer( "non_optional", QString(), QList< int >() << QgsProcessingParameterDefinition::TypeVectorAny, QString( "EPSG:3113" ), false );
21022102
QVERIFY( !def->checkValueIsAcceptable( false ) );
21032103
QVERIFY( !def->checkValueIsAcceptable( true ) );
21042104
QVERIFY( !def->checkValueIsAcceptable( 5 ) );
@@ -2130,7 +2130,7 @@ void TestQgsProcessing::parameterVectorLayer()
21302130

21312131
// optional
21322132
delete def;
2133-
def = new QgsProcessingParameterVectorLayer( "optional", QString(), QgsProcessingParameterDefinition::TypeVectorAny, v1->id(), true );
2133+
def = new QgsProcessingParameterVectorLayer( "optional", QString(), QList< int >() << QgsProcessingParameterDefinition::TypeVectorAny, v1->id(), true );
21342134
params.insert( "optional", QVariant() );
21352135
QCOMPARE( QgsProcessingParameters::parameterAsVectorLayer( def, params, QStringLiteral( "optional" ), context )->id(), v1->id() );
21362136
QVERIFY( def->checkValueIsAcceptable( false ) );

0 commit comments

Comments
 (0)