diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-05-23 13:03:07 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-05-24 16:04:47 (GMT) |
commit | bf4d3e81d4eca0cb7ae090079d2ac1147495a682 (patch) | |
tree | 6da3c6e9888e946cbdf60f9b105101fca803bbd3 /src/view/home | |
parent | 827e35d315f8fa6c2d0ebe87a63ccdceccac12fc (diff) |
Implement search in the activity list.
Diffstat (limited to 'src/view/home')
-rw-r--r-- | src/view/home/HomeBox.py | 43 | ||||
-rw-r--r-- | src/view/home/activitieslist.py | 17 |
2 files changed, 55 insertions, 5 deletions
diff --git a/src/view/home/HomeBox.py b/src/view/home/HomeBox.py index 181849f..c9effa6 100644 --- a/src/view/home/HomeBox.py +++ b/src/view/home/HomeBox.py @@ -15,9 +15,10 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from gettext import gettext as _ +import logging -import gtk import gobject +import gtk import hippo from sugar.graphics import style @@ -30,6 +31,8 @@ from view.home.activitieslist import ActivitiesList _RING_VIEW = 0 _LIST_VIEW = 1 +_AUTOSEARCH_TIMEOUT = 1000 + class HomeBox(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'SugarHomeBox' @@ -41,12 +44,18 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem): self._enable_xo_palette = False self._toolbar = HomeToolbar() - #self._toolbar.connect('query-changed', self.__toolbar_query_changed_cb) + self._toolbar.connect('query-changed', self.__toolbar_query_changed_cb) self._toolbar.connect('view-changed', self.__toolbar_view_changed_cb) self.append(hippo.CanvasWidget(widget=self._toolbar)) self._set_view(_RING_VIEW) + def __toolbar_query_changed_cb(self, toolbar, query): + if self._list_view is None: + return + query = query.lower() + self._list_view.set_filter(query) + def __toolbar_view_changed_cb(self, toolbar, view): self._set_view(view) @@ -120,6 +129,9 @@ class HomeToolbar(gtk.Toolbar): def __init__(self): gtk.Toolbar.__init__(self) + self._query = None + self._autosearch_timer = None + self._add_separator() tool_item = gtk.ToolItem() @@ -131,8 +143,8 @@ class HomeToolbar(gtk.Toolbar): 'system-search') self._search_entry.add_clear_button() self._search_entry.set_width_chars(25) - #self._search_entry.connect('activate', self._entry_activated_cb) - #self._search_entry.connect('changed', self._entry_changed_cb) + self._search_entry.connect('activate', self.__entry_activated_cb) + self._search_entry.connect('changed', self.__entry_changed_cb) tool_item.add(self._search_entry) self._search_entry.show() @@ -172,3 +184,26 @@ class HomeToolbar(gtk.Toolbar): self.insert(separator, -1) separator.show() + def __entry_activated_cb(self, entry): + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + new_query = entry.props.text + if self._query != new_query: + self._query = new_query + self.emit('query-changed', self._query) + + def __entry_changed_cb(self, entry): + if not entry.props.text: + entry.activate() + return + + if self._autosearch_timer: + gobject.source_remove(self._autosearch_timer) + self._autosearch_timer = gobject.timeout_add(_AUTOSEARCH_TIMEOUT, + self.__autosearch_timer_cb) + + def __autosearch_timer_cb(self): + self._autosearch_timer = None + self._search_entry.activate() + return False + diff --git a/src/view/home/activitieslist.py b/src/view/home/activitieslist.py index ebdf1ec..ecf3241 100644 --- a/src/view/home/activitieslist.py +++ b/src/view/home/activitieslist.py @@ -34,6 +34,7 @@ class ActivitiesList(hippo.CanvasScrollbars): self.set_policy(hippo.ORIENTATION_HORIZONTAL, hippo.SCROLLBAR_NEVER) self.props.widget.connect('key-press-event', self.__key_press_event_cb) + self._query = '' self._box = hippo.CanvasBox( \ background_color=style.COLOR_WHITE.get_int()) self.set_root(self._box) @@ -59,7 +60,14 @@ class ActivitiesList(hippo.CanvasScrollbars): return def _add_activity(self, activity_info): - self._box.append(ActivityEntry(activity_info)) + entry = ActivityEntry(activity_info) + self._box.append(entry) + entry.set_visible(entry.matches(self._query)) + + def set_filter(self, query): + self._query = query + for entry in self._box.get_children(): + entry.set_visible(entry.matches(query)) def __key_press_event_cb(self, widget, event): keyname = gtk.gdk.keyval_name(event.keyval) @@ -101,6 +109,7 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): self._bundle_id = activity_info.bundle_id self._version = activity_info.version self._favorite = activity_info.favorite + self._title = activity_info.name self._favorite_icon = FavoriteIcon(self._favorite) self._favorite_icon.connect('notify::favorite', @@ -148,6 +157,7 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): def __activity_changed_cb(self, activity_registry, activity_info): if self._bundle_id == activity_info.bundle_id and \ self._version == activity_info.version: + self._title = activity_info.name self._favorite = activity_info.favorite self._favorite_icon.props.favorite = self._favorite @@ -167,6 +177,11 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): def get_version(self): return self._version + def matches(self, query): + if not query: + return True + return self._title.lower().find(query) > -1 + class FavoriteIcon(CanvasIcon): __gproperties__ = { 'favorite' : (bool, None, None, False, |