67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
#--------------------------------------------------------------
|
|
#
|
|
# PyGUI - Pop-up list control - Generic
|
|
#
|
|
#--------------------------------------------------------------
|
|
|
|
from GUI.Properties import overridable_property
|
|
from GUI.Actions import Action
|
|
from GUI import Control, application
|
|
|
|
class ListButton(Control, Action):
|
|
"""A button that displays a value and provides a pop-up or
|
|
pull-down list of choices."""
|
|
|
|
titles = overridable_property('titles',
|
|
"List of item title strings")
|
|
|
|
values = overridable_property('values',
|
|
"List of values corresponding to tiles, or None to use item index as value")
|
|
|
|
def _extract_initial_items(self, kwds):
|
|
titles = kwds.pop('titles', None) or []
|
|
values = kwds.pop('values', None)
|
|
return titles, values
|
|
|
|
def get_titles(self):
|
|
return self._titles
|
|
|
|
def set_titles(self, x):
|
|
self._titles = x
|
|
self._update_items()
|
|
|
|
def get_values(self):
|
|
return self._values
|
|
|
|
def set_values(self, x):
|
|
self._values = x
|
|
|
|
def get_value(self):
|
|
i = self._get_selected_index()
|
|
if i >= 0:
|
|
values = self.values
|
|
if values:
|
|
return values[i]
|
|
else:
|
|
return i
|
|
|
|
def set_value(self, value):
|
|
values = self.values
|
|
if values:
|
|
try:
|
|
i = values.index(value)
|
|
except ValueError:
|
|
i = -1
|
|
else:
|
|
if value is None:
|
|
i = -1
|
|
else:
|
|
i = value
|
|
self._set_selected_index(i)
|
|
|
|
def do_action(self):
|
|
try:
|
|
Action.do_action(self)
|
|
except:
|
|
application().report_error()
|