- fix configMode for DVB-T and DVB-C
[enigma2.git] / lib / python / Screens / NetworkSetup.py
index d18d82d43114c38ab3554dabcb64c795592e1780..971ae5aa2c8b41cfbd59b2c4943806536e5812ad 100644 (file)
@@ -2,45 +2,125 @@ from Screen import Screen
 from Components.ActionMap import ActionMap,NumberActionMap
 from Screens.MessageBox import MessageBox
 from Screens.Standby import *
 from Components.ActionMap import ActionMap,NumberActionMap
 from Screens.MessageBox import MessageBox
 from Screens.Standby import *
-from Components.ConfigList import ConfigListScreen
-from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
 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.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.ConfigList import ConfigListScreen
 from Components.PluginComponent import plugins
 from Components.PluginComponent import plugins
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
 from Plugins.Plugin import PluginDescriptor
 from enigma import eTimer
 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 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.")
 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()]
                self.adapters = [(iNetwork.getFriendlyAdapterName(x),x) for x in iNetwork.getAdapterList()]
+
                if len(self.adapters) == 0:
                        self.onFirstExecBegin.append(self.NetworkFallback)
                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,
                {
                        "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)
 
 
                if len(self.adapters) == 1:
                        self.onFirstExecBegin.append(self.okbuttonClick)
 
+       def updateList(self):
+               print "update list"
+               self.list = []
+               default_gw = None
+               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):
        def okbuttonClick(self):
-               selection = self["adapterlist"].getCurrent()
+               selection = self["list"].getCurrent()
+               print "selection",selection
                if selection is not None:
                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:
 
        def AdapterSetupClosed(self, *ret):
                if len(self.adapters) == 1:
@@ -111,6 +191,9 @@ class NameserverSetup(Screen, ConfigListScreen):
                iNetwork.writeNameserverConfig()
                self.close()
 
                iNetwork.writeNameserverConfig()
                self.close()
 
+       def run(self):
+               self.ok()
+
        def cancel(self):
                iNetwork.clearNameservers()
                print "backup-list:", self.backupNameserverList
        def cancel(self):
                iNetwork.clearNameservers()
                print "backup-list:", self.backupNameserverList
@@ -307,7 +390,6 @@ class AdapterSetup(Screen, ConfigListScreen):
                                iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
                        else:
                                iNetwork.removeAdapterAttribute(self.iface, "gateway")
                                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()
                        if self.extended is not None and self.configStrings is not None:
                                iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface))
                                self.ws.writeConfig()
@@ -507,7 +589,8 @@ class AdapterSetupConfiguration(Screen):
                        callFnc = p.__call__["ifaceSupported"](self.iface)
                        if callFnc is not None:
                                menu.append((_("Scan Wireless Networks"), "scanwlan"))
                        callFnc = p.__call__["ifaceSupported"](self.iface)
                        if callFnc is not None:
                                menu.append((_("Scan Wireless Networks"), "scanwlan"))
-                               menu.append((_("Show WLAN Status"), "wlanstatus"))
+                               if iNetwork.getAdapterAttribute(self.iface, "up"):
+                                       menu.append((_("Show WLAN Status"), "wlanstatus"))
                                
                if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
                        menu.append((_("NetworkWizard"), "openwizard"));
                                
                if os_path.exists(resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml")):
                        menu.append((_("NetworkWizard"), "openwizard"));