Ticket #144: xomenu_patch_take2

File xomenu_patch_take2, 3.3 KB (added by rkabir, 15 years ago)

reviewed patch, incorporating tomeu's feedback

Line 
1diff --git a/extensions/deviceicon/xomenu.py b/extensions/deviceicon/xomenu.py
2new file mode 100644
3index 0000000..2f3f425
4--- /dev/null
5+++ b/extensions/deviceicon/xomenu.py
6@@ -0,0 +1,98 @@
7+# Copyright (C) 2008 Ryan Kabir
8+#
9+# This program is free software; you can redistribute it and/or modify
10+# it under the terms of the GNU General Public License as published by
11+# the Free Software Foundation; either version 2 of the License, or
12+# (at your option) any later version.
13+#
14+# This program is distributed in the hope that it will be useful,
15+# but WITHOUT ANY WARRANTY; without even the implied warranty of
16+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17+# GNU General Public License for more details.
18+#
19+# You should have received a copy of the GNU General Public License
20+# along with this program; if not, write to the Free Software
21+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
22+
23+from gettext import gettext as _
24+import gconf
25+
26+import gobject
27+import gtk
28+import hippo
29+
30+from sugar.graphics import style
31+from sugar.graphics.menuitem import MenuItem
32+from sugar.graphics.tray import TrayIcon
33+from sugar.graphics.palette import Palette
34+from sugar.graphics.xocolor import XoColor
35+
36+from jarabe.frame.frameinvoker import FrameWidgetInvoker
37+from jarabe.controlpanel.gui import ControlPanel
38+from jarabe.model.session import get_session_manager
39+
40+_ICON_NAME = 'computer-xo'
41+
42+
43+class SystemView(TrayIcon):
44+
45+    FRAME_POSITION_RELATIVE = 800
46+
47+    def __init__(self):
48+        client = gconf.client_get_default()       
49+        self._color = XoColor(client.get_string('/desktop/sugar/user/color'))
50+
51+        TrayIcon.__init__(self, icon_name=_ICON_NAME, xo_color=self._color)
52+
53+        self.palette = SystemPalette(_('System functions') )
54+        self.palette.props.invoker = FrameWidgetInvoker(self)
55+        self.palette.set_group_id('frame')
56+
57+        name = _ICON_NAME
58+        self.icon.props.icon_name = _ICON_NAME
59+
60+    def controlpanel_activate_cb(self, *args):
61+        panel = ControlPanel()
62+        panel.set_transient_for(self.get_toplevel())
63+        panel.show()
64+
65+
66+class SystemPalette(Palette):
67+    def __init__(self, primary_text):
68+        Palette.__init__(self, label=primary_text)
69+        vbox = gtk.VBox()
70+        self.set_content(vbox)
71+        vbox.show()
72+
73+        item = MenuItem(_('Settings'), 'preferences-system')
74+        item.connect('activate', self.__controlpanel_activate_cb)
75+        self.menu.append(item)
76+        item.show()
77+
78+        item = MenuItem(_('Restart'), 'system-restart')
79+        item.connect('activate', self._reboot_activate_cb)
80+        self.menu.append(item)
81+        item.show()
82+
83+        item = MenuItem(_('Shutdown'), 'system-shutdown')
84+        item.connect('activate', self._shutdown_activate_cb)
85+        self.menu.append(item)
86+        item.show()
87+
88+
89+    def _reboot_activate_cb(self, menuitem):
90+        session_manager = get_session_manager()
91+        session_manager.reboot()
92+
93+    def _shutdown_activate_cb(self, menuitem):
94+        session_manager = get_session_manager()
95+        session_manager.shutdown()
96+       
97+    def __controlpanel_activate_cb(self, menuitem):
98+        panel = ControlPanel()
99+        panel.set_transient_for(self.get_toplevel())
100+        panel.show()
101+
102+
103+def setup(tray):
104+    tray.add_device(SystemView())