From adae38bb487acf98c78fbf98b468ae261b4cbf93 Mon Sep 17 00:00:00 2001
From: Eben Eliason <[EMAIL PROTECTED]>
Date: Tue, 8 Apr 2008 19:58:56 -0400
Subject: [PATCH] Add support for adding/removing activities to/from ring in palettes

---
 src/view/home/activitieslist.py |   36 +++++++++++++++++++++--------
 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..9baaa6c 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..d1c943a 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(_('Add to ring'))
+        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.get_children()[0]
+        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):
-- 
1.5.3.3

_______________________________________________
Sugar mailing list
[email protected]
http://lists.laptop.org/listinfo/sugar

Reply via email to