Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view/devices/network/wireless.py
diff options
context:
space:
mode:
Diffstat (limited to 'shell/view/devices/network/wireless.py')
-rw-r--r--shell/view/devices/network/wireless.py37
1 files changed, 28 insertions, 9 deletions
diff --git a/shell/view/devices/network/wireless.py b/shell/view/devices/network/wireless.py
index 23aa149..f4f8869 100644
--- a/shell/view/devices/network/wireless.py
+++ b/shell/view/devices/network/wireless.py
@@ -27,13 +27,24 @@ from sugar.graphics.palette import Palette
from model.devices.network import wireless
from model.devices import device
+from hardware import hardwaremanager
+from hardware import nmclient
+
_ICON_NAME = 'network-wireless'
class DeviceView(CanvasIcon):
def __init__(self, model):
CanvasIcon.__init__(self, size=style.MEDIUM_ICON_SIZE)
self._model = model
- self._palette = WirelessPalette(self._get_palette_primary_text())
+
+ meshdev = None
+ network_manager = hardwaremanager.get_network_manager()
+ for device in network_manager.get_devices():
+ if device.get_type() == nmclient.DEVICE_TYPE_802_11_MESH_OLPC:
+ meshdev = device
+ break
+
+ self._palette = WirelessPalette(self._get_palette_primary_text(), meshdev)
self.set_palette(self._palette)
self._counter = 0
self._palette.set_frequency(self._model.props.frequency)
@@ -87,8 +98,9 @@ class DeviceView(CanvasIcon):
self.props.stroke_color = style.COLOR_INACTIVE_STROKE.get_svg()
class WirelessPalette(Palette):
- def __init__(self, primary_text):
- Palette.__init__(self, primary_text)
+ def __init__(self, primary_text, meshdev):
+ Palette.__init__(self, primary_text, menu_after_content=True)
+ self._meshdev = meshdev
self._chan_label = gtk.Label()
self._chan_label.show()
@@ -97,16 +109,23 @@ class WirelessPalette(Palette):
vbox.pack_start(self._chan_label)
vbox.show()
+ if meshdev:
+ disconnect_item = gtk.MenuItem(_('Disconnect...'))
+ disconnect_item.connect('activate', self._disconnect_activate_cb)
+ self.menu.append(disconnect_item)
+ disconnect_item.show()
+
self.set_content(vbox)
+ def _disconnect_activate_cb(self, menuitem):
+ # Disconnection for an AP means activating the default mesh device
+ network_manager = hardwaremanager.get_network_manager()
+ if network_manager and self._meshdev:
+ network_manager.set_active_device(self._meshdev)
+
def set_frequency(self, freq):
- chans = { 2.412: 1, 2.417: 2, 2.422: 3, 2.427: 4,
- 2.432: 5, 2.437: 6, 2.442: 7, 2.447: 8,
- 2.452: 9, 2.457: 10, 2.462: 11, 2.467: 12,
- 2.472: 13
- }
try:
- chan = chans[freq]
+ chan = wireless.freq_to_channel(freq)
except KeyError:
chan = 0
self._chan_label.set_text("%s: %d" % (_("Channel"), chan))