Skip to content

Commit bb0938a

Browse files
arnaud-morvanvolaya
authored andcommitted
Use boolean wrapper in modeler algorithm dialog
1 parent fbab369 commit bb0938a

File tree

1 file changed

+37
-29
lines changed

1 file changed

+37
-29
lines changed

python/plugins/processing/modeler/ModelerParametersDialog.py

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@
4040

4141
from qgis.gui import QgsMessageBar
4242

43+
from processing.gui.wrappers import (
44+
DIALOG_MODELER,
45+
wrapper_from_param,
46+
NotYetImplementedWidgetWrapper,
47+
)
48+
4349
from processing.gui.CrsSelectionPanel import CrsSelectionPanel
4450
from processing.gui.MultipleInputPanel import MultipleInputPanel
4551
from processing.gui.FixedTablePanel import FixedTablePanel
@@ -49,7 +55,6 @@
4955
from processing.core.parameters import (ParameterExtent,
5056
ParameterRaster,
5157
ParameterVector,
52-
ParameterBoolean,
5358
ParameterTable,
5459
ParameterFixedTable,
5560
ParameterMultipleInput,
@@ -107,6 +112,7 @@ def setupUi(self):
107112
self.widgets = {}
108113
self.checkBoxes = {}
109114
self.showAdvanced = False
115+
self.widget_wrappers = {}
110116
self.valueItems = {}
111117
self.dependentItems = {}
112118
self.resize(650, 450)
@@ -160,7 +166,9 @@ def setupUi(self):
160166
desc += self.tr('(x, y)')
161167
label = QLabel(desc)
162168
self.labels[param.name] = label
163-
widget = self.getWidgetFromParameter(param)
169+
wrapper = self.getWidgetWrapperFromParameter(param)
170+
self.widget_wrappers[param.name] = wrapper
171+
widget = wrapper.widget
164172
self.valueItems[param.name] = widget
165173
if param.name in list(tooltips.keys()):
166174
tooltip = tooltips[param.name]
@@ -308,6 +316,20 @@ def resolveValueDescription(self, value):
308316
alg = self.model.algs[value.alg]
309317
return self.tr("'%s' from algorithm '%s'") % (alg.algorithm.getOutputFromName(value.output).description, alg.description)
310318

319+
def getWidgetWrapperFromParameter(self, param):
320+
extra_values = []
321+
values = self.getAvailableValuesOfType(param.__class__, None)
322+
for value in values:
323+
extra_values.append((self.resolveValueDescription(value), value))
324+
325+
wrapper = wrapper_from_param(param, DIALOG_MODELER, extra_values)
326+
if wrapper is not None:
327+
return wrapper
328+
329+
widget = self.getWidgetFromParameter(param)
330+
wrapper = NotYetImplementedWidgetWrapper(param, widget)
331+
return wrapper
332+
311333
def getWidgetFromParameter(self, param):
312334
if isinstance(param, ParameterRaster):
313335
item = QComboBox()
@@ -333,17 +355,6 @@ def getWidgetFromParameter(self, param):
333355
item.addItem(self.resolveValueDescription(table), table)
334356
for layer in layers:
335357
item.addItem(self.resolveValueDescription(layer), layer)
336-
elif isinstance(param, ParameterBoolean):
337-
item = QComboBox()
338-
item.addItem('Yes')
339-
item.addItem('No')
340-
bools = self.getAvailableValuesOfType(ParameterBoolean, None)
341-
for b in bools:
342-
item.addItem(self.resolveValueDescription(b), b)
343-
if param.default:
344-
item.setCurrentIndex(0)
345-
else:
346-
item.setCurrentIndex(1)
347358
elif isinstance(param, ParameterSelection):
348359
item = QComboBox()
349360
item.addItems(param.options)
@@ -487,11 +498,6 @@ def setComboBoxValue(self, combo, value, param):
487498
combo.setEditText(str(value))
488499
elif isinstance(param, ParameterSelection):
489500
combo.setCurrentIndex(int(value))
490-
elif isinstance(param, ParameterBoolean):
491-
if value:
492-
combo.setCurrentIndex(0)
493-
else:
494-
combo.setCurrentIndex(1)
495501

496502
def setPreviousValues(self):
497503
if self._algName is not None:
@@ -500,19 +506,23 @@ def setPreviousValues(self):
500506
for param in alg.algorithm.parameters:
501507
if param.hidden:
502508
continue
503-
widget = self.valueItems[param.name]
504509
if param.name in alg.params:
505510
value = alg.params[param.name]
506511
else:
507512
value = param.default
513+
514+
wrapper = self.widget_wrappers[param.name]
515+
if wrapper.implemented:
516+
wrapper.setValue(value)
517+
518+
widget = wrapper.widget
508519
if isinstance(param, (
509520
ParameterRaster,
510521
ParameterVector,
511522
ParameterTable,
512523
ParameterTableField,
513524
ParameterSelection,
514525
ParameterNumber,
515-
ParameterBoolean,
516526
ParameterExtent,
517527
ParameterFile,
518528
ParameterPoint,
@@ -567,7 +577,7 @@ def createAlgorithm(self):
567577
for param in params:
568578
if param.hidden:
569579
continue
570-
if not self.setParamValue(alg, param, self.valueItems[param.name]):
580+
if not self.setParamValue(alg, param, self.widget_wrappers[param.name]):
571581
self.bar.pushMessage("Error", "Wrong or missing value for parameter '%s'" % param.description,
572582
level=QgsMessageBar.WARNING)
573583
return None
@@ -723,17 +733,15 @@ def setParamCrsValue(self, alg, param, widget):
723733
alg.params[param.name] = value
724734
return True
725735

726-
def setParamValue(self, alg, param, widget):
736+
def setParamValue(self, alg, param, wrapper):
737+
if wrapper.implemented:
738+
alg.params[param.name] = wrapper.value()
739+
return True
740+
741+
widget = wrapper.widget
727742
if isinstance(param, (ParameterRaster, ParameterVector,
728743
ParameterTable)):
729744
return self.setParamValueLayerOrTable(alg, param, widget)
730-
elif isinstance(param, ParameterBoolean):
731-
if widget.currentIndex() < 2:
732-
value = widget.currentIndex() == 0
733-
else:
734-
value = widget.itemData(widget.currentIndex())
735-
alg.params[param.name] = value
736-
return True
737745
elif isinstance(param, ParameterString):
738746
return self.setParamStringValue(alg, param, widget)
739747
elif isinstance(param, ParameterNumber):

0 commit comments

Comments
 (0)