add ability to remove list and config from a wizard
[enigma2.git] / lib / python / Screens / Wizard.py
index 10bb9f508d0a9312303a1afaca620002f4e0909d..d652ec21d618884a520c224cd7e480f46145af9d 100644 (file)
@@ -6,7 +6,6 @@ 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
@@ -14,8 +13,6 @@ from Components.ConfigList import ConfigList
 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):
@@ -55,7 +52,7 @@ class Wizard(Screen, HelpableScreen):
                                 self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"] + ch
                        elif self.currContent == "condition":
                                 self.wizard[self.lastStep]["condition"] = self.wizard[self.lastStep]["condition"] + ch
-       def __init__(self, session):
+       def __init__(self, session, showSteps = True, showStepSlider = True, showList = True, showConfig = True):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
 
@@ -65,20 +62,29 @@ class Wizard(Screen, HelpableScreen):
                wizardHandler = self.parseWizard(self.wizard)
                parser.setContentHandler(wizardHandler)
                parser.parse('/usr/share/enigma2/' + self.xmlfile)
-               
+
+               self.showSteps = showSteps
+               self.showStepSlider = showStepSlider
+               self.showList = showList
+               self.showConfig = showConfig
+
                self.numSteps = len(self.wizard)
                self.currStep = 1
 
                self["text"] = Label()
 
-               self["config"] = ConfigList([])
+               if showConfig:
+                       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)
+               if self.showList:
+                       self.list = []
+                       self["list"] = MenuList(self.list)
 
                self.onShown.append(self.updateValues)
                
@@ -113,26 +119,30 @@ class Wizard(Screen, HelpableScreen):
                        self.currStep = 1
                self.updateValues()
                
+       def markDone(self):
+               pass
+               
        def ok(self):
                print "OK"
-               if (self.wizard[self.currStep]["config"]["screen"] != None):
-                       try: # don't die, if no run() is available
-                               self.configInstance.run()
-                       except:
-                               print "Failed to run configInstance"
+               if self.showConfig:
+                       if (self.wizard[self.currStep]["config"]["screen"] != None):
+                               try: # don't die, if no run() is available
+                                       self.configInstance.run()
+                               except:
+                                       print "Failed to run configInstance"
                
-               if (len(self.wizard[self.currStep]["list"]) > 0):
-                       nextStep = self.wizard[self.currStep]["list"][self["list"].l.getCurrentSelectionIndex()][1]
-                       if nextStep == "end":
-                               self.currStep = self.numSteps
-                       elif nextStep == "next":
-                               pass
-                       else:
-                               self.currStep = int(nextStep) - 1
+               if self.showList:
+                       if (len(self.wizard[self.currStep]["list"]) > 0):
+                               nextStep = self.wizard[self.currStep]["list"][self["list"].l.getCurrentSelectionIndex()][1]
+                               if nextStep == "end":
+                                       self.currStep = self.numSteps
+                               elif nextStep == "next":
+                                       pass
+                               else:
+                                       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
@@ -155,16 +165,16 @@ class Wizard(Screen, HelpableScreen):
                print "right"
 
        def up(self):
-               if (self.wizard[self.currStep]["config"]["screen"] != None):
-                       self["config"].instance.moveSelection(self["config"].instance.moveUp)
-               elif (len(self.wizard[self.currStep]["list"]) > 0):
+               if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None):
+                               self["config"].instance.moveSelection(self["config"].instance.moveUp)
+               elif (self.showList and len(self.wizard[self.currStep]["list"]) > 0):
                        self["list"].instance.moveSelection(self["list"].instance.moveUp)
                print "up"
                
        def down(self):
-               if (self.wizard[self.currStep]["config"]["screen"] != None):
+               if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None):
                        self["config"].instance.moveSelection(self["config"].instance.moveDown)
-               elif (len(self.wizard[self.currStep]["list"]) > 0):
+               elif (self.showList and len(self.wizard[self.currStep]["list"]) > 0):
                        self["list"].instance.moveSelection(self["list"].instance.moveDown)
                print "down"
                
@@ -174,8 +184,10 @@ class Wizard(Screen, HelpableScreen):
                self.condition = True
                exec (self.wizard[self.currStep]["condition"])
                if self.condition:
-                       self["step"].setText(_("Step ") + str(self.currStep) + "/" + str(self.numSteps))
-                       self["stepslider"].setValue(self.currStep)
+                       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"]))
@@ -184,30 +196,32 @@ class Wizard(Screen, HelpableScreen):
                                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)
+                       if self.showList:
+                               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"])
+                       if self.showConfig:
+                               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.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()
@@ -216,13 +230,14 @@ 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):
-               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()