Add Combobox save/restoreState methods

Also allow tuple as input type in addition to list
This commit is contained in:
Luke Campagnola 2017-09-29 08:50:12 -07:00
parent f627a6a447
commit e7a92f4720

View File

@ -102,7 +102,7 @@ class ComboBox(QtGui.QComboBox):
@blockIfUnchanged @blockIfUnchanged
def setItems(self, items): def setItems(self, items):
""" """
*items* may be a list or a dict. *items* may be a list, a tuple, or a dict.
If a dict is given, then the keys are used to populate the combo box If a dict is given, then the keys are used to populate the combo box
and the values will be used for both value() and setValue(). and the values will be used for both value() and setValue().
""" """
@ -191,13 +191,13 @@ class ComboBox(QtGui.QComboBox):
@ignoreIndexChange @ignoreIndexChange
@blockIfUnchanged @blockIfUnchanged
def addItems(self, items): def addItems(self, items):
if isinstance(items, list): if isinstance(items, list) or isinstance(items, tuple):
texts = items texts = items
items = dict([(x, x) for x in items]) items = dict([(x, x) for x in items])
elif isinstance(items, dict): elif isinstance(items, dict):
texts = list(items.keys()) texts = list(items.keys())
else: else:
raise TypeError("items argument must be list or dict (got %s)." % type(items)) raise TypeError("items argument must be list or dict or tuple (got %s)." % type(items))
for t in texts: for t in texts:
if t in self._items: if t in self._items:
@ -216,3 +216,30 @@ class ComboBox(QtGui.QComboBox):
QtGui.QComboBox.clear(self) QtGui.QComboBox.clear(self)
self.itemsChanged() self.itemsChanged()
def saveState(self):
ind = self.currentIndex()
data = self.itemData(ind)
#if not data.isValid():
if data is not None:
try:
if not data.isValid():
data = None
else:
data = data.toInt()[0]
except AttributeError:
pass
if data is None:
return asUnicode(self.itemText(ind))
else:
return data
def restoreState(self, v):
if type(v) is int:
ind = self.findData(v)
if ind > -1:
self.setCurrentIndex(ind)
return
self.setCurrentIndex(self.findText(str(v)))
def widgetGroupInterface(self):
return (self.currentIndexChanged, self.saveState, self.restoreState)