[Sugar-devel] [DESIGN] [PATCH RFC sugar] Wireless network Frame device: add suport for disabling wireless devices

Gary Martin garycmartin at googlemail.com
Mon Jun 27 13:49:25 EDT 2011


On 27 Jun 2011, at 14:49, Walter Bender <walter.bender at gmail.com> wrote:

> On Mon, Jun 27, 2011 at 9:44 AM, Gary Martin <garycmartin at googlemail.com> wrote:
>> Hi Sascha,
>> 
>> On 27 Jun 2011, at 12:27, Sascha Silbe <silbe at 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 <silbe at 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 at lists.sugarlabs.org
>> http://lists.sugarlabs.org/listinfo/sugar-devel
>> 
> 
> 
> 
> -- 
> Walter Bender
> Sugar Labs
> http://www.sugarlabs.org


More information about the Sugar-devel mailing list