Support turbo2.
[vuplus_dvbapp] / lib / python / Screens / VirtualKeyBoard.py
index fc10a88..36d8e7c 100755 (executable)
@@ -1,4 +1,6 @@
 # -*- coding: UTF-8 -*-
+from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode
+from Screen import Screen
 from Components.Language import language
 from Components.ActionMap import ActionMap
 from Components.Sources.StaticText import StaticText
@@ -6,16 +8,16 @@ from Components.Label import Label
 from Components.Pixmap import Pixmap
 from Components.MenuList import MenuList
 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
-from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER
-from Screen import Screen
 from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN
 from Tools.LoadPixmap import LoadPixmap
+import skin
 
 class VirtualKeyBoardList(MenuList):
        def __init__(self, list, enableWrapAround=False):
                MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
-               self.l.setFont(0, gFont("Regular", 28))
-               self.l.setItemHeight(45)
+               font = skin.fonts.get("VirtualKeyboard", ("Regular", 28, 45))
+               self.l.setFont(0, gFont(font[0], font[1]))
+               self.l.setItemHeight(font[2])
 
 def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False):
        key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png"))
@@ -97,8 +99,9 @@ class VirtualKeyBoard(Screen):
                self["text"] = Label(self.text)
                self["list"] = VirtualKeyBoardList([])
                
-               self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions"],
+               self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"],
                        {
+                               "gotAsciiCode": self.keyGotAscii,
                                "ok": self.okClicked,
                                "cancel": self.exit,
                                "left": self.left,
@@ -107,17 +110,20 @@ class VirtualKeyBoard(Screen):
                                "down": self.down,
                                "red": self.backClicked,
                                "green": self.ok,
-                               "yellow": self.switchLang
+                               "yellow": self.switchLang,
+                               "deleteBackward": self.backClicked,
+                               "back": self.exit                               
                        }, -2)
-               self.setLanq()
+               self.setLang()
+               self.onExecBegin.append(self.setKeyboardModeAscii)
                self.onLayoutFinish.append(self.buildVirtualKeyBoard)
        
        def switchLang(self):
                self.lang = self.nextLang
-               self.setLanq()
+               self.setLang()
                self.buildVirtualKeyBoard()
 
-       def setLanq(self):
+       def setLang(self):
                if self.lang == 'de_DE':
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
@@ -208,13 +214,13 @@ class VirtualKeyBoard(Screen):
                        self.keys_list = [
                                [u"EXIT", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"BACKSPACE"],
                                [u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"+", u"@"],
-                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\"],
+                               [u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"#", u"\\", u"|"],
                                [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"OK"]]
                        self.shiftkeys_list = [
                                [u"EXIT", u"!", u'"', u"ยง", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"],
-                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*"],
-                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?"],
+                               [u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"*", u"["],
+                               [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"'", u"?", u"]"],
                                [u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"],
                                [u"SHIFT", u"SPACE", u"OK"]]
                        self.lang = 'en_EN'
@@ -228,26 +234,28 @@ class VirtualKeyBoard(Screen):
                if self.shiftMode:
                        self.k_list = self.shiftkeys_list
                        for keys in self.k_list:
-                               if selectedKey < 12 and selectedKey > -1:
+                               keyslen = len(keys)
+                               if selectedKey < keyslen and selectedKey > -1:
                                        list.append(VirtualKeyBoardEntryComponent(keys, selectedKey,True))
                                else:
                                        list.append(VirtualKeyBoardEntryComponent(keys, -1,True))
-                               selectedKey -= 12
+                               selectedKey -= keyslen
                else:
                        self.k_list = self.keys_list
                        for keys in self.k_list:
-                               if selectedKey < 12 and selectedKey > -1:
+                               keyslen = len(keys)
+                               if selectedKey < keyslen and selectedKey > -1:
                                        list.append(VirtualKeyBoardEntryComponent(keys, selectedKey))
                                else:
                                        list.append(VirtualKeyBoardEntryComponent(keys, -1))
-                               selectedKey -= 12
+                               selectedKey -= keyslen
                
                self["list"].setList(list)
        
        def backClicked(self):
                self.text = self["text"].getText()[:-1]
                self["text"].setText(self.text)
-                       
+
        def okClicked(self):
                if self.shiftMode:
                        list = self.shiftkeys_list
@@ -259,12 +267,13 @@ class VirtualKeyBoard(Screen):
                text = None
 
                for x in list:
-                       if selectedKey < 12:
+                       xlen = len(x)
+                       if selectedKey < xlen:
                                if selectedKey < len(x):
                                        text = x[selectedKey]
                                break
                        else:
-                               selectedKey -= 12
+                               selectedKey -= xlen
 
                if text is None:
                        return
@@ -362,3 +371,37 @@ class VirtualKeyBoard(Screen):
 
        def showActiveKey(self):
                self.buildVirtualKeyBoard(self.selectedKey)
+
+       def inShiftKeyList(self,key):
+               for KeyList in self.shiftkeys_list:
+                       for char in KeyList:
+                               if char == key:
+                                       return True
+               return False
+
+       def keyGotAscii(self):
+               #char = str(unichr(getPrevAsciiCode()).encode('utf-8'))
+               from Components.config import getCharValue
+               char = getCharValue(getPrevAsciiCode())
+               if len(str(char)) == 1:
+                       char = char.encode("utf-8")
+               if self.inShiftKeyList(char):
+                       self.shiftMode = True
+                       list = self.shiftkeys_list
+               else:
+                       self.shiftMode = False
+                       list = self.keys_list   
+
+               if char == " ":
+                       char = "SPACE"
+
+               selkey = 0
+               for keylist in list:
+                       for key in keylist:
+                               if key == char:
+                                       self.selectedKey = selkey
+                                       self.okClicked()
+                                       self.showActiveKey()
+                                       return
+                               else:
+                                       selkey += 1