On Thu, Apr 17, 2008 at 11:42 AM, Tomeu Vizoso <[EMAIL PROTECTED]> wrote:
> Hi,
>
> + self._bundle_id = activity_info.bundle_id
> + self._version = activity_info.version
> + self._favorite = activity_info.favorite
>
> Do we really need to store favorite in a member variable? Cannot just
> use whatever value has favorite when activity-changed?
Actually, we do need to hold onto it. We need this value when the
favorite button is clicked on, to what value to set in the registry.
Apart from that, your suggestion would work fine.
> + self._favorite_item = MenuItem(_('Add to ring'))
>
> You are defining this same string twice. Why not just create the
> _favorite_item in the constructor as you are doing, but without
> passing any label? After the menuitem is created, you can just call
> _update_favorite_item() and that would set the label and the color.
Good idea. The attached patch fixes this, and cleans up the way that
the label is accessed for setting as well. Unfortunately, do to the
internals of MenuItem, I have to pass a '' null string to the
constructor anyway, or it's not possible to later set the label.
Thanks!
- Eben
From f65fa1ccca7df15ad0ace37ad6983cf0bb49e89d Mon Sep 17 00:00:00 2001
From: Eben Eliason <[EMAIL PROTECTED]>
Date: Thu, 17 Apr 2008 00:58:42 -0400
Subject: [PATCH] Add suport for adding/removing activities to/from ring
---
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..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):
--
1.5.3.3
_______________________________________________
Sugar mailing list
[email protected]
http://lists.laptop.org/listinfo/sugar