self.refresh()
self.lock.wait()
except:
- pass
+ # TODO: Find out which exceptions to catch here. Catching
+ # and silencing all exceptions is not a good idea.
+ raise
restore_gui(self)
def exit(self):
we'll have to adjust the index with the direction of the
keypress (-1 for up, +1 for down).
"""
- self.current_index = (self.selected_index() + dir) % len(self.items())
+ self.current_index = self.wrap_index(self.selected_index() + dir)
self.index_changed()
self.current_index = None
""" Changes the currently selected item to index. """
self.view.set_list(self.items(),index % len(self.items()))
+ def selected_item(self):
+ """ Returns the (title of the) currently selected list item. """
+ if not self.items_cache:
+ return None # No items, so none is selected.
+ return self.items_cache[self.selected_index()]
+
+
def selected_index(self):
""" Returns the currently selected index. """
if not self.current_index is None:
else:
return self.view.current()
+ def clip_index(self, index):
+ """
+ Make sure the given index fits within the bounds of this
+ list. If it doesn't, clip it off at the ends of the list (e.g,
+ -1 becomes 0).
+ """
+ max_index = len(self.items_cache) - 1
+ return max (0, min(max_index, index))
+
+ def wrap_index(self, index):
+ """
+ Make sure the given index fits within the bounds of this
+ list. If it doesn't, wrap it around (e.g., -1 becomes 5 in a
+ 6-element list).
+ """
+ count = len(self.items_cache)
+ return index % count
+
class WidgetBasedListView(ListView):
def __init__(self):
self.binding_map = {}