X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FScreens%2FMessageBox.py;h=f3538b7b730090e71cd6e1fdc4041ec39ec33eee;hp=2750c9715a4a8355bc779d65a98e70b9ceb240da;hb=c437ed274b0155ecdeb7382d6ee46d67a53755b9;hpb=a725f91b346251a645e4c83f20e8ec6eadb94870 diff --git a/lib/python/Screens/MessageBox.py b/lib/python/Screens/MessageBox.py index 2750c97..f3538b7 100644 --- a/lib/python/Screens/MessageBox.py +++ b/lib/python/Screens/MessageBox.py @@ -1,38 +1,36 @@ from Screen import Screen from Components.ActionMap import ActionMap from Components.Label import Label -from Components.Button import Button from Components.Pixmap import Pixmap +from Components.Sources.StaticText import StaticText from Components.MenuList import MenuList -from enigma import eSize, ePoint, eTimer +from enigma import eTimer class MessageBox(Screen): TYPE_YESNO = 0 TYPE_INFO = 1 TYPE_WARNING = 2 TYPE_ERROR = 3 - - def __init__(self, session, text, type = TYPE_YESNO, timeout = -1): + + def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True, msgBoxID = None): self.type = type Screen.__init__(self, session) - self["text"] = Label(text) - + self.msgBoxID = msgBoxID + + self["text"] = Label(text) + self["Text"] = StaticText(text) + self["selectedChoice"] = StaticText() + self.text = text - + self.close_on_any_key = close_on_any_key + self["ErrorPixmap"] = Pixmap() self["QuestionPixmap"] = Pixmap() self["InfoPixmap"] = Pixmap() self.timerRunning = False - if timeout > 0: - self.timer = eTimer() - self.timer.timeout.get().append(self.timerTick) - self.timer.start(1000) - self.origTitle = None - self.onShown.append(self.timerTick) - self.timerRunning = True - self.timeout = timeout - + self.initTimeout(timeout) + self.list = [] if type != self.TYPE_ERROR: self["ErrorPixmap"].hide() @@ -40,46 +38,80 @@ class MessageBox(Screen): self["QuestionPixmap"].hide() if type != self.TYPE_INFO: self["InfoPixmap"].hide() - + if type == self.TYPE_YESNO: - self.list = [ (_("yes"), 0), (_("no"), 1) ] + if default == True: + self.list = [ (_("yes"), 0), (_("no"), 1) ] + else: + self.list = [ (_("no"), 1), (_("yes"), 0) ] + + if self.list: + self["selectedChoice"].setText(self.list[0][0]) + self["list"] = MenuList(self.list) + if enable_input: + self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"], + { + "cancel": self.cancel, + "ok": self.ok, + "alwaysOK": self.alwaysOK, + "up": self.up, + "down": self.down, + "left": self.left, + "right": self.right, + "upRepeated": self.up, + "downRepeated": self.down, + "leftRepeated": self.left, + "rightRepeated": self.right + }, -1) - self["list"] = MenuList(self.list) - - self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"], - { - "cancel": self.cancel, - "ok": self.ok, - "alwaysOK": self.alwaysOK, - "up": self.up, - "down": self.down, - "left": self.left, - "right": self.right, - "upRepeated": self.up, - "downRepeated": self.down, - "leftRepeated": self.left, - "rightRepeated": self.right - }, -1) - - - def timerTick(self): - self.timeout -= 1 - if self.origTitle is None: - self.origTitle = self.instance.getTitle() - self.setTitle(self.origTitle + " (" + str(self.timeout) + ")") - if self.timeout == 0: - self.timer.stop() + def initTimeout(self, timeout): + self.timeout = timeout + if timeout > 0: + self.timer = eTimer() + self.timer.callback.append(self.timerTick) + self.onExecBegin.append(self.startTimer) + self.origTitle = None + if self.execing: + self.timerTick() + else: + self.onShown.append(self.__onShown) + self.timerRunning = True + else: self.timerRunning = False - self.timeoutCallback() - + + def __onShown(self): + self.onShown.remove(self.__onShown) + self.timerTick() + + def startTimer(self): + self.timer.start(1000) + + def stopTimer(self): + if self.timerRunning: + del self.timer + self.onExecBegin.remove(self.startTimer) + self.setTitle(self.origTitle) + self.timerRunning = False + + def timerTick(self): + if self.execing: + self.timeout -= 1 + if self.origTitle is None: + self.origTitle = self.instance.getTitle() + self.setTitle(self.origTitle + " (" + str(self.timeout) + ")") + if self.timeout == 0: + self.timer.stop() + self.timerRunning = False + self.timeoutCallback() + def timeoutCallback(self): print "Timeout!" self.ok() - + def cancel(self): self.close(False) - + def ok(self): if self.type == self.TYPE_YESNO: self.close(self["list"].getCurrent()[1] == 0) @@ -91,22 +123,23 @@ class MessageBox(Screen): def up(self): self.move(self["list"].instance.moveUp) - + def down(self): self.move(self["list"].instance.moveDown) def left(self): self.move(self["list"].instance.pageUp) - + def right(self): self.move(self["list"].instance.pageDown) def move(self, direction): + if self.close_on_any_key: + self.close(True) self["list"].instance.moveSelection(direction) - if self.timerRunning: - self.timer.stop() - self.setTitle(self.origTitle) - self.timerRunning = False + if self.list: + self["selectedChoice"].setText(self["list"].getCurrent()[0]) + self.stopTimer() def __repr__(self): return str(type(self)) + "(" + self.text + ")"