reset choices of connectedTo on leaving the nim setup with the "EXIT"
[vuplus_dvbapp] / lib / python / Screens / Setup.py
index 9c5c1e7..3ff0b76 100644 (file)
@@ -1,13 +1,12 @@
 from Screen import Screen
 from Components.ActionMap import NumberActionMap
 from Screen import Screen
 from Components.ActionMap import NumberActionMap
-from Components.config import config
+from Components.config import config, ConfigNothing
+from Components.SystemInfo import SystemInfo
 from Components.ConfigList import ConfigListScreen
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 
 import xml.dom.minidom
 from Components.ConfigList import ConfigListScreen
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 
 import xml.dom.minidom
-from skin import elementsWithTag
-
 from Tools import XMLTools
 
 # FIXME: use resolveFile!
 from Tools import XMLTools
 
 # FIXME: use resolveFile!
@@ -55,28 +54,39 @@ class Setup(ConfigListScreen, Screen):
 
        ALLOW_SUSPEND = True
 
 
        ALLOW_SUSPEND = True
 
-       def __init__(self, session, setup):
-               Screen.__init__(self, session)
+       def removeNotifier(self):
+               config.usage.setup_level.notifiers.remove(self.levelChanged)
+
+       def levelChanged(self, configElement):
+               list = []
+               self.refill(list)
+               self["config"].setList(list)
 
 
+       def refill(self, list):
                xmldata = setupdom.childNodes[0]
                xmldata = setupdom.childNodes[0]
-               
                entries = xmldata.childNodes
                entries = xmldata.childNodes
-
-               self.onChangedEntry = [ ]
-               list = []
-                               
                for x in entries:             #walk through the actual nodelist
                        if x.nodeType != xml.dom.minidom.Element.nodeType:
                                continue
                        elif x.tagName == 'setup':
                for x in entries:             #walk through the actual nodelist
                        if x.nodeType != xml.dom.minidom.Element.nodeType:
                                continue
                        elif x.tagName == 'setup':
-                               if x.getAttribute("key") != setup:
+                               if x.getAttribute("key") != self.setup:
                                        continue
                                self.addItems(list, x.childNodes);
                                        continue
                                self.addItems(list, x.childNodes);
-                               myTitle = x.getAttribute("title").encode("UTF-8")
+                               self.setup_title = x.getAttribute("title").encode("UTF-8")
+
+       def __init__(self, session, setup):
+               Screen.__init__(self, session)
+
+               # for the skin: first try a setup_<setupID>, then Setup
+               self.skinName = ["setup_" + setup, "Setup" ]
+
+               self.onChangedEntry = [ ]
+
+               self.setup = setup
+               list = []
+               self.refill(list)
 
                #check for list.entries > 0 else self.close
 
                #check for list.entries > 0 else self.close
-               
-               self.setup_title = myTitle
                self["title"] = Label(_(self.setup_title))
 
                self["oktext"] = Label(_("OK"))
                self["title"] = Label(_(self.setup_title))
 
                self["oktext"] = Label(_("OK"))
@@ -115,9 +125,17 @@ class Setup(ConfigListScreen, Screen):
                        elif x.tagName == 'item':
                                item_level = int(x.getAttribute("level") or "0")
 
                        elif x.tagName == 'item':
                                item_level = int(x.getAttribute("level") or "0")
 
+                               if not self.levelChanged in config.usage.setup_level.notifiers:
+                                       config.usage.setup_level.notifiers.append(self.levelChanged)
+                                       self.onClose.append(self.removeNotifier)
+
                                if item_level > config.usage.setup_level.index:
                                        continue
 
                                if item_level > config.usage.setup_level.index:
                                        continue
 
+                               requires = x.getAttribute("requires")
+                               if requires and not SystemInfo.get(requires, False):
+                                       continue;
+
                                item_text = _(x.getAttribute("text").encode("UTF-8") or "??")
                                b = eval(XMLTools.mergeText(x.childNodes));
                                if b == "":
                                item_text = _(x.getAttribute("text").encode("UTF-8") or "??")
                                b = eval(XMLTools.mergeText(x.childNodes));
                                if b == "":
@@ -126,10 +144,12 @@ class Setup(ConfigListScreen, Screen):
                                item = b
                                # the first b is the item itself, ignored by the configList.
                                # the second one is converted to string.
                                item = b
                                # the first b is the item itself, ignored by the configList.
                                # the second one is converted to string.
-                               list.append( (item_text, item) )
+                               if not isinstance(item, ConfigNothing):
+                                       list.append( (item_text, item) )
 
 def getSetupTitle(id):
        xmldata = setupdom.childNodes[0].childNodes
 
 def getSetupTitle(id):
        xmldata = setupdom.childNodes[0].childNodes
-       for x in elementsWithTag(xmldata, "setup"):
+       for x in XMLTools.elementsWithTag(xmldata, "setup"):
                if x.getAttribute("key") == id:
                        return x.getAttribute("title").encode("UTF-8")
                if x.getAttribute("key") == id:
                        return x.getAttribute("title").encode("UTF-8")
+       raise "unknown setup id '%s'!" % repr(id)