diff --git a/shell/view/frame/ActivitiesBox.py b/shell/view/frame/ActivitiesBox.py index 28f3da8c..ec79f864 100644 --- a/shell/view/frame/ActivitiesBox.py +++ b/shell/view/frame/ActivitiesBox.py @@ -24,7 +24,6 @@ from sugar.graphics import style from sugar import profile from sugar import activity -from frameinvoker import FrameCanvasInvoker from activitybutton import ActivityButton class InviteButton(TrayButton): diff --git a/shell/view/frame/Makefile.am b/shell/view/frame/Makefile.am index e40219e5..7be99869 100644 --- a/shell/view/frame/Makefile.am +++ b/shell/view/frame/Makefile.am @@ -6,9 +6,9 @@ sugar_PYTHON = \ clipboardbox.py \ clipboardpanelwindow.py \ frameinvoker.py \ - FriendsBox.py \ + friendstray.py \ eventarea.py \ frame.py \ overlaybox.py \ framewindow.py \ - zoombox.py + zoomtoolbar.py diff --git a/shell/view/frame/frame.py b/shell/view/frame/frame.py index 1ce10edb..2784835f 100644 --- a/shell/view/frame/frame.py +++ b/shell/view/frame/frame.py @@ -29,7 +29,7 @@ from view.frame.eventarea import EventArea from view.frame.ActivitiesBox import ActivitiesBox from view.frame.zoomtoolbar import ZoomToolbar from view.frame.overlaybox import OverlayBox -from view.frame.FriendsBox import FriendsBox +from view.frame.friendstray import FriendsTray from view.frame.framewindow import FrameWindow from view.frame.clipboardpanelwindow import ClipboardPanelWindow from model.shellmodel import ShellModel @@ -227,8 +227,9 @@ class Frame(object): def _create_right_panel(self): panel = self._create_panel(gtk.POS_RIGHT) - box = FriendsBox(self._shell) - panel.append(box) + tray = FriendsTray(self._shell) + panel.append(hippo.CanvasWidget(widget=tray), hippo.PACK_EXPAND) + tray.show() return panel diff --git a/shell/view/frame/frameinvoker.py b/shell/view/frame/frameinvoker.py index d06082a1..2b416552 100644 --- a/shell/view/frame/frameinvoker.py +++ b/shell/view/frame/frameinvoker.py @@ -37,10 +37,3 @@ class FrameWidgetInvoker(WidgetInvoker): self._position_hint = self.ANCHORED self._screen_area = _get_screen_area() - -class FrameCanvasInvoker(CanvasInvoker): - def __init__(self, item): - CanvasInvoker.__init__(self, item) - - self._position_hint = self.ANCHORED - self._screen_area = _get_screen_area() diff --git a/shell/view/frame/FriendsBox.py b/shell/view/frame/friendstray.py similarity index 83% rename from shell/view/frame/FriendsBox.py rename to shell/view/frame/friendstray.py index 28069264..b5c35d65 100644 --- a/shell/view/frame/FriendsBox.py +++ b/shell/view/frame/friendstray.py @@ -16,32 +16,27 @@ import hippo -from sugar.graphics.palette import Palette -from sugar.graphics.icon import CanvasIcon -from sugar.graphics import style from sugar.presence import presenceservice +from sugar.graphics.tray import VTray, TrayIcon -from view.BuddyIcon import BuddyIcon +from view.BuddyMenu import BuddyMenu +from view.frame.frameinvoker import FrameWidgetInvoker from model.BuddyModel import BuddyModel -from view.frame.frameinvoker import FrameCanvasInvoker -class FriendIcon(BuddyIcon): +class FriendIcon(TrayIcon): def __init__(self, shell, buddy): - BuddyIcon.__init__(self, shell, buddy) + TrayIcon.__init__(self, icon_name='computer-xo', + xo_color=buddy.get_color()) - palette = self.get_palette() + palette = BuddyMenu(shell, buddy) + self.set_palette(palette) palette.set_group_id('frame') - palette.props.invoker = FrameCanvasInvoker(self) + palette.props.invoker = FrameWidgetInvoker(self) - def prelight(self, enter): - if enter: - self.props.background_color = style.COLOR_BLACK.get_int() - else: - self.props.background_color = style.COLOR_TOOLBAR_GREY.get_int() - -class FriendsBox(hippo.CanvasBox): +class FriendsTray(VTray): def __init__(self, shell): - hippo.CanvasBox.__init__(self) + VTray.__init__(self) + self._shell = shell self._activity_ps = None self._joined_hid = -1 @@ -68,8 +63,10 @@ class FriendsBox(hippo.CanvasBox): return model = BuddyModel(buddy=buddy) + icon = FriendIcon(self._shell, model) - self.append(icon) + self.add_item(icon) + icon.show() self._buddies[buddy.props.key] = icon @@ -77,11 +74,11 @@ class FriendsBox(hippo.CanvasBox): if not self._buddies.has_key(buddy.props.key): return - self.remove(self._buddies[buddy.props.key]) + self.remove_item(self._buddies[buddy.props.key]) def clear(self): for item in self.get_children(): - self.remove(item) + self.remove_item(item) self._buddies = {} def __activity_appeared_cb(self, pservice, activity_ps): diff --git a/sugar/graphics/Makefile.am b/sugar/graphics/Makefile.am index cf193795..53e05aa4 100644 --- a/sugar/graphics/Makefile.am +++ b/sugar/graphics/Makefile.am @@ -6,7 +6,6 @@ sugar_PYTHON = \ combobox.py \ entry.py \ icon.py \ - iconbutton.py \ iconentry.py \ menuitem.py \ notebook.py \ diff --git a/sugar/graphics/iconbutton.py b/sugar/graphics/iconbutton.py deleted file mode 100644 index fd977f69..00000000 --- a/sugar/graphics/iconbutton.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (C) 2007, One Laptop Per Child -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# -# DEPRECATED. Do not use in new code. We will reimplement it in gtk -# - -import sys - -import gobject -import hippo - -from sugar.graphics.icon import CanvasIcon -from sugar.graphics import style - -class IconButton(CanvasIcon, hippo.CanvasItem): - __gtype_name__ = 'SugarIconButton' - - def __init__(self, **kwargs): - CanvasIcon.__init__(self, **kwargs) - - if not self.props.fill_color and not self.props.stroke_color: - self.props.fill_color = style.Color("#404040").get_svg() - self.props.stroke_color = style.Color("#FFFFFF").get_svg() - - self.connect('activated', self._icon_clicked_cb) - - self.props.box_width = style.GRID_CELL_SIZE - self.props.box_height = style.GRID_CELL_SIZE - self.props.size = style.STANDARD_ICON_SIZE - - def _icon_clicked_cb(self, button): - if self._palette: - self._palette.popdown(True) diff --git a/sugar/graphics/tray.py b/sugar/graphics/tray.py index 1845d33f..e865db66 100644 --- a/sugar/graphics/tray.py +++ b/sugar/graphics/tray.py @@ -19,6 +19,7 @@ import gobject import gtk from sugar.graphics import style +from sugar.graphics.palette import Palette, ToolInvoker from sugar.graphics.toolbutton import ToolButton from sugar.graphics.icon import Icon @@ -145,6 +146,9 @@ class HTray(gtk.HBox): scroll_left.viewport = self._viewport scroll_right.viewport = self._viewport + def get_children(self): + return self._viewport.traybar.get_children() + def add_item(self, item, index=-1): self._viewport.traybar.insert(item, index) @@ -173,6 +177,9 @@ class VTray(gtk.VBox): scroll_left.viewport = self._viewport scroll_right.viewport = self._viewport + def get_children(self): + return self._viewport.traybar.get_children() + def add_item(self, item, index=-1): self._viewport.traybar.insert(item, index) @@ -185,3 +192,24 @@ class VTray(gtk.VBox): class TrayButton(ToolButton): def __init__(self, **kwargs): ToolButton.__init__(self, **kwargs) + +class TrayIcon(gtk.ToolItem): + def __init__(self, icon_name=None, xo_color=None): + gtk.ToolItem.__init__(self) + + event_box = gtk.EventBox() + + icon = Icon(icon_name=icon_name, xo_color=xo_color, + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + event_box.add(icon) + icon.show() + + self.add(event_box) + event_box.show() + + def set_palette(self, palette): + self._palette = palette + self._palette.props.invoker = ToolInvoker(self.child) + + def set_tooltip(self, text): + self.set_palette(Palette(text)) diff --git a/tests/graphics/tray.py b/tests/graphics/tray.py index 4de9b460..f589f4ec 100644 --- a/tests/graphics/tray.py +++ b/tests/graphics/tray.py @@ -21,9 +21,8 @@ Test the sugar.graphics.icon.Icon widget. import gtk -from sugar.graphics.tray import HTray -from sugar.graphics.tray import VTray -from sugar.graphics.tray import TrayButton +from sugar.graphics.tray import HTray, VTray +from sugar.graphics.tray import TrayButton, TrayIcon import common @@ -47,9 +46,9 @@ vbox.pack_start(tray, False) tray.show() for i in range(0, 10): - button = TrayButton(icon_name=theme_icons[i]) - tray.add_item(button) - button.show() + icon = TrayIcon(icon_name=theme_icons[i]) + tray.add_item(icon) + icon.show() hbox = gtk.HBox()