Remove the entry_filters argument from *View constructors.
[matthijs/upstream/mobilegtd.git] / src / gui / gui.py
index ec0a7cb6f04decbb502b0698fa242bd85ef22d8f..0247175fc22ee76eb165184427b36aa257f67cd0 100644 (file)
@@ -103,9 +103,11 @@ def restore_gui(object):
 
 
 class ListView(object):
-    def __init__(self,title):
-        self.title = title
+    def __init__(self):
         self.view = appuifw.Listbox(self.items(),self.change_entry)
+
+    def set_title(self, title):
+        self.title = title
     
     def change_entry(self):
         pass
@@ -161,9 +163,9 @@ class ListView(object):
 
 
 class WidgetBasedListView(ListView):
-    def __init__(self,title):
+    def __init__(self):
         self.widgets = self.generate_widgets()
-        super(WidgetBasedListView,self).__init__(title)
+        super(WidgetBasedListView,self).__init__()
         self.exit_flag = False
 
     def run(self):
@@ -192,7 +194,20 @@ class WidgetBasedListView(ListView):
 
 class KeyBindingView(object):
     
-    def __init__(self,binding_map):
+    def __init__(self):
+        self.binding_map = {}
+
+    def set_keybindings(self, binding_map):
+        """
+        Set a new map of key bindings. This map maps method names to a
+        tuple of keyname and description.
+
+        The method name refers to a method on the selected item, or the
+        current view.
+
+        Example: { 'search_item' : ('0', 'Search item') }
+
+        """
         self.binding_map = binding_map
 
     def get_menu_entries(self):
@@ -221,13 +236,26 @@ class KeyBindingView(object):
             self.view.bind(key,no_action)
 
 class SearchableListView(WidgetBasedListView):
-    def __init__(self,title,entry_filters):
+    def __init__(self):
+        self.current_entry_filter_index = -1
+        self.entry_filters = []
+        self.filtered_list = lambda:[]
+        self.lock = None
+        super(SearchableListView,self).__init__()
+
+    def set_filters(self, entry_filters):
+        """
+        Set the filters that could be applied to this list. Each filter
+        can be applied in turn by calling switch_entry_filter (for
+        example from a key binding).
+
+        The entry_filters argument should be a list of filters. The
+        active filter is stored into self.filtered_list and should be
+        processed by generate_widgets in the subclass.
+        """
         self.current_entry_filter_index = 0
         self.entry_filters = entry_filters
         self.filtered_list = self.entry_filters[0]
-        self.lock = None
-        super(SearchableListView,self).__init__(title)
-
 
     def search_item(self):
         selected_item = appuifw.selection_list(self.all_widget_texts(),search_field=1)
@@ -235,6 +263,7 @@ class SearchableListView(WidgetBasedListView):
             selected_item = self.selected_index()
         self.view.set_list(self.items(),selected_item)
         self.set_bindings_for_selection(selected_item)
+
     def switch_entry_filter(self):
         self.current_entry_filter_index += 1
         self.filtered_list = self.entry_filters[self.current_entry_filter_index % len(self.entry_filters)]
@@ -242,9 +271,9 @@ class SearchableListView(WidgetBasedListView):
 
 
 class EditableListView(SearchableListView,KeyBindingView):
-    def __init__(self,title,entry_filters,binding_map):
-        KeyBindingView.__init__(self,binding_map)
-        super(EditableListView, self).__init__(title,entry_filters)
+    def __init__(self):
+        KeyBindingView.__init__(self)
+        super(EditableListView, self).__init__()
 
     def key_and_menu_bindings(self,selected_index):
         key_and_menu_bindings=[]