4040
4141from qgis .gui import QgsMessageBar
4242
43+ from processing .gui .wrappers import (
44+ DIALOG_MODELER ,
45+ wrapper_from_param ,
46+ NotYetImplementedWidgetWrapper ,
47+ )
48+
4349from processing .gui .CrsSelectionPanel import CrsSelectionPanel
4450from processing .gui .MultipleInputPanel import MultipleInputPanel
4551from processing .gui .FixedTablePanel import FixedTablePanel
4955from 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