some work on the wizard:
[enigma2.git] / lib / python / Screens / Wizard.py
index 5b59d2c010fbcbf0509dc8808c8b954e9b777ced..20aa4970678ef5852f9e6ea625f63c3b696a18b1 100644 (file)
@@ -1,10 +1,11 @@
 from Screen import Screen
 
 from Screen import Screen
 
+import string
+
 from Screens.HelpMenu import HelpableScreen
 from Components.Label import Label
 from Components.Slider import Slider
 from Components.ActionMap import HelpableActionMap, NumberActionMap
 from Screens.HelpMenu import HelpableScreen
 from Components.Label import Label
 from Components.Slider import Slider
 from Components.ActionMap import HelpableActionMap, NumberActionMap
-from Components.config import config, configElementBoolean
 from Components.Pixmap import *
 from Components.MenuList import MenuList
 from Components.ConfigList import ConfigList
 from Components.Pixmap import *
 from Components.MenuList import MenuList
 from Components.ConfigList import ConfigList
@@ -12,8 +13,6 @@ from Components.ConfigList import ConfigList
 from xml.sax import make_parser
 from xml.sax.handler import ContentHandler
 
 from xml.sax import make_parser
 from xml.sax.handler import ContentHandler
 
-config.misc.firstrun = configElementBoolean("config.misc.firstrun", 1);
-
 class Wizard(Screen, HelpableScreen):
 
        class parseWizard(ContentHandler):
 class Wizard(Screen, HelpableScreen):
 
        class parseWizard(ContentHandler):
@@ -27,9 +26,9 @@ class Wizard(Screen, HelpableScreen):
                        self.currContent = name
                        if (name == "step"):
                                self.lastStep = int(attrs.get('number'))
                        self.currContent = name
                        if (name == "step"):
                                self.lastStep = int(attrs.get('number'))
-                               self.wizard[self.lastStep] = {"text": "", "list": [], "config": {"screen": None, "args": None, "type": "" }, "code": ""}
+                               self.wizard[self.lastStep] = {"condition": "", "text": "", "list": [], "config": {"screen": None, "args": None, "type": "" }, "code": ""}
                        elif (name == "text"):
                        elif (name == "text"):
-                               self.wizard[self.lastStep]["text"] = _(str(attrs.get('value')))
+                               self.wizard[self.lastStep]["text"] = string.replace(str(attrs.get('value')), "\\n", "\n")
                        elif (name == "listentry"):
                                self.wizard[self.lastStep]["list"].append((str(attrs.get('caption')), str(attrs.get('step'))))
                        elif (name == "config"):
                        elif (name == "listentry"):
                                self.wizard[self.lastStep]["list"].append((str(attrs.get('caption')), str(attrs.get('step'))))
                        elif (name == "config"):
@@ -39,16 +38,21 @@ class Wizard(Screen, HelpableScreen):
                                        print "has args"
                                        self.wizard[self.lastStep]["config"]["args"] = str(attrs.get('args'))
                                self.wizard[self.lastStep]["config"]["type"] = str(attrs.get('type'))
                                        print "has args"
                                        self.wizard[self.lastStep]["config"]["args"] = str(attrs.get('args'))
                                self.wizard[self.lastStep]["config"]["type"] = str(attrs.get('type'))
+                       elif (name == "condition"):
+                               pass
                def endElement(self, name):
                        self.currContent = ""
                        if name == 'code':
                                self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"].strip()
                def endElement(self, name):
                        self.currContent = ""
                        if name == 'code':
                                self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"].strip()
-                               
+                       elif name == 'condition':
+                               self.wizard[self.lastStep]["condition"] = self.wizard[self.lastStep]["condition"].strip()
+                                                               
                def characters(self, ch):
                        if self.currContent == "code":
                                 self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"] + ch
                def characters(self, ch):
                        if self.currContent == "code":
                                 self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"] + ch
-                               
-       def __init__(self, session):
+                       elif self.currContent == "condition":
+                                self.wizard[self.lastStep]["condition"] = self.wizard[self.lastStep]["condition"] + ch
+       def __init__(self, session, showSteps = True, showStepSlider = True):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
 
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
 
@@ -58,7 +62,10 @@ class Wizard(Screen, HelpableScreen):
                wizardHandler = self.parseWizard(self.wizard)
                parser.setContentHandler(wizardHandler)
                parser.parse('/usr/share/enigma2/' + self.xmlfile)
                wizardHandler = self.parseWizard(self.wizard)
                parser.setContentHandler(wizardHandler)
                parser.parse('/usr/share/enigma2/' + self.xmlfile)
-               
+
+               self.showSteps = showSteps
+               self.showStepSlider = showStepSlider
+
                self.numSteps = len(self.wizard)
                self.currStep = 1
 
                self.numSteps = len(self.wizard)
                self.currStep = 1
 
@@ -66,9 +73,11 @@ class Wizard(Screen, HelpableScreen):
 
                self["config"] = ConfigList([])
 
 
                self["config"] = ConfigList([])
 
-               self["step"] = Label()
-                               
-               self["stepslider"] = Slider(1, self.numSteps)
+               if self.showSteps:
+                       self["step"] = Label()
+               
+               if self.showStepSlider:
+                       self["stepslider"] = Slider(1, self.numSteps)
                
                self.list = []
                self["list"] = MenuList(self.list)
                
                self.list = []
                self["list"] = MenuList(self.list)
