add .jpe extension
[enigma2.git] / lib / python / Screens / NetworkSetup.py
index 3bdfe163150ca1731ed3c2581ab2b10e8bc15c9e..a2b15e935e7e6976dc8d564c5b5ebd1109abbf35 100644 (file)
 from Screen import Screen
 from Screen import Screen
-from Components.ActionMap import NumberActionMap
+from Components.ActionMap import ActionMap
 from Components.ConfigList import ConfigList, ConfigListScreen
 from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
 from Components.Label import Label
 from Components.ConfigList import ConfigList, ConfigListScreen
 from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
 from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigSubsection, ConfigNothing
+from Components.PluginComponent import plugins
+from Plugins.Plugin import PluginDescriptor
 
 
-class NetworkSetup(Screen, ConfigListScreen):
+
+class NetworkAdapterSelection(Screen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               
+               self["adapterlist"] = MenuList(iNetwork.getAdapterList())
+               
+               self["actions"] = ActionMap(["OkCancelActions"],
+               {
+                       "ok": self.okbuttonClick ,
+                       "cancel": self.close
+               })
+
+       def okbuttonClick(self):
+               selection = self["adapterlist"].getCurrent()
+               print "selection:", selection
+               if selection is not None:
+                       self.session.open(AdapterSetup, selection)
+                       
+class NameserverSetup(Screen, ConfigListScreen):
        def __init__(self, session):
                Screen.__init__(self, session)
        def __init__(self, session):
                Screen.__init__(self, session)
+               self.backupNameserverList = iNetwork.getNameserverList()[:]
+               print "backup-list:", self.backupNameserverList
+               
+               self["red"] = Label(_("Delete"))
+               self["green"] = Label(_("Add"))
+               
+               self.createConfig()
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
+               {
+                       "ok": self.ok,
+                       "cancel": self.cancel,
+                       "green": self.add,
+                       "red": self.remove
+               }, -2)
+
+               self.list = []
+               ConfigListScreen.__init__(self, self.list)
+               self.createSetup()
+               
+       def createConfig(self):
+               self.nameservers = iNetwork.getNameserverList()
+               self.nameserverEntries = []
+               
+               for nameserver in self.nameservers:
+                       self.nameserverEntries.append(NoSave(ConfigIP(default=nameserver)))
+                       
+       def createSetup(self):
+               self.list = []
+
+               #self.nameserverConfigEntries = []
+               for i in range(len(self.nameserverEntries)):
+                       self.list.append(getConfigListEntry(_("Nameserver %d") % (i + 1), self.nameserverEntries[i]))
+               
+               self["config"].list = self.list
+               self["config"].l.setList(self.list)
+
+       def ok(self):
+               iNetwork.clearNameservers()
+               for nameserver in self.nameserverEntries:
+                       iNetwork.addNameserver(nameserver.value)
+               iNetwork.writeNameserverConfig()
+               self.close()
+       
+       def cancel(self):
+               iNetwork.clearNameservers()
+               print "backup-list:", self.backupNameserverList
+               for nameserver in self.backupNameserverList:
+                       iNetwork.addNameserver(nameserver)
+               self.close()
+       
+       def add(self):
+               iNetwork.addNameserver([0,0,0,0])
+               self.createConfig()
+               self.createSetup()
+       
+       def remove(self):
+               print "currentIndex:", self["config"].getCurrentIndex()
+               
+               index = self["config"].getCurrentIndex()
+               if index < len(self.nameservers):
+                       iNetwork.removeNameserver(self.nameservers[index])
+                       self.createConfig()
+                       self.createSetup()
+
+               
+class AdapterSetup(Screen, ConfigListScreen):
+       def __init__(self, session, iface):
+               Screen.__init__(self, session)
+               
+               self.iface = iface
+
+               print iNetwork.getAdapterAttribute(self.iface, "dhcp")
+               self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp")))
+               self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=True))
+               self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")))
+               self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask")))
+               self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway")))
         
         
-               self["actions"] = NumberActionMap(["SetupActions"],
+               self["iface"] = Label(iNetwork.getAdapterName(self.iface))
+                       
+               self["actions"] = ActionMap(["SetupActions"],
                {
                {
-                       "ok": self.keySave,
-                       "cancel": self.keyCancel,
-               }, -1)
+                       "ok": self.ok,
+                       "cancel": self.cancel,
+               }, -2)
 
                self.list = []
                ConfigListScreen.__init__(self, self.list)
 
                self.list = []
                ConfigListScreen.__init__(self, self.list)
@@ -24,13 +127,33 @@ class NetworkSetup(Screen, ConfigListScreen):
        def createSetup(self):
                self.list = []
 
        def createSetup(self):
                self.list = []
 
-               self.dhcpEntry = getConfigListEntry(_("Use DHCP"), config.network.dhcp)
+               self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
                self.list.append(self.dhcpEntry)
                self.list.append(self.dhcpEntry)
-               self.list.append(getConfigListEntry(_('IP Address'), config.network.ip))
-               if not config.network.dhcp.value:
-                       self.list.append(getConfigListEntry(_('Netmask'), config.network.netmask))
-                       self.list.append(getConfigListEntry(_('Gateway'), config.network.gateway))
-                       self.list.append(getConfigListEntry(_('Nameserver'), config.network.dns))
+               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))
+                       if self.hasGatewayConfigEntry.value:
+                               self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
+               
+               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:
+                               self.extended = callFnc
+                               print p.__call__
+                               if p.__call__.has_key("configStrings"):
+                                       self.configStrings = p.__call__["configStrings"]
+                               else:
+                                       self.configStrings = None
+                               
+                               if p.__call__.has_key("menuEntryName"):
+                                       menuEntryName = p.__call__["menuEntryName"](self.iface)
+                               else:
+                                       menuEntryName = _('Extended Setup...')
+                               self.extendedSetup = getConfigListEntry(menuEntryName, NoSave(ConfigNothing()))
+                               self.list.append(self.extendedSetup)
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
@@ -48,16 +171,27 @@ class NetworkSetup(Screen, ConfigListScreen):
                ConfigListScreen.keyRight(self)
                self.createSetup()
 
                ConfigListScreen.keyRight(self)
                self.createSetup()
 
-       def keySave(self):
-               #for x in self["config"].list:
-                       #x[1].save()
+       def ok(self):
+               selection = self["config"].getCurrent()
+               if selection == self.extendedSetup:
+                       self.extended(self.session, self.iface)
+               else:
+                       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))
 
 
-               iNetwork.writeNetworkConfig()    
-               iNetwork.activateNetworkConfig()
-               self.close()
+                       iNetwork.deactivateNetworkConfig()
+                       iNetwork.writeNetworkConfig()    
+                       iNetwork.activateNetworkConfig()
+                       self.close()
 
 
-       def keyCancel(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-               iNetwork.loadNetworkConfig()
+       def cancel(self):
+               iNetwork.getInterfaces()
                self.close()
                self.close()