[processing] improved widgets for raster and vector layers in modeler

This commit is contained in:
volaya 2016-09-18 23:25:25 +02:00
parent c8f35fb4ce
commit c65cc92009

View File

@ -18,6 +18,7 @@
*************************************************************************** ***************************************************************************
""" """
__author__ = 'Arnaud Morvan' __author__ = 'Arnaud Morvan'
__date__ = 'May 2016' __date__ = 'May 2016'
__copyright__ = '(C) 2016, Arnaud Morvan' __copyright__ = '(C) 2016, Arnaud Morvan'
@ -28,6 +29,7 @@ __revision__ = '$Format:%H$'
import locale import locale
import os
from qgis.core import QgsCoordinateReferenceSystem from qgis.core import QgsCoordinateReferenceSystem
from qgis.PyQt.QtWidgets import QCheckBox, QComboBox, QLineEdit, QPlainTextEdit from qgis.PyQt.QtWidgets import QCheckBox, QComboBox, QLineEdit, QPlainTextEdit
@ -486,6 +488,8 @@ class RasterWidgetWrapper(WidgetWrapper):
files = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster) files = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
for f in files: for f in files:
widget.addItem(self.dialog.resolveValueDescription(f), f) widget.addItem(self.dialog.resolveValueDescription(f), f)
if self.param.optional:
widget.setEditText("")
return widget return widget
def refresh(self): def refresh(self):
@ -512,7 +516,10 @@ class RasterWidgetWrapper(WidgetWrapper):
return self.widget.getText() return self.widget.getText()
else: else:
def validator(v): def validator(v):
return bool(v) or self.param.optional if not bool(v):
return self.param.optional
else:
return os.path.exists(v)
return self.comboValue(validator) return self.comboValue(validator)
@ -555,10 +562,11 @@ class VectorWidgetWrapper(WidgetWrapper):
else: else:
widget = QComboBox() widget = QComboBox()
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector) layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
if self.param.optional: widget.setEditable(True)
widget.addItem(self.NOT_SELECTED, None)
for layer in layers: for layer in layers:
widget.addItem(self.dialog.resolveValueDescription(layer), layer) widget.addItem(self.dialog.resolveValueDescription(layer), layer)
if self.param.optional:
widget.setEditText("")
return widget return widget
def _populate(self, widget): def _populate(self, widget):
@ -594,7 +602,10 @@ class VectorWidgetWrapper(WidgetWrapper):
return self.widget.getText() return self.widget.getText()
else: else:
def validator(v): def validator(v):
return bool(v) or self.param.optional if not bool(v):
return self.param.optional
else:
return os.path.exists(v)
return self.comboValue(validator) return self.comboValue(validator)
class StringWidgetWrapper(WidgetWrapper): class StringWidgetWrapper(WidgetWrapper):