From f945d6cb8bc5796afc10031a7a0ae298da287a38 Mon Sep 17 00:00:00 2001
From: Tomeu Vizoso <[EMAIL PROTECTED]>
Date: Wed, 2 Apr 2008 10:46:23 +0200
Subject: [PATCH] New activities list.

---
 src/view/frame/Makefile.am       |    1 -
 src/view/frame/activitybutton.py |   64 -----------------
 src/view/home/HomeBox.py         |   14 +---
 src/view/home/HomeWindow.py      |    6 --
 src/view/home/activitieslist.py  |  139 ++++++++++++++++++++++++++++++++++++-
 5 files changed, 138 insertions(+), 86 deletions(-)
 delete mode 100644 src/view/frame/activitybutton.py

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 87e4723..2a33feb 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'
 
@@ -161,6 +152,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)
 
-- 
1.5.2.5

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

Reply via email to