+# -*- coding: iso-8859-1 -*-\r
+from Components.Language import language\r
+from Components.ActionMap import ActionMap\r
+from Components.Label import Label\r
+from Components.Pixmap import Pixmap\r
+from Components.MenuList import MenuList\r
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest\r
+from enigma import eListboxPythonMultiContent, gFont, loadPNG, RT_HALIGN_CENTER, RT_VALIGN_CENTER\r
+from Screen import Screen\r
+from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE\r
+\r
+key_backspace = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png"))\r
+key_bg = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png"))\r
+key_clr = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png"))\r
+key_esc = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png"))\r
+key_ok = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png"))\r
+key_sel = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png"))\r
+key_shift = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png"))\r
+key_shift_sel = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png"))\r
+key_space = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png"))\r
+\r
+class VirtualKeyBoardList(MenuList):\r
+ def __init__(self, list, enableWrapAround=False):\r
+ MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)\r
+ self.l.setFont(0, gFont("Regular", 22))\r
+ self.l.setItemHeight(45)\r
+\r
+def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):\r
+ res = [ (keys) ]\r
+ \r
+ x = 0\r
+ count = 0\r
+ if shiftMode:\r
+ shiftkey_png = key_shift_sel\r
+ else:\r
+ shiftkey_png = key_shift\r
+ for key in keys:\r
+ if key == "EXIT":\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc))\r
+ elif key == "BACKSPACE":\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace))\r
+ elif key == "CLEAR":\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr))\r
+ elif key == "SHIFT":\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png))\r
+ elif key == "SPACE":\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space))\r
+ elif key == "OK":\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok))\r
+ #elif key == "<-":\r
+ # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left))\r
+ #elif key == "->":\r
+ # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right))\r
+ \r
+ else:\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg))\r
+ res.append(MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER))\r
+ \r
+ if selectedKey == count:\r
+ res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel))\r
+ \r
+ x += 45\r
+ count += 1\r
+ \r
+ return res\r
+\r
+\r
+class VirtualKeyBoard(Screen):\r
+\r
+ def __init__(self, session, title="", text=""):\r
+ Screen.__init__(self, session)\r
+ self.keys_list = []\r
+ self.shiftkeys_list = []\r
+ self.lang = language.getLanguage()\r
+ if self.lang == 'de_DE':\r
+ self.keys_list = [\r
+ [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
+ [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ü", u"+"],\r
+ [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],\r
+ [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"@", u"ß", u"OK"]]\r
+ \r
+ self.shiftkeys_list = [\r
+ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
+ [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ü", u"*"],\r
+ [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],\r
+ [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"?", u"\\", u"OK"]]\r
+ \r
+ elif self.lang == 'es_ES':\r
+ #still missing keys (u"ùÙ")\r
+ self.keys_list = [\r
+ [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
+ [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"ú", u"+"],\r
+ [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ó", u"á", u"#"],\r
+ [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"@", u"£", u"à", u"é", u"è", u"í", u"ì", u"ñ", u"ò", u"OK"]]\r
+ \r
+ self.shiftkeys_list = [\r
+ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
+ [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"Ú", u"*"],\r
+ [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ó", u"Á", u"'"],\r
+ [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"?", u"\\", u"À", u"É", u"È", u"Í", u"Ì", u"Ñ", u"Ò", u"OK"]]\r
+ \r
+ elif self.lang in ['sv_SE', 'fi_FI']:\r
+ self.keys_list = [\r
+ [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
+ [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"é", u"+"],\r
+ [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"ö", u"ä", u"#"],\r
+ [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"@", u"ß", u"å", u"OK"]]\r
+ \r
+ self.shiftkeys_list = [\r
+ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
+ [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"É", u"*"],\r
+ [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"Ö", u"Ä", u"'"],\r
+ [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"?", u"\\", u"Å", u"OK"]]\r
+ else:\r
+ self.keys_list = [\r
+ [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
+ [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"+", u"@"],\r
+ [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\"],\r
+ [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"OK"]]\r
+ \r
+ self.shiftkeys_list = [\r
+ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],\r
+ [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*"],\r
+ [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?"],\r
+ [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],\r
+ [u"SHIFT", u"SPACE", u"OK"]]\r
+ \r
+ self.shiftMode = False\r
+ self.text = text\r
+ self.selectedKey = 0\r
+ \r
+ self["header"] = Label(title)\r
+ self["text"] = Label(self.text)\r
+ self["list"] = VirtualKeyBoardList([])\r
+ \r
+ self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions"],\r
+ {\r
+ "ok": self.okClicked,\r
+ "cancel": self.exit,\r
+ "left": self.left,\r
+ "right": self.right,\r
+ "up": self.up,\r
+ "down": self.down,\r
+ "red": self.backClicked,\r
+ "green": self.ok\r
+ }, -2)\r
+ \r
+ self.onLayoutFinish.append(self.buildVirtualKeyBoard)\r
+\r
+ def buildVirtualKeyBoard(self, selectedKey=0):\r
+ list = []\r
+ \r
+ if self.shiftMode:\r
+ self.k_list = self.shiftkeys_list\r
+ for keys in self.k_list:\r
+ if selectedKey < 12 and selectedKey > -1:\r
+ list.append(VirtualKeyBoardEntryComponent(keys, selectedKey,True))\r
+ else:\r
+ list.append(VirtualKeyBoardEntryComponent(keys, -1,True))\r
+ selectedKey -= 12\r
+ else:\r
+ self.k_list = self.keys_list\r
+ for keys in self.k_list:\r
+ if selectedKey < 12 and selectedKey > -1:\r
+ list.append(VirtualKeyBoardEntryComponent(keys, selectedKey))\r
+ else:\r
+ list.append(VirtualKeyBoardEntryComponent(keys, -1))\r
+ selectedKey -= 12\r
+ \r
+ self["list"].setList(list)\r
+\r
+ \r
+ def backClicked(self):\r
+ self.text = self["text"].getText()[:-1]\r
+ self["text"].setText(self.text)\r
+ \r
+ def okClicked(self):\r
+ if self.shiftMode:\r
+ list = self.shiftkeys_list\r
+ else:\r
+ list = self.keys_list\r
+ \r
+ selectedKey = self.selectedKey\r
+\r
+ for x in list:\r
+ if selectedKey < 12:\r
+ text = x[selectedKey]\r
+ break\r
+ else:\r
+ selectedKey -= 12\r
+\r
+ text = text.encode("utf-8")\r
+\r
+ if text == "EXIT":\r
+ self.close(None)\r
+ \r
+ elif text == "BACKSPACE":\r
+ self.text = self["text"].getText()[:-1]\r
+ self["text"].setText(self.text)\r
+ \r
+ elif text == "CLEAR":\r
+ self.text = ""\r
+ self["text"].setText(self.text)\r
+ \r
+ elif text == "SHIFT":\r
+ if self.shiftMode:\r
+ self.shiftMode = False\r
+ else:\r
+ self.shiftMode = True\r
+ \r
+ self.buildVirtualKeyBoard(self.selectedKey)\r
+ \r
+ elif text == "SPACE":\r
+ self.text += " "\r
+ self["text"].setText(self.text)\r
+ \r
+ elif text == "OK":\r
+ self.close(self["text"].getText())\r
+ \r
+ else:\r
+ self.text = self["text"].getText()\r
+ self.text += text\r
+ self["text"].setText(self.text)\r
+\r
+ def ok(self):\r
+ self.close(self["text"].getText())\r
+\r
+ def exit(self):\r
+ self.close(None)\r
+\r
+ def left(self):\r
+ self.selectedKey -= 1\r
+ \r
+ if self.selectedKey == -1:\r
+ self.selectedKey = 11\r
+ elif self.selectedKey == 11:\r
+ self.selectedKey = 23\r
+ elif self.selectedKey == 23:\r
+ self.selectedKey = 35\r
+ elif self.selectedKey == 35:\r
+ self.selectedKey = 47\r
+ elif self.selectedKey == 47:\r
+ self.selectedKey = 59\r
+ \r
+ self.showActiveKey()\r
+\r
+ def right(self):\r
+ self.selectedKey += 1\r
+ \r
+ if self.selectedKey == 12:\r
+ self.selectedKey = 0\r
+ elif self.selectedKey == 24:\r
+ self.selectedKey = 12\r
+ elif self.selectedKey == 36:\r
+ self.selectedKey = 24\r
+ elif self.selectedKey == 48:\r
+ self.selectedKey = 36\r
+ elif self.selectedKey == 60:\r
+ self.selectedKey = 48\r
+ \r
+ self.showActiveKey()\r
+\r
+ def up(self):\r
+ self.selectedKey -= 12\r
+ \r
+ if self.selectedKey < 0:\r
+ self.selectedKey += 60\r
+ \r
+ self.showActiveKey()\r
+\r
+ def down(self):\r
+ self.selectedKey += 12\r
+ \r
+ if self.selectedKey > 59:\r
+ self.selectedKey -= 60\r
+ \r
+ self.showActiveKey()\r
+\r
+ def showActiveKey(self):\r
+ self.buildVirtualKeyBoard(self.selectedKey)\r