62
62
QDialogButtonBox ,
63
63
QMessageBox )
64
64
65
+ from processing .core import parameters
66
+
65
67
66
68
class ModelerParameterDefinitionDialog (QDialog ):
67
- PARAMETER_NUMBER = 'Number'
68
- PARAMETER_RASTER = 'Raster Layer'
69
- PARAMETER_TABLE = 'Vector Layer'
70
- PARAMETER_VECTOR = 'Vector Features'
71
- PARAMETER_STRING = 'String'
72
- PARAMETER_EXPRESSION = 'Expression'
73
- PARAMETER_BOOLEAN = 'Boolean'
74
- PARAMETER_TABLE_FIELD = 'Vector Field'
75
- PARAMETER_EXTENT = 'Extent'
76
- PARAMETER_FILE = 'File'
77
- PARAMETER_POINT = 'Point'
78
- PARAMETER_CRS = 'CRS'
79
- PARAMETER_MULTIPLE = 'Multiple Input'
80
- PARAMETER_BAND = 'Raster Band'
81
- PARAMETER_MAP_LAYER = 'Map Layer'
82
-
83
- paramTypes = [
84
- PARAMETER_BOOLEAN ,
85
- PARAMETER_EXTENT ,
86
- PARAMETER_FILE ,
87
- PARAMETER_NUMBER ,
88
- PARAMETER_RASTER ,
89
- PARAMETER_STRING ,
90
- PARAMETER_EXPRESSION ,
91
- PARAMETER_MAP_LAYER ,
92
- PARAMETER_TABLE ,
93
- PARAMETER_TABLE_FIELD ,
94
- PARAMETER_VECTOR ,
95
- PARAMETER_POINT ,
96
- PARAMETER_CRS ,
97
- PARAMETER_MULTIPLE ,
98
- PARAMETER_BAND
99
- ]
100
69
101
70
def __init__ (self , alg , paramType = None , param = None ):
102
71
self .alg = alg
@@ -128,15 +97,15 @@ def setupUi(self):
128
97
if isinstance (self .param , QgsProcessingParameterDefinition ):
129
98
self .nameTextBox .setText (self .param .description ())
130
99
131
- if self .paramType == ModelerParameterDefinitionDialog .PARAMETER_BOOLEAN or \
100
+ if self .paramType == parameters .PARAMETER_BOOLEAN or \
132
101
isinstance (self .param , QgsProcessingParameterBoolean ):
133
102
self .state = QCheckBox ()
134
103
self .state .setText (self .tr ('Checked' ))
135
104
self .state .setChecked (False )
136
105
if self .param is not None :
137
106
self .state .setChecked (bool (self .param .defaultValue ()))
138
107
self .verticalLayout .addWidget (self .state )
139
- elif self .paramType == ModelerParameterDefinitionDialog .PARAMETER_TABLE_FIELD or \
108
+ elif self .paramType == parameters .PARAMETER_TABLE_FIELD or \
140
109
isinstance (self .param , QgsProcessingParameterField ):
141
110
self .verticalLayout .addWidget (QLabel (self .tr ('Parent layer' )))
142
111
self .parentCombo = QComboBox ()
@@ -183,7 +152,7 @@ def setupUi(self):
183
152
self .defaultTextBox .setText (str (default ))
184
153
self .verticalLayout .addWidget (self .defaultTextBox )
185
154
186
- elif self .paramType == ModelerParameterDefinitionDialog .PARAMETER_BAND or \
155
+ elif self .paramType == parameters .PARAMETER_BAND or \
187
156
isinstance (self .param , QgsProcessingParameterBand ):
188
157
self .verticalLayout .addWidget (QLabel (self .tr ('Parent layer' )))
189
158
self .parentCombo = QComboBox ()
@@ -198,7 +167,7 @@ def setupUi(self):
198
167
idx += 1
199
168
self .verticalLayout .addWidget (self .parentCombo )
200
169
elif (self .paramType in (
201
- ModelerParameterDefinitionDialog .PARAMETER_VECTOR , ModelerParameterDefinitionDialog .PARAMETER_TABLE ) or
170
+ parameters .PARAMETER_VECTOR , parameters .PARAMETER_TABLE ) or
202
171
isinstance (self .param , (QgsProcessingParameterFeatureSource , QgsProcessingParameterVectorLayer ))):
203
172
self .verticalLayout .addWidget (QLabel (self .tr ('Geometry type' )))
204
173
self .shapetypeCombo = QComboBox ()
@@ -210,7 +179,7 @@ def setupUi(self):
210
179
if self .param is not None :
211
180
self .shapetypeCombo .setCurrentIndex (self .shapetypeCombo .findData (self .param .dataTypes ()[0 ]))
212
181
self .verticalLayout .addWidget (self .shapetypeCombo )
213
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_MULTIPLE or
182
+ elif (self .paramType == parameters .PARAMETER_MULTIPLE or
214
183
isinstance (self .param , QgsProcessingParameterMultipleLayers )):
215
184
self .verticalLayout .addWidget (QLabel (self .tr ('Data type' )))
216
185
self .datatypeCombo = QComboBox ()
@@ -225,7 +194,7 @@ def setupUi(self):
225
194
if self .param is not None :
226
195
self .datatypeCombo .setCurrentIndex (self .datatypeCombo .findData (self .param .layerType ()))
227
196
self .verticalLayout .addWidget (self .datatypeCombo )
228
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_NUMBER or
197
+ elif (self .paramType == parameters .PARAMETER_NUMBER or
229
198
isinstance (self .param , QgsProcessingParameterNumber )):
230
199
self .verticalLayout .addWidget (QLabel (self .tr ('Min value' )))
231
200
self .minTextBox = QLineEdit ()
@@ -246,7 +215,7 @@ def setupUi(self):
246
215
if default :
247
216
self .defaultTextBox .setText (str (default ))
248
217
self .verticalLayout .addWidget (self .defaultTextBox )
249
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_EXPRESSION or
218
+ elif (self .paramType == parameters .PARAMETER_EXPRESSION or
250
219
isinstance (self .param , QgsProcessingParameterExpression )):
251
220
self .verticalLayout .addWidget (QLabel (self .tr ('Default value' )))
252
221
self .defaultEdit = QgsExpressionLineEdit ()
@@ -267,14 +236,14 @@ def setupUi(self):
267
236
self .parentCombo .setCurrentIndex (idx )
268
237
idx += 1
269
238
self .verticalLayout .addWidget (self .parentCombo )
270
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_STRING or
239
+ elif (self .paramType == parameters .PARAMETER_STRING or
271
240
isinstance (self .param , QgsProcessingParameterString )):
272
241
self .verticalLayout .addWidget (QLabel (self .tr ('Default value' )))
273
242
self .defaultTextBox = QLineEdit ()
274
243
if self .param is not None :
275
244
self .defaultTextBox .setText (self .param .defaultValue ())
276
245
self .verticalLayout .addWidget (self .defaultTextBox )
277
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_FILE or
246
+ elif (self .paramType == parameters .PARAMETER_FILE or
278
247
isinstance (self .param , QgsProcessingParameterFile )):
279
248
self .verticalLayout .addWidget (QLabel (self .tr ('Type' )))
280
249
self .fileFolderCombo = QComboBox ()
@@ -284,14 +253,14 @@ def setupUi(self):
284
253
self .fileFolderCombo .setCurrentIndex (
285
254
1 if self .param .behavior () == QgsProcessingParameterFile .Folder else 0 )
286
255
self .verticalLayout .addWidget (self .fileFolderCombo )
287
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_POINT or
256
+ elif (self .paramType == parameters .PARAMETER_POINT or
288
257
isinstance (self .param , QgsProcessingParameterPoint )):
289
258
self .verticalLayout .addWidget (QLabel (self .tr ('Default value' )))
290
259
self .defaultTextBox = QLineEdit ()
291
260
if self .param is not None :
292
261
self .defaultTextBox .setText (self .param .defaultValue ())
293
262
self .verticalLayout .addWidget (self .defaultTextBox )
294
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_CRS or
263
+ elif (self .paramType == parameters .PARAMETER_CRS or
295
264
isinstance (self .param , QgsProcessingParameterCrs )):
296
265
self .verticalLayout .addWidget (QLabel (self .tr ('Default value' )))
297
266
self .selector = QgsProjectionSelectionWidget ()
@@ -339,10 +308,10 @@ def accept(self):
339
308
i += 1
340
309
else :
341
310
name = self .param .name ()
342
- if (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_BOOLEAN or
311
+ if (self .paramType == parameters .PARAMETER_BOOLEAN or
343
312
isinstance (self .param , QgsProcessingParameterBoolean )):
344
313
self .param = QgsProcessingParameterBoolean (name , description , self .state .isChecked ())
345
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_TABLE_FIELD or
314
+ elif (self .paramType == parameters .PARAMETER_TABLE_FIELD or
346
315
isinstance (self .param , QgsProcessingParameterField )):
347
316
if self .parentCombo .currentIndex () < 0 :
348
317
QMessageBox .warning (self , self .tr ('Unable to define parameter' ),
@@ -356,38 +325,38 @@ def accept(self):
356
325
self .param = QgsProcessingParameterField (name , description , defaultValue = default ,
357
326
parentLayerParameterName = parent , type = datatype ,
358
327
allowMultiple = self .multipleCheck .isChecked ())
359
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_BAND or
328
+ elif (self .paramType == parameters .PARAMETER_BAND or
360
329
isinstance (self .param , QgsProcessingParameterBand )):
361
330
if self .parentCombo .currentIndex () < 0 :
362
331
QMessageBox .warning (self , self .tr ('Unable to define parameter' ),
363
332
self .tr ('Wrong or missing parameter values' ))
364
333
return
365
334
parent = self .parentCombo .currentData ()
366
335
self .param = QgsProcessingParameterBand (name , description , None , parent )
367
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_MAP_LAYER or
336
+ elif (self .paramType == parameters .PARAMETER_MAP_LAYER or
368
337
isinstance (self .param , QgsProcessingParameterMapLayer )):
369
338
self .param = QgsProcessingParameterMapLayer (
370
339
name , description )
371
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_RASTER or
340
+ elif (self .paramType == parameters .PARAMETER_RASTER or
372
341
isinstance (self .param , QgsProcessingParameterRasterLayer )):
373
342
self .param = QgsProcessingParameterRasterLayer (
374
343
name , description )
375
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_TABLE or
344
+ elif (self .paramType == parameters .PARAMETER_TABLE or
376
345
isinstance (self .param , QgsProcessingParameterVectorLayer )):
377
346
self .param = QgsProcessingParameterVectorLayer (
378
347
name , description ,
379
348
[self .shapetypeCombo .currentData ()])
380
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_VECTOR or
349
+ elif (self .paramType == parameters .PARAMETER_VECTOR or
381
350
isinstance (self .param , QgsProcessingParameterFeatureSource )):
382
351
self .param = QgsProcessingParameterFeatureSource (
383
352
name , description ,
384
353
[self .shapetypeCombo .currentData ()])
385
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_MULTIPLE or
354
+ elif (self .paramType == parameters .PARAMETER_MULTIPLE or
386
355
isinstance (self .param , QgsProcessingParameterMultipleLayers )):
387
356
self .param = QgsProcessingParameterMultipleLayers (
388
357
name , description ,
389
358
self .datatypeCombo .currentData ())
390
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_NUMBER or
359
+ elif (self .paramType == parameters .PARAMETER_NUMBER or
391
360
isinstance (self .param , QgsProcessingParameterNumber )):
392
361
try :
393
362
self .param = QgsProcessingParameterNumber (name , description , QgsProcessingParameterNumber .Double ,
@@ -402,31 +371,39 @@ def accept(self):
402
371
QMessageBox .warning (self , self .tr ('Unable to define parameter' ),
403
372
self .tr ('Wrong or missing parameter values' ))
404
373
return
405
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_EXPRESSION or
374
+ elif (self .paramType == parameters .PARAMETER_EXPRESSION or
406
375
isinstance (self .param , QgsProcessingParameterExpression )):
407
376
parent = self .parentCombo .currentData ()
408
377
self .param = QgsProcessingParameterExpression (name , description ,
409
378
str (self .defaultEdit .expression ()),
410
379
parent )
411
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_STRING or
380
+ elif (self .paramType == parameters .PARAMETER_STRING or
412
381
isinstance (self .param , QgsProcessingParameterString )):
413
382
self .param = QgsProcessingParameterString (name , description ,
414
383
str (self .defaultTextBox .text ()))
415
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_EXTENT or
384
+ elif (self .paramType == parameters .PARAMETER_EXTENT or
416
385
isinstance (self .param , QgsProcessingParameterExtent )):
417
386
self .param = QgsProcessingParameterExtent (name , description )
418
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_FILE or
387
+ elif (self .paramType == parameters .PARAMETER_FILE or
419
388
isinstance (self .param , QgsProcessingParameterFile )):
420
389
isFolder = self .fileFolderCombo .currentIndex () == 1
421
390
self .param = QgsProcessingParameterFile (name , description ,
422
391
QgsProcessingParameterFile .Folder if isFolder else QgsProcessingParameterFile .File )
423
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_POINT or
392
+ elif (self .paramType == parameters .PARAMETER_POINT or
424
393
isinstance (self .param , QgsProcessingParameterPoint )):
425
394
self .param = QgsProcessingParameterPoint (name , description ,
426
395
str (self .defaultTextBox .text ()))
427
- elif (self .paramType == ModelerParameterDefinitionDialog .PARAMETER_CRS or
396
+ elif (self .paramType == parameters .PARAMETER_CRS or
428
397
isinstance (self .param , QgsProcessingParameterCrs )):
429
398
self .param = QgsProcessingParameterCrs (name , description , self .selector .crs ().authid ())
399
+ else :
400
+ from processing .core .Processing import Processing
401
+
402
+ param = Processing .registeredParameters ()[self .paramType ]
403
+
404
+ self .param = param ['parameter' ](name , description , None )
405
+ self .param .setMetadata (param ['metadata' ])
406
+
430
407
if not self .requiredCheck .isChecked ():
431
408
self .param .setFlags (self .param .flags () | QgsProcessingParameterDefinition .FlagOptional )
432
409
@@ -442,24 +419,3 @@ def reject(self):
442
419
settings .setValue ("/Processing/modelParametersDefinitionDialogGeometry" , self .saveGeometry ())
443
420
444
421
QDialog .reject (self )
445
-
446
- @staticmethod
447
- def inputTooltip (input_type ):
448
- tooltips = {
449
- ModelerParameterDefinitionDialog .PARAMETER_NUMBER : QCoreApplication .translate ('Processing' , 'A numeric parameter, including float or integer values.' ),
450
- ModelerParameterDefinitionDialog .PARAMETER_RASTER : QCoreApplication .translate ('Processing' , 'A raster layer parameter.' ),
451
- ModelerParameterDefinitionDialog .PARAMETER_TABLE : QCoreApplication .translate ('Processing' , 'A vector layer parameter, e.g. for algorithms which change layer styles, edit layers in place, or other operations which affect an entire layer.' ),
452
- ModelerParameterDefinitionDialog .PARAMETER_VECTOR : QCoreApplication .translate ('Processing' , 'A vector feature parameter, e.g. for algorithms which operate on the features within a layer.' ),
453
- ModelerParameterDefinitionDialog .PARAMETER_STRING : QCoreApplication .translate ('Processing' , 'A freeform string parameter.' ),
454
- ModelerParameterDefinitionDialog .PARAMETER_EXPRESSION : QCoreApplication .translate ('Processing' , 'A QGIS expression parameter, which presents an expression builder widget to users.' ),
455
- ModelerParameterDefinitionDialog .PARAMETER_BOOLEAN : QCoreApplication .translate ('Processing' , 'A boolean parameter, for true/false values.' ),
456
- ModelerParameterDefinitionDialog .PARAMETER_TABLE_FIELD : QCoreApplication .translate ('Processing' , 'A vector field parameter, for selecting an existing field from a vector source.' ),
457
- ModelerParameterDefinitionDialog .PARAMETER_EXTENT : QCoreApplication .translate ('Processing' , 'A map extent parameter.' ),
458
- ModelerParameterDefinitionDialog .PARAMETER_FILE : QCoreApplication .translate ('Processing' , 'A file parameter, for use with non-map layer file sources.' ),
459
- ModelerParameterDefinitionDialog .PARAMETER_POINT : QCoreApplication .translate ('Processing' , 'A geographic point parameter.' ),
460
- ModelerParameterDefinitionDialog .PARAMETER_CRS : QCoreApplication .translate ('Processing' , 'A coordinate reference system (CRS) input parameter.' ),
461
- ModelerParameterDefinitionDialog .PARAMETER_MULTIPLE : QCoreApplication .translate ('Processing' , 'An input allowing selection of multiple sources, including multiple map layers or file sources.' ),
462
- ModelerParameterDefinitionDialog .PARAMETER_BAND : QCoreApplication .translate ('Processing' , 'A raster band parameter, for selecting an existing band from a raster source.' ),
463
- ModelerParameterDefinitionDialog .PARAMETER_MAP_LAYER : QCoreApplication .translate ('Processing' , 'A generic map layer parameter, which accepts either vector or raster layers.' )
464
- }
465
- return tooltips [input_type ]
0 commit comments