Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/hardware/nminfo.py5
-rw-r--r--src/view/home/activitieslist.py4
-rw-r--r--src/view/pulsingicon.py306
3 files changed, 149 insertions, 166 deletions
diff --git a/src/hardware/nminfo.py b/src/hardware/nminfo.py
index 521438a..a703ff6 100644
--- a/src/hardware/nminfo.py
+++ b/src/hardware/nminfo.py
@@ -1,5 +1,3 @@
-# vi: ts=4 ai noet
-#
# Copyright (C) 2006-2007 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -28,7 +26,6 @@ import dbus.service
from sugar import env
-from hardware import nmclient
from hardware import keydialog
IW_AUTH_KEY_MGMT_802_1X = 0x1
@@ -486,6 +483,8 @@ class NMInfo(object):
def get_key_for_network(self, dev_op, net_op, ssid, attempt,
new_key, async_cb, async_err_cb):
+ from hardware import nmclient
+
if not isinstance(ssid, unicode):
raise ValueError("Invalid arguments; ssid must be unicode.")
if self._allowed_networks.has_key(ssid) and not new_key:
diff --git a/src/view/home/activitieslist.py b/src/view/home/activitieslist.py
index a9dfe9e..720eb2e 100644
--- a/src/view/home/activitieslist.py
+++ b/src/view/home/activitieslist.py
@@ -261,7 +261,7 @@ class FavoriteIcon(CanvasIcon):
box_width=style.GRID_CELL_SIZE*3/5,
size=style.SMALL_ICON_SIZE)
self._favorite = None
- self._set_favorite(favorite)
+ self.set_favorite(favorite)
self.connect('button-release-event', self.__release_event_cb)
self.connect('motion-notify-event', self.__motion_notify_event_cb)
@@ -280,7 +280,7 @@ class FavoriteIcon(CanvasIcon):
return self._favorite
favorite = gobject.property(
- type=bool, getter=get_favorite, setter=set_favorite)
+ type=bool, default=False, getter=get_favorite, setter=set_favorite)
def __release_event_cb(self, icon, event):
self.props.favorite = not self.props.favorite
diff --git a/src/view/pulsingicon.py b/src/view/pulsingicon.py
index c733043..499ae99 100644
--- a/src/view/pulsingicon.py
+++ b/src/view/pulsingicon.py
@@ -24,126 +24,129 @@ from sugar.graphics.style import Color
_INTERVAL = 100
_STEP = math.pi / 10 # must be a fraction of pi, for clean caching
-def _get_as_rgba(self, html_color):
- if html_color == 'none':
- return Color('#FFFFFF', alpha=1.0).get_rgba()
- else:
- return Color(html_color).get_rgba()
-
-def _update_colors(self):
- if self._pulsing:
- base_stroke = self._get_as_rgba(self._base_color.get_stroke_color())
- pulse_stroke = self._get_as_rgba(self._pulse_color.get_stroke_color())
- base_fill = self._get_as_rgba(self._base_color.get_fill_color())
- pulse_fill = self._get_as_rgba(self._pulse_color.get_fill_color())
-
- self.props.stroke_color = \
- self._get_color(base_stroke, pulse_stroke).get_svg()
- self.props.fill_color = \
- self._get_color(base_fill, pulse_fill).get_svg()
- else:
- self.props.xo_color = self._base_color
-
-def _get_color(self, orig_color, target_color):
- next_point = (orig_color[0] +
- self._level * (target_color[0] - orig_color[0]),
- orig_color[1] +
- self._level * (target_color[1] - orig_color[1]),
- orig_color[2] +
- self._level * (target_color[2] - orig_color[2]))
- return Color('#%02x%02x%02x' % (int(next_point[0] * 255),
- int(next_point[1] * 255),
- int(next_point[2] * 255)))
+class Pulser(object):
+ def __init__(self, icon):
+ self._pulse_hid = None
+ self._icon = icon
+ self._level = 0
+ self._phase = 0
+
+ def start(self, restart=False):
+ if restart:
+ self._phase = 0
+ if self._pulse_hid is None:
+ self._pulse_hid = gobject.timeout_add(_INTERVAL, self.__pulse_cb)
+
+ def stop(self):
+ if self._pulse_hid is not None:
+ gobject.source_remove(self._pulse_hid)
+ self._pulse_hid = None
+ self._icon.xo_color = self._icon.base_color
+
+ def update(self):
+ if self._icon.pulsing:
+ base_color = self._icon.base_color
+ pulse_color = self._icon.pulse_color
+
+ base_stroke = self._get_as_rgba(base_color.get_stroke_color())
+ pulse_stroke = self._get_as_rgba(pulse_color.get_stroke_color())
+ base_fill = self._get_as_rgba(base_color.get_fill_color())
+ pulse_fill = self._get_as_rgba(pulse_color.get_fill_color())
+
+ self._icon.stroke_color = \
+ self._get_color(base_stroke, pulse_stroke).get_svg()
+ self._icon.fill_color = \
+ self._get_color(base_fill, pulse_fill).get_svg()
+ else:
+ self._icon.xo_color = self._icon.base_color
+
+ def _get_as_rgba(self, html_color):
+ if html_color == 'none':
+ return Color('#FFFFFF', alpha=1.0).get_rgba()
+ else:
+ return Color(html_color).get_rgba()
+
+ def _get_color(self, orig_color, target_color):
+ next_point = (orig_color[0] +
+ self._level * (target_color[0] - orig_color[0]),
+ orig_color[1] +
+ self._level * (target_color[1] - orig_color[1]),
+ orig_color[2] +
+ self._level * (target_color[2] - orig_color[2]))
+
+ return Color('#%02x%02x%02x' % (int(next_point[0] * 255),
+ int(next_point[1] * 255),
+ int(next_point[2] * 255)))
+
+ def __pulse_cb(self):
+ self._phase += _STEP
+ self._level = (math.sin(self._phase) + 1) / 2
+ self.update()
+
+ return True
class PulsingIcon(Icon):
__gtype_name__ = 'SugarPulsingIcon'
- __gproperties__ = {
- 'base-color' : (object, None, None, gobject.PARAM_READWRITE),
- 'pulse-color' : (object, None, None, gobject.PARAM_READWRITE),
- 'pulsing' : (bool, None, None, False, gobject.PARAM_READWRITE),
- 'paused' : (bool, None, None, False, gobject.PARAM_READWRITE)
- }
-
def __init__(self, **kwargs):
+ self._pulser = Pulser(self)
self._base_color = None
self._pulse_color = None
- self._pulse_hid = None
self._paused = False
self._pulsing = False
- self._level = 0
- self._phase = 0
Icon.__init__(self, **kwargs)
self._palette = None
self.connect('destroy', self.__destroy_cb)
- def __destroy_cb(self, icon):
- if self._palette is not None:
- self._palette.destroy()
+ def set_pulse_color(self, pulse_color):
+ self._pulse_color = pulse_color
+ self._pulser.update()
- # Hack for sharing code between CanvasPulsingIcon and PulsingIcon
- _get_as_rgba = _get_as_rgba
- _update_colors = _update_colors
- _get_color = _get_color
+ def get_pulse_color(self):
+ return self._pulse_color
- def _start_pulsing(self, restart=False):
- if restart:
- self._phase = 0
- if self._pulse_hid is None:
- self._pulse_hid = gobject.timeout_add(_INTERVAL, self.__pulse_cb)
+ pulse_color = gobject.property(
+ type=object, getter=get_pulse_color, setter=set_pulse_color)
- def _stop_pulsing(self):
- if self._pulse_hid is not None:
- gobject.source_remove(self._pulse_hid)
- self._pulse_hid = None
- self.props.xo_color = self._base_color
+ def set_base_color(self, base_color):
+ self._base_color = base_color
+ self._pulser.update()
- def __pulse_cb(self):
- self._phase += _STEP
- self._level = (math.sin(self._phase) + 1) / 2
- self._update_colors()
+ def get_base_color(self):
+ return self._base_color
- return True
+ base_color = gobject.property(
+ type=object, getter=get_base_color, setter=set_base_color)
- def do_set_property(self, pspec, value):
- if pspec.name == 'base-color':
- if self._base_color != value:
- self._base_color = value
- self._update_colors()
- elif pspec.name == 'pulse-color':
- if self._pulse_color != value:
- self._pulse_color = value
- self._update_colors()
- elif pspec.name == 'pulsing':
- if self._pulsing != value:
- self._pulsing = value
- if self._pulsing:
- self._start_pulsing(restart=True)
- else:
- self._stop_pulsing()
- elif pspec.name == 'paused':
- if self._paused != value:
- self._paused = value
- if self._paused:
- self._stop_pulsing()
- else:
- self._start_pulsing(restart=False)
+ def set_paused(self, paused):
+ self._paused = paused
+
+ if self._paused:
+ self._pulser.stop()
else:
- Icon.do_set_property(self, pspec, value)
-
- def do_get_property(self, pspec):
- if pspec.name == 'base-color':
- return self._base_color
- elif pspec.name == 'pulse-color':
- return self._pulse_color
- elif pspec.name == 'pulsing':
- return self._pulsing
- elif pspec.name == 'paused':
- return self._paused
+ self._pulser.start(restart=False)
+
+ def get_paused(self):
+ return self._paused
+
+ paused = gobject.property(
+ type=bool, default=False, getter=get_paused, setter=set_paused)
+
+ def set_pulsing(self, pulsing):
+ self._pulsing = pulsing
+
+ if self._pulsing:
+ self._pulser.start(restart=True)
else:
- return Icon.do_get_property(self, pspec)
+ self._pulser.stop()
+
+ def get_pulsing(self):
+ return self._pulsing
+
+ pulsing = gobject.property(
+ type=bool, default=False, getter=get_pulsing, setter=set_pulsing)
def _get_palette(self):
return self._palette
@@ -155,85 +158,66 @@ class PulsingIcon(Icon):
palette = property(_get_palette, _set_palette)
+ def __destroy_cb(self, icon):
+ if self._palette is not None:
+ self._palette.destroy()
+
class CanvasPulsingIcon(CanvasIcon):
__gtype_name__ = 'SugarCanvasPulsingIcon'
- __gproperties__ = {
- 'base-color' : (object, None, None, gobject.PARAM_WRITABLE),
- 'pulse-color' : (object, None, None, gobject.PARAM_WRITABLE),
- 'pulsing' : (bool, None, None, False, gobject.PARAM_WRITABLE),
- 'paused' : (bool, None, None, False, gobject.PARAM_WRITABLE)
- }
-
def __init__(self, **kwargs):
+ self._pulser = Pulser(self)
self._base_color = None
self._pulse_color = None
- self._pulse_hid = None
self._paused = False
self._pulsing = False
- self._level = 0
- self._phase = 0
CanvasIcon.__init__(self, **kwargs)
- # Hack for sharing code between CanvasPulsingIcon and PulsingIcon
- _get_as_rgba = _get_as_rgba
- _update_colors = _update_colors
- _get_color = _get_color
+ def set_pulse_color(self, pulse_color):
+ self._pulse_color = pulse_color
+ self._pulser.update()
- def _start_pulsing(self, restart=False):
- if restart:
- self._phase = 0
- if self._pulse_hid is None:
- self._pulse_hid = gobject.timeout_add(_INTERVAL, self.__pulse_cb)
+ def get_pulse_color(self):
+ return self._pulse_color
- def _stop_pulsing(self):
- if self._pulse_hid is not None:
- gobject.source_remove(self._pulse_hid)
- self._pulse_hid = None
- self.props.xo_color = self._base_color
+ pulse_color = gobject.property(
+ type=object, getter=get_pulse_color, setter=set_pulse_color)
- def __pulse_cb(self):
- self._phase += _STEP
- self._level = (math.sin(self._phase) + 1) / 2
- self._update_colors()
+ def set_base_color(self, base_color):
+ self._base_color = base_color
+ self._pulser.update()
- return True
+ def get_base_color(self):
+ return self._base_color
+
+ base_color = gobject.property(
+ type=object, getter=get_base_color, setter=set_base_color)
+
+ def set_paused(self, paused):
+ self._paused = paused
- def do_set_property(self, pspec, value):
- if pspec.name == 'base-color':
- if self._base_color != value:
- self._base_color = value
- self._update_colors()
- elif pspec.name == 'pulse-color':
- if self._pulse_color != value:
- self._pulse_color = value
- self._update_colors()
- elif pspec.name == 'pulsing':
- if self._pulsing != value:
- self._pulsing = value
- if self._pulsing:
- self._start_pulsing(restart=True)
- else:
- self._stop_pulsing()
- elif pspec.name == 'paused':
- if self._paused != value:
- self._paused = value
- if self._paused:
- self._stop_pulsing()
- else:
- self._start_pulsing(restart=False)
+ if self._paused:
+ self._pulser.stop()
else:
- CanvasIcon.do_set_property(self, pspec, value)
-
- def do_get_property(self, pspec):
- if pspec.name == 'base-color':
- return self._base_color
- elif pspec.name == 'pulse-color':
- return self._pulse_color
- elif pspec.name == 'pulsing':
- return self._pulsing
- elif pspec.name == 'paused':
- return self._paused
+ self._pulser.start(restart=False)
+
+ def get_paused(self):
+ return self._paused
+
+ paused = gobject.property(
+ type=bool, default=False, getter=get_paused, setter=set_paused)
+
+ def set_pulsing(self, pulsing):
+ self._pulsing = pulsing
+
+ if self._pulsing:
+ self._pulser.start(restart=True)
else:
- return CanvasIcon.do_get_property(self, pspec)
+ self._pulser.stop()
+
+ def get_pulsing(self):
+ return self._pulsing
+
+ pulsing = gobject.property(
+ type=bool, default=False, getter=get_pulsing, setter=set_pulsing)