Skip to content

Commit 3caccd5

Browse files
committedOct 31, 2016
[processing] Fix handling of multiple field input in modeller
1 parent a117df2 commit 3caccd5

File tree

2 files changed

+29
-34
lines changed

2 files changed

+29
-34
lines changed
 

‎python/plugins/processing/gui/wrappers.py

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -755,24 +755,21 @@ class TableFieldWidgetWrapper(WidgetWrapper):
755755
def createWidget(self):
756756
self._layer = None
757757

758-
if self.param.multiple:
759-
if self.dialogType == DIALOG_STANDARD:
758+
if self.dialogType in (DIALOG_STANDARD, DIALOG_BATCH):
759+
if self.param.multiple:
760760
return MultipleInputPanel(options=[])
761-
else:
762-
return QLineEdit()
763-
else:
764-
if self.dialogType in (DIALOG_STANDARD, DIALOG_BATCH):
765-
widget = QComboBox()
766-
return widget
767761
else:
768762
widget = QComboBox()
769-
widget.setEditable(True)
770-
fields = self.dialog.getAvailableValuesOfType(ParameterTableField, None)
771-
if self.param.optional:
772-
widget.addItem(self.NOT_SET, None)
773-
for f in fields:
774-
widget.addItem(self.dialog.resolveValueDescription(f), f)
775763
return widget
764+
else:
765+
widget = QComboBox()
766+
widget.setEditable(True)
767+
fields = self.dialog.getAvailableValuesOfType(ParameterTableField, None)
768+
if self.param.optional:
769+
widget.addItem(self.NOT_SET, None)
770+
for f in fields:
771+
widget.addItem(self.dialog.resolveValueDescription(f), f)
772+
return widget
776773

777774
def postInitialize(self, wrappers):
778775
for wrapper in wrappers:
@@ -817,40 +814,31 @@ def getFields(self):
817814
return sorted(list(fieldNames), key=cmp_to_key(locale.strcoll))
818815

819816
def setValue(self, value):
820-
if self.param.multiple:
821-
if self.dialogType == DIALOG_STANDARD:
817+
if self.dialogType == DIALOG_STANDARD:
818+
if self.param.multiple:
822819
options = self.widget.options
823820
selected = []
824821
for i, opt in enumerate(options):
825822
if opt in value:
826823
selected.append(i)
827824
self.widget.setSelectedItems(selected)
828825
else:
829-
self.widget.setText(value)
830-
else:
831-
if self.dialogType == DIALOG_STANDARD:
832826
self.setComboValue(value)
827+
else:
828+
self.setComboValue(value)
833829

834830
def value(self):
835-
if self.param.multiple:
836-
if self.dialogType == DIALOG_STANDARD:
831+
if self.dialogType in (DIALOG_STANDARD, DIALOG_BATCH):
832+
if self.param.multiple:
837833
return [self.widget.options[i] for i in self.widget.selectedoptions]
838-
elif self.dialogType == DIALOG_BATCH:
839-
return self.widget.text()
840834
else:
841-
text = self.widget.text()
842-
if not bool(text) and not self.param.optional:
843-
raise InvalidParameterValue()
844-
return text
845-
else:
846-
if self.dialogType in (DIALOG_STANDARD, DIALOG_BATCH):
847835
if self.param.optional and self.widget.currentIndex() == 0:
848836
return None
849837
return self.widget.currentText()
850-
else:
851-
def validator(v):
852-
return bool(v) or self.param.optional
853-
return self.comboValue(validator)
838+
else:
839+
def validator(v):
840+
return bool(v) or self.param.optional
841+
return self.comboValue(validator)
854842

855843

856844
def GeometryPredicateWidgetWrapper(WidgetWrapper):

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,13 @@ def setupUi(self):
144144
datatypeIndex = self.param.datatype + 1
145145
self.datatypeCombo.setCurrentIndex(datatypeIndex)
146146

147+
self.multipleCheck = QCheckBox()
148+
self.multipleCheck.setText(self.tr('Accept multiple fields'))
149+
self.multipleCheck.setChecked(False)
150+
if self.param is not None:
151+
self.multipleCheck.setChecked(self.param.multiple)
152+
self.verticalLayout.addWidget(self.multipleCheck)
153+
147154
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or
148155
isinstance(self.param, ParameterVector)):
149156
self.verticalLayout.addWidget(QLabel(self.tr('Shape type')))
@@ -269,7 +276,7 @@ def okPressed(self):
269276
return
270277
parent = self.parentCombo.itemData(self.parentCombo.currentIndex())
271278
datatype = self.datatypeCombo.itemData(self.datatypeCombo.currentIndex())
272-
self.param = ParameterTableField(name, description, parent, datatype)
279+
self.param = ParameterTableField(name, description, parent, datatype, multiple=self.multipleCheck.isChecked())
273280
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or
274281
isinstance(self.param, ParameterRaster)):
275282
self.param = ParameterRaster(

0 commit comments

Comments
 (0)
Please sign in to comment.