Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEben Eliason <eben@localhost.localdomain>2008-04-17 04:58:42 (GMT)
committer Eben Eliason <eben@localhost.localdomain>2008-04-17 04:58:42 (GMT)
commitf65fa1ccca7df15ad0ace37ad6983cf0bb49e89d (patch)
treee75647c1ad9bc13b11b221366cea2c97619c202f /src
parentc237d20c65d07df11ca1d84c6778baef96146243 (diff)
Add suport for adding/removing activities to/from ring
Diffstat (limited to 'src')
-rw-r--r--src/view/home/activitieslist.py36
-rw-r--r--src/view/palettes.py47
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):