88 lines
2.1 KiB
Python
88 lines
2.1 KiB
Python
#
|
|
# Python GUI - Radio groups - Generic
|
|
#
|
|
|
|
from GUI.Properties import Properties, overridable_property
|
|
from GUI.Actions import Action
|
|
|
|
class RadioGroup(Properties, Action):
|
|
"""A RadioGroup coordinates a group of RadioButtons.
|
|
It has a 'value' property which is equal to the value
|
|
of the currently selected RadioButton. It may be given
|
|
an action procedure to execute when its value changes.
|
|
|
|
Operations:
|
|
iter(group)
|
|
Returns an iterator over the items of the group.
|
|
"""
|
|
|
|
value = overridable_property('value', """The value of the currently
|
|
selected radio button.""")
|
|
|
|
_items = None
|
|
_value = None
|
|
|
|
def __init__(self, items = [], **kwds):
|
|
Properties.__init__(self, **kwds)
|
|
self._items = []
|
|
self.add_items(items)
|
|
|
|
#
|
|
# Operations
|
|
#
|
|
|
|
def __iter__(self):
|
|
return iter(self._items)
|
|
|
|
#
|
|
# Properties
|
|
#
|
|
|
|
def get_value(self):
|
|
return self._value
|
|
|
|
def set_value(self, x):
|
|
if self._value <> x:
|
|
self._value = x
|
|
self._value_changed()
|
|
self.do_action()
|
|
|
|
#
|
|
# Adding and removing items
|
|
#
|
|
|
|
def add_items(self, items):
|
|
"Add a sequence of RadioButtons to this group."
|
|
for item in items:
|
|
self.add_item(item)
|
|
|
|
def add_item(self, item):
|
|
"Add a RadioButton to this group."
|
|
item.group = self
|
|
|
|
def remove_items(self, items):
|
|
"Remove a sequence of RadioButtons from this group."
|
|
for item in items:
|
|
item.group = None
|
|
|
|
def remove_item(self, item):
|
|
"Remove a RadioButton from this group."
|
|
item.group = None
|
|
|
|
def _add_item(self, item):
|
|
self._items.append(item)
|
|
self._item_added(item)
|
|
|
|
def _remove_item(self, item):
|
|
self._items.remove(item)
|
|
self._item_removed(item)
|
|
|
|
def _item_added(self, item):
|
|
raise NotImplementedError
|
|
|
|
def _item_removed(self, item):
|
|
raise NotImplementedError
|
|
|
|
def _value_changed(self):
|
|
raise NotImplementedError
|