Skip to content

Commit eba96fb

Browse files
committedMar 1, 2018
Add a processing parameter registry
to manage parameter metadata in a single place.
1 parent 8b78440 commit eba96fb

File tree

4 files changed

+174
-104
lines changed

4 files changed

+174
-104
lines changed
 

‎python/plugins/processing/core/Processing.py‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
QgsProcessingOutputMapLayer,
4646
QgsProcessingOutputMultipleLayers)
4747

48+
from .parameters import initializeParameters
49+
4850
import processing
4951
from processing.core.ProcessingConfig import ProcessingConfig
5052
from processing.gui.MessageBarProgress import MessageBarProgress
@@ -67,6 +69,7 @@
6769

6870
class Processing(object):
6971
BASIC_PROVIDERS = []
72+
REGISTERED_PARAMETERS = dict()
7073

7174
@staticmethod
7275
def activateProvider(providerOrName, activate=True):
@@ -97,6 +100,7 @@ def initialize():
97100
if QgsApplication.processingRegistry().addProvider(p):
98101
Processing.BASIC_PROVIDERS.append(p)
99102
# And initialize
103+
initializeParameters()
100104
ProcessingConfig.initialize()
101105
ProcessingConfig.readSettings()
102106
RenderingStyles.loadStyles()
@@ -107,6 +111,33 @@ def deinitialize():
107111
QgsApplication.processingRegistry().removeProvider(p)
108112

109113
Processing.BASIC_PROVIDERS = []
114+
Processing.REGISTERED_PARAMETERS = dict()
115+
116+
@staticmethod
117+
def registerParameter(id, name, parameter, metadata=dict(), description=None):
118+
"""Register a new parameter.
119+
The ``name`` is a human readable translated string, the ``parameter`` is a class type with the base class ``qgis.core.QgsProcessingParameterDefinition``,
120+
the ``metadata`` is a dictionary with additional metadata, mainly used for widget wrappers.
121+
"""
122+
Processing.REGISTERED_PARAMETERS[id] = {
123+
'name': name,
124+
'parameter': parameter,
125+
'metadata': metadata,
126+
'description': description
127+
}
128+
129+
@staticmethod
130+
def unregisterParameter(name):
131+
"""Unregister a registered parameter with the given name.
132+
"""
133+
del Processing.REGISTERED_PARAMETERS[name]
134+
135+
@staticmethod
136+
def registeredParameters():
137+
"""Returns a set of registered parameters.
138+
Each entry is a tuple consisting of a human readable name and the class.
139+
"""
140+
return Processing.REGISTERED_PARAMETERS
110141

111142
@staticmethod
112143
def runAlgorithm(algOrName, parameters, onFinish=None, feedback=None, context=None):

‎python/plugins/processing/core/parameters.py‎

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,14 @@
4141
QgsProcessingParameterDefinition,
4242
QgsProcessingParameterRasterLayer,
4343
QgsProcessingParameterVectorLayer,
44+
QgsProcessingParameterBand,
4445
QgsProcessingParameterBoolean,
4546
QgsProcessingParameterCrs,
4647
QgsProcessingParameterRange,
4748
QgsProcessingParameterPoint,
4849
QgsProcessingParameterEnum,
4950
QgsProcessingParameterExtent,
51+
QgsProcessingParameterExpression,
5052
QgsProcessingParameterMatrix,
5153
QgsProcessingParameterFile,
5254
QgsProcessingParameterField,
@@ -55,10 +57,36 @@
5557
QgsProcessingParameterFolderDestination,
5658
QgsProcessingParameterRasterDestination,
5759
QgsProcessingParameterString,
60+
QgsProcessingParameterMapLayer,
5861
QgsProcessingParameterMultipleLayers,
5962
QgsProcessingParameterFeatureSource,
6063
QgsProcessingParameterNumber)
6164

65+
from PyQt5.QtCore import QCoreApplication
66+
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+
PARAMETER_RANGE = 'Range'
83+
PARAMETER_ENUM = 'Enum'
84+
PARAMETER_MATRIX = 'Matrix'
85+
PARAMETER_VECTOR_DESTINATION = 'Vector Destination'
86+
PARAMETER_FILE_DESTINATION = 'File Destination'
87+
PARAMETER_FOLDER_DESTINATION = 'Folder Destination'
88+
PARAMETER_RASTER_DESTINATION = 'Raster Destination'
89+
6290

