Add a shutdown button

This commit is contained in:
Marco Pesenti Gritti 2006-11-11 23:51:16 +01:00
parent 053dd74e0b
commit d3e99e76ef
5 changed files with 93 additions and 4 deletions

View File

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

View File

@ -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()

View File

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

View File

@ -28,7 +28,7 @@ class Menu(gtk.Window):
gobject.TYPE_NONE, ([int])), 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) gtk.Window.__init__(self, gtk.WINDOW_POPUP)
canvas = hippo.Canvas() canvas = hippo.Canvas()
@ -39,9 +39,12 @@ class Menu(gtk.Window):
style.apply_stylesheet(self._root, 'menu') style.apply_stylesheet(self._root, 'menu')
canvas.set_root(self._root) canvas.set_root(self._root)
text = hippo.CanvasText(text=title) if title:
style.apply_stylesheet(text, 'menu.Title') self._title_item = hippo.CanvasText(text=title)
self._root.append(text) style.apply_stylesheet(self._title_item, 'menu.Title')
self._root.append(self._title_item)
else:
self._title_item = None
if content_box: if content_box:
separator = self._create_separator() separator = self._create_separator()
@ -49,12 +52,22 @@ class Menu(gtk.Window):
self._root.append(content_box) self._root.append(content_box)
self._action_box = None self._action_box = None
self._item_box = None
def _create_separator(self): def _create_separator(self):
separator = hippo.CanvasBox() separator = hippo.CanvasBox()
style.apply_stylesheet(separator, 'menu.Separator') style.apply_stylesheet(separator, 'menu.Separator')
return 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): def _create_action_box(self):
separator = self._create_separator() separator = self._create_separator()
self._root.append(separator) self._root.append(separator)
@ -63,6 +76,19 @@ class Menu(gtk.Window):
orientation=hippo.ORIENTATION_HORIZONTAL) orientation=hippo.ORIENTATION_HORIZONTAL)
self._root.append(self._action_box) 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): def add_action(self, icon, action_id):
if not self._action_box: if not self._action_box:
self._create_action_box() self._create_action_box()
@ -71,5 +97,8 @@ class Menu(gtk.Window):
icon.connect('activated', self._action_clicked_cb, action_id) icon.connect('activated', self._action_clicked_cb, action_id)
self._action_box.append(icon) self._action_box.append(icon)
def _item_clicked_cb(self, icon, event, action):
self.emit('action', action)
def _action_clicked_cb(self, icon, action): def _action_clicked_cb(self, icon, action):
self.emit('action', action) self.emit('action', action)

View File

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