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
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 = {}