On 27 Jun 2011, at 14:49, Walter Bender <walter.ben...@gmail.com> wrote:
> On Mon, Jun 27, 2011 at 9:44 AM, Gary Martin <garycmar...@googlemail.com> > wrote: >> Hi Sascha, >> >> On 27 Jun 2011, at 12:27, Sascha Silbe <si...@activitycentral.com> wrote: >> >>> This duplicates the existing functionality in the Control Panel for more >>> convenient access. Disabling wifi devices can save power, thereby increasing >>> battery life. >>> >>> Signed-off-by: Sascha Silbe <si...@activitycentral.com> >>> --- >>> >>> This is fully working but I'm not sure about the correct way to change >>> the label of a MenuItem. Accessing it via MenuItem.child seems hacky. >>> Suggestions? >>> >>> We could also do with a better icon. Maybe something like the circles >>> from emblem-outofrange combined with the arrow from emblem-charging, >>> striking out the arrow depending on the current action (disable or enable >>> wifi)? >> >> I'll have a think. >> >>> Since the wiki is down I've uploaded the screenshot to the scratch area on >>> my >>> own server [1,2]. >>> >>> [1] http://sascha.silbe.org/tmp/sugar-wifi-conn-disable.png >>> [2] http://sascha.silbe.org/tmp/sugar-wifi-enable.png >> >> Thanks for the screenshots. For the sugar-wifi-enable palette can we loose >> the empty section at the top, or perhaps if that's complicated we can place >> some descriptive text there so it doesn't look like a bug? >> >> Would the text better read as "Enable my wireless radio" and "Disable my >> wireless radio"? > > "Wireless radio" is a bit redundant, do you think? :) Lol, how true! :) I was trying to avoid 'devices' as it's a little technical, and not used elsewhere in sugar that I remember — so looked at the language used in the Networking module, 'Turn off the wireless radio to save battery life'... I'd like to claim I was a victim of group think :) How about 'Enable my radio network' with 'Disable my radio network'? Or 'Enable my wireless network' with 'Disable my wireless network'? --Gary > -walter >> >> How does this interact with Mesh/Adhoc? I assume their icons will vanish >> from the neighbourhood as well, and their palettes will have the same >> enable/disable radio menu option? >> >> Regards, >> --Gary >> >>> >>> extensions/deviceicon/network.py | 57 >>> ++++++++++++++++++++++++++++++++++++++ >>> 1 files changed, 57 insertions(+), 0 deletions(-) >>> >>> diff --git a/extensions/deviceicon/network.py >>> b/extensions/deviceicon/network.py >>> index 9a74237..85ca884 100644 >>> --- a/extensions/deviceicon/network.py >>> +++ b/extensions/deviceicon/network.py >>> @@ -72,12 +72,15 @@ class WirelessPalette(Palette): >>> __gsignals__ = { >>> 'deactivate-connection': (gobject.SIGNAL_RUN_FIRST, >>> gobject.TYPE_NONE, >>> ([])), >>> + 'disable-wifi': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), >>> + 'enable-wifi': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), >>> } >>> >>> def __init__(self, primary_text): >>> Palette.__init__(self, label=primary_text) >>> >>> self._disconnect_item = None >>> + self._enabled = True >>> >>> self._channel_label = gtk.Label() >>> self._channel_label.props.xalign = 0.0 >>> @@ -109,6 +112,13 @@ class WirelessPalette(Palette): >>> self.__disconnect_activate_cb) >>> self.menu.append(self._disconnect_item) >>> >>> + label = glib.markup_escape_text(_('Disable all wireless devices')) >>> + self._powercontrol_item = MenuItem(label, 'system-shutdown') >>> + self._powercontrol_item.connect('activate', >>> + self.__powercontrol_activate_cb) >>> + self._powercontrol_item.show() >>> + self.menu.append(self._powercontrol_item) >>> + >>> def set_connecting(self): >>> self.props.secondary_text = _('Connecting...') >>> >>> @@ -132,9 +142,26 @@ class WirelessPalette(Palette): >>> self._disconnect_item.hide() >>> self.set_content(None) >>> >>> + def set_enabled(self, enabled): >>> + self._enabled = enabled >>> + if enabled: >>> + label = glib.markup_escape_text(_('Disable all wireless >>> devices')) >>> + else: >>> + self.set_disconnected() >>> + label = glib.markup_escape_text(_('Enable wireless devices')) >>> + >>> + # FIXME: what's the right way to do this? >>> + self._powercontrol_item.child.set_markup(label) >>> + >>> def __disconnect_activate_cb(self, menuitem): >>> self.emit('deactivate-connection') >>> >>> + def __powercontrol_activate_cb(self, menuitem): >>> + if self._enabled: >>> + self.emit('disable-wifi') >>> + else: >>> + self.emit('enable-wifi') >>> + >>> def _set_frequency(self, frequency): >>> channel = network.frequency_to_channel(frequency) >>> self._set_channel(channel) >>> @@ -402,6 +429,8 @@ class WirelessDeviceView(ToolButton): >>> self._palette = WirelessPalette(self._name) >>> self._palette.connect('deactivate-connection', >>> self.__deactivate_connection_cb) >>> + self._palette.connect('disable-wifi', self.__disable_wifi_cb) >>> + self._palette.connect('enable-wifi', self.__enable_wifi_cb) >>> self.set_palette(self._palette) >>> self._palette.set_group_id('frame') >>> >>> @@ -420,6 +449,16 @@ class WirelessDeviceView(ToolButton): >>> path=self._device.object_path, >>> dbus_interface=_NM_DEVICE_IFACE) >>> >>> + obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) >>> + network_manager = dbus.Interface(obj, _NM_IFACE) >>> + self._nm_props = dbus.Interface(network_manager, >>> dbus.PROPERTIES_IFACE) >>> + self._nm_props.connect_to_signal('PropertiesChanged', >>> + self.__nm_props_changed_cb, >>> + dbus_interface=_NM_IFACE) >>> + self._nm_props.Get(_NM_IFACE, 'XWirelessEnabled', >>> + reply_handler=self.__nm_wifi_enabled_reply_cb, >>> + error_handler=self.__nm_wifi_enabled_error_cb) >>> + >>> def disconnect(self): >>> self._bus.remove_signal_receiver(self.__state_changed_cb, >>> signal_name='StateChanged', >>> @@ -578,6 +617,24 @@ class WirelessDeviceView(ToolButton): >>> def __activate_error_cb(self, err): >>> logging.debug('Failed to create network: %s', err) >>> >>> + def __nm_wifi_enabled_reply_cb(self, enabled): >>> + self._palette.set_enabled(enabled) >>> + >>> + def __nm_wifi_enabled_error_cb(self, error): >>> + logging.error('Could not determine whether wifi is enabled: %r', >>> error) >>> + >>> + def __nm_props_changed_cb(self, changed): >>> + if 'WirelessEnabled' not in changed: >>> + return >>> + >>> + self._palette.set_enabled(changed['WirelessEnabled']) >>> + >>> + def __disable_wifi_cb(self, palette_): >>> + self._nm_props.Set(_NM_IFACE, 'WirelessEnabled', False) >>> + >>> + def __enable_wifi_cb(self, palette_): >>> + self._nm_props.Set(_NM_IFACE, 'WirelessEnabled', True) >>> + >>> >>> class OlpcMeshDeviceView(ToolButton): >>> _ICON_NAME = 'network-mesh' >>> -- >>> 1.7.2.5 >>> >> _______________________________________________ >> Sugar-devel mailing list >> Sugar-devel@lists.sugarlabs.org >> http://lists.sugarlabs.org/listinfo/sugar-devel >> > > > > -- > Walter Bender > Sugar Labs > http://www.sugarlabs.org _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel