Use boolean wrapper in standard algorithm dialog

Conflicts:
	python/plugins/processing/gui/AlgorithmDialog.py
This commit is contained in:
arnaud.morvan@camptocamp.com 2016-08-23 10:49:32 +02:00 committed by volaya
parent 728be70c0b
commit f3c9aaaa2b
2 changed files with 38 additions and 18 deletions

View File

@ -46,7 +46,6 @@ from processing.core.parameters import ParameterExtent
from processing.core.parameters import ParameterRaster
from processing.core.parameters import ParameterVector
from processing.core.parameters import ParameterTable
from processing.core.parameters import ParameterBoolean
from processing.core.parameters import ParameterSelection
from processing.core.parameters import ParameterFixedTable
from processing.core.parameters import ParameterRange
@ -103,10 +102,17 @@ class AlgorithmDialog(AlgorithmDialogBase):
for param in params:
if param.hidden:
continue
if not self.setParamValue(
param, self.mainWidget.valueItems[param.name]):
raise AlgorithmDialogBase.InvalidParameterValue(
param, self.mainWidget.valueItems[param.name])
if isinstance(param, ParameterExtent):
continue
wrapper = self.mainWidget.widget_wrappers[param.name]
if not self.setParamValue(param, wrapper):
raise AlgorithmDialogBase.InvalidParameterValue(param, wrapper)
for param in params:
if isinstance(param, ParameterExtent):
wrapper = self.mainWidget.widget_wrappers[param.name]
if not self.setParamValue(param, wrapper):
raise AlgorithmDialogBase.InvalidParameterValue(param, wrapper)
for output in outputs:
if output.hidden:
@ -129,7 +135,11 @@ class AlgorithmDialog(AlgorithmDialogBase):
raise ValueError(exp.evalErrorString())
return result
def setParamValue(self, param, widget, alg=None):
def setParamValue(self, param, wrapper, alg=None):
if wrapper.implemented:
return param.setValue(wrapper.value())
widget = wrapper.widget
if isinstance(param, ParameterRaster):
return param.setValue(widget.getValue())
elif isinstance(param, (ParameterVector, ParameterTable)):
@ -137,8 +147,6 @@ class AlgorithmDialog(AlgorithmDialogBase):
return param.setValue(widget.itemData(widget.currentIndex()))
except:
return param.setValue(widget.getValue())
elif isinstance(param, ParameterBoolean):
return param.setValue(widget.isChecked())
elif isinstance(param, ParameterSelection):
return param.setValue(widget.currentIndex())
elif isinstance(param, ParameterFixedTable):

View File

@ -42,6 +42,11 @@ from qgis.PyQt.QtGui import QIcon
from processing.core.ProcessingConfig import ProcessingConfig
from processing.gui.wrappers import (
wrapper_from_param,
NotYetImplementedWidgetWrapper,
)
from processing.gui.OutputSelectionPanel import OutputSelectionPanel
from processing.gui.InputLayerSelectorPanel import InputLayerSelectorPanel
from processing.gui.FixedTablePanel import FixedTablePanel
@ -59,7 +64,6 @@ from processing.gui.ListMultiselectWidget import ListMultiSelectWidget
from processing.core.parameters import ParameterRaster
from processing.core.parameters import ParameterVector
from processing.core.parameters import ParameterTable
from processing.core.parameters import ParameterBoolean
from processing.core.parameters import ParameterTableField
from processing.core.parameters import ParameterTableMultipleField
from processing.core.parameters import ParameterSelection
@ -101,6 +105,7 @@ class ParametersPanel(BASE, WIDGET):
self.parent = parent
self.alg = alg
self.valueItems = {}
self.widget_wrappers = {}
self.labels = {}
self.widgets = {}
self.checkBoxes = {}
@ -195,8 +200,10 @@ class ParametersPanel(BASE, WIDGET):
except:
pass
widget = self.getWidgetFromParameter(param)
self.valueItems[param.name] = widget
wrapper = self.getWidgetWrapperFromParameter(param)
self.widget_wrappers[param.name] = wrapper
self.valueItems[param.name] = wrapper.widget
widget = wrapper.widget
if isinstance(param, ParameterVector) and \
not self.alg.allowOnlyOpenedLayers:
@ -218,7 +225,7 @@ class ParametersPanel(BASE, WIDGET):
tooltips = self.alg.getParameterDescriptions()
widget.setToolTip(tooltips.get(param.name, param.description))
if isinstance(param, ParameterBoolean):
if isinstance(widget, QCheckBox):
widget.setText(desc)
if param.isAdvanced:
self.layoutAdvanced.addWidget(widget)
@ -255,6 +262,8 @@ class ParametersPanel(BASE, WIDGET):
self.layoutMain.insertWidget(self.layoutMain.count() - 1, check)
self.checkBoxes[output.name] = check
self.valueItems[output.name] = widget
wrapper = NotYetImplementedWidgetWrapper(output, widget)
self.widget_wrappers[output.name] = wrapper
if isinstance(output, OutputVector):
if output.base_input in self.dependentItems:
@ -287,6 +296,15 @@ class ParametersPanel(BASE, WIDGET):
else:
return layer.name()
def getWidgetWrapperFromParameter(self, param):
wrapper = wrapper_from_param(param)
if wrapper is not None:
return wrapper
widget = self.getWidgetFromParameter(param)
wrapper = NotYetImplementedWidgetWrapper(param, widget)
return wrapper
def getWidgetFromParameter(self, param):
# TODO Create Parameter widget class that holds the logic
# for creating a widget that belongs to the parameter.
@ -343,12 +361,6 @@ class ParametersPanel(BASE, WIDGET):
if layer and layer.source() == param.value:
items.insert(0, items.pop(i))
item = InputLayerSelectorPanel(items, param)
elif isinstance(param, ParameterBoolean):
item = QCheckBox()
if param.default:
item.setChecked(True)
else:
item.setChecked(False)
elif isinstance(param, ParameterTableField) or isinstance(param, ParameterTableMultipleField):
if isinstance(param, ParameterTableMultipleField):
item = ListMultiSelectWidget()