add ability to filter by tag. they must be created by hand right now.
[enigma2.git] / lib / python / Screens / InputBox.py
1 from enigma import *
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
9 from time import time
10
11 import os
12
13 class InputBox(Screen):
14         def __init__(self, session, title = "", windowTitle = _("Input"), **kwargs):
15                 Screen.__init__(self, session)
16
17                 self["text"] = Label(title)
18                 self["input"] = Input(**kwargs)
19                 self.onShown.append(boundFunction(self.setTitle, windowTitle))
20
21                 self["actions"] = NumberActionMap(["WizardActions", "InputBoxActions", "InputAsciiActions", "KeyboardInputActions"], 
22                 {
23                         "gotAsciiCode": self.gotAsciiCode,
24                         "ok": self.go,
25                         "back": self.cancel,
26                         "left": self.keyLeft,
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,
35                         "tab": self.keyTab,
36                         "toggleOverwrite": self.keyInsert,
37                         "accept": self.go,
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
48                 }, -1)
49                 rcinput = eRCInput.getInstance()
50                 rcinput.setKeyboardMode(rcinput.kmAscii)
51
52         def gotAsciiCode(self):
53                 self["input"].handleAscii(getPrevAsciiCode())
54
55         def keyLeft(self):
56                 self["input"].left()
57
58         def keyRight(self):
59                 self["input"].right()
60
61         def keyNumberGlobal(self, number):
62                 self["input"].number(number)
63
64         def keyDelete(self):
65                 self["input"].delete()
66
67         def go(self):
68                 rcinput = eRCInput.getInstance()
69                 rcinput.setKeyboardMode(rcinput.kmNone)
70                 self.close(self["input"].getText())
71
72         def cancel(self):
73                 rcinput = eRCInput.getInstance()
74                 rcinput.setKeyboardMode(rcinput.kmNone)
75                 self.close(None)
76
77         def keyHome(self):
78                 self["input"].home()
79
80         def keyEnd(self):
81                 self["input"].end()
82
83         def keyBackspace(self):
84                 self["input"].deleteBackward()
85
86         def keyTab(self):
87                 self["input"].tab()
88
89         def keyInsert(self):
90                 self["input"].toggleOverwrite()
91
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)
95                 
96                 self.waitTime = 15
97                 
98                 self.triesEntry = triesEntry
99                 
100                 self.pinList = pinList
101                 self["service"] = Label(service)
102                 
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))
109                         else:
110                                 self.setTries(3)
111
112                 self["tries"] = Label("")
113                 self.onShown.append(self.showTries)
114
115         def keyNumberGlobal(self, number):
116                 if self["input"].currPos == len(self["input"]) - 1:
117                         InputBox.keyNumberGlobal(self, number)
118                         self.go()
119                 else:
120                         InputBox.keyNumberGlobal(self, number)
121                 
122         def checkPin(self, pin):
123                 if pin is not None and int(pin) in self.pinList:
124                         return True
125                 return False
126                 
127         def go(self):
128                 self.triesEntry.time.value = int(time())
129                 self.triesEntry.time.save()
130                 if self.checkPin(self["input"].getText()):
131                         self.setTries(3)
132                         self.closePinCorrect()
133                 else:
134                         self.keyHome()
135                         self.decTries()
136                         if self.getTries() == 0:
137                                 self.closePinWrong()
138                         else:
139                                 pass
140         
141         def closePinWrong(self, *args):
142                 print "args:", args
143                 self.close(False)
144                 
145         def closePinCorrect(self, *args):
146                 self.close(True)
147                 
148         def closePinCancel(self, *args):
149                 self.close(None)
150                         
151         def cancel(self):
152                 rcinput = eRCInput.getInstance()
153                 rcinput.setKeyboardMode(rcinput.kmNone)
154                 self.closePinCancel()
155                 
156         def getTries(self):
157                 return self.triesEntry.tries.value
158
159         def decTries(self):
160                 self.setTries(self.triesEntry.tries.value - 1)
161                 self.showTries()
162                 
163         def setTries(self, tries):
164                 self.triesEntry.tries.value = tries
165                 self.triesEntry.tries.save()
166                                 
167         def showTries(self):
168                 self["tries"].setText(_("Tries left:") + " " + str(self.getTries()))