move the movie selector to the currently playing movie
[enigma2.git] / lib / python / Screens / Wizard.py
index 07c5f9afce98a18dc3c209bc3a340f2fea57c5bd..e894278dbac4209368a732d07d47fafe116a9868 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,21 +13,7 @@ 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 WelcomeWizard(Screen, HelpableScreen):
-
-       skin = """
-               <screen position="0,0" size="720,560" title="Welcome..." flags="wfNoBorder" >
-                       <widget name="text" position="50,100" size="440,200" font="Arial;23" />
-                       <widget name="list" position="50,300" zPosition="1" size="440,200" />
-                       <widget name="config" position="50,300" zPosition="1" size="440,200" transparent="1" />                 
-                       <widget name="step" position="50,50" size="440,25" font="Arial;23" />
-                       <widget name="stepslider" position="50,500" zPosition="1" size="440,20" backgroundColor="dark" />
-                       <widget name="rc" pixmap="/usr/share/enigma2/rc.png" position="500,600" zPosition="10" size="154,475" transparent="1" alphatest="on"/>
-                       <widget name="arrowdown" pixmap="/usr/share/enigma2/arrowdown.png" position="0,0" zPosition="11" size="37,70" transparent="1" alphatest="on"/>
-                       <widget name="arrowup" pixmap="/usr/share/enigma2/arrowup.png" position="-100,-100" zPosition="11" size="37,70" transparent="1" alphatest="on"/>
-               </screen>"""
+class Wizard(Screen, HelpableScreen):
 
        class parseWizard(ContentHandler):
                def __init__(self, wizard):
 
        class parseWizard(ContentHandler):
                def __init__(self, wizard):
@@ -39,9 +26,9 @@ class WelcomeWizard(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": "", "codeafter": ""}
                        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"):
@@ -51,51 +38,71 @@ class WelcomeWizard(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 == "code"):
+                               if attrs.has_key('pos') and str(attrs.get('pos')) == "after":
+                                       self.codeafter = True
+                               else:
+                                       self.codeafter = False
+                       elif (name == "condition"):
+                               pass
                def endElement(self, name):
                        self.currContent = ""
                        if name == 'code':
                def endElement(self, name):
                        self.currContent = ""
                        if name == 'code':
-                               self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"].strip()
-                               
+                               if self.codeafter:
+                                       self.wizard[self.lastStep]["codeafter"] = self.wizard[self.lastStep]["codeafter"].strip()
+                               else:
+                                       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":
                def characters(self, ch):
                        if self.currContent == "code":
-                                self.wizard[self.lastStep]["code"] = self.wizard[self.lastStep]["code"] + ch
-                               
-       def __init__(self, session):
-               self.skin = WelcomeWizard.skin
-
+                               if self.codeafter:
+                                       self.wizard[self.lastStep]["codeafter"] = self.wizard[self.lastStep]["codeafter"] + ch
+                               else:
+                                       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, showSteps = True, showStepSlider = True, showList = True, showConfig = True):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
 
                self.wizard = {}
                parser = make_parser()
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
 
                self.wizard = {}
                parser = make_parser()
-               print "Reading startwizard.xml"
+               print "Reading " + self.xmlfile
                wizardHandler = self.parseWizard(self.wizard)
                parser.setContentHandler(wizardHandler)
                wizardHandler = self.parseWizard(self.wizard)
                parser.setContentHandler(wizardHandler)
-               parser.parse('/usr/share/enigma2/startwizard.xml')
-               
+               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.numSteps = len(self.wizard)
                self.currStep = 1
 
                self["text"] = Label()
-               self["rc"] = MovingPixmap()
-               self["arrowdown"] = MovingPixmap()
-               self["arrowup"] = MovingPixmap()
 
 
-               self["config"] = ConfigList([])
+               if showConfig:
+                       self["config"] = ConfigList([])
 
 
-               self["step"] = Label()
-                               
-               self["stepslider"] = Slider(1, self.numSteps)
+               if self.showSteps:
+                       self["step"] = Label()
                
                
-               self.list = []
-               self["list"] = MenuList(self.list)
+               if self.showStepSlider:
+                       self["stepslider"] = Slider(1, self.numSteps)
+               
+               if self.showList:
+                       self.list = []
+                       self["list"] = MenuList(self.list)
 
                self.onShown.append(self.updateValues)
                
                self["actions"] = NumberActionMap(["WizardActions", "NumberActions"],
                {
                        "ok": self.ok,
 
                self.onShown.append(self.updateValues)
                
                self["actions"] = NumberActionMap(["WizardActions", "NumberActions"],
                {
                        "ok": self.ok,
-                       #"cancel": self.keyCancel,
+                       "back": self.back,
                        "left": self.left,
                        "right": self.right,
                        "up": self.up,
                        "left": self.left,
                        "right": self.right,
                        "up": self.up,
@@ -111,34 +118,40 @@ class WelcomeWizard(Screen, HelpableScreen):
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1)
                        "9": self.keyNumberGlobal,
                        "0": self.keyNumberGlobal
                }, -1)
-               
-               #self["actions"] = HelpableActionMap(self, "OkCancelActions",
-                       #{
-                               #"ok": (self.ok, _("Close this Screen...")),
-                       #})
 
 
+       def back(self):
+               self.currStep -= 1
+               if self.currStep < 1:
+                       self.currStep = 1
+               self.updateValues()
+               
+       def markDone(self):
+               pass
+               
        def ok(self):
                print "OK"
        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
 
                if (self.currStep == self.numSteps): # wizard finished
-                       config.misc.firstrun.value = 0;
-                       config.misc.firstrun.save()
+                       self.markDone()
                        self.session.close()
                else:
                        self.session.close()
                else:
+                       self.runCode(self.wizard[self.currStep]["codeafter"])
                        self.currStep += 1
                        self.updateValues()
                        
                        self.currStep += 1
                        self.updateValues()
                        
@@ -159,61 +172,82 @@ class WelcomeWizard(Screen, HelpableScreen):
                print "right"
 
        def up(self):
                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):
-                       self["list"].instance.moveSelection(self["config"].instance.moveUp)
+               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):
                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)
                        self["config"].instance.moveSelection(self["config"].instance.moveDown)
-               elif (len(self.wizard[self.currStep]["list"]) > 0):
-                       self["list"].instance.moveSelection(self["config"].instance.moveDown)
+               elif (self.showList and len(self.wizard[self.currStep]["list"]) > 0):
+                       self["list"].instance.moveSelection(self["list"].instance.moveDown)
                print "down"
                
                print "down"
                
+       def runCode(self, code):
+               if code != "":
+                       print code
+                       exec(code)
+               
        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"]))
+       
+                       self.runCode(self.wizard[self.currStep]["code"])
+                       
+                       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)
+       
+                       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["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:
                                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([])
-
-
-
-def listActiveWizards():
-       wizards = [ ]
-
-       if config.misc.firstrun.value:
-               wizards.append(WelcomeWizard)
+                                       self["config"].l.setList([])
+               else: # condition false
+                               self.currStep += 1
+                               self.updateValues()
+
+class WizardManager:
+       def __init__(self):
+               self.wizards = []
+       
+       def registerWizard(self, wizard, precondition):
+               self.wizards.append((wizard, precondition))
        
        
-       return wizards
+       def getWizards(self):
+               list = []
+               for x in self.wizards:
+                       if x[1] == 1: # precondition
+                               list.append(x[0])
+               return list
+
+wizardManager = WizardManager()