6391
def getParameterFromString(s):
6492
# Try the parameter definitions used in description files
@@ -209,3 +237,53 @@ def getParameterFromString(s):
209237
param = QgsProcessingParameters.parameterFromScriptCode(s)
210238
if param:
211239
return param
240+
241+
242+
def initializeParameters():
243+
from processing.core.Processing import Processing
244+
245+
"""
246+
ModelerParameterDefinitionDialog.PARAMETER_TABLE: QCoreApplication.translate('Processing',
247+
'A vector layer parameter, e.g. for algorithms which change layer styles, edit layers in place, or other operations which affect an entire layer.'),
248+
"""
249+
250+
Processing.registerParameter(PARAMETER_MAP_LAYER, QCoreApplication.translate('Processing', 'Map Layer'),
251+
QgsProcessingParameterMapLayer,
252+
description=QCoreApplication.translate('Processing', 'A generic map layer parameter, which accepts either vector or raster layers.'))
253+
Processing.registerParameter(PARAMETER_BAND, QCoreApplication.translate('Processing', 'Raster Band'),
254+
QgsProcessingParameterBand,
255+
description=QCoreApplication.translate('Processing', 'A raster band parameter, for selecting an existing band from a raster source.'))
256+
Processing.registerParameter(PARAMETER_EXPRESSION, QCoreApplication.translate('Processing', 'Expression'),
257+
QgsProcessingParameterExpression,
258+
description=QCoreApplication.translate('Processing', 'A QGIS expression parameter, which presents an expression builder widget to users.'))
259+
Processing.registerParameter(PARAMETER_RASTER, QCoreApplication.translate('Processing', 'Raster Layer'), QgsProcessingParameterRasterLayer,
260+
description=QCoreApplication.translate('Processing', 'A raster layer parameter.'))
261+
Processing.registerParameter(PARAMETER_TABLE, QCoreApplication.translate('Processing', 'Vector Layer'), QgsProcessingParameterVectorLayer,
262+
description=QCoreApplication.translate('Processing', 'A vector feature parameter, e.g. for algorithms which operate on the features within a layer.'))
263+
Processing.registerParameter(PARAMETER_BOOLEAN, QCoreApplication.translate('Processing', 'Boolean'), QgsProcessingParameterBoolean,
264+
description=QCoreApplication.translate('Processing', 'A boolean parameter, for true/false values.'))
265+
Processing.registerParameter(PARAMETER_CRS, QCoreApplication.translate('Processing', 'CRS'), QgsProcessingParameterCrs,
266+
description=QCoreApplication.translate('Processing', 'A coordinate reference system (CRS) input parameter.'))
267+
Processing.registerParameter(PARAMETER_RANGE, QCoreApplication.translate('Processing', 'Range'), QgsProcessingParameterRange)
268+
Processing.registerParameter(PARAMETER_POINT, QCoreApplication.translate('Processing', 'Point'), QgsProcessingParameterPoint,
269+
description=QCoreApplication.translate('Processing', 'A geographic point parameter.'))
270+
Processing.registerParameter(PARAMETER_ENUM, QCoreApplication.translate('Processing', 'Enum'), QgsProcessingParameterEnum)
271+
Processing.registerParameter(PARAMETER_EXTENT, QCoreApplication.translate('Processing', 'Extent'), QgsProcessingParameterExtent,
272+
description=QCoreApplication.translate('Processing', 'A map extent parameter.'))
273+
Processing.registerParameter(PARAMETER_MATRIX, QCoreApplication.translate('Processing', 'Matrix'), QgsProcessingParameterMatrix)
274+
Processing.registerParameter(PARAMETER_FILE, QCoreApplication.translate('Processing', 'File'), QgsProcessingParameterFile,
275+
description=QCoreApplication.translate('Processing', 'A file parameter, for use with non-map layer file sources.'))
276+
Processing.registerParameter(PARAMETER_TABLE_FIELD, QCoreApplication.translate('Processing', 'Field'), QgsProcessingParameterField,
277+
description=QCoreApplication.translate('Processing', 'A vector field parameter, for selecting an existing field from a vector source.'))
278+
Processing.registerParameter(PARAMETER_VECTOR_DESTINATION, QCoreApplication.translate('Processing', 'Vector Destination'), QgsProcessingParameterVectorDestination)
279+
Processing.registerParameter(PARAMETER_FILE_DESTINATION, QCoreApplication.translate('Processing', 'File Destination'), QgsProcessingParameterFileDestination)
280+
Processing.registerParameter(PARAMETER_FOLDER_DESTINATION, QCoreApplication.translate('Processing', 'Folder Destination'), QgsProcessingParameterFolderDestination)
281+
Processing.registerParameter(PARAMETER_RASTER_DESTINATION, QCoreApplication.translate('Processing', 'Raster Destination'), QgsProcessingParameterRasterDestination)
282+
Processing.registerParameter(PARAMETER_STRING, QCoreApplication.translate('Processing', 'String'), QgsProcessingParameterString,
283+
description=QCoreApplication.translate('Processing', 'A freeform string parameter.'))
284+
Processing.registerParameter(PARAMETER_MULTIPLE, QCoreApplication.translate('Processing', 'Multiple Layers'), QgsProcessingParameterMultipleLayers,
285+
description=QCoreApplication.translate('Processing', 'An input allowing selection of multiple sources, including multiple map layers or file sources.'))
286+
Processing.registerParameter(PARAMETER_VECTOR, QCoreApplication.translate('Processing', 'Feature Source'), QgsProcessingParameterFeatureSource)
287+
Processing.registerParameter(PARAMETER_NUMBER, QCoreApplication.translate('Processing', 'Number'), QgsProcessingParameterNumber,
288+
description=QCoreApplication.translate('Processing', 'A numeric parameter, including float or integer values.'))
289+
Processing.registeredParameters()

