diff options
-rw-r--r-- | src/hardware/nminfo.py | 5 | ||||
-rw-r--r-- | src/view/home/activitieslist.py | 4 | ||||
-rw-r--r-- | src/view/pulsingicon.py | 306 |
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) |