Add a shutdown button

master
Marco Pesenti Gritti 18 years ago
parent 053dd74e0b
commit d3e99e76ef

@ -25,6 +25,7 @@ from view.frame.overlaybox import OverlayBox
from view.frame.FriendsBox import FriendsBox
from view.frame.PanelWindow import PanelWindow
from view.frame.notificationtray import NotificationTray
from view.frame.shutdownicon import ShutdownIcon
from sugar.graphics.timeline import Timeline
from sugar.graphics.grid import Grid
from sugar.graphics.menushell import MenuShell
@ -180,6 +181,12 @@ class Frame:
root.append(box, hippo.PACK_FIXED)
root.move(box, x, y)
shutdown_icon = ShutdownIcon(menu_shell)
[x, y] = grid.point(12, 0)
root.append(shutdown_icon, hippo.PACK_FIXED)
root.move(shutdown_icon, x, y)
# Bottom panel
[menu_shell, root] = self._create_panel(grid, 0, 11, 16, 1)
menu_shell.set_position(MenuShell.TOP)

@ -0,0 +1,44 @@
# Copyright (C) 2006, Red Hat, Inc.
#
# 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 dbus
from sugar.graphics.menuicon import MenuIcon
from sugar.graphics.menu import Menu
from sugar.graphics import style
class ShutdownIcon(MenuIcon):
ACTION_SHUTDOWN = 2
def __init__(self, menu_shell):
MenuIcon.__init__(self, menu_shell, icon_name='stock-close')
style.apply_stylesheet(self, 'menu.ActionIcon')
def create_menu(self):
menu = Menu()
menu.add_item('Shut Down', ShutdownIcon.ACTION_SHUTDOWN)
menu.connect('action', self._action_cb)
return menu
def _action_cb(self, menu, action):
self.popdown()
if action == ShutdownIcon.ACTION_SHUTDOWN:
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/devices/computer')
mgr = dbus.Interface(proxy, 'org.freedesktop.Hal.Device.SystemPowerManagement')
mgr.Shutdown()

@ -25,6 +25,10 @@ frame_ActivityIcon = {
'size' : style.standard_icon_size
}
frame_ShutdownIcon = {
'size' : style.standard_icon_size
}
frame_OverlayIcon = {
'size' : style.standard_icon_size
}

@ -28,7 +28,7 @@ class Menu(gtk.Window):
gobject.TYPE_NONE, ([int])),
}
def __init__(self, title, content_box=None):
def __init__(self, title=None, content_box=None):
gtk.Window.__init__(self, gtk.WINDOW_POPUP)
canvas = hippo.Canvas()
@ -39,9 +39,12 @@ class Menu(gtk.Window):
style.apply_stylesheet(self._root, 'menu')
canvas.set_root(self._root)
text = hippo.CanvasText(text=title)
style.apply_stylesheet(text, 'menu.Title')
self._root.append(text)
if title:
self._title_item = hippo.CanvasText(text=title)
style.apply_stylesheet(self._title_item, 'menu.Title')
self._root.append(self._title_item)
else:
self._title_item = None
if content_box:
separator = self._create_separator()
@ -49,12 +52,22 @@ class Menu(gtk.Window):
self._root.append(content_box)
self._action_box = None
self._item_box = None
def _create_separator(self):
separator = hippo.CanvasBox()
style.apply_stylesheet(separator, 'menu.Separator')
return separator
def _create_item_box(self):
if self._title_item:
separator = self._create_separator()
self._root.append(separator)
self._item_box = hippo.CanvasBox(
orientation=hippo.ORIENTATION_VERTICAL)
self._root.append(self._item_box)
def _create_action_box(self):
separator = self._create_separator()
self._root.append(separator)
@ -63,6 +76,19 @@ class Menu(gtk.Window):
orientation=hippo.ORIENTATION_HORIZONTAL)
self._root.append(self._action_box)
def add_item(self, label, action_id):
if not self._item_box:
self._create_item_box()
text = hippo.CanvasText(text=label)
style.apply_stylesheet(text, 'menu.Item')
# FIXME need a way to make hippo items activable in python
text.connect('button-press-event', self._item_clicked_cb, action_id)
#text.connect('activated', self._action_clicked_cb, action_id)
self._item_box.append(text)
def add_action(self, icon, action_id):
if not self._action_box:
self._create_action_box()
@ -71,5 +97,8 @@ class Menu(gtk.Window):
icon.connect('activated', self._action_clicked_cb, action_id)
self._action_box.append(icon)
def _item_clicked_cb(self, icon, event, action):
self.emit('action', action)
def _action_clicked_cb(self, icon, action):
self.emit('action', action)

@ -20,6 +20,11 @@ menu_ActionIcon = {
'size' : style.standard_icon_size
}
menu_Item = {
'color' : 0xFFFFFFFF,
'font' : style.get_font_description('Plain', 1.1)
}
menu_Text = {
'color' : 0xFFFFFFFF,
'font' : style.get_font_description('Plain', 1.2)

Loading…
Cancel
Save