@@ -106,6 +115,9 @@ class Wizard(Screen, HelpableScreen):
                        self.currStep = 1
                self.updateValues()
                
                        self.currStep = 1
                self.updateValues()
                
+       def markDone(self):
+               pass
+               
        def ok(self):
                print "OK"
                if (self.wizard[self.currStep]["config"]["screen"] != None):
        def ok(self):
                print "OK"
                if (self.wizard[self.currStep]["config"]["screen"] != None):
@@ -124,8 +136,7 @@ class Wizard(Screen, HelpableScreen):
                                self.currStep = int(nextStep) - 1
 
                if (self.currStep == self.numSteps): # wizard finished
                                self.currStep = int(nextStep) - 1
 
                if (self.currStep == self.numSteps): # wizard finished
-                       config.misc.firstrun.value = 0;
-                       config.misc.firstrun.save()
+                       self.markDone()
                        self.session.close()
                else:
                        self.currStep += 1
                        self.session.close()
                else:
                        self.currStep += 1
@@ -163,51 +174,62 @@ class Wizard(Screen, HelpableScreen):
                
        def updateValues(self):
                print "Updating values in step " + str(self.currStep)
                
        def updateValues(self):
                print "Updating values in step " + str(self.currStep)
-               self["step"].setText(_("Step ") + str(self.currStep) + "/" + str(self.numSteps))
-               self["stepslider"].setValue(self.currStep)
-
-               self["text"].setText(_(self.wizard[self.currStep]["text"]))
-
-               if self.wizard[self.currStep]["code"] != "":
-                       print self.wizard[self.currStep]["code"]
-                       exec(self.wizard[self.currStep]["code"])
                
                
-               self["list"].instance.setZPosition(1)
-               self.list = []
-               if (len(self.wizard[self.currStep]["list"]) > 0):
-                       self["list"].instance.setZPosition(2)
-                       for x in self.wizard[self.currStep]["list"]:
-                               self.list.append((_(x[0]), None))
-               self["list"].l.setList(self.list)
-
-               self["config"].instance.setZPosition(1)
-               if (self.wizard[self.currStep]["config"]["screen"] != None):
-                       if self.wizard[self.currStep]["config"]["type"] == "standalone":
-                               print "Type is standalone"
-                               self.session.openWithCallback(self.ok, self.wizard[self.currStep]["config"]["screen"])
-                       else:
-                               self["config"].instance.setZPosition(2)
-                               print self.wizard[self.currStep]["config"]["screen"]
-                               if self.wizard[self.currStep]["config"]["args"] == None:
-                                       self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"])
+               self.condition = True
+               exec (self.wizard[self.currStep]["condition"])
+               if self.condition:
+                       if self.showSteps:
+                               self["step"].setText(_("Step ") + str(self.currStep) + "/" + str(self.numSteps))
+                       if self.showStepSlider:
+                               self["stepslider"].setValue(self.currStep)
+               
+                       print _(self.wizard[self.currStep]["text"])
+                       self["text"].setText(_(self.wizard[self.currStep]["text"]))
+       
+                       if self.wizard[self.currStep]["code"] != "":
+                               print self.wizard[self.currStep]["code"]
+                               exec(self.wizard[self.currStep]["code"])
+                       
+                       self["list"].instance.setZPosition(1)
+                       self.list = []
+                       if (len(self.wizard[self.currStep]["list"]) > 0):
+                               self["list"].instance.setZPosition(2)
+                               for x in self.wizard[self.currStep]["list"]:
+                                       self.list.append((_(x[0]), None))
+                       self["list"].l.setList(self.list)
+       
+                       self["config"].instance.setZPosition(1)
+                       if (self.wizard[self.currStep]["config"]["screen"] != None):
+                               if self.wizard[self.currStep]["config"]["type"] == "standalone":
+                                       print "Type is standalone"
+                                       self.session.openWithCallback(self.ok, self.wizard[self.currStep]["config"]["screen"])
                                else:
                                else:
-                                       self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"], eval(self.wizard[self.currStep]["config"]["args"]))
-                               self["config"].l.setList(self.configInstance["config"].list)
-                               self.configInstance["config"] = self["config"]
-               else:
-                       self["config"].l.setList([])
+                                       self["config"].instance.setZPosition(2)
+                                       print self.wizard[self.currStep]["config"]["screen"]
+                                       if self.wizard[self.currStep]["config"]["args"] == None:
+                                               self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"])
+                                       else:
+                                               self.configInstance = self.session.instantiateDialog(self.wizard[self.currStep]["config"]["screen"], eval(self.wizard[self.currStep]["config"]["args"]))
+                                       self["config"].l.setList(self.configInstance["config"].list)
+                                       self.configInstance["config"] = self["config"]
+                       else:
+                               self["config"].l.setList([])
+               else: # condition false
+                               self.currStep += 1
+                               self.updateValues()
 
 class WizardManager:
        def __init__(self):
                self.wizards = []
        
 
 class WizardManager:
        def __init__(self):
                self.wizards = []
        
-       def registerWizard(self, wizard):
-               self.wizards.append(wizard)
+       def registerWizard(self, wizard, precondition):
+               self.wizards.append((wizard, precondition))
        
        def getWizards(self):
        
        def getWizards(self):
-               if config.misc.firstrun.value:
-                       return self.wizards
-               else:
-                       return []
+               list = []
+               for x in self.wizards:
+                       if x[1] == 1: # precondition
+                               list.append(x[0])
+               return list
 
 wizardManager = WizardManager()
 
 wizardManager = WizardManager()