Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-06-25 12:33:54 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-06-25 12:33:54 (GMT)
commitf85142bdc48a01d1de11a192143aaf48bf087dd0 (patch)
treedb2ea581f55039f8c2449ee3074a96c8443f0caf
parente0793ef199c22faad4ead6755452535e0bf00a16 (diff)
parent0baac89a6109fdbda904d37edfef0305fb36fe33 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Conflicts: shell/view/home/HomeBox.py
-rw-r--r--shell/view/ClipboardBubble.py136
-rw-r--r--shell/view/Makefile.am1
-rw-r--r--shell/view/clipboardmenu.py37
-rw-r--r--shell/view/home/HomeBox.py29
4 files changed, 36 insertions, 167 deletions
diff --git a/shell/view/ClipboardBubble.py b/shell/view/ClipboardBubble.py
deleted file mode 100644
index 62b16a9..0000000
--- a/shell/view/ClipboardBubble.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# Copyright (C) 2007, One Laptop Per Child
-#
-# 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
-
-
-#TODO: has to be merged with all the existing bubbles in a generic progress bar widget
-
-import math
-
-import gobject
-import gtk
-import hippo
-
-from sugar.graphics import units
-
-class ClipboardBubble(hippo.CanvasBox, hippo.CanvasItem):
- __gtype_name__ = 'ClipboardBubble'
-
- __gproperties__ = {
- 'fill-color': (object, None, None,
- gobject.PARAM_READWRITE),
- 'stroke-color': (object, None, None,
- gobject.PARAM_READWRITE),
- 'progress-color': (object, None, None,
- gobject.PARAM_READWRITE),
- 'percent' : (object, None, None,
- gobject.PARAM_READWRITE),
- }
-
- def __init__(self, **kwargs):
- self._stroke_color = 0xFFFFFFFF
- self._fill_color = 0xFFFFFFFF
- self._progress_color = 0x000000FF
- self._percent = 0
- self._radius = units.points_to_pixels(3)
-
- hippo.CanvasBox.__init__(self, **kwargs)
-
- def do_set_property(self, pspec, value):
- if pspec.name == 'fill-color':
- self._fill_color = value
- self.emit_paint_needed(0, 0, -1, -1)
- elif pspec.name == 'stroke-color':
- self._stroke_color = value
- self.emit_paint_needed(0, 0, -1, -1)
- elif pspec.name == 'progress-color':
- self._progress_color = value
- self.emit_paint_needed(0, 0, -1, -1)
- elif pspec.name == 'percent':
- self._percent = value
- self.emit_paint_needed(0, 0, -1, -1)
-
- def do_get_property(self, pspec):
- if pspec.name == 'fill-color':
- return self._fill_color
- elif pspec.name == 'stroke-color':
- return self._stroke_color
- elif pspec.name == 'progress-color':
- return self._progress_color
- elif pspec.name == 'percent':
- return self._percent
-
- def _int_to_rgb(self, int_color):
- red = (int_color >> 24) & 0x000000FF
- green = (int_color >> 16) & 0x000000FF
- blue = (int_color >> 8) & 0x000000FF
- alpha = int_color & 0x000000FF
- return (red / 255.0, green / 255.0, blue / 255.0)
-
- def do_paint_below_children(self, cr, damaged_box):
- [width, height] = self.get_allocation()
-
- line_width = 3.0
- x = line_width
- y = line_width
- width -= line_width * 2
- height -= line_width * 2
-
- cr.move_to(x + self._radius, y);
- cr.arc(x + width - self._radius, y + self._radius,
- self._radius, math.pi * 1.5, math.pi * 2);
- cr.arc(x + width - self._radius, x + height - self._radius,
- self._radius, 0, math.pi * 0.5);
- cr.arc(x + self._radius, y + height - self._radius,
- self._radius, math.pi * 0.5, math.pi);
- cr.arc(x + self._radius, y + self._radius, self._radius,
- math.pi, math.pi * 1.5);
-
- color = self._int_to_rgb(self._fill_color)
- cr.set_source_rgb(*color)
- cr.fill_preserve();
-
- color = self._int_to_rgb(self._stroke_color)
- cr.set_source_rgb(*color)
- cr.set_line_width(line_width)
- cr.stroke();
-
- if self._percent > 0:
- self._paint_progress_bar(cr, x, y, width, height, line_width)
-
- def _paint_progress_bar(self, cr, x, y, width, height, line_width):
- prog_x = x + line_width
- prog_y = y + line_width
- prog_width = (width - (line_width * 2)) * (self._percent / 100.0)
- prog_height = (height - (line_width * 2))
-
- x = prog_x
- y = prog_y
- width = prog_width
- height = prog_height
-
- cr.move_to(x + self._radius, y);
- cr.arc(x + width - self._radius, y + self._radius,
- self._radius, math.pi * 1.5, math.pi * 2);
- cr.arc(x + width - self._radius, x + height - self._radius,
- self._radius, 0, math.pi * 0.5);
- cr.arc(x + self._radius, y + height - self._radius,
- self._radius, math.pi * 0.5, math.pi);
- cr.arc(x + self._radius, y + self._radius, self._radius,
- math.pi, math.pi * 1.5);
-
- color = self._int_to_rgb(self._progress_color)
- cr.set_source_rgb(*color)
- cr.fill_preserve();
diff --git a/shell/view/Makefile.am b/shell/view/Makefile.am
index bd4cf7a..abbb230 100644
--- a/shell/view/Makefile.am
+++ b/shell/view/Makefile.am
@@ -6,7 +6,6 @@ sugar_PYTHON = \
ActivityHost.py \
BuddyIcon.py \
BuddyMenu.py \
- ClipboardBubble.py \
clipboardicon.py \
clipboardmenu.py \
keyhandler.py \
diff --git a/shell/view/clipboardmenu.py b/shell/view/clipboardmenu.py
index 2106c76..e5e9bc8 100644
--- a/shell/view/clipboardmenu.py
+++ b/shell/view/clipboardmenu.py
@@ -15,6 +15,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
from gettext import gettext as _
+import gtk
import hippo
from sugar.graphics.menu import Menu, MenuItem
@@ -22,27 +23,6 @@ from sugar.graphics.canvasicon import CanvasIcon
from sugar.graphics import color
from sugar.graphics import font
-from view.ClipboardBubble import ClipboardBubble
-
-class ClipboardProgressBar(ClipboardBubble):
-
- def __init__(self, percent = 0):
- self._text_item = None
- ClipboardBubble.__init__(self, percent=percent)
-
- self._text_item = hippo.CanvasText(text=str(percent) + ' %')
- self._text_item.props.color = color.LABEL_TEXT.get_int()
- self._text_item.props.font_desc = font.DEFAULT.get_pango_desc()
-
- self.append(self._text_item)
-
- def do_set_property(self, pspec, value):
- if pspec.name == 'percent':
- if self._text_item:
- self._text_item.set_property('text', str(value) + ' %')
-
- ClipboardBubble.do_set_property(self, pspec, value)
-
class ClipboardMenu(Menu):
ACTION_DELETE = 0
@@ -55,8 +35,12 @@ class ClipboardMenu(Menu):
self.props.border = 0
if percent < 100:
- self._progress_bar = ClipboardProgressBar(percent)
- self.append(self._progress_bar)
+ self._progress_bar = gtk.ProgressBar()
+ self._update_progress_bar(percent)
+
+ canvas_widget = hippo.CanvasWidget()
+ canvas_widget.props.widget = self._progress_bar
+ self.append(canvas_widget)
else:
self._progress_bar = None
@@ -91,10 +75,15 @@ class ClipboardMenu(Menu):
self._add_stop_item()
self._remove_journal_item()
+ def _update_progress_bar(self, percent):
+ if self._progress_bar:
+ self._progress_bar.props.fraction = percent / 100.0
+ self._progress_bar.props.text = '%.2f %%' % (percent / 100.0)
+
def set_state(self, name, percent, preview, activity, installable):
self.set_title(name)
if self._progress_bar:
- self._progress_bar.set_property('percent', percent)
+ self._update_progress_bar(percent)
self._update_icons(percent, activity, installable)
def _add_remove_item(self):
diff --git a/shell/view/home/HomeBox.py b/shell/view/home/HomeBox.py
index 6502c78..88fbc65 100644
--- a/shell/view/home/HomeBox.py
+++ b/shell/view/home/HomeBox.py
@@ -14,18 +14,22 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+import os
+import signal
import math
from gettext import gettext as _
import gobject
import gtk
import hippo
+import dbus
from sugar.graphics import units
from sugar.graphics import color
from sugar.graphics.xocolor import XoColor
from sugar.graphics.palette import Palette, CanvasInvoker
from sugar import profile
+from sugar import env
from view.home.activitiesdonut import ActivitiesDonut
from view.devices import deviceview
@@ -43,7 +47,7 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
box_height=units.grid_to_pixels(6))
self.append(self._donut)
- self._my_icon = HomeMyIcon(units.XLARGE_ICON_SCALE)
+ self._my_icon = HomeMyIcon(shell, units.XLARGE_ICON_SCALE)
self.append(self._my_icon, hippo.PACK_FIXED)
shell_model = shell.get_model()
@@ -82,11 +86,11 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
if self._donut:
self.remove(self._donut)
self._donut = None
- self._my_icon.props.stroke_color = color.BUTTON_INACTIVE
+ self._my_icon.props.stroke_color = color.ICON_STROKE_INACTIVE
self._my_icon.props.fill_color = \
- color.BUTTON_INACTIVE_BACKGROUND
+ color.ICON_FILL_INACTIVE
self._my_icon.props.background_color = \
- color.BUTTON_INACTIVE_BACKGROUND
+ color.ICON_FILL_INACTIVE.get_int()
def do_allocate(self, width, height, origin_changed):
hippo.CanvasBox.do_allocate(self, width, height, origin_changed)
@@ -124,9 +128,10 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
class HomeMyIcon(MyIcon):
_POPUP_PALETTE_DELAY = 100
- def __init__(self, scale):
+ def __init__(self, shell, scale):
MyIcon.__init__(self, scale)
+ self._shell = shell
self._palette = Palette()
self._palette.set_primary_state(profile.get_nick_name())
self._palette.props.invoker = CanvasInvoker(self)
@@ -137,4 +142,16 @@ class HomeMyIcon(MyIcon):
shutdown_menu_item.show()
def _shutdown_activate_cb(self, menuitem):
- pass
+ model = self._shell.get_model()
+ model.props.state = ShellModel.STATE_SHUTDOWN
+
+ if env.is_emulator():
+ if os.environ.has_key('SUGAR_EMULATOR_PID'):
+ pid = int(os.environ['SUGAR_EMULATOR_PID'])
+ os.kill(pid, signal.SIGTERM)
+ else:
+ 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()