Actionmap fix on behalf of Acid-Burn
[enigma2.git] / lib / python / Screens / NetworkSetup.py
index 88c078de33322bdc75a03f43f5516d84d218cd69..1b054b5265ca6c009de21859a95d953d19fba68e 100644 (file)
 from Screen import Screen
 from Components.ActionMap import ActionMap,NumberActionMap
 from Screens.MessageBox import MessageBox
+from Screens.InputBox import InputBox
 from Screens.Standby import *
-from Components.ConfigList import ConfigListScreen
-from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
-from Tools.Directories import resolveFilename
 from Components.Label import Label,MultiColorLabel
 from Components.Pixmap import Pixmap,MultiPixmap
 from Components.MenuList import MenuList
-from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigSelection, getConfigListEntry
+from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigSelection, getConfigListEntry, ConfigNothing
+from Components.ConfigList import ConfigListScreen
 from Components.PluginComponent import plugins
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
 from Plugins.Plugin import PluginDescriptor
 from enigma import eTimer
-from os import path as os_path
+from os import path as os_path, system as os_system, unlink
 from re import compile as re_compile, search as re_search
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
 
+from Tools.Directories import SCOPE_SKIN_IMAGE,SCOPE_PLUGINS, resolveFilename
+from Tools.LoadPixmap import LoadPixmap
+from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
+
+class InterfaceList(MenuList):
+       def __init__(self, list, enableWrapAround=False):
+               MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
+               self.l.setFont(0, gFont("Regular", 20))
+               self.l.setItemHeight(30)
+
+def InterfaceEntryComponent(index,name,default,active ):
+       res = [ (index) ]
+       res.append(MultiContentEntryText(pos=(80, 5), size=(430, 25), font=0, text=name))
+       if default is True:
+               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png"))
+       if default is False:
+               png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png"))
+       res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png))
+       if active is True:
+               png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png"))
+       if active is False:
+               png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png"))
+       res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2))
+       return res
+
+
 class NetworkAdapterSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
-               iNetwork.getInterfaces()
+
                self.wlan_errortext = _("No working wireless networkadapter found.\nPlease verify that you have attached a compatible WLAN USB Stick and your Network is configured correctly.")
                self.lan_errortext = _("No working local networkadapter found.\nPlease verify that you have attached a network cable and your Network is configured correctly.")
+               
+               self["ButtonBluetext"] = Label(_("Set as default Interface"))
+               self["ButtonRedtext"] = Label(_("Close"))
+               self["introduction"] = Label(_("Press OK to edit the settings."))
+               
                self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
+
                if len(self.adapters) == 0:
                        self.onFirstExecBegin.append(self.NetworkFallback)
-                       
-               self["adapterlist"] = MenuList(self.adapters)
-               self["actions"] = ActionMap(["OkCancelActions"],
+
+               self.list = []
+               self["list"] = InterfaceList(self.list)
+               self.updateList()
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
                {
                        "ok": self.okbuttonClick,
-                       "cancel": self.close
-               })
+                       "cancel": self.close,
+                       "blue": self.setDefaultInterface,                       
+                       "red": self.close
+               }, -2)
 
                if len(self.adapters) == 1:
                        self.onFirstExecBegin.append(self.okbuttonClick)
 
