Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2008-04-02 08:46:23 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-04-02 12:26:52 (GMT)
commitce379c6e75e78b62ad6a45cdc2dd03b32bb0a62d (patch)
treefd8a2dbaa3bd16f7f34347826192b6d9c13aed2a
parentb085c789ef42d7654bacad975ca023a43a8d61f1 (diff)
New activities list.
-rw-r--r--src/view/frame/Makefile.am1
-rw-r--r--src/view/frame/activitybutton.py64
-rw-r--r--src/view/home/HomeBox.py14
-rw-r--r--src/view/home/HomeWindow.py6
-rw-r--r--src/view/home/activitieslist.py139
5 files changed, 138 insertions, 86 deletions
diff --git a/src/view/frame/Makefile.am b/src/view/frame/Makefile.am
index de3b38a..b02085a 100644
--- a/src/view/frame/Makefile.am
+++ b/src/view/frame/Makefile.am
@@ -2,7 +2,6 @@ sugardir = $(pkgdatadir)/shell/view/frame
sugar_PYTHON = \
__init__.py \
activitiestray.py \
- activitybutton.py \
clipboardpanelwindow.py \
clipboardtray.py \
devicestray.py \
diff --git a/src/view/frame/activitybutton.py b/src/view/frame/activitybutton.py
deleted file mode 100644
index 53d5f82..0000000
--- a/src/view/frame/activitybutton.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (C) 2007, One Laptop Per Child
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-import gtk
-import os
-import gobject
-from gettext import gettext as _
-
-from sugar.graphics.palette import Palette
-from sugar.graphics.tray import TrayButton
-from sugar.graphics.icon import Icon
-from sugar.graphics import style
-
-from view.frame.frameinvoker import FrameWidgetInvoker
-
-class ActivityButton(TrayButton, gobject.GObject):
- __gtype_name__ = 'SugarActivityButton'
- __gsignals__ = {
- 'remove_activity': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE, ([]))
- }
-
- def __init__(self, activity_info):
- TrayButton.__init__(self)
-
- icon = Icon(file=activity_info.icon,
- stroke_color=style.COLOR_WHITE.get_svg(),
- fill_color=style.COLOR_TRANSPARENT.get_svg())
- self.set_icon_widget(icon)
- icon.show()
-
- self._activity_info = activity_info
- self.setup_rollover_options()
-
- def get_bundle_id(self):
- return self._activity_info.bundle_id
-
- def setup_rollover_options(self):
- palette = Palette(self._activity_info.name)
- self.set_palette(palette)
- palette.props.invoker = FrameWidgetInvoker(self)
-
-#TODO: Disabled this until later, see #4967
-# if os.path.dirname(self._activity_info.path) == os.path.expanduser('~/Activities'):
-# menu_item = gtk.MenuItem(_('Remove'))
-# menu_item.connect('activate', self.item_remove_cb)
-# palette.menu.append(menu_item)
-# menu_item.show()
-
- def item_remove_cb(self, widget):
- self.emit('remove_activity')
diff --git a/src/view/home/HomeBox.py b/src/view/home/HomeBox.py
index c735550..95ddc78 100644
--- a/src/view/home/HomeBox.py
+++ b/src/view/home/HomeBox.py
@@ -46,7 +46,7 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
self._toolbar.connect('view-changed', self.__toolbar_view_changed_cb)
self.append(hippo.CanvasWidget(widget=self._toolbar))
- self._set_view(_RING_VIEW)
+ self._set_view(_LIST_VIEW)
def __toolbar_view_changed_cb(self, toolbar, view):
self._set_view(view)
@@ -68,7 +68,7 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
self.remove(self._ring_view)
if self._list_view is None:
- self._list_view = ActivitiesList()
+ self._list_view = ActivitiesList(self._shell)
self.append(self._list_view, hippo.PACK_EXPAND)
else:
@@ -106,15 +106,6 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
if self._ring_view is not None:
self._ring_view.enable_xo_palette()
- def grab_and_rotate(self):
- pass
-
- def rotate(self):
- pass
-
- def release(self):
- pass
-
class HomeToolbar(gtk.Toolbar):
__gtype_name__ = 'SugarHomeToolbar'
@@ -162,6 +153,7 @@ class HomeToolbar(gtk.Toolbar):
list_button.connect('toggled', self.__view_button_toggled_cb, _LIST_VIEW)
self.insert(list_button, -1)
list_button.show()
+ list_button.props.active = True
self._add_separator()
diff --git a/src/view/home/HomeWindow.py b/src/view/home/HomeWindow.py
index cbefb7a..127b08b 100644
--- a/src/view/home/HomeWindow.py
+++ b/src/view/home/HomeWindow.py
@@ -51,7 +51,6 @@ class HomeWindow(gtk.Window):
self.realize()
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP)
- self.connect("key-release-event", self._key_release_cb)
self.connect('visibility-notify-event', self._visibility_notify_event_cb)
self._enter_sid = self.connect('enter-notify-event',
@@ -91,11 +90,6 @@ class HomeWindow(gtk.Window):
self.disconnect(self._motion_sid)
self.disconnect(self._enter_sid)
- def _key_release_cb(self, widget, event):
- keyname = gtk.gdk.keyval_name(event.keyval)
- if keyname == "Alt_L":
- self._home_box.release()
-
def _deactivate_view(self):
group = palettegroup.get_group("default")
group.popdown()
diff --git a/src/view/home/activitieslist.py b/src/view/home/activitieslist.py
index 9adb1de..5ccfe57 100644
--- a/src/view/home/activitieslist.py
+++ b/src/view/home/activitieslist.py
@@ -16,14 +16,145 @@
import logging
+import gobject
import gtk
import hippo
-_logger = logging.getLogger('ActivitiesList')
+from sugar import profile
+from sugar import activity
+from sugar.graphics import style
+from sugar.graphics.icon import CanvasIcon
-class ActivitiesList(hippo.CanvasBox, hippo.CanvasItem):
+class ActivitiesList(hippo.CanvasScrollbars):
__gtype_name__ = 'SugarActivitiesList'
- def __init__(self):
- hippo.CanvasBox.__init__(self, background_color=0xe2e2e2ff)
+ def __init__(self, shell):
+ hippo.CanvasScrollbars.__init__(self)
+ self.set_policy(hippo.ORIENTATION_HORIZONTAL, hippo.SCROLLBAR_NEVER)
+
+ self._shell = shell
+ self._box = hippo.CanvasBox(background_color=style.COLOR_WHITE.get_int())
+ self.set_root(self._box)
+
+ registry = activity.get_registry()
+ registry.get_activities_async(reply_handler=self._get_activities_cb)
+
+ registry.connect('activity-added', self._activity_added_cb)
+ registry.connect('activity-removed', self._activity_removed_cb)
+
+ def _get_activities_cb(self, activity_list):
+ for info in activity_list:
+ if info.bundle_id != 'org.laptop.JournalActivity':
+ self._add_activity(info)
+
+ def _activity_added_cb(self, activity_registry, activity_info):
+ self._add_activity(activity_info)
+
+ def _activity_removed_cb(self, activity_registry, activity_info):
+ """
+ for item in self._tray.get_children():
+ if item.get_bundle_id() == activity_info.bundle_id:
+ self._tray.remove_item(item)
+ return
+ """
+ # TODO: Implement activity removal.
+ pass
+
+ def _add_activity(self, activity_info):
+ entry = ActivityEntry(self._shell, activity_info)
+ #item.connect('clicked', self._activity_clicked_cb)
+ #item.connect('remove_activity', self._remove_activity_cb)
+ self._box.append(entry)
+
+class ActivityEntry(hippo.CanvasBox, hippo.CanvasItem):
+ __gtype_name__ = 'SugarActivityEntry'
+
+ _TITLE_COL_WIDTH = style.GRID_CELL_SIZE * 3
+ _VERSION_COL_WIDTH = style.GRID_CELL_SIZE * 1
+ _DATE_COL_WIDTH = style.GRID_CELL_SIZE * 5
+
+ def __init__(self, shell, activity_info):
+ hippo.CanvasBox.__init__(self, spacing=style.DEFAULT_SPACING,
+ padding_top=style.DEFAULT_PADDING,
+ padding_bottom=style.DEFAULT_PADDING,
+ padding_left=style.DEFAULT_PADDING * 2,
+ padding_right=style.DEFAULT_PADDING * 2,
+ box_height=style.GRID_CELL_SIZE,
+ orientation=hippo.ORIENTATION_HORIZONTAL)
+
+ self._shell = shell
+ self._activity_info = activity_info
+
+ favorite_icon = FavoriteIcon(False)
+ #favorite_icon.connect('button-release-event',
+ # self._favorite_icon_button_release_event_cb)
+ self.append(favorite_icon)
+
+ 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())
+ icon.connect_after('button-release-event',
+ self.__icon_button_release_event_cb)
+ self.append(icon)
+
+ title = hippo.CanvasText(text=activity_info.name,
+ xalign=hippo.ALIGNMENT_START,
+ font_desc=style.FONT_BOLD.get_pango_desc(),
+ box_width=ActivityEntry._TITLE_COL_WIDTH)
+ self.append(title)
+
+ version = hippo.CanvasText(text=activity_info.version,
+ xalign=hippo.ALIGNMENT_END,
+ font_desc=style.FONT_NORMAL.get_pango_desc(),
+ box_width=ActivityEntry._VERSION_COL_WIDTH)
+ self.append(version)
+
+ expander = hippo.CanvasBox()
+ self.append(expander, hippo.PACK_EXPAND)
+
+ date = hippo.CanvasText(text='3 weeks ago',
+ xalign=hippo.ALIGNMENT_START,
+ font_desc=style.FONT_NORMAL.get_pango_desc(),
+ box_width=ActivityEntry._DATE_COL_WIDTH)
+ self.append(date)
+
+ def __icon_button_release_event_cb(self, icon, event):
+ self._shell.start_activity(self._activity_info.bundle_id)
+
+class FavoriteIcon(CanvasIcon):
+ __gproperties__ = {
+ 'favorite' : (bool, None, None, False,
+ gobject.PARAM_READWRITE)
+ }
+
+ def __init__(self, favorite):
+ CanvasIcon.__init__(self, icon_name='emblem-favorite',
+ box_width=style.GRID_CELL_SIZE*3/5,
+ size=style.SMALL_ICON_SIZE)
+ self._favorite = None
+ self._set_favorite(favorite)
+
+ def _set_favorite(self, favorite):
+ if favorite == self._favorite:
+ return
+
+ self._favorite = favorite
+ if favorite:
+ self.props.xo_color = profile.get_color()
+ else:
+ self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()
+ self.props.fill_color = style.COLOR_WHITE.get_svg()
+
+ def do_set_property(self, pspec, value):
+ if pspec.name == 'favorite':
+ self._set_favorite(value)
+ else:
+ CanvasIcon.do_set_property(self, pspec, value)
+
+ def do_get_property(self, pspec):
+ if pspec.name == 'favorite':
+ return self._favorite
+ else:
+ return CanvasIcon.do_get_property(self, pspec)