Add a shutdown button
This commit is contained in:
parent
053dd74e0b
commit
d3e99e76ef
@ -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)
|
||||||
|
44
shell/view/frame/shutdownicon.py
Normal file
44
shell/view/frame/shutdownicon.py
Normal 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()
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user