+       def updateList(self):
+               iNetwork.getInterfaces()
+               self.list = []
+               default_gw = None
+               num_configured_if = len(iNetwork.configuredInterfaces)
+               if num_configured_if < 2 and os_path.exists("/etc/default_gw"):
+                       unlink("/etc/default_gw")
+                       
+               if os_path.exists("/etc/default_gw"):
+                       fp = file('/etc/default_gw', 'r')
+                       result = fp.read()
+                       fp.close()
+                       default_gw = result
+
+               if len(self.adapters) == 0: # no interface available => display only eth0
+                       self.list.append(InterfaceEntryComponent("eth0",iNetwork.getFriendlyAdapterName('eth0'),True,True ))
+               else:
+                       for x in self.adapters:
+                               if x[1] == default_gw:
+                                       default_int = True
+                               else:
+                                       default_int = False
+                               if iNetwork.getAdapterAttribute(x[1], 'up') is True:
+                                       active_int = True
+                               else:
+                                       active_int = False
+                               self.list.append(InterfaceEntryComponent(index = x[1],name = _(x[0]),default=default_int,active=active_int ))
+               self["list"].l.setList(self.list)
+
+       def setDefaultInterface(self):
+               selection = self["list"].getCurrent()
+               num_if = len(self.list)
+               old_default_gw = None
+               if os_path.exists("/etc/default_gw"):
+                       fp = open('/etc/default_gw', 'r')
+                       old_default_gw = fp.read()
+                       fp.close()
+               if num_if > 1 and (not old_default_gw or old_default_gw != selection[0]):
+                       fp = open('/etc/default_gw', 'w+')
+                       fp.write(selection[0])
+                       fp.close()
+                       iNetwork.restartNetwork()
+                       self.updateList()
+               elif old_default_gw and num_if < 2:
+                       unlink("/etc/default_gw")
+                       iNetwork.restartNetwork()
+                       self.updateList()
+
        def okbuttonClick(self):
-               selection = self["adapterlist"].getCurrent()
+               selection = self["list"].getCurrent()
+               print "selection",selection
                if selection is not None:
-                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[1])
+                       self.session.openWithCallback(self.AdapterSetupClosed, AdapterSetupConfiguration, selection[0])
 
        def AdapterSetupClosed(self, *ret):
                if len(self.adapters) == 1:
                        self.close()
+               else:
+                       self.updateList()
 
        def NetworkFallback(self):
                if iNetwork.configuredInterfaces.has_key('wlan0') is True:
@@ -143,61 +230,12 @@ class AdapterSetup(Screen, ConfigListScreen):
                self.essid = essid
                self.aplist = aplist
                self.extended = None
+               self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
                iNetwork.getInterfaces()
 
-               if self.iface == "wlan0" or self.iface == "ath0" :
-                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
-                       self.ws = wpaSupplicant()
-                       list = []
-                       list.append(_("WEP"))
-                       list.append(_("WPA"))
-                       list.append(_("WPA2"))
-                       if self.aplist is not None:
-                               self.nwlist = self.aplist
-                               self.nwlist.sort(key = lambda x: x[0])
-                       else:
-                               self.nwlist = []
-                               self.w = None
-                               self.aps = None
-                               try:
-                                       self.w = Wlan(self.iface)
-                                       self.aps = self.w.getNetworkList()
-                                       if self.aps is not None:
-                                               print "[Wlan.py] got Accespoints!"
-                                               for ap in aps:
-                                                       a = aps[ap]
-                                                       if a['active']:
-                                                               if a['essid'] == "":
-                                                                       a['essid'] = a['bssid']
-                                                               self.nwlist.append( a['essid'])
-                                       self.nwlist.sort(key = lambda x: x[0])
-                               except:
-                                       self.nwlist.append("No Networks found")
-
-                       wsconfig = self.ws.loadConfig()
-                       default = self.essid or wsconfig['ssid']
-                       if default not in self.nwlist:
-                               self.nwlist.append(default)
-                       config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = default ))
-                       config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = wsconfig['encryption'] ))
-                       config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = wsconfig['encryption_type'] ))
-                       config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = wsconfig['key'], fixed_size = False,visible_width = 30))
-               
-               self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False))
-               self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
-               self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0])
-               self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]))
-               if iNetwork.getAdapterAttribute(self.iface, "gateway"):
-                       self.dhcpdefault=True
-               else:
-                       self.dhcpdefault=False
-               self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=self.dhcpdefault or False))
-               self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]))
-               nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
-               self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
-               self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
+               self.createConfig()
                
