Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar

Conflicts:

	shell/view/home/HomeBox.py
This commit is contained in:
Marco Pesenti Gritti 2007-06-25 14:33:54 +02:00
commit f85142bdc4
4 changed files with 36 additions and 167 deletions

View File

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

View File

@ -6,7 +6,6 @@ sugar_PYTHON = \
ActivityHost.py \
BuddyIcon.py \
BuddyMenu.py \
ClipboardBubble.py \
clipboardicon.py \
clipboardmenu.py \
keyhandler.py \

View File

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

View File

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