2 from Screens.Screen import Screen
3 from Screens.MessageBox import MessageBox
4 from Components.ActionMap import NumberActionMap
5 from Components.Label import Label
6 from Components.Input import Input
7 from Components.GUIComponent import *
8 from Tools.BoundFunction import boundFunction
13 class InputBox(Screen):
14 def __init__(self, session, title = "", windowTitle = _("Input"), **kwargs):
15 Screen.__init__(self, session)
17 self["text"] = Label(title)
18 self["input"] = Input(**kwargs)
19 self.onShown.append(boundFunction(self.setTitle, windowTitle))
21 self["actions"] = NumberActionMap(["WizardActions", "InputBoxActions", "InputAsciiActions", "KeyboardInputActions"],
23 "gotAsciiCode": self.gotAsciiCode,
27 "right": self.keyRight,
28 "delete": self.keyDelete,
29 "moveLeft": self.keyLeft,
30 "moveRight": self.keyRight,
31 "moveHome": self.keyHome,
32 "moveEnd": self.keyEnd,
33 "deleteForward": self.keyDelete,
34 "deleteBackward": self.keyBackspace,
36 "toggleOverwrite": self.keyInsert,
38 "1": self.keyNumberGlobal,
39 "2": self.keyNumberGlobal,
40 "3": self.keyNumberGlobal,
41 "4": self.keyNumberGlobal,
42 "5": self.keyNumberGlobal,
43 "6": self.keyNumberGlobal,
44 "7": self.keyNumberGlobal,
45 "8": self.keyNumberGlobal,
46 "9": self.keyNumberGlobal,
47 "0": self.keyNumberGlobal
49 rcinput = eRCInput.getInstance()
50 rcinput.setKeyboardMode(rcinput.kmAscii)
52 def gotAsciiCode(self):
53 self["input"].handleAscii(getPrevAsciiCode())
61 def keyNumberGlobal(self, number):
62 self["input"].number(number)
65 self["input"].delete()
68 rcinput = eRCInput.getInstance()
69 rcinput.setKeyboardMode(rcinput.kmNone)
70 self.close(self["input"].getText())
73 rcinput = eRCInput.getInstance()
74 rcinput.setKeyboardMode(rcinput.kmNone)
83 def keyBackspace(self):
84 self["input"].deleteBackward()
90 self["input"].toggleOverwrite()
92 class PinInput(InputBox):
93 def __init__(self, session, service = "", triesEntry = None, pinList = [], *args, **kwargs):
94 InputBox.__init__(self, session = session, text="9876", maxSize=True, type=Input.PIN, *args, **kwargs)
98 self.triesEntry = triesEntry
100 self.pinList = pinList
101 self["service"] = Label(service)
103 if self.getTries() == 0:
104 if (self.triesEntry.time.value + (self.waitTime * 60)) > time():
105 remaining = (self.triesEntry.time.value + (self.waitTime * 60)) - time()
106 remainingMinutes = int(remaining / 60)
107 remainingSeconds = int(remaining % 60)
108 self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.closePinCancel, MessageBox, _("You have to wait for") + " " + str(remainingMinutes) + " " + _("minutes and") + " " + str(remainingSeconds) + " " + _("seconds."), MessageBox.TYPE_ERROR))
112 self["tries"] = Label("")
113 self.onShown.append(self.showTries)
115 def keyNumberGlobal(self, number):
116 if self["input"].currPos == len(self["input"]) - 1:
117 InputBox.keyNumberGlobal(self, number)
120 InputBox.keyNumberGlobal(self, number)
122 def checkPin(self, pin):
123 if pin is not None and int(pin) in self.pinList:
128 self.triesEntry.time.value = int(time())
129 self.triesEntry.time.save()
130 if self.checkPin(self["input"].getText()):
132 self.closePinCorrect()
136 if self.getTries() == 0:
141 def closePinWrong(self, *args):
145 def closePinCorrect(self, *args):
148 def closePinCancel(self, *args):
152 rcinput = eRCInput.getInstance()
153 rcinput.setKeyboardMode(rcinput.kmNone)
154 self.closePinCancel()
157 return self.triesEntry.tries.value
160 self.setTries(self.triesEntry.tries.value - 1)
163 def setTries(self, tries):
164 self.triesEntry.tries.value = tries
165 self.triesEntry.tries.save()
168 self["tries"].setText(_("Tries left:") + " " + str(self.getTries()))