small fix
[enigma2.git] / lib / python / Screens / Wizard.py
index fc76bcd270f368feb3a44a7d53bc32f77ff761b4..bd458273439af6c868c01823ae12d456fe7ae7ba 100644 (file)
@@ -3,6 +3,7 @@ from Screen import Screen
 import string
 
 from Screens.HelpMenu import HelpableScreen
+from Components.config import config
 from Components.Label import Label
 from Components.Slider import Slider
 from Components.ActionMap import HelpableActionMap, NumberActionMap
@@ -72,6 +73,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, showSteps = True, showStepSlider = True, showList = True, showConfig = True):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
@@ -109,6 +111,8 @@ class Wizard(Screen, HelpableScreen):
                        self["list"] = MenuList(self.list)
 
                self.onShown.append(self.updateValues)
+
+               self.configInstance = None
                
                self["actions"] = NumberActionMap(["WizardActions", "NumberActions"],
                {
@@ -148,17 +152,14 @@ class Wizard(Screen, HelpableScreen):
                                return count
                        count += 1
                return 0
-               
-       def ok(self):
-               print "OK"
+
+       def finished(self, *args, **kwargs):
+               print "finished"
                currStep = self.currStep
-               if self.showConfig:
-                       if (self.wizard[currStep]["config"]["screen"] != None):
-                               try: # don't die, if no run() is available
-                                       self.configInstance.run()
-                               except:
-                                       print "Failed to run configInstance"
-               
+
+               if self.updateValues not in self.onShown:
+                       self.onShown.append(self.updateValues)
+
                if self.showList:
                        if (len(self.wizard[currStep]["list"]) > 0):
                                nextStep = self.wizard[currStep]["list"][self["list"].l.getCurrentSelectionIndex()][1]
@@ -173,9 +174,28 @@ class Wizard(Screen, HelpableScreen):
                                self.currStep = self.getStepWithID(self.wizard[currStep]["nextstep"])
                        self.currStep += 1
                        self.updateValues()
-                       
+
                print "Now: " + str(self.currStep)
 
+
+       def ok(self):
+               print "OK"
+               currStep = self.currStep
+               
+               if self.showConfig:
+                       if (self.wizard[currStep]["config"]["screen"] != None):
+                               # TODO: don't die, if no run() is available
+                               # there was a try/except here, but i can't see a reason
+                               # for this. If there is one, please do a more specific check
+                               # and/or a comment in which situation there is no run()
+                               if callable(getattr(self.configInstance, "runAsync", None)):
+                                       self.onShown.remove(self.updateValues)
+                                       self.configInstance.runAsync(self.finished)
+                                       return
+                               else:
+                                       self.configInstance.run()
+               self.finished()
+
        def keyNumberGlobal(self, number):
                if (self.wizard[self.currStep]["config"]["screen"] != None):
                        self.configInstance.keyNumberGlobal(number)
@@ -214,6 +234,11 @@ class Wizard(Screen, HelpableScreen):
                
                self.stepHistory.append(self.currStep)
                
+               if self.configInstance is not None:
+                       del self.configInstance["config"]
+                       self.configInstance.doClose()
+                       self.configInstance = None
+               
                self.condition = True
                exec (self.wizard[self.currStep]["condition"])
                if self.condition:
@@ -235,6 +260,7 @@ class Wizard(Screen, HelpableScreen):
                                        for x in self.wizard[self.currStep]["list"]:
                                                self.list.append((_(x[0]), None))
                                self["list"].l.setList(self.list)
+                               self["list"].moveToIndex(0)
        
                        if self.showConfig:
                                self["config"].instance.setZPosition(1)
@@ -250,6 +276,7 @@ class Wizard(Screen, HelpableScreen):
                                                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"].destroy()
                                                self.configInstance["config"] = self["config"]
                                else:
                                        self["config"].l.setList([])