From 5c7da12cd5112c4cad0f1217f969b36a186719e6 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 19 Jun 2006 00:39:24 -0400 Subject: [PATCH] Change the start page interface to make some sense. Need some theme love... (Code is an hack, but it's not worth implementing it right until we have more definite plans about this) --- sugar/shell/StartPage.py | 130 ++++++++++++++++++++++++++++++--------- 1 file changed, 101 insertions(+), 29 deletions(-) diff --git a/sugar/shell/StartPage.py b/sugar/shell/StartPage.py index 27a3277d..fce83d1b 100644 --- a/sugar/shell/StartPage.py +++ b/sugar/shell/StartPage.py @@ -23,14 +23,39 @@ class SearchHelper(object): self.search_uid = activity_uid self.found = False +class SearchModel(gtk.ListStore): + def __init__(self, activities_model, search_text): + gtk.ListStore.__init__(self, gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_PYOBJECT) + + for row in activities_model: + title = row[_COLUMN_TITLE] + address = row[_COLUMN_ADDRESS] + if title.find(search_text) >= 0 or address.find(search_text) >= 0: + self.append([ title, address, row[_COLUMN_SUBTITLE], row[_COLUMN_SERVICE] ]) + + google.LICENSE_KEY = '1As9KaJQFHIJ1L0W5EZPl6vBOFvh/Vaf' + data = google.doGoogleSearch(search_text) + + for result in data.results: + title = result.title + + # FIXME what tags should we actually strip? + title = title.replace('', '') + title = title.replace('', '') + + # FIXME I'm sure there is a better way to + # unescape these. + title = title.replace('"', '"') + title = title.replace('&', '&') + + self.append([ title, result.URL, None, None ]) + class ActivitiesModel(gtk.ListStore): def __init__(self): gtk.ListStore.__init__(self, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT) - def add_web_page(self, title, address): - self.append([ title, address, None, None ]) - def _filter_dupe_activities(self, model, path, it, user_data): """Search the list of list rows for an existing service that has the activity ID we're looking for.""" @@ -65,19 +90,34 @@ class ActivitiesModel(gtk.ListStore): self.append([ title, address, subtitle, service ]) class ActivitiesView(gtk.TreeView): - def __init__(self): - gtk.TreeView.__init__(self, model = ActivitiesModel()) + def __init__(self, model): + gtk.TreeView.__init__(self, model) self.set_headers_visible(False) + theme = gtk.icon_theme_get_default() + size = 48 + self._web_pixbuf = theme.load_icon('emblem-web', size, 0) + self._share_pixbuf = theme.load_icon('emblem-people', size, 0) + column = gtk.TreeViewColumn('') self.append_column(column) + cell = gtk.CellRendererPixbuf() + column.pack_start(cell, False) + column.set_cell_data_func(cell, self._icon_cell_data_func) + cell = gtk.CellRendererText() - column.pack_start(cell, True) + column.pack_start(cell) column.set_cell_data_func(cell, self._cell_data_func) self.connect('row-activated', self._row_activated_cb) + + def _icon_cell_data_func(self, column, cell, model, it): + if model.get_value(it, _COLUMN_SERVICE) == None: + cell.set_property('pixbuf', self._web_pixbuf) + else: + cell.set_property('pixbuf', self._share_pixbuf) def _cell_data_func(self, column, cell, model, it): title = model.get_value(it, _COLUMN_TITLE) @@ -149,16 +189,51 @@ class StartPage(gtk.HBox): self.pack_start(vbox) vbox.show() + vbox = gtk.VBox() + + self._search_close_box = gtk.HBox() + + self._search_close_label = gtk.Label() + self._search_close_label.set_alignment(0.0, 0.5) + self._search_close_box.pack_start(self._search_close_label) + self._search_close_label.show() + + close_image = gtk.Image() + close_image.set_from_stock (gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) + close_image.show() + + search_close_button = gtk.Button() + rcstyle = gtk.RcStyle(); + rcstyle.xthickness = rcstyle.ythickness = 0; + search_close_button.modify_style (rcstyle); + search_close_button.add(close_image) + search_close_button.set_relief(gtk.RELIEF_NONE) + search_close_button.set_focus_on_click(False) + search_close_button.connect("clicked", self.__search_close_button_clicked_cb) + + self._search_close_box.pack_start(search_close_button, False) + search_close_button.show() + + vbox.pack_start(self._search_close_box, False) + sw = gtk.ScrolledWindow() sw.set_size_request(320, -1) sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - self._activities = ActivitiesView() + self._activities_model = ActivitiesModel() + + self._activities = ActivitiesView(self._activities_model) sw.add(self._activities) self._activities.show() - self.pack_start(sw) + vbox.pack_start(sw) sw.show() + + self.pack_start(vbox) + vbox.show() + + def __search_close_button_clicked_cb(self, button): + self._search(None) def _on_local_activity_started_cb(self, helper, activity_container, activity_id): self._pservice.track_activity(activity_id) @@ -174,33 +249,30 @@ class StartPage(gtk.HBox): def _on_activity_announced_cb(self, pservice, service, buddy): print "Found new activity with type %s" % service.get_full_type() - self._activities.get_model().add_activity(buddy, service) + self._activities_model.add_activity(buddy, service) + if self._activities.get_model() != self._activities_model: + self._search(self._last_search) def _search_entry_activate_cb(self, entry): self._search() + self._search_entry.set_text('') def _search_button_clicked_cb(self, button): self._search() - - def _search(self): - text = self._search_entry.get_text() self._search_entry.set_text('') - - google.LICENSE_KEY = '1As9KaJQFHIJ1L0W5EZPl6vBOFvh/Vaf' - data = google.doGoogleSearch(text) - - model = ActivitiesModel() - for result in data.results: - title = result.title - - # FIXME what tags should we actually strip? - title = title.replace('', '') - title = title.replace('', '') - # FIXME I'm sure there is a better way to - # unescape these. - title = title.replace('"', '"') - title = title.replace('&', '&') + def _search(self, text = None): + if text == None: + text = self._search_entry.get_text() - model.add_web_page(title, result.URL) - self._activities.set_model(model) + if text == None or len(text) == 0: + self._activities.set_model(self._activities_model) + self._search_close_box.hide() + else: + search_model = SearchModel(self._activities_model, text) + self._activities.set_model(search_model) + + self._search_close_label.set_text('Search for %s' % (text)) + self._search_close_box.show() + + self._last_search = text