add runAsync support to wizzard
[enigma2.git] / lib / python / Screens / Wizard.py
index 8c4f88677c2f045356408a4f59d9332190830897..29bb6e2daec455a45458bd934c98603c724ef306 100644 (file)
@@ -152,19 +152,14 @@ class Wizard(Screen, HelpableScreen):
                                return count
                        count += 1
                return 0
-               
-       def ok(self):
-               print "OK"
+
+       def finished(self, **args):
+               print "finished"
                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()
-                               self.configInstance.run()
-               
+
+               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]
@@ -179,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)