diff options
author | Eben Eliason <eben@localhost.localdomain> | 2008-04-17 04:58:42 (GMT) |
---|---|---|
committer | Eben Eliason <eben@localhost.localdomain> | 2008-04-17 04:58:42 (GMT) |
commit | f65fa1ccca7df15ad0ace37ad6983cf0bb49e89d (patch) | |
tree | e75647c1ad9bc13b11b221366cea2c97619c202f /src | |
parent | c237d20c65d07df11ca1d84c6778baef96146243 (diff) |
Add suport for adding/removing activities to/from ring
Diffstat (limited to 'src')
-rw-r--r-- | src/view/home/activitieslist.py | 36 | ||||
-rw-r--r-- | src/view/palettes.py | 47 |
2 files changed, 70 insertions, 13 deletions
diff --git a/src/view/home/activitieslist.py b/src/view/home/activitieslist.py index 3b4c9d2..7f2b428 100644 --- a/src/view/home/activitieslist.py +++ b/src/view/home/activitieslist.py @@ -52,7 +52,8 @@ class ActivitiesList(hippo.CanvasScrollbars): def __activity_removed_cb(self, activity_registry, activity_info): for entry in self.get_children(): - if entry.get_bundle_id() == activity_info.bundle_id: + if entry.get_bundle_id() == activity_info.bundle_id and \ + entry.get_version() == activity_info.version: self.remove(entry) return @@ -75,17 +76,23 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): box_height=style.GRID_CELL_SIZE, orientation=hippo.ORIENTATION_HORIZONTAL) - self._activity_info = activity_info + registry = activity.get_registry() + registry.connect('activity-changed', self.__activity_changed_cb) + + self._bundle_id = activity_info.bundle_id + self._version = activity_info.version + self._favorite = activity_info.favorite - favorite_icon = FavoriteIcon(self._activity_info.favorite) - favorite_icon.connect('notify::favorite', self.__favorite_changed_cb) - self.append(favorite_icon) + self._favorite_icon = FavoriteIcon(self._favorite) + self._favorite_icon.connect('notify::favorite', + self.__favorite_changed_cb) + self.append(self._favorite_icon) self.icon = CanvasIcon(size=style.STANDARD_ICON_SIZE, cache=True, file_name=activity_info.icon, stroke_color=style.COLOR_BUTTON_GREY.get_svg(), fill_color=style.COLOR_TRANSPARENT.get_svg()) - self.icon.set_palette(ActivityPalette(self._activity_info)) + self.icon.set_palette(ActivityPalette(activity_info)) self.icon.connect('hovering-changed', self.__icon_hovering_changed_event_cb) self.icon.connect('button-release-event', @@ -116,8 +123,14 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): def __favorite_changed_cb(self, favorite_icon, pspec): registry = activity.get_registry() - registry.set_activity_favorite(self._activity_info.bundle_id, - self._activity_info.version, favorite_icon.props.favorite) + registry.set_activity_favorite(self._bundle_id, self._version, + favorite_icon.props.favorite) + + def __activity_changed_cb(self, activity_registry, activity_info): + if self._bundle_id == activity_info.bundle_id and \ + self._version == activity_info.version: + self._favorite = activity_info.favorite + self._favorite_icon.props.favorite = self._favorite def __icon_hovering_changed_event_cb(self, icon, event): if event: @@ -127,10 +140,13 @@ class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem): self.icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg() def __icon_button_release_event_cb(self, icon, event): - view.Shell.get_instance().start_activity(self._activity_info.bundle_id) + view.Shell.get_instance().start_activity(self._bundle_id) def get_bundle_id(self): - return self._activity_info.bundle_id + return self._bundle_id + + def get_version(self): + return self._version class FavoriteIcon(CanvasIcon): __gproperties__ = { diff --git a/src/view/palettes.py b/src/view/palettes.py index 467eda0..799f6ed 100644 --- a/src/view/palettes.py +++ b/src/view/palettes.py @@ -23,9 +23,12 @@ import gtk from sugar import env from sugar import profile +from sugar import activity from sugar.graphics.palette import Palette from sugar.graphics.menuitem import MenuItem from sugar.graphics.icon import Icon +from sugar.graphics import style +from sugar.graphics.xocolor import XoColor import view.Shell @@ -100,7 +103,9 @@ class ActivityPalette(Palette): Palette.__init__(self, primary_text=activity_info.name, icon=activity_icon) - self._activity_info = activity_info + self._bundle_id = activity_info.bundle_id + self._version = activity_info.version + self._favorite = activity_info.favorite menu_item = MenuItem(_('Start'), 'activity-start') menu_item.connect('activate', self.__start_activate_cb) @@ -115,9 +120,45 @@ class ActivityPalette(Palette): menu_item.show() """ - def __start_activate_cb(self, menu_item): - view.Shell.get_instance().start_activity(self._activity_info.bundle_id) + self._favorite_item = MenuItem('') + self._favorite_icon = Icon(icon_name='emblem-favorite', + icon_size=gtk.ICON_SIZE_MENU) + self._favorite_item.set_image(self._favorite_icon) + self._favorite_item.connect('activate', + self.__change_favorite_activate_cb) + self.menu.append(self._favorite_item) + self._favorite_item.show() + + registry = activity.get_registry() + registry.connect('activity_changed', self.__activity_changed_cb) + self._update_favorite_item() + + def _update_favorite_item(self): + label = self._favorite_item.child + if self._favorite: + label.set_text(_('Remove from ring')) + xo_color = XoColor('%s,%s' % (style.COLOR_WHITE.get_svg(), + style.COLOR_TRANSPARENT.get_svg())) + else: + label.set_text(_('Add to ring')) + xo_color = profile.get_color() + self._favorite_icon.props.xo_color = xo_color + + def __start_activate_cb(self, menu_item): + view.Shell.get_instance().start_activity(self._bundle_id) + + def __change_favorite_activate_cb(self, menu_item): + registry = activity.get_registry() + registry.set_activity_favorite(self._bundle_id, + self._version, + not self._favorite) + + def __activity_changed_cb(self, activity_registry, activity_info): + if activity_info.bundle_id == self._bundle_id and \ + activity_info.version == self._version: + self._favorite = activity_info.favorite + self._update_favorite_item() class JournalPalette(BasePalette): def __init__(self, home_activity): |