-               self["actions"] = ActionMap(["SetupActions","ShortcutActions"],
+               self["actions"] = NumberActionMap(["SetupActions", "ColorActions"],
                {
                        "ok": self.ok,
                        "cancel": self.cancel,
@@ -206,7 +244,7 @@ class AdapterSetup(Screen, ConfigListScreen):
                }, -2)
                
                self.list = []
-               ConfigListScreen.__init__(self, self.list)
+               ConfigListScreen.__init__(self, self.list,session = self.session)
                self.createSetup()
                self.onLayoutFinish.append(self.layoutFinished)
                
@@ -249,10 +287,79 @@ class AdapterSetup(Screen, ConfigListScreen):
                        self["Gatewaytext"].hide()
                self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
 
+       def createConfig(self):
+               self.InterfaceEntry = None
+               self.dhcpEntry = None
+               self.gatewayEntry = None
+               self.SSIDscan = None
+               self.wlanSSID = None
+               self.manualwlanSSID = None
+               self.encryptionEnabled = None
+               self.encryptionKey = None
+               self.nwlist = None
+               self.wsconfig = None
+               self.default = None
+               
+               if self.iface == "wlan0" or self.iface == "ath0" :
+                       from Plugins.SystemPlugins.WirelessLan.Wlan import wpaSupplicant,Wlan
+                       self.ws = wpaSupplicant()
+                       list = []
+                       list.append(_("WEP"))
+                       list.append(_("WPA"))
+                       list.append(_("WPA2"))
+                       if self.aplist is not None:
+                               self.nwlist = self.aplist
+                               self.nwlist.sort(key = lambda x: x[0])
+                       else:
+                               self.nwlist = []
+                               self.w = None
+                               self.aps = None
+                               try:
+                                       self.w = Wlan(self.iface)
+                                       self.aps = self.w.getNetworkList()
+                                       if self.aps is not None:
+                                               print "[NetworkSetup.py] got Accespoints!"
+                                               for ap in aps:
+                                                       a = aps[ap]
+                                                       if a['active']:
+                                                               if a['essid'] == "":
+                                                                       a['essid'] = a['bssid']
+                                                               self.nwlist.append( a['essid'])
+                                       self.nwlist.sort(key = lambda x: x[0])
+                               except:
+                                       self.nwlist.append("No Networks found")
+
+                       self.wsconfig = self.ws.loadConfig()
+                       self.default = self.essid or self.wsconfig['ssid']
+                       if self.default not in self.nwlist:
+                               self.nwlist.append(self.default)
+                       config.plugins.wlan.essidscan = NoSave(ConfigYesNo(default = self.wsconfig['ssidscan']))
+                       if self.wsconfig['ssidscan'] is True:
+                               config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
+                       else:
+                               config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False))
+                       config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = self.wsconfig['encryption'] ))
+                       config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = self.wsconfig['encryption_type'] ))
+                       config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = self.wsconfig['key'], visible_width = 50, fixed_size = False))
+               
+               self.activateInterfaceEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "up") or False))
+               self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp") or False))
+               self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0])
+               self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]))
+               if iNetwork.getAdapterAttribute(self.iface, "gateway"):
+                       self.dhcpdefault=True
+               else:
+                       self.dhcpdefault=False
+               self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=self.dhcpdefault or False))
+               self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0]))
+               nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2]
+               self.primaryDNS = NoSave(ConfigIP(default=nameserver[0]))
+               self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1]))
 
        def createSetup(self):
                self.list = []
                self.InterfaceEntry = getConfigListEntry(_("Use Interface"), self.activateInterfaceEntry)
+               
                self.list.append(self.InterfaceEntry)
                if self.activateInterfaceEntry.value:
                        self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
@@ -260,26 +367,32 @@ class AdapterSetup(Screen, ConfigListScreen):
                        if not self.dhcpConfigEntry.value:
                                self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
                                self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
-                               self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry))
+                               self.gatewayEntry = getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry)
+                               self.list.append(self.gatewayEntry)
                                if self.hasGatewayConfigEntry.value:
                                        self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
-                                       
+                       
+                       self.extended = None            
                        for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
                                callFnc = p.__call__["ifaceSupported"](self.iface)
                                if callFnc is not None:
-                                       self.extended = callFnc
-                                       if p.__call__.has_key("configStrings"):
-                                               self.configStrings = p.__call__["configStrings"]
-                                       else:
-                                               self.configStrings = None
+                                       if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin
+                                               self.extended = callFnc
+                                               if p.__call__.has_key("configStrings"):
+                                                       self.configStrings = p.__call__["configStrings"]
+                                               else:
+                                                       self.configStrings = None
+                                               self.SSIDscan = getConfigListEntry(_("Automatic SSID lookup"), config.plugins.wlan.essidscan)
+                                               self.list.append(self.SSIDscan)
+                                               self.wlanSSID = getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid)
+                                               self.list.append(self.wlanSSID)
+                                               self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
+                                               self.list.append(self.encryptionEnabled)
                                                
