diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-02 08:46:23 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-04-02 12:26:52 (GMT) |
commit | ce379c6e75e78b62ad6a45cdc2dd03b32bb0a62d (patch) | |
tree | fd8a2dbaa3bd16f7f34347826192b6d9c13aed2a | |
parent | b085c789ef42d7654bacad975ca023a43a8d61f1 (diff) |
New activities list.
-rw-r--r-- | src/view/frame/Makefile.am | 1 | ||||
-rw-r--r-- | src/view/frame/activitybutton.py | 64 | ||||
-rw-r--r-- | src/view/home/HomeBox.py | 14 | ||||
-rw-r--r-- | src/view/home/HomeWindow.py | 6 | ||||
-rw-r--r-- | src/view/home/activitieslist.py | 139 |
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) |