X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Fgui%2Fgui.py;h=0247175fc22ee76eb165184427b36aa257f67cd0;hb=8b301d4e5f3dd8c3cc73ae23a41cd66f629c7625;hp=ec0a7cb6f04decbb502b0698fa242bd85ef22d8f;hpb=826cc2e9923c858d3c6a86c04f371cfb326e1728;p=matthijs%2Fupstream%2Fmobilegtd.git diff --git a/src/gui/gui.py b/src/gui/gui.py index ec0a7cb..0247175 100644 --- a/src/gui/gui.py +++ b/src/gui/gui.py @@ -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=[]