Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-09-16 18:35:03 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-09-16 18:35:03 (GMT)
commit465253d95e02f45f1637937b8cfd1c49bf131426 (patch)
tree6f5912d2cf67379b70d59f98bfb67c3e2b78d8b7 /shell
parentd9fc47ca01b3a4d216cecea80954f9a627647931 (diff)
Initial implementation of the activity menu
Diffstat (limited to 'shell')
-rw-r--r--shell/view/ActivityHost.py3
-rw-r--r--shell/view/BuddyIcon.py3
-rw-r--r--shell/view/Shell.py2
-rw-r--r--shell/view/frame/TopPanel.py90
4 files changed, 63 insertions, 35 deletions
diff --git a/shell/view/ActivityHost.py b/shell/view/ActivityHost.py
index 456406b..0e81acd 100644
--- a/shell/view/ActivityHost.py
+++ b/shell/view/ActivityHost.py
@@ -31,6 +31,9 @@ class ActivityHost:
def get_id(self):
return self._id
+ def get_title(self):
+ return self._window.get_name()
+
def get_xid(self):
return self._xid
diff --git a/shell/view/BuddyIcon.py b/shell/view/BuddyIcon.py
index ab73fad..ad5fd03 100644
--- a/shell/view/BuddyIcon.py
+++ b/shell/view/BuddyIcon.py
@@ -3,8 +3,7 @@ from view.BuddyMenu import BuddyMenu
class BuddyIcon(MenuIcon):
def __init__(self, shell, friend):
- MenuIcon.__init__(self, shell.get_grid(),
- icon_name='stock-buddy',
+ MenuIcon.__init__(self, shell.get_grid(), icon_name='stock-buddy',
color=friend.get_color(), size=96)
self._shell = shell
diff --git a/shell/view/Shell.py b/shell/view/Shell.py
index 76d3f26..74f03b4 100644
--- a/shell/view/Shell.py
+++ b/shell/view/Shell.py
@@ -53,7 +53,7 @@ class Shell(gobject.GObject):
elif key == 'F5':
self._frame.toggle_visibility()
elif key == 'F6':
- self._model.start_activity('org.sugar.Terminal')
+ self.start_activity('org.sugar.Terminal')
def __window_opened_cb(self, screen, window):
if window.get_window_type() == wnck.WINDOW_NORMAL:
diff --git a/shell/view/frame/TopPanel.py b/shell/view/frame/TopPanel.py
index b1611d7..128430e 100644
--- a/shell/view/frame/TopPanel.py
+++ b/shell/view/frame/TopPanel.py
@@ -2,13 +2,49 @@ import goocanvas
from sugar.canvas.CanvasBox import CanvasBox
from sugar.canvas.IconItem import IconItem
+from sugar.canvas.MenuIcon import MenuIcon
+from sugar.canvas.Menu import Menu
import sugar
+class ActivityMenu(Menu):
+ ACTION_SHARE = 1
+
+ def __init__(self, grid, activity_host):
+ title = activity_host.get_title()
+ Menu.__init__(self, grid, title, 'black', 'black')
+
+ icon = IconItem(icon_name='stock-share')
+ self.add_action(icon, ActivityMenu.ACTION_SHARE)
+
+class ActivityIcon(MenuIcon):
+ def __init__(self, shell, activity_host):
+ self._shell = shell
+ self._activity_host = activity_host
+
+ icon_name = activity_host.get_icon_name()
+ icon_color = activity_host.get_icon_color()
+
+ MenuIcon.__init__(self, shell.get_grid(), icon_name=icon_name,
+ color=icon_color)
+
+ def create_menu(self):
+ menu = ActivityMenu(self._shell.get_grid(), self._activity_host)
+ menu.connect('action', self._action_cb)
+ return menu
+
+ def _action_cb(self, menu, action):
+ if action == ActivityMenu.ACTION_SHARE:
+ shell_model = self._shell.get_model()
+ activity = shell_model.get_current_activity()
+ if activity != None:
+ activity.share()
+
class TopPanel(goocanvas.Group):
def __init__(self, shell):
goocanvas.Group.__init__(self)
self._shell = shell
+ self._activity_icon = None
grid = shell.get_grid()
@@ -17,55 +53,45 @@ class TopPanel(goocanvas.Group):
self.add_child(box)
icon = IconItem(icon_name='stock-zoom-activity')
- icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_ACTIVITY)
+ icon.connect('clicked', self._level_clicked_cb, sugar.ZOOM_ACTIVITY)
box.set_constraints(icon, 3, 3)
box.add_child(icon)
icon = IconItem(icon_name='stock-zoom-home')
- icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_HOME)
+ icon.connect('clicked', self._level_clicked_cb, sugar.ZOOM_HOME)
box.set_constraints(icon, 3, 3)
box.add_child(icon)
icon = IconItem(icon_name='stock-zoom-friends')
- icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_FRIENDS)
+ icon.connect('clicked', self._level_clicked_cb, sugar.ZOOM_FRIENDS)
box.set_constraints(icon, 3, 3)
box.add_child(icon)
icon = IconItem(icon_name='stock-zoom-mesh')
- icon.connect('clicked', self.__level_clicked_cb, sugar.ZOOM_MESH)
+ icon.connect('clicked', self._level_clicked_cb, sugar.ZOOM_MESH)
box.set_constraints(icon, 3, 3)
box.add_child(icon)
- box = CanvasBox(grid, CanvasBox.HORIZONTAL, 1)
- grid.set_constraints(box, 60, 0)
- self.add_child(box)
+ self._box = box
- icon = IconItem(icon_name='stock-share')
- icon.connect('clicked', self.__share_clicked_cb)
- box.set_constraints(icon, 3, 3)
- box.add_child(icon)
+ shell_model = shell.get_model()
+ shell_model.connect('activity-changed', self._activity_changed_cb)
+ self._set_current_activity(shell_model.get_current_activity())
- icon = IconItem(icon_name='stock-invite')
- icon.connect('clicked', self.__invite_clicked_cb)
- box.set_constraints(icon, 3, 3)
- box.add_child(icon)
+ def _set_current_activity(self, activity):
+ if self._activity_icon:
+ self._box.remove_child(self._activity_icon)
- icon = IconItem(icon_name='stock-chat')
- icon.connect('clicked', self.__chat_clicked_cb)
- box.set_constraints(icon, 3, 3)
- box.add_child(icon)
-
- def __level_clicked_cb(self, item, level):
- self._shell.set_zoom_level(level)
+ if activity:
+ icon = ActivityIcon(self._shell, activity)
+ self._box.set_constraints(icon, 3, 3)
+ self._box.add_child(icon)
+ self._activity_icon = icon
+ else:
+ self._activity_icon = None
- def __share_clicked_cb(self, item):
- shell_model = self._shell.get_model()
- activity = shell_model.get_current_activity()
- if activity != None:
- activity.share()
+ def _activity_changed_cb(self, shell_model, activity):
+ self._set_current_activity(activity)
- def __invite_clicked_cb(self, item):
- pass
-
- def __chat_clicked_cb(self, item):
- pass
+ def _level_clicked_cb(self, item, level):
+ self._shell.set_zoom_level(level)