-                                       self.list.append(getConfigListEntry(_("Network SSID"), config.plugins.wlan.essid))
-                                       self.encryptionEnabled = getConfigListEntry(_("Encryption"), config.plugins.wlan.encryption.enabled)
-                                       self.list.append(self.encryptionEnabled)
-                                       
-                                       if config.plugins.wlan.encryption.enabled.value:
-                                               self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type))
-                                               self.list.append(getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk))
+                                               if config.plugins.wlan.encryption.enabled.value:
+                                                       self.list.append(getConfigListEntry(_("Encryption Type"), config.plugins.wlan.encryption.type))
+                                                       self.encryptionKey = getConfigListEntry(_("Encryption Key"), config.plugins.wlan.encryption.psk)                                                
+                                                       self.list.append(self.encryptionKey)
                
                self["config"].list = self.list
                self["config"].l.setList(self.list)
@@ -289,43 +402,52 @@ class AdapterSetup(Screen, ConfigListScreen):
 
        def newConfig(self):
                print self["config"].getCurrent()
+               if self["config"].getCurrent() == self.InterfaceEntry:
+                       self.createSetup()
                if self["config"].getCurrent() == self.dhcpEntry:
                        self.createSetup()
-
+               if self["config"].getCurrent() == self.gatewayEntry:
+                       self.createSetup()
+               if self.iface == "wlan0" or self.iface == "ath0" :      
+                       if self["config"].getCurrent() == self.SSIDscan:
+                               if config.plugins.wlan.essidscan.value is True:
+                                       config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default ))
+                               else:
+                                       config.plugins.wlan.essid = NoSave(ConfigText(default = self.default, visible_width = 50, fixed_size = False))
+                               self.createSetup()
+                       if self["config"].getCurrent() == self.encryptionEnabled:
+                               self.createSetup()
+               
        def keyLeft(self):
                ConfigListScreen.keyLeft(self)
-               self.createSetup()
+               self.newConfig()
 
        def keyRight(self):
                ConfigListScreen.keyRight(self)
-               self.createSetup()
+               self.newConfig()
 
        def ok(self):
                iNetwork.setAdapterAttribute(self.iface, "up", self.activateInterfaceEntry.value)
-               if self.activateInterfaceEntry.value is True:
-                       iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
-                       iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
-                       iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
-                       if self.hasGatewayConfigEntry.value:
-                               iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
-                       else:
-                               iNetwork.removeAdapterAttribute(self.iface, "gateway")
-                               
-                       if self.extended is not None and self.configStrings is not None:
-                               iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
-                               self.ws.writeConfig()
+               iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
+               iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
+               iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
+               if self.hasGatewayConfigEntry.value:
+                       iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
                else:
-                       iNetwork.removeAdapterAttribute(self.iface, "ip")
-                       iNetwork.removeAdapterAttribute(self.iface, "netmask")
                        iNetwork.removeAdapterAttribute(self.iface, "gateway")
+               if self.extended is not None and self.configStrings is not None:
+                       iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
+                       self.ws.writeConfig()
+               if self.activateInterfaceEntry.value is False:
                        iNetwork.deactivateInterface(self.iface)
-
-               iNetwork.deactivateNetworkConfig()
                iNetwork.writeNetworkConfig()
+               iNetwork.deactivateNetworkConfig()
                iNetwork.activateNetworkConfig()
                self.close()
 
        def cancel(self):
+               iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState)
+               self.activateInterfaceEntry.value = self.oldInterfaceState
                if self.activateInterfaceEntry.value is False:
                        iNetwork.deactivateInterface(self.iface)
                iNetwork.getInterfaces()
@@ -381,8 +503,6 @@ class AdapterSetupConfiguration(Screen):
                self.updateStatusbar()
 
        def ok(self):
-               print "SELF.iFACE im OK Klick",self.iface
-               print "self.menulist.getCurrent()[1]",self["menulist"].getCurrent()[1]
                if self["menulist"].getCurrent()[1] == 'edit':
                        if self.iface == 'wlan0' or self.iface == 'ath0':
                                try:
