Merge branch 'master' of git.opendreambox.org:/git/enigma2
[vuplus_dvbapp] / lib / python / Screens / VirtualKeyBoard.py
1 # -*- coding: iso-8859-1 -*-\r
2 from Components.Language import language\r
3 from Components.ActionMap import ActionMap\r
4 from Components.Label import Label\r
5 from Components.Pixmap import Pixmap\r
6 from Components.MenuList import MenuList\r
7 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest\r
8 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER\r
9 from Screen import Screen\r
10 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE\r
11 from Tools.LoadPixmap import LoadPixmap\r
12 \r
13 class VirtualKeyBoardList(MenuList):\r
14         def __init__(self, list, enableWrapAround=False):\r
15                 MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)\r
16                 self.l.setFont(0, gFont("Regular", 22))\r
17                 self.l.setItemHeight(45)\r
18 \r
19 def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):\r
20         key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png"))\r
21         key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png"))\r
22         key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png"))\r
23         key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png"))\r
24         key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png"))\r
25         key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png"))\r
26         key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png"))\r
27         key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png"))\r
28         key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png"))\r
29         \r
30         res = [ (keys) ]\r
31         \r
32         x = 0\r
33         count = 0\r
34         if shiftMode:\r
35                 shiftkey_png = key_shift_sel\r
36         else:\r
37                 shiftkey_png = key_shift\r
38         for key in keys:\r
39                 if key == "EXIT":\r
40                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc))\r
41                 elif key == "BACKSPACE":\r
42                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace))\r
43                 elif key == "CLEAR":\r
44                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr))\r
45                 elif key == "SHIFT":\r
46                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png))\r
47                 elif key == "SPACE":\r
48                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space))\r
49                 elif key == "OK":\r
50                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok))\r
51                 #elif key == "<-":\r
52                 #       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left))\r
53                 #elif key == "->":\r
54                 #       res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right))\r
55                 \r
56                 else:\r
57                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg))\r
58                         res.append(MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER))\r
59                 \r
60                 if selectedKey == count:\r
61                         res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel))\r
62                 \r
63                 x += 45\r
64                 count += 1\r
65         \r
66         return res\r
67 \r
68 \r
69 class VirtualKeyBoard(Screen):\r
70 \r
71         def __init__(self, session, title="", text=""):\r
72                 Screen.__init__(self, session)\r
73                 self.keys_list = []\r
74                 self.shiftkeys_list = []\r
75                 self.lang = language.getLanguage()\r
76                 if self.lang == 'de_DE':\r
77                         self.keys_list = [\r
78                                 [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],\r
79                                 [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"],\r
80                                 [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],\r
81                                 [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
82                                 [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]]\r
83                         \r
84                         self.shiftkeys_list = [\r
85                                 [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
86                                 [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"],\r
87                                 [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],\r
88                                 [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
89                                 [u"SHIFT", u"SPACE", u"?", u"\\", u"OK"]]\r
90                         \r
91                 elif self.lang == 'es_ES':\r
92                         #still missing keys (u"ùÙ")\r
93                         self.keys_list = [\r
94                                 [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],\r
95                                 [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],\r
96                                 [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"],\r
97                                 [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
98                                 [u"SHIFT", u"SPACE", u"@", u"£", u"à", u"é", u"è", u"í", u"ì", u"ñ", u"ò", u"OK"]]\r
99                         \r
100                         self.shiftkeys_list = [\r
101                                 [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
102                                 [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"],\r
103                                 [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"],\r
104                                 [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
105                                 [u"SHIFT", u"SPACE", u"?", u"\\", u"À", u"É", u"È",  u"Í", u"Ì", u"Ñ", u"Ò", u"OK"]]\r
106                                 \r
107                 elif self.lang in ['sv_SE', 'fi_FI']:\r
108                         self.keys_list = [\r
109                                 [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],\r
110                                 [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],\r
111                                 [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],\r
112                                 [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
113                                 [u"SHIFT", u"SPACE", u"@", u"ß", u"å", u"OK"]]\r
114                                 \r
115                         self.shiftkeys_list = [\r
116                                 [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
117                                 [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],\r
118                                 [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],\r
119                                 [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
120 \r
121                                 [u"SHIFT", u"SPACE", u"?", u"\\", u"Å", u"OK"]]\r
122                 else:\r
123                         self.keys_list = [\r
124                                 [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],\r
125                                 [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"+", u"@"],\r
126                                 [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\"],\r
127                                 [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
128                                 [u"SHIFT", u"SPACE", u"OK"]]\r
129                         \r
130                         self.shiftkeys_list = [\r
131                                 [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
132                                 [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*"],\r
133                                 [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?"],\r
134                                 [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
135                                 [u"SHIFT", u"SPACE", u"OK"]]\r
136                 \r
137                 self.shiftMode = False\r
138                 self.text = text\r
139                 self.selectedKey = 0\r
140                 \r
141                 self["header"] = Label(title)\r
142                 self["text"] = Label(self.text)\r
143                 self["list"] = VirtualKeyBoardList([])\r
144                 \r
145                 self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions"],\r
146                         {\r
147                                 "ok": self.okClicked,\r
148                                 "cancel": self.exit,\r
149                                 "left": self.left,\r
150                                 "right": self.right,\r
151                                 "up": self.up,\r
152                                 "down": self.down,\r
153                                 "red": self.backClicked,\r
154                                 "green": self.ok\r
155                         }, -2)\r
156                 \r
157                 self.onLayoutFinish.append(self.buildVirtualKeyBoard)\r
158 \r
159         def buildVirtualKeyBoard(self, selectedKey=0):\r
160                 list = []\r
161                 \r
162                 if self.shiftMode:\r
163                         self.k_list = self.shiftkeys_list\r
164                         for keys in self.k_list:\r
165                                 if selectedKey < 12 and selectedKey > -1:\r
166                                         list.append(VirtualKeyBoardEntryComponent(keys, selectedKey,True))\r
167                                 else:\r
168                                         list.append(VirtualKeyBoardEntryComponent(keys, -1,True))\r
169                                 selectedKey -= 12\r
170                 else:\r
171                         self.k_list = self.keys_list\r
172                         for keys in self.k_list:\r
173                                 if selectedKey < 12 and selectedKey > -1:\r
174                                         list.append(VirtualKeyBoardEntryComponent(keys, selectedKey))\r
175                                 else:\r
176                                         list.append(VirtualKeyBoardEntryComponent(keys, -1))\r
177                                 selectedKey -= 12\r
178                 \r
179                 self["list"].setList(list)\r
180 \r
181         \r
182         def backClicked(self):\r
183                 self.text = self["text"].getText()[:-1]\r
184                 self["text"].setText(self.text)\r
185                         \r
186         def okClicked(self):\r
187                 if self.shiftMode:\r
188                         list = self.shiftkeys_list\r
189                 else:\r
190                         list = self.keys_list\r
191                 \r
192                 selectedKey = self.selectedKey\r
193 \r
194                 for x in list:\r
195                         if selectedKey < 12:\r
196                                 text = x[selectedKey]\r
197                                 break\r
198                         else:\r
199                                 selectedKey -= 12\r
200 \r
201                 text = text.encode("utf-8")\r
202 \r
203                 if text == "EXIT":\r
204                         self.close(None)\r
205                 \r
206                 elif text == "BACKSPACE":\r
207                         self.text = self["text"].getText()[:-1]\r
208                         self["text"].setText(self.text)\r
209                 \r
210                 elif text == "CLEAR":\r
211                         self.text = ""\r
212                         self["text"].setText(self.text)\r
213                 \r
214                 elif text == "SHIFT":\r
215                         if self.shiftMode:\r
216                                 self.shiftMode = False\r
217                         else:\r
218                                 self.shiftMode = True\r
219                         \r
220                         self.buildVirtualKeyBoard(self.selectedKey)\r
221                 \r
222                 elif text == "SPACE":\r
223                         self.text += " "\r
224                         self["text"].setText(self.text)\r
225                 \r
226                 elif text == "OK":\r
227                         self.close(self["text"].getText())\r
228                 \r
229                 else:\r
230                         self.text = self["text"].getText()\r
231                         self.text += text\r
232                         self["text"].setText(self.text)\r
233 \r
234         def ok(self):\r
235                 self.close(self["text"].getText())\r
236 \r
237         def exit(self):\r
238                 self.close(None)\r
239 \r
240         def left(self):\r
241                 self.selectedKey -= 1\r
242                 \r
243                 if self.selectedKey == -1:\r
244                         self.selectedKey = 11\r
245                 elif self.selectedKey == 11:\r
246                         self.selectedKey = 23\r
247                 elif self.selectedKey == 23:\r
248                         self.selectedKey = 35\r
249                 elif self.selectedKey == 35:\r
250                         self.selectedKey = 47\r
251                 elif self.selectedKey == 47:\r
252                         self.selectedKey = 59\r
253                 \r
254                 self.showActiveKey()\r
255 \r
256         def right(self):\r
257                 self.selectedKey += 1\r
258                 \r
259                 if self.selectedKey == 12:\r
260                         self.selectedKey = 0\r
261                 elif self.selectedKey == 24:\r
262                         self.selectedKey = 12\r
263                 elif self.selectedKey == 36:\r
264                         self.selectedKey = 24\r
265                 elif self.selectedKey == 48:\r
266                         self.selectedKey = 36\r
267                 elif self.selectedKey == 60:\r
268                         self.selectedKey = 48\r
269                 \r
270                 self.showActiveKey()\r
271 \r
272         def up(self):\r
273                 self.selectedKey -= 12\r
274                 \r
275                 if self.selectedKey < 0:\r
276                         self.selectedKey += 60\r
277                 \r
278                 self.showActiveKey()\r
279 \r
280         def down(self):\r
281                 self.selectedKey += 12\r
282                 \r
283                 if self.selectedKey > 59:\r
284                         self.selectedKey -= 60\r
285                 \r
286                 self.showActiveKey()\r
287 \r
288         def showActiveKey(self):\r
289                 self.buildVirtualKeyBoard(self.selectedKey)\r