value_names is read-only

pull/37/head
MinRK 12 years ago
parent 3e1f2e22f8
commit ca0afa1d8b

@ -40,7 +40,7 @@ class _SelectionWidget(DOMWidget):
The keys of this dictionary are also available as value_names.
""")
value_name = Unicode(help="The name of the selected value", sync=True)
value_names = List(Unicode, help="""List of names for each value.
value_names = List(Unicode, help="""Read-only list of names for each value.
If values is specified as a list, this is the string representation of each element.
Otherwise, it is the keys of the values dictionary.
@ -52,6 +52,7 @@ class _SelectionWidget(DOMWidget):
def __init__(self, *args, **kwargs):
self.value_lock = Lock()
self._in_values_changed = False
if 'values' in kwargs:
values = kwargs['values']
# convert list values to an dict of {str(v):v}
@ -65,11 +66,15 @@ class _SelectionWidget(DOMWidget):
Setting values implies setting value names from the keys of the dict.
"""
self.value_names = list(new.keys())
self._in_values_changed = True
try:
self.value_names = list(new.keys())
finally:
self._in_values_changed = False
def _value_names_changed(self, name, old, new):
if len(new) != len(self.values):
raise TraitError("Expected %i value names, got %i." % (len(self.values), len(new)))
if not self._in_values_changed:
raise TraitError("value_names is a read-only proxy to values.keys(). Use the values dict instead.")
def _value_changed(self, name, old, new):
"""Called when value has been changed"""

Loading…
Cancel
Save