‎python/plugins/processing/modeler/ModelerDialog.py‎

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,14 @@ def _dragEnterEvent(event):
154154
event.ignore()
155155

156156
def _dropEvent(event):
157+
from processing.core.Processing import Processing
158+
157159
if event.mimeData().hasText():
158-
text = event.mimeData().text()
159-
if text in ModelerParameterDefinitionDialog.paramTypes:
160-
self.addInputOfType(text, event.pos())
160+
itemId = event.mimeData().text()
161+
if itemId in Processing.registeredParameters():
162+
self.addInputOfType(itemId, event.pos())
161163
else:
162-
alg = QgsApplication.processingRegistry().createAlgorithmById(text)
164+
alg = QgsApplication.processingRegistry().createAlgorithmById(itemId)
163165
if alg is not None:
164166
self._addAlgorithm(alg, event.pos())
165167
event.accept()
@@ -545,25 +547,24 @@ def repaintModel(self, controls=True):
545547

546548
def addInput(self):
547549
item = self.inputsTree.currentItem()
548-
paramType = str(item.text(0))
549-
self.addInputOfType(paramType)
550+
param = item.data(0, Qt.UserRole)
551+
self.addInputOfType(param)
550552

551553
def addInputOfType(self, paramType, pos=None):
552-
if paramType in ModelerParameterDefinitionDialog.paramTypes:
553-
dlg = ModelerParameterDefinitionDialog(self.model, paramType)
554-
dlg.exec_()
555-
if dlg.param is not None:
556-
if pos is None:
557-
pos = self.getPositionForParameterItem()
558-
if isinstance(pos, QPoint):
559-
pos = QPointF(pos)
560-
component = QgsProcessingModelParameter(dlg.param.name())
561-
component.setDescription(dlg.param.name())
562-
component.setPosition(pos)
563-
self.model.addModelParameter(dlg.param, component)
564-
self.repaintModel()
565-
# self.view.ensureVisible(self.scene.getLastParameterItem())
566-
self.hasChanged = True
554+
dlg = ModelerParameterDefinitionDialog(self.model, paramType)
555+
dlg.exec_()
556+
if dlg.param is not None:
557+
if pos is None:
558+
pos = self.getPositionForParameterItem()
559+
if isinstance(pos, QPoint):
560+
pos = QPointF(pos)
561+
component = QgsProcessingModelParameter(dlg.param.name())
562+
component.setDescription(dlg.param.name())
563+
component.setPosition(pos)
564+
self.model.addModelParameter(dlg.param, component)
565+
self.repaintModel()
566+
# self.view.ensureVisible(self.scene.getLastParameterItem())
567+
self.hasChanged = True
567568

