18
18
***************************************************************************
19
19
"""
20
20
21
-
22
21
__author__ = 'Arnaud Morvan'
23
22
__date__ = 'May 2016'
24
23
__copyright__ = '(C) 2016, Arnaud Morvan'
27
26
28
27
__revision__ = '$Format:%H$'
29
28
30
-
31
29
import locale
32
30
import os
33
31
from functools import cmp_to_key
124
122
from processing .gui .FixedTablePanel import FixedTablePanel
125
123
from processing .gui .ExtentSelectionPanel import ExtentSelectionPanel
126
124
from processing .gui .ParameterGuiUtils import getFileFilter
125
+
127
126
DIALOG_STANDARD = 'standard'
128
127
DIALOG_BATCH = 'batch'
129
128
DIALOG_MODELER = 'modeler'
@@ -147,7 +146,6 @@ def getExtendedLayerName(layer):
147
146
148
147
149
148
class WidgetWrapper (QObject ):
150
-
151
149
widgetValueHasChanged = pyqtSignal (object )
152
150
153
151
def __init__ (self , param , dialog , row = 0 , col = 0 , ** kwargs ):
@@ -324,8 +322,10 @@ def createWidget(self):
324
322
crss = self .dialog .getAvailableValuesOfType (QgsProcessingParameterCrs )
325
323
for crs in crss :
326
324
self .combo .addItem (self .dialog .resolveValueDescription (crs ), crs )
327
- raster = self .dialog .getAvailableValuesOfType (QgsProcessingParameterRasterLayer , QgsProcessingOutputRasterLayer )
328
- vector = self .dialog .getAvailableValuesOfType (QgsProcessingParameterFeatureSource , QgsProcessingOutputVectorLayer )
325
+ raster = self .dialog .getAvailableValuesOfType (QgsProcessingParameterRasterLayer ,
326
+ QgsProcessingOutputRasterLayer )
327
+ vector = self .dialog .getAvailableValuesOfType (QgsProcessingParameterFeatureSource ,
328
+ QgsProcessingOutputVectorLayer )
329
329
for r in raster :
330
330
self .combo .addItem ("Crs of layer " + self .dialog .resolveValueDescription (r ), r )
331
331
for v in vector :
@@ -378,7 +378,6 @@ def value(self):
378
378
379
379
380
380
class ExtentWidgetWrapper (WidgetWrapper ):
381
-
382
381
USE_MIN_COVERING_EXTENT = "[Use min covering extent]"
383
382
384
383
def createWidget (self ):
@@ -390,8 +389,10 @@ def createWidget(self):
390
389
extents = self .dialog .getAvailableValuesOfType (QgsProcessingParameterExtent , OutputExtent )
391
390
if self .param .flags () & QgsProcessingParameterDefinition .FlagOptional :
392
391
widget .addItem (self .USE_MIN_COVERING_EXTENT , None )
393
- raster = self .dialog .getAvailableValuesOfType (QgsProcessingParameterRasterLayer , QgsProcessingOutputRasterLayer )
394
- vector = self .dialog .getAvailableValuesOfType (QgsProcessingParameterFeatureSource , QgsProcessingOutputVectorLayer )
392
+ raster = self .dialog .getAvailableValuesOfType (QgsProcessingParameterRasterLayer ,
393
+ QgsProcessingOutputRasterLayer )
394
+ vector = self .dialog .getAvailableValuesOfType (QgsProcessingParameterFeatureSource ,
395
+ QgsProcessingOutputVectorLayer )
395
396
for ex in extents :
396
397
widget .addItem (self .dialog .resolveValueDescription (ex ), ex )
397
398
for r in raster :
@@ -482,7 +483,8 @@ class FileWidgetWrapper(WidgetWrapper):
482
483
483
484
def createWidget (self ):
484
485
if self .dialogType in (DIALOG_STANDARD , DIALOG_BATCH ):
485
- return FileSelectionPanel (self .param .behavior () == QgsProcessingParameterFile .Folder , self .param .extension ())
486
+ return FileSelectionPanel (self .param .behavior () == QgsProcessingParameterFile .Folder ,
487
+ self .param .extension ())
486
488
else :
487
489
self .combo = QComboBox ()
488
490
self .combo .setEditable (True )
@@ -515,7 +517,8 @@ def selectFile(self):
515
517
path = ''
516
518
517
519
if self .param .extension ():
518
- filter = self .tr ('{} files' ).format (self .param .extension ().upper ()) + ' (*.' + self .param .extension () + self .tr (
520
+ filter = self .tr ('{} files' ).format (
521
+ self .param .extension ().upper ()) + ' (*.' + self .param .extension () + self .tr (
519
522
');;All files (*.*)' )
520
523
else :
521
524
filter = self .tr ('All files (*.*)' )
@@ -561,20 +564,39 @@ class MultipleLayerWidgetWrapper(WidgetWrapper):
561
564
562
565
def _getOptions (self ):
563
566
if self .param .layerType () == QgsProcessing .TypeVectorAnyGeometry :
564
- options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer , QgsProcessingParameterMultipleLayers ), QgsProcessingOutputVectorLayer )
567
+ options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource ,
568
+ QgsProcessingParameterVectorLayer ,
569
+ QgsProcessingParameterMultipleLayers ),
570
+ QgsProcessingOutputVectorLayer )
565
571
elif self .param .layerType () == QgsProcessing .TypeVectorPoint :
566
- options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer , QgsProcessingParameterMultipleLayers ), QgsProcessingOutputVectorLayer ,
567
- [QgsProcessing .TypeVectorPoint , QgsProcessing .TypeVectorAnyGeometry ])
572
+ options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource ,
573
+ QgsProcessingParameterVectorLayer ,
574
+ QgsProcessingParameterMultipleLayers ),
575
+ QgsProcessingOutputVectorLayer ,
576
+ [QgsProcessing .TypeVectorPoint ,
577
+ QgsProcessing .TypeVectorAnyGeometry ])
568
578
elif self .param .layerType () == QgsProcessing .TypeVectorLine :
569
- options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer , QgsProcessingParameterMultipleLayers ), QgsProcessingOutputVectorLayer ,
570
- [QgsProcessing .TypeVectorLine , QgsProcessing .TypeVectorAnyGeometry ])
579
+ options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource ,
580
+ QgsProcessingParameterVectorLayer ,
581
+ QgsProcessingParameterMultipleLayers ),
582
+ QgsProcessingOutputVectorLayer ,
583
+ [QgsProcessing .TypeVectorLine ,
584
+ QgsProcessing .TypeVectorAnyGeometry ])
571
585
elif self .param .layerType () == QgsProcessing .TypeVectorPolygon :
572
- options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer , QgsProcessingParameterMultipleLayers ), QgsProcessingOutputVectorLayer ,
573
- [QgsProcessing .TypeVectorPolygon , QgsProcessing .TypeVectorAnyGeometry ])
586
+ options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource ,
587
+ QgsProcessingParameterVectorLayer ,
588
+ QgsProcessingParameterMultipleLayers ),
589
+ QgsProcessingOutputVectorLayer ,
590
+ [QgsProcessing .TypeVectorPolygon ,
591
+ QgsProcessing .TypeVectorAnyGeometry ])
574
592
elif self .param .layerType () == QgsProcessing .TypeRaster :
575
- options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterRasterLayer , QgsProcessingParameterMultipleLayers ), QgsProcessingOutputRasterLayer )
593
+ options = self .dialog .getAvailableValuesOfType (
594
+ (QgsProcessingParameterRasterLayer , QgsProcessingParameterMultipleLayers ),
595
+ QgsProcessingOutputRasterLayer )
576
596
elif self .param .layerType () == QgsProcessing .TypeVector :
577
- options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer , QgsProcessingParameterMultipleLayers ), OutputTable )
597
+ options = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource ,
598
+ QgsProcessingParameterVectorLayer ,
599
+ QgsProcessingParameterMultipleLayers ), OutputTable )
578
600
else :
579
601
options = self .dialog .getAvailableValuesOfType (QgsProcessingParameterFile , OutputFile )
580
602
options = sorted (options , key = lambda opt : self .dialog .resolveValueDescription (opt ))
@@ -590,7 +612,8 @@ def createWidget(self):
590
612
elif self .param .layerType () in (QgsProcessing .TypeVectorAnyGeometry , QgsProcessing .TypeVector ):
591
613
options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [], False )
592
614
else :
593
- options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [self .param .layerType ()], False )
615
+ options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [self .param .layerType ()],
616
+ False )
594
617
opts = [getExtendedLayerName (opt ) for opt in options ]
595
618
return MultipleInputPanel (opts , datatype = self .param .layerType ())
596
619
elif self .dialogType == DIALOG_BATCH :
@@ -608,7 +631,8 @@ def refresh(self):
608
631
elif self .param .layerType () in (QgsProcessing .TypeVectorAnyGeometry , QgsProcessing .TypeVector ):
609
632
options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [], False )
610
633
else :
611
- options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [self .param .layerType ()], False )
634
+ options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [self .param .layerType ()],
635
+ False )
612
636
opts = [getExtendedLayerName (opt ) for opt in options ]
613
637
self .widget .updateForOptions (opts )
614
638
@@ -644,13 +668,15 @@ def value(self):
644
668
elif self .param .layerType () in (QgsProcessing .TypeVectorAnyGeometry , QgsProcessing .TypeVector ):
645
669
options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [], False )
646
670
else :
647
- options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [self .param .layerType ()], False )
671
+ options = QgsProcessingUtils .compatibleVectorLayers (QgsProject .instance (), [self .param .layerType ()],
672
+ False )
648
673
return [options [i ] if isinstance (i , int ) else i for i in self .widget .selectedoptions ]
649
674
elif self .dialogType == DIALOG_BATCH :
650
675
return self .widget .getText ()
651
676
else :
652
677
options = self ._getOptions ()
653
- values = [options [i ] if isinstance (i , int ) else QgsProcessingModelChildParameterSource .fromStaticValue (i ) for i in self .widget .selectedoptions ]
678
+ values = [options [i ] if isinstance (i , int ) else QgsProcessingModelChildParameterSource .fromStaticValue (i )
679
+ for i in self .widget .selectedoptions ]
654
680
if len (values ) == 0 and not self .param .flags () & QgsProcessing .FlagOptional :
655
681
raise InvalidParameterValue ()
656
682
return values
@@ -674,7 +700,6 @@ def value(self):
674
700
675
701
676
702
class MapLayerWidgetWrapper (WidgetWrapper ):
677
-
678
703
NOT_SELECTED = '[Not selected]'
679
704
680
705
def createWidget (self ):
@@ -737,8 +762,9 @@ def setComboBoxFilters(self, combo):
737
762
pass
738
763
739
764
def getAvailableLayers (self ):
740
- return self .dialog .getAvailableValuesOfType ([QgsProcessingParameterRasterLayer , QgsProcessingParameterVectorLayer , QgsProcessingParameterMapLayer ],
741
- [QgsProcessingOutputRasterLayer , QgsProcessingOutputVectorLayer ])
765
+ return self .dialog .getAvailableValuesOfType (
766
+ [QgsProcessingParameterRasterLayer , QgsProcessingParameterVectorLayer , QgsProcessingParameterMapLayer ],
767
+ [QgsProcessingOutputRasterLayer , QgsProcessingOutputVectorLayer ])
742
768
743
769
def selectFile (self ):
744
770
filename , selected_filter = self .getFileName (self .combo .currentText ())
@@ -777,6 +803,7 @@ def validator(v):
777
803
return self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
778
804
else :
779
805
return os .path .exists (v )
806
+
780
807
return self .comboValue (validator , combobox = self .combo )
781
808
782
809
@@ -839,7 +866,6 @@ def value(self):
839
866
840
867
841
868
class FeatureSourceWidgetWrapper (WidgetWrapper ):
842
-
843
869
NOT_SELECTED = '[Not selected]'
844
870
845
871
def createWidget (self ):
@@ -908,7 +934,9 @@ def createWidget(self):
908
934
return widget
909
935
else :
910
936
self .combo = QComboBox ()
911
- layers = self .dialog .getAvailableValuesOfType ((QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer ), QgsProcessingOutputVectorLayer , self .param .dataTypes ())
937
+ layers = self .dialog .getAvailableValuesOfType (
938
+ (QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer ),
939
+ QgsProcessingOutputVectorLayer , self .param .dataTypes ())
912
940
self .combo .setEditable (True )
913
941
for layer in layers :
914
942
self .combo .addItem (self .dialog .resolveValueDescription (layer ), layer )
@@ -979,6 +1007,7 @@ def validator(v):
979
1007
return self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
980
1008
else :
981
1009
return os .path .exists (v )
1010
+
982
1011
return self .comboValue (validator , combobox = self .combo )
983
1012
984
1013
@@ -997,8 +1026,9 @@ def createWidget(self):
997
1026
998
1027
else :
999
1028
# strings, numbers, files and table fields are all allowed input types
1000
- strings = self .dialog .getAvailableValuesOfType ([QgsProcessingParameterString , QgsProcessingParameterNumber , QgsProcessingParameterFile ,
1001
- QgsProcessingParameterField , QgsProcessingParameterExpression ], [QgsProcessingOutputString ])
1029
+ strings = self .dialog .getAvailableValuesOfType (
1030
+ [QgsProcessingParameterString , QgsProcessingParameterNumber , QgsProcessingParameterFile ,
1031
+ QgsProcessingParameterField , QgsProcessingParameterExpression ], [QgsProcessingOutputString ])
1002
1032
options = [(self .dialog .resolveValueDescription (s ), s ) for s in strings ]
1003
1033
if self .param .multiLine ():
1004
1034
widget = MultilineTextPanel (options )
@@ -1068,6 +1098,7 @@ def value(self):
1068
1098
else :
1069
1099
def validator (v ):
1070
1100
return bool (v ) or self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
1101
+
1071
1102
return self .comboValue (validator )
1072
1103
1073
1104
@@ -1082,7 +1113,9 @@ def createWidget(self):
1082
1113
if self .param .defaultValue ():
1083
1114
widget .setExpression (self .param .defaultValue ())
1084
1115
else :
1085
- strings = self .dialog .getAvailableValuesOfType ([QgsProcessingParameterExpression , QgsProcessingParameterString , QgsProcessingParameterNumber ], QgsProcessingOutputString )
1116
+ strings = self .dialog .getAvailableValuesOfType (
1117
+ [QgsProcessingParameterExpression , QgsProcessingParameterString , QgsProcessingParameterNumber ],
1118
+ QgsProcessingOutputString )
1086
1119
options = [(self .dialog .resolveValueDescription (s ), s ) for s in strings ]
1087
1120
widget = QComboBox ()
1088
1121
widget .setEditable (True )
@@ -1125,11 +1158,11 @@ def value(self):
1125
1158
else :
1126
1159
def validator (v ):
1127
1160
return bool (v ) or self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
1161
+
1128
1162
return self .comboValue (validator )
1129
1163
1130
1164
1131
1165
class VectorLayerWidgetWrapper (WidgetWrapper ):
1132
-
1133
1166
NOT_SELECTED = '[Not selected]'
1134
1167
1135
1168
def createWidget (self ):
@@ -1182,7 +1215,8 @@ def createWidget(self):
1182
1215
else :
1183
1216
self .combo = QComboBox ()
1184
1217
self .combo .setEditable (True )
1185
- tables = self .dialog .getAvailableValuesOfType (QgsProcessingParameterVectorLayer , QgsProcessingOutputVectorLayer )
1218
+ tables = self .dialog .getAvailableValuesOfType (QgsProcessingParameterVectorLayer ,
1219
+ QgsProcessingOutputVectorLayer )
1186
1220
if self .param .flags () & QgsProcessingParameterDefinition .FlagOptional :
1187
1221
self .combo .addItem (self .NOT_SELECTED , None )
1188
1222
for table in tables :
@@ -1237,11 +1271,11 @@ def value(self):
1237
1271
else :
1238
1272
def validator (v ):
1239
1273
return bool (v ) or self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
1274
+
1240
1275
return self .comboValue (validator , combobox = self .combo )
1241
1276
1242
1277
1243
1278
class TableFieldWidgetWrapper (WidgetWrapper ):
1244
-
1245
1279
NOT_SET = '[Not set]'
1246
1280
1247
1281
def createWidget (self ):
@@ -1264,13 +1298,15 @@ def createWidget(self):
1264
1298
else :
1265
1299
widget = QComboBox ()
1266
1300
widget .setEditable (True )
1267
- fields = self .dialog .getAvailableValuesOfType ([QgsProcessingParameterField , QgsProcessingParameterString ], [QgsProcessingOutputString ])
1301
+ fields = self .dialog .getAvailableValuesOfType ([QgsProcessingParameterField , QgsProcessingParameterString ],
1302
+ [QgsProcessingOutputString ])
1268
1303
if self .param .flags () & QgsProcessingParameterDefinition .FlagOptional :
1269
1304
widget .addItem (self .NOT_SET , None )
1270
1305
for f in fields :
1271
1306
widget .addItem (self .dialog .resolveValueDescription (f ), f )
1272
1307
widget .setToolTip (
1273
- self .tr ('Input parameter, or name of field (separate field names with ; for multiple field parameters)' ))
1308
+ self .tr (
1309
+ 'Input parameter, or name of field (separate field names with ; for multiple field parameters)' ))
1274
1310
return widget
1275
1311
1276
1312
def postInitialize (self , wrappers ):
@@ -1326,7 +1362,7 @@ def setValue(self, value):
1326
1362
options = self .widget .options
1327
1363
selected = []
1328
1364
for i , opt in enumerate (options ):
1329
- if opt in value or opt == value :
1365
+ if opt in value or opt == value :
1330
1366
selected .append (i )
1331
1367
self .widget .setSelectedItems (selected )
1332
1368
else :
@@ -1346,11 +1382,11 @@ def value(self):
1346
1382
else :
1347
1383
def validator (v ):
1348
1384
return bool (v ) or self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
1385
+
1349
1386
return self .comboValue (validator )
1350
1387
1351
1388
1352
1389
class BandWidgetWrapper (WidgetWrapper ):
1353
-
1354
1390
NOT_SET = '[Not set]'
1355
1391
1356
1392
def createWidget (self ):
@@ -1364,7 +1400,8 @@ def createWidget(self):
1364
1400
else :
1365
1401
widget = QComboBox ()
1366
1402
widget .setEditable (True )
1367
- fields = self .dialog .getAvailableValuesOfType ([QgsProcessingParameterBand , QgsProcessingParameterNumber ], [QgsProcessingOutputNumber ])
1403
+ fields = self .dialog .getAvailableValuesOfType ([QgsProcessingParameterBand , QgsProcessingParameterNumber ],
1404
+ [QgsProcessingOutputNumber ])
1368
1405
if self .param .flags () & QgsProcessingParameterDefinition .FlagOptional :
1369
1406
widget .addItem (self .NOT_SET , None )
1370
1407
for f in fields :
@@ -1410,11 +1447,11 @@ def value(self):
1410
1447
else :
1411
1448
def validator (v ):
1412
1449
return bool (v ) or self .param .flags () & QgsProcessingParameterDefinition .FlagOptional
1450
+
1413
1451
return self .comboValue (validator )
1414
1452
1415
1453
1416
1454
class WidgetWrapperFactory :
1417
-
1418
1455
"""
1419
1456
Factory for parameter widget wrappers
1420
1457
"""
0 commit comments