@@ -428,7 +548,8 @@ class AdapterSetupConfiguration(Screen):
                                ifobj = Wireless(self.iface) # a Wireless NIC Object
                                self.wlanresponse = ifobj.getStatistics()
                                if self.wlanresponse[0] != 19:
-                                       self.session.open(WlanStatus,self.iface)
+                                       self.session.openWithCallback(self.AdapterSetupClosed, WlanStatus,self.iface)
+                                       #self.session.open(WlanStatus,self.iface)
                                else:
                                        # Display Wlan not available Message
                                        self.showErrorMessage()
@@ -437,6 +558,9 @@ class AdapterSetupConfiguration(Screen):
                if self["menulist"].getCurrent()[1] == 'openwizard':
                        from Plugins.SystemPlugins.NetworkWizard.NetworkWizard import NetworkWizard
                        self.session.openWithCallback(self.AdapterSetupClosed, NetworkWizard)
+               if self["menulist"].getCurrent()[1][0] == 'extendedSetup':
+                       self.extended = self["menulist"].getCurrent()[1][2]
+                       self.extended(self.session, self.iface)
        
        def up(self):
                self["menulist"].up()
@@ -474,7 +598,9 @@ class AdapterSetupConfiguration(Screen):
                        self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
                if self["menulist"].getCurrent()[1] == 'openwizard':
                        self["description"].setText(_("Use the Networkwizard to configure your Network\n" ) + self.oktext )
-
+               if self["menulist"].getCurrent()[1][0] == 'extendedSetup':
+                       self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext )
+               
        def updateStatusbar(self):
                self["IFtext"].setText(_("Network:"))
                self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
@@ -505,15 +631,33 @@ class AdapterSetupConfiguration(Screen):
                menu.append((_("Nameserver settings"), "dns"))
                menu.append((_("Network test"), "test"))
                menu.append((_("Restart network"), "lanrestart"))
-               
+
+               self.extended = None
+               self.extendedSetup = None               
                for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
                        callFnc = p.__call__["ifaceSupported"](self.iface)
                        if callFnc is not None:
-                               menu.append((_("Scan Wireless Networks"), "scanwlan"))
-                               menu.append((_("Show WLAN Status"), "wlanstatus"))
-                               
+                               self.extended = callFnc
+                               print p.__call__
+                               if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin
+                                       menu.append((_("Scan Wireless Networks"), "scanwlan"))
+                                       if iNetwork.getAdapterAttribute(self.iface, "up"):
+                                               menu.append((_("Show WLAN Status"), "wlanstatus"))
+                               else:
+                                       if p.__call__.has_key("menuEntryName"):
+                                               menuEntryName = p.__call__["menuEntryName"](self.iface)
+                                       else:
+                                               menuEntryName = _('Extended Setup...')
+                                       if p.__call__.has_key("menuEntryDescription"):
+                                               menuEntryDescription = p.__call__["menuEntryDescription"](self.iface)
+                                       else:
+                                               menuEntryDescription = _('Extended Networksetup Plugin...')
+                                       self.extendedSetup = ('extendedSetup',menuEntryDescription, self.extended)
+                                       menu.append((menuEntryName,self.extendedSetup))                                 
+                       
                if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
-                       menu.append((_("NetworkWizard"), "openwizard"));
+                       menu.append((_("NetworkWizard"), "openwizard"))
+
                return menu
 
        def AdapterSetupClosed(self, *ret):
@@ -694,6 +838,8 @@ class NetworkAdapterTest(Screen):
        def doStep1(self):
                self.steptimer = True
                self.nextStepTimer.start(3000)
+               self["ButtonYellow_Check"].show()
+               self["ButtonYellowtext"].show()
 
        def doStep2(self):
                self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
@@ -855,6 +1001,8 @@ class NetworkAdapterTest(Screen):
                self["EditSettingsButton"].hide()
                self["InfoText"].hide()
                self["InfoTextBorder"].hide()
+               self["ButtonYellow_Check"].hide()
+               self["ButtonYellowtext"].hide()
 
        def setLabels(self):
                self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))