568569
def getPositionForParameterItem(self):
569570
MARGIN = 20
@@ -620,15 +621,19 @@ def _filterItem(self, item, text):
620621
return False
621622

622623
def fillInputsTree(self):
624+
from processing.core.Processing import Processing
625+
623626
icon = QIcon(os.path.join(pluginPath, 'images', 'input.svg'))
624627
parametersItem = QTreeWidgetItem()
625628
parametersItem.setText(0, self.tr('Parameters'))
626-
for paramType in sorted(ModelerParameterDefinitionDialog.paramTypes):
629+
sortedParams = sorted(Processing.registeredParameters().items())
630+
for param in sortedParams:
627631
paramItem = QTreeWidgetItem()
628-
paramItem.setText(0, paramType)
632+
paramItem.setText(0, param[0])
633+
paramItem.setData(0, Qt.UserRole, param[1]['parameter'])
629634
paramItem.setIcon(0, icon)
630635
paramItem.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled)
631-
paramItem.setToolTip(0, ModelerParameterDefinitionDialog.inputTooltip(paramType))
636+
paramItem.setToolTip(0, param[1]['description'])
632637
parametersItem.addChild(paramItem)
633638
self.inputsTree.addTopLevelItem(parametersItem)
634639
parametersItem.setExpanded(True)

‎python/plugins/processing/modeler/ModelerParameterDefinitionDialog.py‎

Lines changed: 36 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -62,41 +62,10 @@
6262
QDialogButtonBox,
6363
QMessageBox)
6464

65+
from processing.core import parameters
66+
6567

6668
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-
]
10069

10170
def __init__(self, alg, paramType=None, param=None):
10271
self.alg = alg
@@ -128,15 +97,15 @@ def setupUi(self):
12897
if isinstance(self.param, QgsProcessingParameterDefinition):
12998
self.nameTextBox.setText(self.param.description())
13099

131-
if self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or \
100+
if self.paramType == parameters.PARAMETER_BOOLEAN or \
132101
isinstance(self.param, QgsProcessingParameterBoolean):
133102
self.state = QCheckBox()
134103
self.state.setText(self.tr('Checked'))
135104
self.state.setChecked(False)
136105
if self.param is not None:
137106
self.state.setChecked(bool(self.param.defaultValue()))
138107
self.verticalLayout.addWidget(self.state)
139-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or \
108+
elif self.paramType == parameters.PARAMETER_TABLE_FIELD or \
140109
isinstance(self.param, QgsProcessingParameterField):
141110
self.verticalLayout.addWidget(QLabel(self.tr('Parent layer')))
142111
self.parentCombo = QComboBox()
@@ -183,7 +152,7 @@ def setupUi(self):
183152
self.defaultTextBox.setText(str(default))
184153
self.verticalLayout.addWidget(self.defaultTextBox)
185154

