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()
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 + " (" + _("Timeout: ") + 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)
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
\ No newline at end of file
+ if self.list:
+ self["selectedChoice"].setText(self["list"].getCurrent()[0])
+ self.stopTimer()
+
+ def __repr__(self):
+ return str(type(self)) + "(" + self.text + ")"