Skip to content

Commit d3f5314

Browse files
committedNov 14, 2016
[processing] Use standard field combo box for field choices
1 parent 85c8c97 commit d3f5314

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed
 

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@
3636

3737
from qgis.core import QgsCoordinateReferenceSystem, QgsVectorLayer, QgsApplication
3838
from qgis.PyQt.QtWidgets import QCheckBox, QComboBox, QLineEdit, QPlainTextEdit, QWidget, QHBoxLayout, QToolButton
39-
from qgis.gui import QgsFieldExpressionWidget, QgsExpressionLineEdit, QgsProjectionSelectionWidget, QgsGenericProjectionSelector
39+
from qgis.gui import (QgsFieldExpressionWidget,
40+
QgsExpressionLineEdit,
41+
QgsProjectionSelectionWidget,
42+
QgsGenericProjectionSelector,
43+
QgsFieldComboBox,
44+
QgsFieldProxyModel)
4045
from qgis.PyQt.QtCore import pyqtSignal, QObject, QVariant
4146

4247
from processing.gui.NumberInputPanel import NumberInputPanel
@@ -861,7 +866,13 @@ def createWidget(self):
861866
if self.param.multiple:
862867
return MultipleInputPanel(options=[])
863868
else:
864-
widget = QComboBox()
869+
widget = QgsFieldComboBox()
870+
widget.setAllowEmptyFieldName(self.param.optional)
871+
if self.param.datatype == ParameterTableField.DATA_TYPE_NUMBER:
872+
widget.setFilters(QgsFieldProxyModel.Numeric)
873+
elif self.param.datatype == ParameterTableField.DATA_TYPE_STRING:
874+
widget.setFilters(QgsFieldProxyModel.String)
875+
865876
return widget
866877
else:
867878
widget = QComboBox()
@@ -894,10 +905,8 @@ def refreshItems(self):
894905
if self.param.multiple:
895906
self.widget.updateForOptions(self.getFields())
896907
else:
897-
self.widget.clear()
898-
if self.param.optional:
899-
self.widget.addItem(self.tr(self.NOT_SET))
900-
self.widget.addItems(self.getFields())
908+
self.widget.setLayer(self._layer)
909+
self.widget.setCurrentIndex(0)
901910

902911
def getFields(self):
903912
if self._layer is None:
@@ -916,7 +925,7 @@ def getFields(self):
916925
return sorted(list(fieldNames), key=cmp_to_key(locale.strcoll))
917926

918927
def setValue(self, value):
919-
if self.dialogType == DIALOG_STANDARD:
928+
if self.dialogType in (DIALOG_STANDARD, DIALOG_BATCH):
920929
if self.param.multiple:
921930
options = self.widget.options
922931
selected = []
@@ -925,7 +934,7 @@ def setValue(self, value):
925934
selected.append(i)
926935
self.widget.setSelectedItems(selected)
927936
else:
928-
self.setComboValue(value)
937+
self.widget.setField(value)
929938
else:
930939
self.setComboValue(value)
931940

@@ -934,9 +943,10 @@ def value(self):
934943
if self.param.multiple:
935944
return [self.widget.options[i] for i in self.widget.selectedoptions]
936945
else:
937-
if self.param.optional and self.widget.currentIndex() == 0:
946+
f = self.widget.field()
947+
if self.param.optional and not f:
938948
return None
939-
return self.widget.currentText()
949+
return f
940950
else:
941951
def validator(v):
942952
return bool(v) or self.param.optional

0 commit comments

Comments
 (0)
Please sign in to comment.