186-
elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BAND or \
155+
elif self.paramType == parameters.PARAMETER_BAND or \
187156
isinstance(self.param, QgsProcessingParameterBand):
188157
self.verticalLayout.addWidget(QLabel(self.tr('Parent layer')))
189158
self.parentCombo = QComboBox()
@@ -198,7 +167,7 @@ def setupUi(self):
198167
idx += 1
199168
self.verticalLayout.addWidget(self.parentCombo)
200169
elif (self.paramType in (
201-
ModelerParameterDefinitionDialog.PARAMETER_VECTOR, ModelerParameterDefinitionDialog.PARAMETER_TABLE) or
170+
parameters.PARAMETER_VECTOR, parameters.PARAMETER_TABLE) or
202171
isinstance(self.param, (QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer))):
203172
self.verticalLayout.addWidget(QLabel(self.tr('Geometry type')))
204173
self.shapetypeCombo = QComboBox()
@@ -210,7 +179,7 @@ def setupUi(self):
210179
if self.param is not None:
211180
self.shapetypeCombo.setCurrentIndex(self.shapetypeCombo.findData(self.param.dataTypes()[0]))
212181
self.verticalLayout.addWidget(self.shapetypeCombo)
213-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or
182+
elif (self.paramType == parameters.PARAMETER_MULTIPLE or
214183
isinstance(self.param, QgsProcessingParameterMultipleLayers)):
215184
self.verticalLayout.addWidget(QLabel(self.tr('Data type')))
216185
self.datatypeCombo = QComboBox()
@@ -225,7 +194,7 @@ def setupUi(self):
225194
if self.param is not None:
226195
self.datatypeCombo.setCurrentIndex(self.datatypeCombo.findData(self.param.layerType()))
227196
self.verticalLayout.addWidget(self.datatypeCombo)
228-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or
197+
elif (self.paramType == parameters.PARAMETER_NUMBER or
229198
isinstance(self.param, QgsProcessingParameterNumber)):
230199
self.verticalLayout.addWidget(QLabel(self.tr('Min value')))
231200
self.minTextBox = QLineEdit()
@@ -246,7 +215,7 @@ def setupUi(self):
246215
if default:
247216
self.defaultTextBox.setText(str(default))
248217
self.verticalLayout.addWidget(self.defaultTextBox)
249-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or
218+
elif (self.paramType == parameters.PARAMETER_EXPRESSION or
250219
isinstance(self.param, QgsProcessingParameterExpression)):
251220
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
252221
self.defaultEdit = QgsExpressionLineEdit()
@@ -267,14 +236,14 @@ def setupUi(self):
267236
self.parentCombo.setCurrentIndex(idx)
268237
idx += 1
269238
self.verticalLayout.addWidget(self.parentCombo)
270-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or
239+
elif (self.paramType == parameters.PARAMETER_STRING or
271240
isinstance(self.param, QgsProcessingParameterString)):
272241
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
273242
self.defaultTextBox = QLineEdit()
274243
if self.param is not None:
275244
self.defaultTextBox.setText(self.param.defaultValue())
276245
self.verticalLayout.addWidget(self.defaultTextBox)
277-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or
246+
elif (self.paramType == parameters.PARAMETER_FILE or
278247
isinstance(self.param, QgsProcessingParameterFile)):
279248
self.verticalLayout.addWidget(QLabel(self.tr('Type')))
280249
self.fileFolderCombo = QComboBox()
@@ -284,14 +253,14 @@ def setupUi(self):
284253
self.fileFolderCombo.setCurrentIndex(
285254
1 if self.param.behavior() == QgsProcessingParameterFile.Folder else 0)
286255
self.verticalLayout.addWidget(self.fileFolderCombo)
287-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or
256+
elif (self.paramType == parameters.PARAMETER_POINT or
288257
isinstance(self.param, QgsProcessingParameterPoint)):
289258
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
290259
self.defaultTextBox = QLineEdit()
291260
if self.param is not None:
292261
self.defaultTextBox.setText(self.param.defaultValue())
293262
self.verticalLayout.addWidget(self.defaultTextBox)
294-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or
263+
elif (self.paramType == parameters.PARAMETER_CRS or
295264
isinstance(self.param, QgsProcessingParameterCrs)):
296265
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
297266
self.selector = QgsProjectionSelectionWidget()
@@ -339,10 +308,10 @@ def accept(self):
339308
i += 1
340309
else:
341310
name = self.param.name()
342-
if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or
311+
if (self.paramType == parameters.PARAMETER_BOOLEAN or
343312
isinstance(self.param, QgsProcessingParameterBoolean)):
344313
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
346315
isinstance(self.param, QgsProcessingParameterField)):
347316
if self.parentCombo.currentIndex() < 0:
348317
QMessageBox.warning(self, self.tr('Unable to define parameter'),
@@ -356,38 +325,38 @@ def accept(self):
356325
self.param = QgsProcessingParameterField(name, description, defaultValue=default,
357326
parentLayerParameterName=parent, type=datatype,
358327
allowMultiple=self.multipleCheck.isChecked())
359-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BAND or
328+
elif (self.paramType == parameters.PARAMETER_BAND or
360329
isinstance(self.param, QgsProcessingParameterBand)):
361330
if self.parentCombo.currentIndex() < 0:
362331
QMessageBox.warning(self, self.tr('Unable to define parameter'),
363332
self.tr('Wrong or missing parameter values'))
364333
return
365334
parent = self.parentCombo.currentData()
366335
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
368337
isinstance(self.param, QgsProcessingParameterMapLayer)):
369338
self.param = QgsProcessingParameterMapLayer(
370339
name, description)
371-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or
340+
elif (self.paramType == parameters.PARAMETER_RASTER or
372341
isinstance(self.param, QgsProcessingParameterRasterLayer)):
373342
self.param = QgsProcessingParameterRasterLayer(
374343
name, description)
375-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or
344+
elif (self.paramType == parameters.PARAMETER_TABLE or
376345
isinstance(self.param, QgsProcessingParameterVectorLayer)):
377346
self.param = QgsProcessingParameterVectorLayer(
378347
name, description,
379348
[self.shapetypeCombo.currentData()])
380-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or
349+
elif (self.paramType == parameters.PARAMETER_VECTOR or
381350
isinstance(self.param, QgsProcessingParameterFeatureSource)):
382351
self.param = QgsProcessingParameterFeatureSource(
383352
name, description,
384353
[self.shapetypeCombo.currentData()])
385-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or
354+
elif (self.paramType == parameters.PARAMETER_MULTIPLE or
386355
isinstance(self.param, QgsProcessingParameterMultipleLayers)):
387356
self.param = QgsProcessingParameterMultipleLayers(
388357
name, description,
389358
self.datatypeCombo.currentData())
390-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or
359+
elif (self.paramType == parameters.PARAMETER_NUMBER or
391360
isinstance(self.param, QgsProcessingParameterNumber)):
392361
try:
393362
self.param = QgsProcessingParameterNumber(name, description, QgsProcessingParameterNumber.Double,
@@ -402,31 +371,39 @@ def accept(self):
402371
QMessageBox.warning(self, self.tr('Unable to define parameter'),
403372
self.tr('Wrong or missing parameter values'))
404373
return
405-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or
374+
elif (self.paramType == parameters.PARAMETER_EXPRESSION or
406375
isinstance(self.param, QgsProcessingParameterExpression)):
407376
parent = self.parentCombo.currentData()
408377
self.param = QgsProcessingParameterExpression(name, description,
409378
str(self.defaultEdit.expression()),
410379
parent)
411-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or
380+
elif (self.paramType == parameters.PARAMETER_STRING or
412381
isinstance(self.param, QgsProcessingParameterString)):
413382
self.param = QgsProcessingParameterString(name, description,
414383
str(self.defaultTextBox.text()))
415-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or
384+
elif (self.paramType == parameters.PARAMETER_EXTENT or
416385
isinstance(self.param, QgsProcessingParameterExtent)):
417386
self.param = QgsProcessingParameterExtent(name, description)
418-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or
387+
elif (self.paramType == parameters.PARAMETER_FILE or
419388
isinstance(self.param, QgsProcessingParameterFile)):
420389
isFolder = self.fileFolderCombo.currentIndex() == 1
421390
self.param = QgsProcessingParameterFile(name, description,
422391
QgsProcessingParameterFile.Folder if isFolder else QgsProcessingParameterFile.File)
423-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or
392+
elif (self.paramType == parameters.PARAMETER_POINT or
424393
isinstance(self.param, QgsProcessingParameterPoint)):
425394
self.param = QgsProcessingParameterPoint(name, description,
426395
str(self.defaultTextBox.text()))
427-
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or
396+
elif (self.paramType == parameters.PARAMETER_CRS or
428397
isinstance(self.param, QgsProcessingParameterCrs)):
429398
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+
430407
if not self.requiredCheck.isChecked():
431408
self.param.setFlags(self.param.flags() | QgsProcessingParameterDefinition.FlagOptional)
432409

@@ -442,24 +419,3 @@ def reject(self):
442419
settings.setValue("/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry())
443420

444421
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

Comments
 (0)
Please sign in to comment.