def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_("Virtual keyboard")) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Save")) self["key_yellow"] = self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len( kwargs.get("text", "").decode("utf-8", 'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose)
def __init__(self, session, title="", text=""): #VirtualKeyBoard.__init__(self, session, title, text) Changed by Topfi, added parameter names VirtualKeyBoard.__init__(self, session, title=title, text=text) NumericalTextInput.__init__(self, nextFunc=self.nextFunc) SkinResolutionHelper.__init__(self) self.configText = None if config.AdvancedMovieSelection.keyboard.value == "virtual": use = self.KEYBOARD elif config.AdvancedMovieSelection.keyboard.value == "numerical": use = self.NUM_KEYB else: use = self.BOTH if not use & self.KEYBOARD: # hide the keyboard self["list"].hide() # overwrite VirtualKeyBoard actions # make sure not overwrite any action of base class self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "ok": self.__ok, "cancel": self.__cancel, "left": self.dummy, "right": self.dummy, "up": self.dummy, "down": self.dummy, "red": self.__cancel, "green": self.__ok, "yellow": self.dummy, "deleteBackward": self.dummy, "back": self.dummy }, -2) if use & self.NUM_KEYB: self.timer = eTimer() self.timer.callback.append(self.timeout) self.configText = ConfigText("", False) if text: self.configText.text = text self.configText.marked_pos = len(text) self["config_actions"] = NumberActionMap(["SetupActions", "InputAsciiActions", "KeyboardInputActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) # to prevent left/right overriding the listbox if use & self.KEYBOARD: self.selectedKey = self.getKeyIndex(u"OK") self.onLayoutFinish.append(self.__onLayoutFinish) self.onClose.append(self.__onClose)
class CharJump(object): def __init__(self, session, char=u'ABCDEFGHIJKLMNOPQRSTUVWXYZ'): rcinput = eRCInput.getInstance() rcinput.setKeyboardMode(rcinput.kmAscii) self.numericalTextInput = NumericalTextInput() self.numericalTextInput.setUseableChars(char) self["NumberActions"] = NumberActionMap( ["NumberActions", "InputAsciiActions"], { "gotAsciiCode": self._keyAsciiCode, "1": self._keyNumberGlobal, "2": self._keyNumberGlobal, "3": self._keyNumberGlobal, "4": self._keyNumberGlobal, "5": self._keyNumberGlobal, "6": self._keyNumberGlobal, "7": self._keyNumberGlobal, "8": self._keyNumberGlobal, "9": self._keyNumberGlobal, "0": self._onKey0 }, -1) self.onClose.append(self.__onClose) def __onClose(self): rcinput = eRCInput.getInstance() rcinput.setKeyboardMode(rcinput.kmNone) def _onKey0(self, unused): Log.w() pass def _getFirstForChar(self): raise NotImplementedError def _keyAsciiCode(self): unichar = unichr(getPrevAsciiCode()) charstr = unichar.encode("utf-8") if len(charstr): if charstr[0] == "0": self.__KeyNull(0) else: self._getFirstForChar(charstr[0].upper()) def _keyNumberGlobal(self, number): unichar = self.numericalTextInput.getKey(number) if unichar is not None: charstr = unichar.encode("utf-8") if len(charstr): if charstr[0] == "0": self.__KeyNull(0) else: self._getFirstForChar(charstr[0])
def __init__(self, text="", maxSize = False, visible_width = False, type = TEXT): NumericalTextInput.__init__(self, self.right) GUIComponent.__init__(self) VariableText.__init__(self) self.type = type self.allmarked = (text != "") and (type != self.PIN) self.maxSize = maxSize self.currPos = 0 self.visible_width = visible_width self.offset = 0 self.overwrite = maxSize self.setText(text)
def __init__(self, text="", maxSize=False, visible_width=False, type=TEXT, currPos=0, allMarked=True): NumericalTextInput.__init__(self, self.right) GUIComponent.__init__(self) VariableText.__init__(self) self.type = type self.allmarked = allMarked and (text != "") and (type is not self.PIN) self.maxSize = maxSize self.currPos = currPos self.visible_width = visible_width self.offset = 0 self.overwrite = maxSize self.setText(text)
def __init__(self, default = "", fixed_size = True, visible_width = False): ConfigElement.__init__(self) NumericalTextInput.__init__(self, nextFunc = self.nextFunc, handleTimeout = False) self.marked_pos = 0 self.allmarked = (default != "") self.fixed_size = fixed_size self.visible_width = visible_width self.offset = 0 self.overwrite = fixed_size self.help_window = None self.value = self.last_value = self.default = default
def __init__(self, text = '', maxSize = False, visible_width = False, type = TEXT, currPos = 0, allMarked = True): NumericalTextInput.__init__(self, self.right) GUIComponent.__init__(self) VariableText.__init__(self) self.type = type self.allmarked = allMarked and text != '' and type != self.PIN self.maxSize = maxSize self.currPos = currPos self.visible_width = visible_width self.offset = 0 self.overwrite = maxSize self.setText(text)
def __init__(self, session, title="", text=""): Screen.__init__(self, session) NumericalTextInput.__init__(self, nextFunc=self.nextFunc) self.setZPosition(10000) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.text = text self.selectedKey = 0 self.editing = False self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Label(self.text) self["list"] = VirtualKeyBoardList([]) self["actions"] = ActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.backClicked, "green": self.ok, "yellow": self.switchLang, "deleteBackward": self.backClicked, "back": self.exit }, -2) self["numberActions"] = NumberActionMap( ["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard)
def __init__(self, default = "", max_count=0): ConfigElement.__init__(self) NumericalTextInput.__init__(self, nextFunc = self.nextFunc, handleTimeout = False) self.marked_pos = 0 self.allmarked = (default != "") self.offset = 0 self.help_window = None self.value = self.last_value = self.default = default self.max_count=max_count self.current_count=0 self.count_back=False
def __init__(self, text="", overwrite = False, firstpos_end = False, visible_width = False, allmarked = True, type = TEXT): NumericalTextInput.__init__(self, self.right) GUIComponent.__init__(self) VariableText.__init__(self) self.type = type self.allmarked = allmarked self.maxSize = overwrite self.currPos = 0 self.visible_width = visible_width #50 self.offset = 0 self.firstpos_end = firstpos_end self.overwrite = overwrite self.setText(text)
def __init__(self, text="", maxSize = False, visible_width = False, type = TEXT): NumericalTextInput.__init__(self, self.right) GUIComponent.__init__(self) VariableText.__init__(self) self.type = type self.allmarked = (text != "") and (type != self.PIN) self.maxSize = maxSize self.currPos = 0 self.visible_width = visible_width self.offset = 0 self.overwrite = maxSize self.onInputUpdate = [] self.setText(text)
def __init__(self, session): Screen.__init__(self, session) self["key_red"] = Button(_("All")) self["key_green"] = Button(_("Satellites")) self["key_yellow"] = Button(_("Provider")) self["key_blue"] = Button(_("Favourites")) #+++> TDT self["boquet"] = Label(_("Channel Selection")) #<+++ TDT self["list"] = ServiceList() self.servicelist = self["list"] self.numericalTextInput = NumericalTextInput() self.numericalTextInput.setUseableChars(u'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ') self.servicePathTV = [ ] self.servicePathRadio = [ ] self.servicePath = [ ] self.mode = MODE_TV self.pathChangeDisabled = False self.bouquetNumOffsetCache = { } self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"], { "showFavourites": self.showFavourites, "showAllServices": self.showAllServices, "showProviders": self.showProviders, "showSatellites": self.showSatellites, "nextBouquet": self.nextBouquet, "prevBouquet": self.prevBouquet, "nextMarker": self.nextMarker, "prevMarker": self.prevMarker, "gotAsciiCode": self.keyAsciiCode, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumber0 }) self.recallBouquetMode()
def __init__(self, session, title="", text=""): Screen.__init__(self, session) NumericalTextInput.__init__(self, nextFunc = self.nextFunc) self.setZPosition(10000) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.text = text self.selectedKey = 0 self.editing = False self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Label(self.text) self["list"] = VirtualKeyBoardList([]) self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.backClicked, "green": self.ok, "yellow": self.switchLang, "deleteBackward": self.backClicked, "back": self.exit }, -2) self["numberActions"] = NumberActionMap(["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard)
def __init__(self, session): InputBox.__init__(self, session) self.numti = NumericalTextInput() self.configText = ConfigText("", False) self.configText.help_window = self.session.instantiateDialog( PopupInputHelpDialog, self.numti) self.setTitle(_("Search:"))
def __init__(self, session): Screen.__init__(self, session, windowTitle=_("Radio")) self.skinName = "SimpleRadioScreen" ServiceStopScreen.__init__(self) self.stopService() self._list = List([], buildfunc=self._buildFunc) self._serviceLabel = Label("") InfoBarServiceErrorPopupSupport.__init__(self) InfoBarGstreamerErrorPopupSupport.__init__(self) self._service = None self.numericalTextInput = NumericalTextInput() self.numericalTextInput.setUseableChars(u'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ') self["attribution"] = Label(_("powered by www.radio-browser.info")) self["country"] = StaticText("") self["list"] = self._list self["service"] = self._serviceLabel self["actions"] = NumberActionMap(["OkCancelActions", "NumberActions", "ColorActions"], { "ok": self._onOk , "cancel" : self.close, "blue" : self._onBlue, "1": self._onKeyChar, "2": self._onKeyChar, "3": self._onKeyChar, "4": self._onKeyChar, "5": self._onKeyChar, "6": self._onKeyChar, "7": self._onKeyChar, "8": self._onKeyChar, "9": self._onKeyChar, "0": self._onKeyChar }, -1) self._country = config.plugins.simpleradio.country.value self._browser = RadioBrowserClient() self._onLoadFinished({}) self._browser.stations(self._country.lower(), self._onLoadFinished) self["country"].setText(_(self._country.capitalize())) self._browser.countries(self._onCountriesReady) self._stateInfo = self.session.instantiateDialog(InfoBarStateInfo,zPosition=50) self._infoBarStateInfo = InfoBarServiceErrorPopupSupport._stateInfo InfoBarServiceErrorPopupSupport._stateInfo = self._stateInfo self.onClose.append(self.__onClose)
def __init__(self, text="", overwrite=False, firstpos_end=False, visible_width=False, allmarked=True, type=TEXT): NumericalTextInput.__init__(self, self.right) GUIComponent.__init__(self) VariableText.__init__(self) self.type = type self.allmarked = allmarked self.maxSize = overwrite self.currPos = 0 self.visible_width = visible_width #50 self.offset = 0 self.firstpos_end = firstpos_end self.overwrite = overwrite self.setText(text)
def __init__(self, session): Screen.__init__(self, session) NumericalTextInput.__init__(self) self.session = session self.serverName = config.plugins.youtubeplayer.serverprofile.value self.currentServer = vlcServerConfig.getServerByName(self.serverName) self["red"] = Label(_("Select a VLC-Server")) self["green"] = Label(_("New YouTube search")) self.list = [] self["list"] = YouTubeList(self.list) self["label_total_results"] = Label(_("Total results") + ":") self["total_results"] = Label("") self["label_currently_shown"] = Label(_("Shown") + ":") self["currently_shown"] = Label("") self.history = [] self.historyIndex = 0 self.isFavoritesFeed = False self.patientDialog = None self["actions"] = ActionMap(["YouTubeVideoListActions"], { "play" : self.tryToPlay, "select" : self.justSelectServer, "search" : self.searchAgain, "menu" : self.openContextMenu, "forward" : self.forwardInHistory, "backward" : self.backInHistory, "left" : self.keyLeft, "right" : self.keyRight, "up" : self.keyUp, "down" : self.keyDown, "info" : self.showVideoInfo, "cancel" : self.close }, -1)
def __init__(self, session): Screen.__init__(self, session) NumericalTextInput.__init__(self) self.session = session self.serverName = config.plugins.youtubeplayer.serverprofile.value self.currentServer = vlcServerConfig.getServerByName(self.serverName) self["red"] = Label(_("Select a VLC-Server")) self["green"] = Label(_("New YouTube search")) self.list = [] self["list"] = YouTubeList(self.list) self["label_total_results"] = Label(_("Total results") + ":") self["total_results"] = Label("") self["label_currently_shown"] = Label(_("Shown") + ":") self["currently_shown"] = Label("") self.history = [] self.historyIndex = 0 self.isFavoritesFeed = False self.patientDialog = None self["actions"] = ActionMap( ["YouTubeVideoListActions"], { "play": self.tryToPlay, "select": self.justSelectServer, "search": self.searchAgain, "menu": self.openContextMenu, "forward": self.forwardInHistory, "backward": self.backInHistory, "left": self.keyLeft, "right": self.keyRight, "up": self.keyUp, "down": self.keyDown, "info": self.showVideoInfo, "cancel": self.close }, -1)
def __init__(self, session, **kwargs): VirtualKeyBoard.__init__(self, session, **kwargs) NumericalTextInput.__init__(self, nextFunc = self.nextFunc) self.skinName = "VirtualKeyBoard" self["NumberActions"] = NumberActionMap(["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }) self.editing = False
def __init__(self, session, **kwargs): VirtualKeyBoard.__init__(self, session, **kwargs) NumericalTextInput.__init__(self, nextFunc=self.nextFunc) self.skinName = "VirtualKeyBoard" self["NumberActions"] = NumberActionMap(["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }) self.editing = False
def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_("Virtual keyboard")) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Save")) self["key_yellow"] = self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len(kwargs.get("text", "").decode("utf-8",'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose)
def __init__(self, session, char=u'ABCDEFGHIJKLMNOPQRSTUVWXYZ'): rcinput = eRCInput.getInstance() rcinput.setKeyboardMode(rcinput.kmAscii) self.numericalTextInput = NumericalTextInput() self.numericalTextInput.setUseableChars(char) self["NumberActions"] = NumberActionMap( ["NumberActions", "InputAsciiActions"], { "gotAsciiCode": self._keyAsciiCode, "1": self._keyNumberGlobal, "2": self._keyNumberGlobal, "3": self._keyNumberGlobal, "4": self._keyNumberGlobal, "5": self._keyNumberGlobal, "6": self._keyNumberGlobal, "7": self._keyNumberGlobal, "8": self._keyNumberGlobal, "9": self._keyNumberGlobal, "0": self._onKey0 }, -1) self.onClose.append(self.__onClose)
class VirtualKeyBoard(Screen): def __init__(self, session, title = '', **kwargs): Screen.__init__(self, session) self.setTitle(_('Virtual KeyBoard')) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_bg.png')) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_sel.png')) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_backspace.png')) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_all.png')) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_clr.png')) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_esc.png')) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_ok.png')) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_shift.png')) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_shift_sel.png')) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_space.png')) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_left.png')) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_right.png')) self.keyImages = {'BACKSPACE': self.key_backspace, 'ALL': self.key_all, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right} self.keyImagesShift = {'BACKSPACE': self.key_backspace, 'CLEAR': self.key_clr, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift_sel, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right} self['country'] = StaticText('') self['header'] = Label() self['text'] = Input(currPos=len(kwargs.get('text', '').decode('utf-8', 'ignore')), allMarked=False, **kwargs) self['list'] = VirtualKeyBoardList([]) self['actions'] = NumberActionMap(['OkCancelActions', 'WizardActions', 'ColorActions', 'KeyboardInputActions', 'InputBoxActions', 'InputAsciiActions'], {'gotAsciiCode': self.keyGotAscii, 'ok': self.okClicked, 'OKLong': self.okLongClicked, 'cancel': self.exit, 'left': self.left, 'right': self.right, 'up': self.up, 'down': self.down, 'red': self.exit, 'green': self.ok, 'yellow': self.switchLang, 'blue': self.shiftClicked, 'deleteBackward': self.backClicked, 'deleteForward': self.forwardClicked, 'back': self.exit, 'pageUp': self.cursorRight, 'pageDown': self.cursorLeft, '1': self.keyNumberGlobal, '2': self.keyNumberGlobal, '3': self.keyNumberGlobal, '4': self.keyNumberGlobal, '5': self.keyNumberGlobal, '6': self.keyNumberGlobal, '7': self.keyNumberGlobal, '8': self.keyNumberGlobal, '9': self.keyNumberGlobal, '0': self.keyNumberGlobal}, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) return def __onClose(self): self.sms.timer.stop() def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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'], [u'q', u'w', u'e', u'r', u't', u'z', u'u', u'i', u'o', u'p', u'\xfc', u'+'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf6', u'\xe4', u'#'], [u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'@', u'\xdf', u'OK', u'LEFT', u'RIGHT']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', 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'\xdc', u'*'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd6', u'\xc4', 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'?', u'\\', u'OK', u'LEFT', u'RIGHT']] self.nextLang = 'es_ES' elif self.lang == 'es_ES': 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'\xfa', u'+'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf3', u'\xe1', u'#'], [u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'@', u'\u0141', u'\u0155', u'\xe9', u'\u010d', u'\xed', u'\u011b', u'\u0144', u'\u0148', u'OK']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', 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'\xda', u'*'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd3', u'\xc1', 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'?', u'\\', u'\u0154', u'\xc9', u'\u010c', u'\xcd', u'\u011a', u'\u0143', u'\u0147', u'OK']] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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'\xe9', u'+'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf6', u'\xe4', u'#'], [u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'@', u'\xdf', u'\u013a', u'OK', u'LEFT', u'RIGHT']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', 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'\xc9', u'*'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd6', u'\xc4', 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'?', u'\\', u'\u0139', u'OK', u'LEFT', u'RIGHT']] self.nextLang = 'lv_LV' elif self.lang == 'lv_LV': 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'y', u'u', u'i', u'o', u'p', u'-', u'\u0161'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u';', u"'", u'\u016b'], [u'<', u'z', u'x', u'c', u'v', u'b', u'n', u'm', u',', u'.', u'\u017e', u'ALL'], [u'SHIFT', u'SPACE', u'\u0101', u'\u010d', u'\u0113', u'\u0123', u'\u012b', u'\u0137', u'\u013c', u'\u0146', u'LEFT', u'RIGHT']] 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'Y', u'U', u'I', u'O', u'P', u'+', u'\u0160'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u':', u'"', u'\u016a'], [u'>', u'Z', u'X', u'C', u'V', u'B', u'N', u'M', u'#', u'?', u'\u017d', u'CLEAR'], [u'SHIFT', u'SPACE', u'\u0100', u'\u010c', u'\u0112', u'\u0122', u'\u012a', u'\u0136', u'\u013b', u'\u0145', u'LEFT', u'RIGHT']] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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'\u0430', u'\u0431', u'\u0432', u'\u0433', u'\u0434', u'\u0435', u'\u0451', u'\u0436', u'\u0437', u'\u0438', u'\u0439', u'+'], [u'\u043a', u'\u043b', u'\u043c', u'\u043d', u'\u043e', u'\u043f', u'\u0440', u'\u0441', u'\u0442', u'\u0443', u'\u0444', u'#'], [u'<', u'\u0445', u'\u0446', u'\u0447', u'\u0448', u'\u0449', u'\u044a', u'\u044b', u',', u'.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'@', u'\u044c', u'\u044d', u'\u044e', u'\u044f', u'OK', u'LEFT', u'RIGHT']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', u'$', u'%', u'&', u'/', u'(', u')', u'=', u'BACKSPACE'], [u'\u0410', u'\u0411', u'\u0412', u'\u0413', u'\u0414', u'\u0415', u'\u0401', u'\u0416', u'\u0417', u'\u0418', u'\u0419', u'*'], [u'\u041a', u'\u041b', u'\u041c', u'\u041d', u'\u041e', u'\u041f', u'\u0420', u'\u0421', u'\u0422', u'\u0423', u'\u0424', u"'"], [u'>', u'\u0425', u'\u0426', u'\u0427', u'\u0428', u'\u0429', u'\u042a', u'\u042b', u';', u':', u'_', u'CLEAR'], [u'SHIFT', u'SPACE', u'?', u'\\', u'\u042c', u'\u042d', u'\u042e', u'\u042f', u'OK', u'LEFT', u'RIGHT']] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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'\xe9', u'+'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf6', u'\xe4', u'#'], [u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'@', u'\xdf', u'\u013a', u'OK', u'LEFT', u'RIGHT']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', 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'\xc9', u'*'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd6', u'\xc4', 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'?', u'\\', u'\u0139', u'OK', u'LEFT', u'RIGHT']] self.nextLang = 'sk_SK' elif self.lang == 'sk_SK': 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'\xfa', u'+'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\u013e', u'@', u'#'], [u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'\u0161', u'\u010d', u'\u017e', u'\xfd', u'\xe1', u'\xed', u'\xe9', u'OK', u'LEFT', u'RIGHT']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', 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'\u0165', u'*'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\u0148', u'\u010f', u"'"], [u'\xc1', u'\xc9', u'\u010e', u'\xcd', u'\xdd', u'\xd3', u'\xda', u'\u017d', u'\u0160', u'\u010c', u'\u0164', u'\u0147'], [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'?', u'\\', u'\xe4', u'\xf6', u'\xfc', u'\xf4', u'\u0155', u'\u013a', u'OK']] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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'\xfa', u'+'], [u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\u016f', u'@', u'#'], [u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL'], [u'SHIFT', u'SPACE', u'\u011b', u'\u0161', u'\u010d', u'\u0159', u'\u017e', u'\xfd', u'\xe1', u'\xed', u'\xe9', u'OK']] self.shiftkeys_list = [[u'EXIT', u'!', u'"', u'\xa7', 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'\u0165', u'*'], [u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\u0148', u'\u010f', 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'?', u'\\', u'\u010c', u'\u0158', u'\u0160', u'\u017d', u'\xda', u'\xc1', u'\xc9', u'OK']] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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'=', u'\u03c2', u'\u03b5', u'\u03c1', u'\u03c4', u'\u03c5', u'\u03b8', u'\u03b9', u'\u03bf', u'\u03c0', u'[', u']'], [u'\u03b1', u'\u03c3', u'\u03b4', u'\u03c6', u'\u03b3', u'\u03b7', u'\u03be', u'\u03ba', u'\u03bb', u';', u"'", u'-'], [u'\\', u'\u03b6', u'\u03c7', u'\u03c8', u'\u03c9', u'\u03b2', u'\u03bd', u'\u03bc', u',', '.', u'/', u'ALL'], [u'SHIFT', u'SPACE', u'\u03ac', u'\u03ad', u'\u03ae', u'\u03af', u'\u03cc', u'\u03cd', u'\u03ce', u'\u03ca', u'\u03cb', u'OK']] self.shiftkeys_list = [[u'EXIT', u'!', u'@', u'#', u'$', u'%', u'^', u'&', u'*', u'(', u')', u'BACKSPACE'], [u'+', u'\u20ac', u'\u0395', u'\u03a1', u'\u03a4', u'\u03a5', u'\u0398', u'\u0399', u'\u039f', u'\u03a0', u'{', u'}'], [u'\u0391', u'\u03a3', u'\u0394', u'\u03a6', u'\u0393', u'\u0397', u'\u039e', u'\u039a', u'\u039b', u':', u'"', u'_'], [u'|', u'\u0396', u'\u03a7', u'\u03a8', u'\u03a9', u'\u0392', u'\u039d', u'\u039c', u'<', u'>', u'?', u'CLEAR'], [u'SHIFT', u'SPACE', u'\u0386', u'\u0388', u'\u0389', u'\u038a', u'\u038c', u'\u038e', u'\u038f', u'\u03aa', u'\u03ab', u'OK']] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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'y', 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'z', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'/', u'ALL'], [u'SHIFT', u'SPACE', u'\u0105', u'\u0107', u'\u0119', u'\u0142', u'\u0144', u'\xf3', u'\u015b', u'\u017a', u'\u017c', 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'Y', 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'Z', u'X', u'C', u'V', u'B', u'N', u'M', u';', u':', u'_', u'CLEAR'], [u'SHIFT', u'SPACE', u'\u0104', u'\u0106', u'\u0118', u'\u0141', u'\u0143', u'\xd3', u'\u015a', u'\u0179', u'\u017b', u'OK']] self.nextLang = 'en_EN' else: 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'y', 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'z', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'/', u'ALL'], [u'SHIFT', u'SPACE', u'OK', u'LEFT', u'RIGHT', u'*']] 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'Y', 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'Z', u'X', u'C', u'V', u'B', u'N', u'M', u';', u':', u'_', u'CLEAR'], [u'SHIFT', u'SPACE', u'OK', u'LEFT', u'RIGHT', u'~']] self.lang = 'en_EN' self.nextLang = 'de_DE' self['country'].setText(self.lang) self.max_key = 47 + len(self.keys_list[4]) def virtualKeyBoardEntryComponent(self, keys): w, h = skin.parameters.get('VirtualKeyboard', (45, 45)) key_bg_width = self.key_bg and self.key_bg.size().width() or w key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [keys] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=png)) else: width = key_bg_width res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_bg)) text.append(MultiContentEntryText(pos=(x, 0), size=(width, h), font=0, text=key.encode('utf-8'), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.markSelectedKey() return def markSelectedKey(self): w, h = skin.parameters.get('VirtualKeyboard', (45, 45)) if self.previousSelectedKey is not None: self.list[self.previousSelectedKey / 12] = self.list[self.previousSelectedKey / 12][:-1] width = self.key_sel.size().width() x = self.list[self.selectedKey / 12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self['list'].setList(self.list) return def backClicked(self): self['text'].deleteBackward() def forwardClicked(self): self['text'].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() return def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode('UTF-8') if text == 'EXIT': self.close(None) elif text == 'BACKSPACE': self['text'].deleteBackward() elif text == 'ALL': self['text'].markAll() elif text == 'CLEAR': self['text'].deleteAllChars() self['text'].update() elif text == 'SHIFT': self.shiftClicked() elif text == 'SPACE': self['text'].char(' '.encode('UTF-8')) elif text == 'OK': self.close(self['text'].getText()) elif text == 'LEFT': self['text'].left() elif text == 'RIGHT': self['text'].right() else: self['text'].char(text) return def okLongClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode('UTF-8') if text == 'BACKSPACE': self['text'].deleteAllChars() self['text'].update() return def ok(self): self.close(self['text'].getText()) def exit(self): self.close(None) return def cursorRight(self): self['text'].right() def cursorLeft(self): self['text'].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() return def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() return def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() return def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey %= 12 self.markSelectedKey() return def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): print 'pressing ok now' self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): self.okClicked() return def selectAsciiKey(self, char): if char == ' ': char = 'SPACE' for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
def __init__(self, session, title=_("Virtual KeyBoard Text:"), text="", maxSize=False, visible_width=False, type=Input.TEXT, currPos=0, allMarked=False): Screen.__init__(self, session) HelpableScreen.__init__(self) self.setTitle(_("Virtual keyboard")) prompt = title # Title should only be used for screen titles! self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_sel.png")) self.key_longl_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longl_sel.png")) self.key_longm_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longm_sel.png")) self.key_longr_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longr_sel.png")) key_longl_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longl_bg.png")) key_longm_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longm_bg.png")) key_longr_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longr_bg.png")) key_red_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_red.png")) key_green_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_green.png")) key_yellow_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_yellow.png")) key_blue_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_blue.png")) key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_backspace.png")) key_enter = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_enter.png")) key_first = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_first.png")) key_last = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_last.png")) key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_left.png")) key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_right.png")) key_shift0 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift0.png")) key_shift1 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift1.png")) key_shift2 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift2.png")) key_shift3 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift3.png")) # self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space.png")) key_space_alt = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space_alt.png")) self.key_sel_width = self.key_sel.size().width() self.keyBackgrounds = { "EXIT": key_red_bg, "OK": key_green_bg, "ENTER": key_green_bg, "LOC": key_yellow_bg, "SHFT": key_blue_bg, "LongL": key_longl_bg, "LongM": key_longm_bg, "LongR": key_longr_bg } self.keyImages = [{ "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift0, "SPACE": key_space_alt }, { "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift1, "SPACE": key_space_alt }, { "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift2, "SPACE": key_space_alt }, { "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift3, "SPACE": key_space_alt }] self.shiftMsgs = [ _("Lower case"), _("Upper case"), _("Special 1"), _("Special 2") ] self.english = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"", u"ENTER"], [u"SHIFT", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"", u"ENTER"], [u"SHIFT", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.english_EN_US = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ] ] self.french = [ [ [u"\u00B2", u"&", u"\u00E9", u"\"", u"'", u"(", u"-", u"\u00E8", u"_", u"\u00E7", u"\u00E0", u")", u"=", u"BACKSPACE"], [u"FIRST", u"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"$", u"[", u"]"], [u"LAST", u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"\u00F9", u"*", u"ENTER"], [u"SHIFT", u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"!", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"#", u"@", u"`"] ], [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00B0", u"+", u"BACKSPACE"], [u"FIRST", u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00A3", u"{", u"}"], [u"LAST", u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"%", u"\u00B5", u"ENTER"], [u"SHIFT", u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"/", u"\u00A7", u"\u00A6", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"~", u"^", u"\\"] ], [ [u"", u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"", u"BACKSPACE"], [u"FIRST", u"", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u""], [u"LAST", u"", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"", u"ENTER"], [u"SHIFT", u"", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.german = [ [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00DF", u"'", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FC", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"+", U"ENTER"], [u"SHIFT", u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"#", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"|", u"\\", u"\u00B5"] ], [ [u"\u00B0", u"!", u"\"", u"\u00A7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"`", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"\u00DC", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", U"ENTER"], [u"SHIFT", u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"@", U"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u20AC", u"\u00B2", u"\u00B3"] ] ] self.latvian = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ], [ [u"\u00b4", u"\u00b9", u"\u00b2", u"\u00b3", u"\u20ac", u"\u00bd", u"\u00be", u"\u007b", u"\u005b", u"\u005d", u"\u007d ", u"\u005c", u"\u2013", u"BACKSPACE"], [u"FIRST", u"q", u"\u0113", u"\u0112", u"\u0157", u"\u0156", u"\u016B", u"\u016A", u"\u012B", u"\u012A", u"\u014D", u"\u014C", u"\u00ab", u"\u00bb"], [u"LAST", u"\u0101", u"\u0100", u"\u0161", u"\u0160", u"\u0123", u"\u0122", u"\u0137", u"\u0136", u"\u013C", u"\u013B", u"\u003b", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"\u017E", u"\u017D", u"\u010D", u"\u010C", u"b", u"\u0146", u"\u0145", u"\u0060", u"\u00b7", u"\u002f", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ] ] self.russian = [ [ [u"\u0451", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0439", u"\u0446", u"\u0443", u"\u043A", u"\u0435", u"\u043D", u"\u0433", u"\u0448", u"\u0449", u"\u0437", u"\u0445", u"\u044A", u"\u00A7"], [u"LAST", u"\u0444", u"\u044B", u"\u0432", u"\u0430", u"\u043F", u"\u0440", u"\u043E", u"\u043B", u"\u0434", u"\u0436", u"\u044D", u"\\", u"ENTER"], [u"SHIFT", u"\u044F", u"\u0447", u"\u0441", u"\u043C", u"\u0438", u"\u0442", u"\u044C", u"\u0431", u"\u044E", u".", u"@", u"&", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"<"] ], [ [u"\u0401", u"!", u"\"", u"\u2116", u";", u"%", u":", u"?", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"\u0419", u"\u0426", u"\u0423", u"\u041A", u"\u0415", u"\u041D", u"\u0413", u"\u0428", u"\u0429", u"\u0417", u"\u0425", u"\u042A", u"\u20BD"], [u"LAST", u"\u0424", u"\u042B", u"\u0412", u"\u0410", u"\u041F", u"\u0420", u"\u041E", u"\u041B", u"\u0414", u"\u0416", u"\u042D", u"/", u"ENTER"], [u"SHIFT", u"\u042F", u"\u0427", u"\u0421", u"\u041C", u"\u0418", u"\u0422", u"\u042C", u"\u0411", u"\u042E", u",", u"#", u"$", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u">"] ] ] self.scandinavian = [ [ [u"\u00A7", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"+", u"@", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u00E5", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"'", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u00AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"\u00BD", u"!", u"\"", u"#", u"\u00A4", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"|", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00C5", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00BB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"\u00E3", u"\u00F5", u"BACKSPACE"], [u"FIRST", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u"", u""], [u"LAST", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"\u00C3", u"\u00D5", u"ENTER"], [u"SHIFT", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.spanish = [ [ [u"\\", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"'", u"\u00A1", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"@", u"+", u"\u00E7"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F1", u"[", u"]", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"\u00FC"] ], [ [u"|", u"!", u"\"", u"\u00B7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"\u00BF", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"#", u"*", u"\u00C7"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D1", u"{", u"}", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"\u00DC"] ] ] self.locales = { "ar_BH": [_("Arabic"), _("Bahrain"), self.arabic(self.english)], "ar_EG": [_("Arabic"), _("Egypt"), self.arabic(self.english)], "ar_JO": [_("Arabic"), _("Jordan"), self.arabic(self.english)], "ar_KW": [_("Arabic"), _("Kuwait"), self.arabic(self.english)], "ar_LB": [_("Arabic"), _("Lebanon"), self.arabic(self.english)], "ar_OM": [_("Arabic"), _("Oman"), self.arabic(self.english)], "ar_QA": [_("Arabic"), _("Qatar"), self.arabic(self.english)], "ar_SA": [_("Arabic"), _("Saudi Arabia"), self.arabic(self.english)], "ar_SY": [_("Arabic"), _("Syrian Arab Republic"), self.arabic(self.english)], "ar_AE": [_("Arabic"), _("United Arab Emirates"), self.arabic(self.english)], "ar_YE": [_("Arabic"), _("Yemen"), self.arabic(self.english)], "cs_CZ": [_("Czech"), _("Czechia"), [ [ [u";", u"+", u"\u011B", u"\u0161", u"\u010D", u"\u0159", u"\u017E", u"\u00FD", u"\u00E1", u"\u00ED", u"\u00E9", u"=", u"", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FA", u")", u""], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u016F", u"\u00A7", u"", u"ENTER"], [u"SHIFT", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u0148", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"ALL", u"CLR", u"DEL"] ], [ [u".", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"%", u"", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"/", u"(", u""], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\"", u"!", u"'", u"ENTER"], [u"SHIFT", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"_", u"\u0147", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"ALL", u"CLR", u"DEL"] ], [ [u"", u"~", u"\u011A", u"\u0160", u"\u010C", u"\u0158", u"\u017D", u"\u00DD", u"\u00C1", u"\u00CD", u"\u00C9", u"`", u"", u"BACKSPACE"], [u"FIRST", u"\\", u"|", u"\u20AC", u"\u0165", u"\u0164", u"", u"", u"", u"\u00F3", u"\u00D3", u"\u00DA", u"\u00F7", u"\u00D7"], [u"LAST", u"", u"\u0111", u"\u00D0", u"[", u"]", u"\u010F", u"\u010E", u"\u0142", u"\u0141", u"\u016E", u"$", u"\u00DF", u"ENTER"], [u"SHIFT", u"", u"#", u"&", u"@", u"{", u"}", u"", u"<", u">", u"*", u"", u"\u00A4", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"ALL", u"CLR", u"DEL"] ] ]], "nl_NL": [_("Dutch"), _("Netherlands"), self.dutch(self.english)], "en_AU": [_("English"), _("Australian"), self.australian(self.english)], "en_GB": [_("English"), _("United Kingdom"), self.unitedKingdom(self.english)], "en_US": [_("English"), _("United States"), self.english_EN_US], "en_EN": [_("English"), _("Various"), self.english_EN_US], "et_EE": [_("Estonian"), _("Estonia"), self.estonian(self.scandinavian)], "fi_FI": [_("Finnish"), _("Finland"), self.finnish(self.scandinavian)], "fr_BE": [_("French"), _("Belgian"), self.belgian(self.french)], "fr_FR": [_("French"), _("France"), self.french], "de_CH": [_("German"), _("Switzerland"), self.swiss(self.german)], "de_DE": [_("German"), _("Germany"), self.german], "el_GR": [_("Greek (Modern)"), _("Greece"), [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u";", u"\u03C2", u"\u03B5", u"\u03C1", u"\u03C4", u"\u03C5", u"\u03B8", u"\u03B9", u"\u03BF", u"\u03C0", u"[", u"]", u"/"], [u"LAST", u"\u03B1", u"\u03C3", u"\u03B4", u"\u03C6", u"\u03B3", u"\u03B7", u"\u03BE", u"\u03BA", u"\u03BB", u"", u"'", u"\\", u"ENTER"], [u"SHIFT", u"<", u"\u03B6", u"\u03C7", u"\u03C8", u"\u03C9", u"\u03B2", u"\u03BD", u"\u03BC", u",", ".", u"\u03CA", u"\u03CB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u03AC", u"\u03AD", u"\u03AE", u"\u03AF", u"\u03CC", u"\u03CD", u"\u03CE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u":", u"", u"\u0395", u"\u03A1", u"\u03A4", u"\u03A5", u"\u0398", u"\u0399", u"\u039F", u"\u03A0", u"{", u"}", u"?"], [u"LAST", u"\u0391", u"\u03A3", u"\u0394", u"\u03A6", u"\u0393", u"\u0397", u"\u039E", u"\u039A", u"\u039B", u"", u"\"", u"|", u"ENTER"], [u"SHIFT", u">", u"\u0396", u"\u03A7", u"\u03A8", u"\u03A9", u"\u0392", u"\u039D", u"\u039C", u"<", u">", u"\u03AA", u"\u03AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u0386", u"\u0388", u"\u0389", u"\u038A", u"\u038C", u"\u038E", u"\u038F"] ], [ [u"", u"", u"\u00B2", u"\u00B3", u"\u00A3", u"\u00A7", u"\u00B6", u"\u20AC", u"\u00A4", u"\u00A6", u"\u00B0", u"\u00B1", u"\u00BD", u"BACKSPACE"], [u"FIRST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u""], [u"LAST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "lv_LV": [_("Latvian"), _("Latvia"), self.latvian], "lt_LT": [_("Lithuanian"), _("Lithuania"), self.lithuanian(self.english)], "nb_NO": [_("Norwegian"), _("Norway"), self.norwegian(self.scandinavian)], "fa_IR": [_("Persian"), _("Iran, Islamic Republic"), self.persian(self.english)], "pl_PL": [_("Polish"), _("Poland"), self.polish(self.english)], "ru_RU": [_("Russian"), _("Russian Federation"), self.russian], "sk_SK": [_("Slovak"), _("Slovakia"), [ [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"\u00E1", u"\u00E4", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u010D", u"\u010F", u"\u00E9"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00ED", u"\u013A", u"\u013E", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"\u0148", u"\u00F3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00F4", u"\u0155", u"\u0161", u"\u0165", u"\u00FA", u"\u00FD", u"\u017E"] ], [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00C1", u"\u00C4", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u010C", u"\u010E", u"\u00C9"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00CD", u"\u0139", u"\u013D", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"\u0147", u"\u00D3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00D4", u"\u0154", u"\u0160", u"\u0164", u"\u00DA", u"\u00DD", u"\u017D"] ], [ [u"", u"", u"\u00A7", u"\u00B0", u"\u00A4", u"\u20AC", u"\u00DF", u"\u0111", u"\u0110", u"\u0142", u"\u0141", u"", u"", u"BACKSPACE"], [u"FIRST", u"", u"", u"'", u"\"", u"+", u"-", u"\u00D7", u"\u00F7", u"=", u"_", u"~", u"", u""], [u"LAST", u"", u"", u"/", u"\\", u";", u"[", u"]", u"{", u"}", u"|", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "es_ES": [_("Spanish"), _("Spain"), self.spanish], "sv_SE": [_("Swedish"), _("Sweden"), self.swedish(self.scandinavian)], "th_TH": [_("Thai"), _("Thailand"), [ [ [u"", u"", u"\u0E45", u"\u0E20", u"\u0E16", u"\u0E38", u"\u0E36", u"\u0E04", u"\u0E15", u"\u0E08", u"\u0E02", u"\u0E0A", u"", u"BACKSPACE"], [u"FIRST", u"\u0E46", u"\u0E44", u"\u0E33", u"\u0E1E", u"\u0E30", u"\u0E31", u"\u0E35", u"\u0E23", u"\u0E19", u"\u0E22", u"\u0E1A", u"\u0E25", u""], [u"LAST", u"\u0E1F", u"\u0E2B", u"\u0E01", u"\u0E14", u"\u0E40", u"\u0E49", u"\u0E48", u"\u0E32", u"\u0E2A", u"\u0E27", u"\u0E07", u"\u0E03", u"OK"], [u"SHIFT", u"\u0E1C", u"\u0E1B", u"\u0E41", u"\u0E2D", u"\u0E34", u"\u0E37", u"\u0E17", u"\u0E21", u"\u0E43", u"\u0E1D", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"", u"\u0E51", u"\u0E52", u"\u0E53", u"\u0E54", u"\u0E39", u"\u0E55", u"\u0E56", u"\u0E57", u"\u0E58", u"\u0E59", u"", u"BACKSPACE"], [u"FIRST", u"\u0E50", u"", u"\u0E0E", u"\u0E11", u"\u0E18", u"\u0E4D", u"\u0E4A", u"\u0E13", u"\u0E2F", u"\u0E0D", u"\u0E10", u"\u0E05", u""], [u"LAST", u"\u0E24", u"\u0E06", u"\u0E0F", u"\u0E42", u"\u0E0C", u"\u0E47", u"\u0E4B", u"\u0E29", u"\u0E28", u"\u0E0B", u"", u"\u0E3F", u"OK"], [u"SHIFT", u"", u"", u"\u0E09", u"\u0E2E", u"\u0E3A", u"\u0E4C", u"", u"\u0E12", u"\u0E2C", u"\u0E26", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "uk_UA": [_("Ukrainian"), _("Ukraine"), self.ukranian(self.russian)] } self["actions"] = HelpableNumberActionMap(self, "VirtualKeyBoardActions", { "cancel": (self.cancel, _("Cancel any text changes and exit")), "save": (self.enter, _("Enter text and exit")), "locale": (self.localeMenu, _("Select the virtual keyboard locale from a menu")), "shift": (self.shiftClicked, _("Select the virtual keyboard shifted character set")), "select": (self.processSelect, _("Select the character or action under the virtual keyboard cursor")), "up": (self.up, _("Move the virtual keyboard cursor up")), "left": (self.left, _("Move the virtual keyboard cursor left")), "right": (self.right, _("Move the virtual keyboard cursor right")), "down": (self.down, _("Move the virtual keyboard cursor down")), "first": (self.cursorFirst, _("Move the text buffer cursor to the first character")), "prev": (self.cursorLeft, _("Move the text buffer cursor left")), "next": (self.cursorRight, _("Move the text buffer cursor right")), "last": (self.cursorLast, _("Move the text buffer cursor to the last character")), "toggleOverwrite": (self.keyToggleOW, _("Toggle new text inserts before or overwrites existing text")), "backspace": (self.backClicked, _("Delete the character to the left of text buffer cursor")), "delete": (self.forwardClicked, _("Delete the character under the text buffer cursor")), "1": (self.keyNumberGlobal, _("Number or SMS style data entry")), "2": (self.keyNumberGlobal, _("Number or SMS style data entry")), "3": (self.keyNumberGlobal, _("Number or SMS style data entry")), "4": (self.keyNumberGlobal, _("Number or SMS style data entry")), "5": (self.keyNumberGlobal, _("Number or SMS style data entry")), "6": (self.keyNumberGlobal, _("Number or SMS style data entry")), "7": (self.keyNumberGlobal, _("Number or SMS style data entry")), "8": (self.keyNumberGlobal, _("Number or SMS style data entry")), "9": (self.keyNumberGlobal, _("Number or SMS style data entry")), "0": (self.keyNumberGlobal, _("Number or SMS style data entry")), "gotAsciiCode": (self.keyGotAscii, _("Keyboard data entry")) }, -2, description=_("Virtual KeyBoard Functions")) self.lang = language.getLanguage() self["prompt"] = Label(prompt) self["text"] = Input(text=text, maxSize=maxSize, visible_width=visible_width, type=type, currPos=len(text.decode("utf-8", "ignore")), allMarked=allMarked) self["list"] = VirtualKeyBoardList([]) self["mode"] = Label(_("INS")) self["locale"] = Label(_("Locale") + ": " + self.lang) self["language"] = Label(_("Language") + ": " + self.lang) self["key_info"] = StaticText(_("INFO")) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Enter")) self["key_yellow"] = StaticText(_("Select locale")) self["key_blue"] = StaticText(self.shiftMsgs[1]) self["key_help"] = StaticText(_("HELP")) width, self.height = skin.parameters.get("VirtualKeyBoard", (45, 45)) self.width = self.key_bg and self.key_bg.size().width() or width self.shiftColors = skin.parameters.get("VirtualKeyBoardShiftColors", (0x00ffffff, 0x00ffffff, 0x0000ffff, 0x00ff00ff)) # Ensure there is a color for each shift level! self.language = None self.location = None self.keyList = [] self.previousSelectedKey = [] self.shiftLevels = 0 self.shiftLevel = 0 self.keyboardWidth = 0 self.keyboardHeight = 0 self.maxKey = 0 self.overwrite = False self.selectedKey = None self.sms = NumericalTextInput(self.smsGotChar) self.smsChar = None self.setLocale() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard)
class VirtualKeyBoard(Screen, HelpableScreen): def __init__(self, session, title=_("Virtual KeyBoard Text:"), text="", maxSize=False, visible_width=False, type=Input.TEXT, currPos=0, allMarked=False): Screen.__init__(self, session) HelpableScreen.__init__(self) self.setTitle(_("Virtual keyboard")) prompt = title # Title should only be used for screen titles! self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_sel.png")) self.key_longl_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longl_sel.png")) self.key_longm_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longm_sel.png")) self.key_longr_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longr_sel.png")) key_longl_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longl_bg.png")) key_longm_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longm_bg.png")) key_longr_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_longr_bg.png")) key_red_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_red.png")) key_green_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_green.png")) key_yellow_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_yellow.png")) key_blue_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_blue.png")) key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_backspace.png")) key_enter = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_enter.png")) key_first = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_first.png")) key_last = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_last.png")) key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_left.png")) key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_right.png")) key_shift0 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift0.png")) key_shift1 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift1.png")) key_shift2 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift2.png")) key_shift3 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift3.png")) # self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space.png")) key_space_alt = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space_alt.png")) self.key_sel_width = self.key_sel.size().width() self.keyBackgrounds = { "EXIT": key_red_bg, "OK": key_green_bg, "ENTER": key_green_bg, "LOC": key_yellow_bg, "SHFT": key_blue_bg, "LongL": key_longl_bg, "LongM": key_longm_bg, "LongR": key_longr_bg } self.keyImages = [{ "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift0, "SPACE": key_space_alt }, { "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift1, "SPACE": key_space_alt }, { "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift2, "SPACE": key_space_alt }, { "BACKSPACE": key_backspace, "ENTER": key_enter, "FIRST": key_first, "LAST": key_last, "LEFT": key_left, "RIGHT": key_right, "SHIFT": key_shift3, "SPACE": key_space_alt }] self.shiftMsgs = [ _("Lower case"), _("Upper case"), _("Special 1"), _("Special 2") ] self.english = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"", u"ENTER"], [u"SHIFT", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"", u"ENTER"], [u"SHIFT", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.english_EN_US = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ] ] self.french = [ [ [u"\u00B2", u"&", u"\u00E9", u"\"", u"'", u"(", u"-", u"\u00E8", u"_", u"\u00E7", u"\u00E0", u")", u"=", u"BACKSPACE"], [u"FIRST", u"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"$", u"[", u"]"], [u"LAST", u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"\u00F9", u"*", u"ENTER"], [u"SHIFT", u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"!", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"#", u"@", u"`"] ], [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00B0", u"+", u"BACKSPACE"], [u"FIRST", u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00A3", u"{", u"}"], [u"LAST", u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"%", u"\u00B5", u"ENTER"], [u"SHIFT", u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"/", u"\u00A7", u"\u00A6", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"~", u"^", u"\\"] ], [ [u"", u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"", u"BACKSPACE"], [u"FIRST", u"", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u""], [u"LAST", u"", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"", u"ENTER"], [u"SHIFT", u"", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.german = [ [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00DF", u"'", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FC", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"+", U"ENTER"], [u"SHIFT", u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"#", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"|", u"\\", u"\u00B5"] ], [ [u"\u00B0", u"!", u"\"", u"\u00A7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"`", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"\u00DC", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", U"ENTER"], [u"SHIFT", u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"@", U"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u20AC", u"\u00B2", u"\u00B3"] ] ] self.latvian = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ], [ [u"\u00b4", u"\u00b9", u"\u00b2", u"\u00b3", u"\u20ac", u"\u00bd", u"\u00be", u"\u007b", u"\u005b", u"\u005d", u"\u007d ", u"\u005c", u"\u2013", u"BACKSPACE"], [u"FIRST", u"q", u"\u0113", u"\u0112", u"\u0157", u"\u0156", u"\u016B", u"\u016A", u"\u012B", u"\u012A", u"\u014D", u"\u014C", u"\u00ab", u"\u00bb"], [u"LAST", u"\u0101", u"\u0100", u"\u0161", u"\u0160", u"\u0123", u"\u0122", u"\u0137", u"\u0136", u"\u013C", u"\u013B", u"\u003b", u"LongL__ENTER__HIDE", u"LongR__Enter"], [u"LongL__Shift", u"LongR__SHIFT__HIDE", u"\u017E", u"\u017D", u"\u010D", u"\u010C", u"b", u"\u0146", u"\u0145", u"\u0060", u"\u00b7", u"\u002f", u"LongL__SHIFT__HIDE", u"LongR__Shift"], [u"LongL__Esc", u"LongR__ESC__HIDE", u"Loc", u"All", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"LEFT", u"RIGHT", u"LongL__CLR__HIDE", u"LongR__Clr"] ] ] self.russian = [ [ [u"\u0451", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0439", u"\u0446", u"\u0443", u"\u043A", u"\u0435", u"\u043D", u"\u0433", u"\u0448", u"\u0449", u"\u0437", u"\u0445", u"\u044A", u"\u00A7"], [u"LAST", u"\u0444", u"\u044B", u"\u0432", u"\u0430", u"\u043F", u"\u0440", u"\u043E", u"\u043B", u"\u0434", u"\u0436", u"\u044D", u"\\", u"ENTER"], [u"SHIFT", u"\u044F", u"\u0447", u"\u0441", u"\u043C", u"\u0438", u"\u0442", u"\u044C", u"\u0431", u"\u044E", u".", u"@", u"&", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"<"] ], [ [u"\u0401", u"!", u"\"", u"\u2116", u";", u"%", u":", u"?", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"\u0419", u"\u0426", u"\u0423", u"\u041A", u"\u0415", u"\u041D", u"\u0413", u"\u0428", u"\u0429", u"\u0417", u"\u0425", u"\u042A", u"\u20BD"], [u"LAST", u"\u0424", u"\u042B", u"\u0412", u"\u0410", u"\u041F", u"\u0420", u"\u041E", u"\u041B", u"\u0414", u"\u0416", u"\u042D", u"/", u"ENTER"], [u"SHIFT", u"\u042F", u"\u0427", u"\u0421", u"\u041C", u"\u0418", u"\u0422", u"\u042C", u"\u0411", u"\u042E", u",", u"#", u"$", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u">"] ] ] self.scandinavian = [ [ [u"\u00A7", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"+", u"@", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u00E5", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"'", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u00AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"\u00BD", u"!", u"\"", u"#", u"\u00A4", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"|", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00C5", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00BB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"\u00E3", u"\u00F5", u"BACKSPACE"], [u"FIRST", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u"", u""], [u"LAST", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"\u00C3", u"\u00D5", u"ENTER"], [u"SHIFT", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.spanish = [ [ [u"\\", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"'", u"\u00A1", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"@", u"+", u"\u00E7"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F1", u"[", u"]", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"\u00FC"] ], [ [u"|", u"!", u"\"", u"\u00B7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"\u00BF", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"#", u"*", u"\u00C7"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D1", u"{", u"}", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"\u00DC"] ] ] self.locales = { "ar_BH": [_("Arabic"), _("Bahrain"), self.arabic(self.english)], "ar_EG": [_("Arabic"), _("Egypt"), self.arabic(self.english)], "ar_JO": [_("Arabic"), _("Jordan"), self.arabic(self.english)], "ar_KW": [_("Arabic"), _("Kuwait"), self.arabic(self.english)], "ar_LB": [_("Arabic"), _("Lebanon"), self.arabic(self.english)], "ar_OM": [_("Arabic"), _("Oman"), self.arabic(self.english)], "ar_QA": [_("Arabic"), _("Qatar"), self.arabic(self.english)], "ar_SA": [_("Arabic"), _("Saudi Arabia"), self.arabic(self.english)], "ar_SY": [_("Arabic"), _("Syrian Arab Republic"), self.arabic(self.english)], "ar_AE": [_("Arabic"), _("United Arab Emirates"), self.arabic(self.english)], "ar_YE": [_("Arabic"), _("Yemen"), self.arabic(self.english)], "cs_CZ": [_("Czech"), _("Czechia"), [ [ [u";", u"+", u"\u011B", u"\u0161", u"\u010D", u"\u0159", u"\u017E", u"\u00FD", u"\u00E1", u"\u00ED", u"\u00E9", u"=", u"", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FA", u")", u""], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u016F", u"\u00A7", u"", u"ENTER"], [u"SHIFT", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u0148", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"ALL", u"CLR", u"DEL"] ], [ [u".", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"%", u"", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"/", u"(", u""], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\"", u"!", u"'", u"ENTER"], [u"SHIFT", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"_", u"\u0147", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"ALL", u"CLR", u"DEL"] ], [ [u"", u"~", u"\u011A", u"\u0160", u"\u010C", u"\u0158", u"\u017D", u"\u00DD", u"\u00C1", u"\u00CD", u"\u00C9", u"`", u"", u"BACKSPACE"], [u"FIRST", u"\\", u"|", u"\u20AC", u"\u0165", u"\u0164", u"", u"", u"", u"\u00F3", u"\u00D3", u"\u00DA", u"\u00F7", u"\u00D7"], [u"LAST", u"", u"\u0111", u"\u00D0", u"[", u"]", u"\u010F", u"\u010E", u"\u0142", u"\u0141", u"\u016E", u"$", u"\u00DF", u"ENTER"], [u"SHIFT", u"", u"#", u"&", u"@", u"{", u"}", u"", u"<", u">", u"*", u"", u"\u00A4", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"LongL__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongM__SPACE__HIDE", u"LongR__SPACE__HIDE", u"ALL", u"CLR", u"DEL"] ] ]], "nl_NL": [_("Dutch"), _("Netherlands"), self.dutch(self.english)], "en_AU": [_("English"), _("Australian"), self.australian(self.english)], "en_GB": [_("English"), _("United Kingdom"), self.unitedKingdom(self.english)], "en_US": [_("English"), _("United States"), self.english_EN_US], "en_EN": [_("English"), _("Various"), self.english_EN_US], "et_EE": [_("Estonian"), _("Estonia"), self.estonian(self.scandinavian)], "fi_FI": [_("Finnish"), _("Finland"), self.finnish(self.scandinavian)], "fr_BE": [_("French"), _("Belgian"), self.belgian(self.french)], "fr_FR": [_("French"), _("France"), self.french], "de_CH": [_("German"), _("Switzerland"), self.swiss(self.german)], "de_DE": [_("German"), _("Germany"), self.german], "el_GR": [_("Greek (Modern)"), _("Greece"), [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u";", u"\u03C2", u"\u03B5", u"\u03C1", u"\u03C4", u"\u03C5", u"\u03B8", u"\u03B9", u"\u03BF", u"\u03C0", u"[", u"]", u"/"], [u"LAST", u"\u03B1", u"\u03C3", u"\u03B4", u"\u03C6", u"\u03B3", u"\u03B7", u"\u03BE", u"\u03BA", u"\u03BB", u"", u"'", u"\\", u"ENTER"], [u"SHIFT", u"<", u"\u03B6", u"\u03C7", u"\u03C8", u"\u03C9", u"\u03B2", u"\u03BD", u"\u03BC", u",", ".", u"\u03CA", u"\u03CB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u03AC", u"\u03AD", u"\u03AE", u"\u03AF", u"\u03CC", u"\u03CD", u"\u03CE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u":", u"", u"\u0395", u"\u03A1", u"\u03A4", u"\u03A5", u"\u0398", u"\u0399", u"\u039F", u"\u03A0", u"{", u"}", u"?"], [u"LAST", u"\u0391", u"\u03A3", u"\u0394", u"\u03A6", u"\u0393", u"\u0397", u"\u039E", u"\u039A", u"\u039B", u"", u"\"", u"|", u"ENTER"], [u"SHIFT", u">", u"\u0396", u"\u03A7", u"\u03A8", u"\u03A9", u"\u0392", u"\u039D", u"\u039C", u"<", u">", u"\u03AA", u"\u03AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u0386", u"\u0388", u"\u0389", u"\u038A", u"\u038C", u"\u038E", u"\u038F"] ], [ [u"", u"", u"\u00B2", u"\u00B3", u"\u00A3", u"\u00A7", u"\u00B6", u"\u20AC", u"\u00A4", u"\u00A6", u"\u00B0", u"\u00B1", u"\u00BD", u"BACKSPACE"], [u"FIRST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u""], [u"LAST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "lv_LV": [_("Latvian"), _("Latvia"), self.latvian], "lt_LT": [_("Lithuanian"), _("Lithuania"), self.lithuanian(self.english)], "nb_NO": [_("Norwegian"), _("Norway"), self.norwegian(self.scandinavian)], "fa_IR": [_("Persian"), _("Iran, Islamic Republic"), self.persian(self.english)], "pl_PL": [_("Polish"), _("Poland"), self.polish(self.english)], "ru_RU": [_("Russian"), _("Russian Federation"), self.russian], "sk_SK": [_("Slovak"), _("Slovakia"), [ [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"\u00E1", u"\u00E4", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u010D", u"\u010F", u"\u00E9"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00ED", u"\u013A", u"\u013E", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"\u0148", u"\u00F3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00F4", u"\u0155", u"\u0161", u"\u0165", u"\u00FA", u"\u00FD", u"\u017E"] ], [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00C1", u"\u00C4", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u010C", u"\u010E", u"\u00C9"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00CD", u"\u0139", u"\u013D", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"\u0147", u"\u00D3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00D4", u"\u0154", u"\u0160", u"\u0164", u"\u00DA", u"\u00DD", u"\u017D"] ], [ [u"", u"", u"\u00A7", u"\u00B0", u"\u00A4", u"\u20AC", u"\u00DF", u"\u0111", u"\u0110", u"\u0142", u"\u0141", u"", u"", u"BACKSPACE"], [u"FIRST", u"", u"", u"'", u"\"", u"+", u"-", u"\u00D7", u"\u00F7", u"=", u"_", u"~", u"", u""], [u"LAST", u"", u"", u"/", u"\\", u";", u"[", u"]", u"{", u"}", u"|", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "es_ES": [_("Spanish"), _("Spain"), self.spanish], "sv_SE": [_("Swedish"), _("Sweden"), self.swedish(self.scandinavian)], "th_TH": [_("Thai"), _("Thailand"), [ [ [u"", u"", u"\u0E45", u"\u0E20", u"\u0E16", u"\u0E38", u"\u0E36", u"\u0E04", u"\u0E15", u"\u0E08", u"\u0E02", u"\u0E0A", u"", u"BACKSPACE"], [u"FIRST", u"\u0E46", u"\u0E44", u"\u0E33", u"\u0E1E", u"\u0E30", u"\u0E31", u"\u0E35", u"\u0E23", u"\u0E19", u"\u0E22", u"\u0E1A", u"\u0E25", u""], [u"LAST", u"\u0E1F", u"\u0E2B", u"\u0E01", u"\u0E14", u"\u0E40", u"\u0E49", u"\u0E48", u"\u0E32", u"\u0E2A", u"\u0E27", u"\u0E07", u"\u0E03", u"OK"], [u"SHIFT", u"\u0E1C", u"\u0E1B", u"\u0E41", u"\u0E2D", u"\u0E34", u"\u0E37", u"\u0E17", u"\u0E21", u"\u0E43", u"\u0E1D", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"", u"\u0E51", u"\u0E52", u"\u0E53", u"\u0E54", u"\u0E39", u"\u0E55", u"\u0E56", u"\u0E57", u"\u0E58", u"\u0E59", u"", u"BACKSPACE"], [u"FIRST", u"\u0E50", u"", u"\u0E0E", u"\u0E11", u"\u0E18", u"\u0E4D", u"\u0E4A", u"\u0E13", u"\u0E2F", u"\u0E0D", u"\u0E10", u"\u0E05", u""], [u"LAST", u"\u0E24", u"\u0E06", u"\u0E0F", u"\u0E42", u"\u0E0C", u"\u0E47", u"\u0E4B", u"\u0E29", u"\u0E28", u"\u0E0B", u"", u"\u0E3F", u"OK"], [u"SHIFT", u"", u"", u"\u0E09", u"\u0E2E", u"\u0E3A", u"\u0E4C", u"", u"\u0E12", u"\u0E2C", u"\u0E26", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "uk_UA": [_("Ukrainian"), _("Ukraine"), self.ukranian(self.russian)] } self["actions"] = HelpableNumberActionMap(self, "VirtualKeyBoardActions", { "cancel": (self.cancel, _("Cancel any text changes and exit")), "save": (self.enter, _("Enter text and exit")), "locale": (self.localeMenu, _("Select the virtual keyboard locale from a menu")), "shift": (self.shiftClicked, _("Select the virtual keyboard shifted character set")), "select": (self.processSelect, _("Select the character or action under the virtual keyboard cursor")), "up": (self.up, _("Move the virtual keyboard cursor up")), "left": (self.left, _("Move the virtual keyboard cursor left")), "right": (self.right, _("Move the virtual keyboard cursor right")), "down": (self.down, _("Move the virtual keyboard cursor down")), "first": (self.cursorFirst, _("Move the text buffer cursor to the first character")), "prev": (self.cursorLeft, _("Move the text buffer cursor left")), "next": (self.cursorRight, _("Move the text buffer cursor right")), "last": (self.cursorLast, _("Move the text buffer cursor to the last character")), "toggleOverwrite": (self.keyToggleOW, _("Toggle new text inserts before or overwrites existing text")), "backspace": (self.backClicked, _("Delete the character to the left of text buffer cursor")), "delete": (self.forwardClicked, _("Delete the character under the text buffer cursor")), "1": (self.keyNumberGlobal, _("Number or SMS style data entry")), "2": (self.keyNumberGlobal, _("Number or SMS style data entry")), "3": (self.keyNumberGlobal, _("Number or SMS style data entry")), "4": (self.keyNumberGlobal, _("Number or SMS style data entry")), "5": (self.keyNumberGlobal, _("Number or SMS style data entry")), "6": (self.keyNumberGlobal, _("Number or SMS style data entry")), "7": (self.keyNumberGlobal, _("Number or SMS style data entry")), "8": (self.keyNumberGlobal, _("Number or SMS style data entry")), "9": (self.keyNumberGlobal, _("Number or SMS style data entry")), "0": (self.keyNumberGlobal, _("Number or SMS style data entry")), "gotAsciiCode": (self.keyGotAscii, _("Keyboard data entry")) }, -2, description=_("Virtual KeyBoard Functions")) self.lang = language.getLanguage() self["prompt"] = Label(prompt) self["text"] = Input(text=text, maxSize=maxSize, visible_width=visible_width, type=type, currPos=len(text.decode("utf-8", "ignore")), allMarked=allMarked) self["list"] = VirtualKeyBoardList([]) self["mode"] = Label(_("INS")) self["locale"] = Label(_("Locale") + ": " + self.lang) self["language"] = Label(_("Language") + ": " + self.lang) self["key_info"] = StaticText(_("INFO")) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Enter")) self["key_yellow"] = StaticText(_("Select locale")) self["key_blue"] = StaticText(self.shiftMsgs[1]) self["key_help"] = StaticText(_("HELP")) width, self.height = skin.parameters.get("VirtualKeyBoard", (45, 45)) self.width = self.key_bg and self.key_bg.size().width() or width self.shiftColors = skin.parameters.get("VirtualKeyBoardShiftColors", (0x00ffffff, 0x00ffffff, 0x0000ffff, 0x00ff00ff)) # Ensure there is a color for each shift level! self.language = None self.location = None self.keyList = [] self.previousSelectedKey = [] self.shiftLevels = 0 self.shiftLevel = 0 self.keyboardWidth = 0 self.keyboardHeight = 0 self.maxKey = 0 self.overwrite = False self.selectedKey = None self.sms = NumericalTextInput(self.smsGotChar) self.smsChar = None self.setLocale() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) def arabic(self, base): keyList = copy.deepcopy(base) keyList[1][0][8] = u"\u066D" keyList.extend([[ [u"\u0630", u"\u0661", u"\u0662", u"\u0663", u"\u0664", u"\u0665", u"\u0666", u"\u0667", u"\u0668", u"\u0669", u"\u0660", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"\u062C", u"\u062F", u"\\"], [u"LAST", u"\u0634", u"\u0633", u"\u064A", u"\u0628", u"\u0644", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u0643", u"\u0637", u"", u"ENTER"], [u"SHIFT", u"\u0626", u"\u0621", u"\u0624", u"\u0631", u"\uFEFB", u"\u0649", u"\u0629", u"\u0648", u"\u0632", u"\u0638", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"\u0651", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"\u066D", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u00F7", u"\u00D7", u"\u061B", u">", u"<", u"|"], [u"LAST", u"\u0634", u"\u0633", u"\u064A", u"\u0628", u"\u0644", u"\u0623", u"\u0640", u"\u060C", u"/", u":", u"\"", u"", u"ENTER"], [u"SHIFT", u"\u0626", u"\u0621", u"\u0624", u"\u0631", u"\uFEF5", u"\u0622", u"\u0629", u",", u".", u"\u061F", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]]) return keyList def australian(self, base): keyList = copy.deepcopy(base) keyList[0][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".au", u".tv"]) keyList[1][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".au", u".tv"]) return keyList def belgian(self, base): keyList = copy.deepcopy(base) keyList[0][0][6] = u"\u00A7" keyList[0][0][8] = u"!" keyList[0][0][12] = u"-" keyList[0][2][12] = u"\u00B5" keyList[0][3][11] = u"=" keyList[1][0][0] = u"\u00B3" keyList[1][0][12] = u"_" keyList[1][1][11] = u"*" keyList[1][2][12] = u"\u00A3" keyList[1][3][11] = u"+" return keyList def dutch(self, base): keyList = copy.deepcopy(base) keyList[0][0][0] = u"@" keyList[0][0][11] = u"/" keyList[0][0][12] = u"\u00BA" keyList[0][1][11] = u"\u00A8" keyList[0][1][12] = u"*" keyList[0][1][13] = u"<" keyList[0][2][10] = u"+" keyList[0][2][11] = u"\u00B4" keyList[0][2][12] = u"\\" keyList[0][3] = [u"SHIFT", u"]", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"-", u"{", u"SHIFT"] keyList[0][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".nl", u".tv"]) keyList[1][0] = [u"\u00A7", u"!", u"\"", u"#", u"$", u"%", u"&", u"_", u"(", u")", u"'", u"?", u"~", u"BACKSPACE"] keyList[1][1][11] = u"^" keyList[1][1][12] = u"|" keyList[1][1][13] = u">" keyList[1][2][10] = u"\u00B1" keyList[1][2][11] = u"`" keyList[1][2][12] = u"\u00A6" keyList[1][3] = [u"SHIFT", u"[", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"=", u"}", u"SHIFT"] keyList[1][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".nl", u".tv"]) keyList.append([ [u"\u00AC", u"\u00B9", u"\u00B2", u"\u00B3", u"\u00BC", u"\u00BD", u"\u00BE", u"\u00A3", u"{", u"}", u"$", u"\\", u"", u"BACKSPACE"], [u"FIRST", u"", u"", u"\u20AC", u"\u00B6", u"", u"", u"", u"", u"", u"", u"", u"", u""], [u"LAST", u"", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"ENTER"], [u"SHIFT", u"\u00A6", u"\u00AB", u"\u00BB", u"\u00A2", u"", u"", u"", u"\u00B5", u"", u"\u00B7", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def estonian(self, base): keyList = copy.deepcopy(base) keyList[0][1][11] = u"\u00FC" keyList[0][1][12] = u"\u00F5" keyList[0][1][13] = u"\u0161" keyList[0][3][12] = u"\u017E" keyList[0][4].extend([u"[", u"]", u"\\"]) keyList[1][1][11] = u"\u00DC" keyList[1][1][12] = u"\u00D5" keyList[1][1][13] = u"\u0160" keyList[1][3][12] = u"\u017D" keyList[1][4].extend([u"{", u"}", u"\u00A3", u"$", u"\u20AC"]) del keyList[2] return keyList def finnish(self, base): keyList = copy.deepcopy(base) keyList[0][4].append(u"\\") keyList[1][4].extend([u"\u00A3", u"$", u"\u20AC"]) return keyList def lithuanian(self, base): keyList = copy.deepcopy(base) keyList[0][0] = [u"`", u"\u0105", u"\u010D", u"\u0119", u"\u0117", u"\u012F", u"\u0161", u"\u0173", u"\u016B", u"", u"", u"", u"\u017E", u"BACKSPACE"] keyList[0][1][13] = u"" keyList[0][2][12] = u"\\" keyList[1][0] = [u"~", u"\u0104", u"\u010C", u"\u0118", u"\u0116", u"\u012E", u"\u0160", u"\u0172", u"\u016A", u"\u201E", u"\u201C", u"", u"\u017D", u"BACKSPACE"] keyList[1][1][13] = u"" keyList[1][2][12] = u"|" keyList.append([ [u"\u02DC", u"\u00BC", u"\u00BD", u"\u00BE", u"\u00A4", u"\u00A2", u"\u00B0", u"\u00A7", u"\u00D7", u"\u00AB", u"\u00BB", u"\u00F7", u"\u00B1", u"BACKSPACE"], [u"FIRST", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"\u00AD"], [u"LAST", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"ENTER"], [u"SHIFT", u"", u"\u00DF", u"\u00A9", u"\u00AE", u"\u2122", u"\u00AC", u"\u00A3", u"\u20AC", u"\u00B7", u"\u00B9", u"\u00B2", u"\u00B3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def norwegian(self, base): keyList = copy.deepcopy(base) keyList[0][0][0] = u"|" keyList[0][0][12] = u"\\" keyList[0][2][10] = u"\u00F8" keyList[0][2][11] = u"\u00E6" keyList[0][3][12] = u"\u00B5" keyList[1][0][0] = u"\u00A7" keyList[1][0][12] = u"@" keyList[1][2][10] = u"\u00D8" keyList[1][2][11] = u"\u00C6" keyList[1][3][12] = u"" keyList[1][4].extend([u"\u00A3", u"$", u"\u20AC"]) return keyList def persian(self, base): keyList = copy.deepcopy(base) keyList.append([ [u"\u00F7", u"\u06F1", u"\u06F2", u"\u06F3", u"\u06F4", u"\u06F5", u"\u06F6", u"\u06F7", u"\u06F8", u"\u06F9", u"\u06F0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"\u062C", u"\u0686", u"\u067E"], [u"LAST", u"\u0634", u"\u0633", u"\u0649", u"\u0628", u"\u0644", u"\u0622", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u06A9", u"\u06AF", u"ENTER"], [u"SHIFT", u"\u0638", u"\u0637", u"\u0698", u"\u0632", u"\u0631", u"\u0630", u"\u062F", u"\u0626", u"\u0621", u"\u0648", u"\u060C", u"\u061F", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def polish(self, base): keyList = copy.deepcopy(base) keyList[0][3][11] = u"\u0105" keyList[0][3][12] = u"\u0107" keyList[0][-1].extend([u"\u0119", u"\u0142", u"\u0144", u"\u00F3", u"\u015B", u"\u017A", u"\u017C"]) keyList[1][2][12] = u"\u20AC" keyList[1][3][11] = u"\u0104" keyList[1][3][12] = u"\u0106" keyList[1][-1].extend([u"\u0118", u"\u0141", u"\u0143", u"\u00D3", u"\u015A", u"\u0179", u"\u017B"]) return keyList def swedish(self, base): keyList = copy.deepcopy(base) keyList[0][4].extend([u"\\", u"\u00B5"]) keyList[1][4].extend([u"\u00A3", u"$", u"\u20AC"]) return keyList def swiss(self, base): keyList = copy.deepcopy(base) keyList[0][0][0] = u"\u00A7" keyList[0][0][11] = u"'" keyList[0][0][12] = u"^" keyList[0][2][12] = u"$" keyList[0][3][12] = u"\u20AC" keyList[0][4][7] = u"\u00E0" keyList[0][4][8] = u"\u00E8" keyList[0][4][9] = u"\u00E9" keyList[0][4].extend([u"@", u"!", u"\u00AC", u"\\"]) keyList[1][0][1] = u"+" keyList[1][0][3] = u"*" keyList[1][0][4] = u"\u00E7" keyList[1][0][11] = u"?" keyList[1][0][12] = u"`" keyList[1][2][12] = u"\u00A3" keyList[1][3][12] = u"\u00A2" keyList[1][4][9] = u"\u00AC" keyList[1][4][9] = u"\u00A6" keyList[1][4][7] = u"\u00C0" keyList[1][4][8] = u"\u00C8" keyList[1][4][9] = u"\u00C9" keyList[1][4].extend([u"#", u"|", u"\u00A6"]) return keyList def ukranian(self, base): keyList = copy.deepcopy(base) keyList[0][1][12] = u"\u0457" keyList[0][2][2] = u"\u0456" keyList[0][2][11] = u"\u0454" keyList[0][3][11] = u"\u0491" keyList[0][4].append(u"@") keyList[1][1][12] = u"\u0407" keyList[1][2][2] = u"\u0406" keyList[1][2][11] = u"\u0404" keyList[1][3][11] = u"\u0490" keyList[1][4].append(u"#") return keyList def unitedKingdom(self, base): keyList = copy.deepcopy(base) keyList[0][1][13] = u"\u00A6" keyList[0][2][12] = u"#" keyList[0][3] = [u"SHIFT", u"\\", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"", u"SHIFT"] # keyList[0][-1].extend([u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA"]) # English users don't use the accented characters. keyList[1][0][0] = u"\u00AC" keyList[1][0][2] = u"\"" keyList[1][0][3] = u"\u00A3" keyList[1][1][13] = u"\u20AC" keyList[1][2][11] = u"@" keyList[1][2][12] = u"~" keyList[1][3] = [u"SHIFT", u"|", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"", u"SHIFT"] # keyList[1][-1].extend([u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA"]) # English users don't use the accented characters. return keyList def smsGotChar(self): if self.smsChar and self.selectAsciiKey(self.smsChar): self.processSelect() def setLocale(self): self.language, self.location, self.keyList = self.locales.get(self.lang, [None, None, None]) if self.language is None or self.location is None or self.keyList is None: self.lang = "en_EN" self.language = _("English") self.location = _("Various") self.keyList = self.english_EN_US self.shiftLevel = 0 self["locale"].setText(_("Locale") + ": " + self.lang + " (" + self.language + " - " + self.location + ")") def buildVirtualKeyBoard(self): self.shiftLevels = len(self.keyList) if self.shiftLevel >= self.shiftLevels: self.shiftLevel = 0 self.keyboardWidth = len(self.keyList[self.shiftLevel][0]) self.keyboardHeight = len(self.keyList[self.shiftLevel]) self.maxKey = self.keyboardWidth * (self.keyboardHeight - 1) + len(self.keyList[self.shiftLevel][-1]) - 1 # print "[VirtualKeyBoard] DEBUG: Width=%d, Height=%d, Keys=%d, maxKey=%d, shiftLevels=%d" % (self.keyboardWidth, self.keyboardHeight, self.maxKey + 1, self.maxKey, self.shiftLevels) self.list = [] for keys in self.keyList[self.shiftLevel]: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.previousSelectedKey = [] if self.selectedKey is None: self.selectedKey = self.keyboardWidth self.markSelectedKey() def virtualKeyBoardEntryComponent(self, keys): res = [keys] text = [] offset = 14 - self.keyboardWidth # 14 represents the maximum buttons per row as defined here and in the skin (14 x self.width). x = self.width * offset / 2 if offset % 2: x += self.width / 2 for key in keys: image = self.keyImages[self.shiftLevel].get(key, None) if image: width = image.size().width() res.append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(width, self.height), png=image)) else: width = self.width res.append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(width, self.height), png=self.keyBackgrounds.get(key.split("__")[0], self.key_bg))) if "__" in key: key = key.split("__")[1] if not "__HIDE" in key else u"" if len(key) > 1: # NOTE: UTF8 / Unicode glyphs only count as one character here. text.append(MultiContentEntryText(pos=(x, 0), size=(width, self.height), font=1, flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER, text=_(key.encode("utf-8")), color=self.shiftColors[self.shiftLevel])) else: text.append(MultiContentEntryText(pos=(x, 0), size=(width, self.height), font=0, flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER, text=key.encode("utf-8"), color=self.shiftColors[self.shiftLevel])) x += width return res + text def markSelectedKey(self): for key in self.previousSelectedKey: self.list[key] = self.list[key][:-1] self.previousSelectedKey = [] if self.selectedKey > self.maxKey: self.selectedKey = self.maxKey selectedKeyboardKey = self.selectedKey / self.keyboardWidth selectedKeyModulus = self.selectedKey % self.keyboardWidth if "__" not in self.keyList[self.shiftLevel][selectedKeyboardKey][selectedKeyModulus]: x = self.list[selectedKeyboardKey][selectedKeyModulus + 1][1] self.list[selectedKeyboardKey].append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(self.key_sel_width, self.height), png=self.key_sel)) self.previousSelectedKey.append(selectedKeyboardKey) else: selectedKeyShift = self.selectedKey while True: selectedKeyboardKey = selectedKeyShift / self.keyboardWidth selectedKeyModulus = selectedKeyShift % self.keyboardWidth selectedBg = self.keyList[self.shiftLevel][selectedKeyboardKey][selectedKeyModulus].split("__")[0] x = self.list[selectedKeyboardKey][selectedKeyModulus + 1][1] if selectedBg == "LongL": self.list[selectedKeyboardKey].append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(self.key_sel_width, self.height), png=self.key_longl_sel)) self.previousSelectedKey.append(selectedKeyboardKey) break elif selectedBg == "LongM": self.list[selectedKeyboardKey].append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(self.key_sel_width, self.height), png=self.key_longm_sel)) self.previousSelectedKey.append(selectedKeyboardKey) selectedKeyShift -= 1 if selectedKeyShift < 0: break selectedKeyShift = self.selectedKey while True: selectedKeyboardKey = selectedKeyShift / self.keyboardWidth selectedKeyModulus = selectedKeyShift % self.keyboardWidth selectedBg = self.keyList[self.shiftLevel][selectedKeyboardKey][selectedKeyModulus].split("__")[0] x = self.list[selectedKeyboardKey][selectedKeyModulus + 1][1] if selectedBg == "LongR": self.list[selectedKeyboardKey].append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(self.key_sel_width, self.height), png=self.key_longr_sel)) self.previousSelectedKey.append(selectedKeyboardKey) break elif selectedBg == "LongM" and selectedKeyShift > self.selectedKey: self.list[selectedKeyboardKey].append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(self.key_sel_width, self.height), png=self.key_longm_sel)) self.previousSelectedKey.append(selectedKeyboardKey) selectedKeyShift += 1 if selectedKeyShift > self.maxKey: break self["list"].setList(self.list) def processSelect(self): self.smsChar = None text = self.keyList[self.shiftLevel][self.selectedKey / self.keyboardWidth][self.selectedKey % self.keyboardWidth].encode("UTF-8") upperText = text.upper() if "__" in upperText: upperText = upperText.split("__")[1] if text == u"": pass elif upperText == u"ALL": self["text"].markAll() elif upperText == u"BACK": self["text"].deleteBackward() elif upperText == u"BACKSPACE": self["text"].deleteBackward() elif upperText == u"BLANK": pass elif upperText == u"CLR": self["text"].deleteAllChars() self["text"].update() elif upperText == u"DEL": self["text"].deleteForward() elif upperText == u"ENTER": self.enter() elif upperText == u"ESC": self.cancel() elif upperText == u"EXIT": self.cancel() elif upperText == u"FIRST": self["text"].home() elif upperText == u"LOC": self.localeMenu() elif upperText == u"LAST": self["text"].end() elif upperText == u"LEFT": self["text"].left() elif upperText == u"OK": self.enter() elif upperText == u"RIGHT": self["text"].right() elif upperText == u"ENTER": self.enter() elif upperText == u"SHIFT": self.shiftClicked() elif upperText == u"Shift": self.shiftClicked() elif upperText == u"SPACE": self["text"].char(" ".encode("UTF-8")) else: self["text"].char(text.encode("UTF-8")) def cancel(self): self.close(None) def save(self): # Deprecated legacy interface to new enter self.enter() def enter(self): self.close(self["text"].getText()) def localeMenu(self): languages = [] for locale, data in self.locales.iteritems(): languages.append((data[0] + " - " + data[1] + " (" + locale + ")", locale)) languages = sorted(languages) index = 0 default = 0 for item in languages: if item[1] == self.lang: default = index break index += 1 self.session.openWithCallback(self.localeMenuCallback, ChoiceBox, _("Available locales are:"), list=languages, selection=default, keys=[]) def localeMenuCallback(self, choice): if choice: self.lang = choice[1] self.setLocale() self.buildVirtualKeyBoard() def shiftClicked(self): self.smsChar = None self.shiftLevel = (self.shiftLevel + 1) % self.shiftLevels nextLevel = (self.shiftLevel + 1) % self.shiftLevels self["key_blue"].setText(self.shiftMsgs[nextLevel]) self.buildVirtualKeyBoard() def keyToggleOW(self): self["text"].toggleOverwrite() self.overwrite = not self.overwrite if self.overwrite: self["mode"].setText(_("OVR")) else: self["mode"].setText(_("INS")) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def cursorFirst(self): self["text"].home() def cursorLeft(self): self["text"].left() def cursorRight(self): self["text"].right() def cursorLast(self): self["text"].end() def up(self): self.smsChar = None self.selectedKey -= self.keyboardWidth if self.selectedKey < 0: self.selectedKey = self.maxKey / self.keyboardWidth * self.keyboardWidth + self.selectedKey % self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey -= self.keyboardWidth self.markSelectedKey() def left(self): self.smsChar = None selectedKeyboardKey = self.selectedKey / self.keyboardWidth self.selectedKey = selectedKeyboardKey * self.keyboardWidth + (self.selectedKey + self.keyboardWidth - 1) % self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey = self.maxKey selectedBg = self.keyList[self.shiftLevel][selectedKeyboardKey][self.selectedKey % self.keyboardWidth].split("__")[0] if self.selectedKey < self.maxKey and selectedBg == "LongM" or selectedBg == "LongL": self.left() else: self.markSelectedKey() def right(self): self.smsChar = None selectedKeyboardKey = self.selectedKey / self.keyboardWidth self.selectedKey = selectedKeyboardKey * self.keyboardWidth + (self.selectedKey + 1) % self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey = selectedKeyboardKey * self.keyboardWidth selectedBg = self.keyList[self.shiftLevel][selectedKeyboardKey][self.selectedKey % self.keyboardWidth].split("__")[0] if self.selectedKey > 0 and selectedBg == "LongM" or selectedBg == "LongR": self.right() else: self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey %= self.keyboardWidth self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode("utf-8"))): self.processSelect() def selectAsciiKey(self, char): if char == u" ": char = u"SPACE" self.shiftLevel = -1 for keyList in (self.keyList): self.shiftLevel = (self.shiftLevel + 1) % self.shiftLevels self.buildVirtualKeyBoard() selkey = 0 for keys in keyList: for key in keys: if key == char: self.selectedKey = selkey self.markSelectedKey() return True selkey += 1 return False
def __init__(self, session): self.entriesWidth = DESKTOP_WIDTH * scaleH(75, 85) / 100 self.height = DESKTOP_HEIGHT * 0.75 numberFieldWidth = scaleH(220, 160) fieldWidth = self.entriesWidth - 5 - numberFieldWidth - 10 fontSize = scaleV(22, 18) fontHeight = scaleV(24, 20) buttonGap = (self.entriesWidth - 4 * 140) / 5 debug("[NcidDisplayPhonebook] width: " + str(self.entriesWidth)) self.skin = """ <screen name="NcidDisplayPhonebook" position="center,center" size="%d,%d" title="Phonebook" > <eLabel position="0,0" size="%d,2" backgroundColor="#aaaaaa" /> <widget source="entries" render="Listbox" position="%d,%d" size="%d,%d" scrollbarMode="showOnDemand" transparent="1"> <convert type="TemplatedMultiContent"> {"template": [ MultiContentEntryText(pos = (%d,%d), size = (%d,%d), font=0, flags = RT_HALIGN_LEFT, text = 1), # index 0 is the name, index 1 is shortname MultiContentEntryText(pos = (%d,%d), size = (%d,%d), font=0, flags = RT_HALIGN_LEFT, text = 2), # index 2 is number ], "fonts": [gFont("Regular", %d)], "itemHeight": %d } </convert> </widget> <eLabel position="0,%d" size="%d,2" backgroundColor="#aaaaaa" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <widget name="key_red" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_green" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_yellow" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_blue" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> </screen>""" % ( # scaleH(90, 75), scaleV(100, 73), # position self.entriesWidth, self.height, # size self.entriesWidth, # eLabel width scaleH(40, 5), scaleV(20, 5), # entries position self.entriesWidth - scaleH(40, 5), self.height - scaleV(20, 5) - 5 - 5 - 40, # entries size 0, 0, fieldWidth, scaleH(24, 20), # name pos/size fieldWidth + 5, 0, numberFieldWidth, scaleH(24, 20), # dir pos/size fontSize, # fontsize fontHeight, # itemHeight self.height - 40 - 5, # eLabel position vertical self.entriesWidth, # eLabel width buttonGap, self.height - 40, "buttons/red.png", # ePixmap red 2 * buttonGap + 140, self.height - 40, "buttons/green.png", # ePixmap green 3 * buttonGap + 2 * 140, self.height - 40, "buttons/yellow.png", # ePixmap yellow 4 * buttonGap + 3 * 140, self.height - 40, "buttons/blue.png", # ePixmap blue buttonGap, self.height - 40, scaleV(22, 21), # widget red 2 * buttonGap + 140, self.height - 40, scaleV(22, 21), # widget green 3 * buttonGap + 2 * 140, self.height - 40, scaleV(22, 21), # widget yellow 4 * buttonGap + 3 * 140, self.height - 40, scaleV(22, 21), # widget blue ) # debug("[NcidDisplayCalls] skin: " + self.skin) Screen.__init__(self, session) NumericalTextInput.__init__(self) HelpableScreen.__init__(self) # TRANSLATORS: keep it short, this is a button self["key_red"] = Button(_("Delete")) # TRANSLATORS: keep it short, this is a button self["key_green"] = Button(_("New")) # TRANSLATORS: keep it short, this is a button self["key_yellow"] = Button(_("Edit")) # TRANSLATORS: keep it short, this is a button self["key_blue"] = Button(_("Search")) self["setupActions"] = ActionMap(["OkCancelActions", "ColorActions"], { "red": self.delete, "green": self.add, "yellow": self.edit, "blue": self.search, "cancel": self.exit, "ok": self.showEntry, }, -2) self["entries"] = List([]) debug("[NcidClientPhonebook] displayPhonebook init") self.help_window = None self.sortlist = [] self.onLayoutFinish.append(self.setWindowTitle) self.display()
def __init__(self, session): self.entriesWidth = DESKTOP_WIDTH * scaleH(75, 85) / 100 self.height = DESKTOP_HEIGHT * 0.75 numberFieldWidth = scaleH(220, 160) fieldWidth = self.entriesWidth - 5 - numberFieldWidth - 10 fontSize = scaleV(22, 18) fontHeight = scaleV(24, 20) buttonGap = (self.entriesWidth - 4 * 140) / 5 debug("[NcidDisplayPhonebook] width: " + str(self.entriesWidth)) self.skin = """ <screen name="NcidDisplayPhonebook" position="center,center" size="%d,%d" title="Phonebook" > <eLabel position="0,0" size="%d,2" backgroundColor="#aaaaaa" /> <widget source="entries" render="Listbox" position="%d,%d" size="%d,%d" scrollbarMode="showOnDemand" transparent="1"> <convert type="TemplatedMultiContent"> {"template": [ MultiContentEntryText(pos = (%d,%d), size = (%d,%d), font=0, flags = RT_HALIGN_LEFT, text = 1), # index 0 is the name, index 1 is shortname MultiContentEntryText(pos = (%d,%d), size = (%d,%d), font=0, flags = RT_HALIGN_LEFT, text = 2), # index 2 is number ], "fonts": [gFont("Regular", %d)], "itemHeight": %d } </convert> </widget> <eLabel position="0,%d" size="%d,2" backgroundColor="#aaaaaa" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="%s" transparent="1" alphatest="on" /> <widget name="key_red" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_green" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_yellow" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="key_blue" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> </screen>""" % ( # scaleH(90, 75), scaleV(100, 73), # position self.entriesWidth, self.height, # size self.entriesWidth, # eLabel width scaleH(40, 5), scaleV(20, 5), # entries position self.entriesWidth - scaleH(40, 5), self.height - scaleV(20, 5) - 5 - 5 - 40, # entries size 0, 0, fieldWidth, scaleH(24, 20), # name pos/size fieldWidth + 5, 0, numberFieldWidth, scaleH(24, 20), # dir pos/size fontSize, # fontsize fontHeight, # itemHeight self.height - 40 - 5, # eLabel position vertical self.entriesWidth, # eLabel width buttonGap, self.height - 40, "skin_default/buttons/red.png", # ePixmap red 2 * buttonGap + 140, self.height - 40, "skin_default/buttons/green.png", # ePixmap green 3 * buttonGap + 2 * 140, self.height - 40, "skin_default/buttons/yellow.png", # ePixmap yellow 4 * buttonGap + 3 * 140, self.height - 40, "skin_default/buttons/blue.png", # ePixmap blue buttonGap, self.height - 40, scaleV(22, 21), # widget red 2 * buttonGap + 140, self.height - 40, scaleV(22, 21), # widget green 3 * buttonGap + 2 * 140, self.height - 40, scaleV(22, 21), # widget yellow 4 * buttonGap + 3 * 140, self.height - 40, scaleV(22, 21), # widget blue ) # debug("[NcidDisplayCalls] skin: " + self.skin) Screen.__init__(self, session) NumericalTextInput.__init__(self) HelpableScreen.__init__(self) # TRANSLATORS: keep it short, this is a button self["key_red"] = Button(_("Delete")) # TRANSLATORS: keep it short, this is a button self["key_green"] = Button(_("New")) # TRANSLATORS: keep it short, this is a button self["key_yellow"] = Button(_("Edit")) # TRANSLATORS: keep it short, this is a button self["key_blue"] = Button(_("Search")) self["setupActions"] = ActionMap(["OkCancelActions", "ColorActions"], { "red": self.delete, "green": self.add, "yellow": self.edit, "blue": self.search, "cancel": self.exit, "ok": self.showEntry, }, -2) self["entries"] = List([]) debug("[NcidClientPhonebook] displayPhonebook init") self.help_window = None self.sortlist = [] self.onLayoutFinish.append(self.setWindowTitle) self.display()
class IPTVVirtualKeyBoardWithCaptcha(Screen): def __init__(self, session, title="", text="", additionalParams={}): winWidth = 590 self.skin = '''<screen position="center,center" size="%d,500" title="" > <widget name="captcha" position="%d,%d" size="%d,%d" zPosition="2" transparent="1" alphatest="on" /> <widget name="key_red" position="10,10" zPosition="2" size="%d,35" valign="center" halign="left" font="Regular;22" transparent="1" foregroundColor="red" /> <widget name="key_ok" position="10,10" zPosition="2" size="%d,35" valign="center" halign="center" font="Regular;22" transparent="1" foregroundColor="white" /> <widget name="key_green" position="10,10" zPosition="2" size="%d,35" valign="center" halign="right" font="Regular;22" transparent="1" foregroundColor="green" /> <ePixmap pixmap="%s" position="25,195" size="542,80" zPosition="-4" alphatest="on" /> <widget name="header" position="25,160" size="500,26" transparent="1" noWrap="1" font="Regular;20" valign="top"/> <widget name="text" position="25,200" size="536,34" transparent="1" noWrap="1" font="Regular;26" valign="center" halign="right" /> <widget name="list" position="25,250" size="550,225" selectionDisabled="1" transparent="1" /> </screen> ''' % ( winWidth, 10, 55, \ winWidth - 20, 100, \ winWidth-20, \ winWidth-20, \ winWidth-20, \ GetIconDir("vk/vkey_text.png")) Screen.__init__(self, session) self.keys_list = [] self.shiftkeys_list = [] self.shiftMode = additionalParams.get('shift_mode', False) self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(GetIconDir("vk/vkey_bg.png")) self.key_sel = LoadPixmap(GetIconDir("vk/vkey_sel.png")) self.key_backspace = LoadPixmap(GetIconDir("vk/vkey_backspace.png")) self.key_all = LoadPixmap(GetIconDir("vk/vkey_all.png")) self.key_clr = LoadPixmap(GetIconDir("vk/vkey_clr.png")) self.key_esc = LoadPixmap(GetIconDir("vk/vkey_esc.png")) self.key_ok = LoadPixmap(GetIconDir("vk/vkey_ok.png")) self.key_shift = LoadPixmap(GetIconDir("vk/vkey_shift.png")) self.key_shift_sel = LoadPixmap(GetIconDir("vk/vkey_shift_sel.png")) self.key_space = LoadPixmap(GetIconDir("vk/vkey_space.png")) self.key_left = LoadPixmap(GetIconDir("vk/vkey_left.png")) self.key_right = LoadPixmap(GetIconDir("vk/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["key_green"] = Label(_("Accept")) self["key_ok"] = Label(_("OK")) self["key_red"] = Label(_("Cancel")) self["header"] = Label(title) self["text"] = Input(text=text.decode("utf-8", 'ignore')) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.startText = text self.setLang(additionalParams) self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.captchaPath = additionalParams['captcha_path'] self['captcha'] = Cover2() self.onShown.append(self.loadCaptcha) def loadCaptcha(self): self.onShown.remove(self.loadCaptcha) self.setTitle(_('Virtual Keyboard')) self["text"].right() self["text"].currPos = len(self.startText) self["text"].right() try: self['captcha'].updateIcon(self.captchaPath) except Exception: printExc() def switchLang(self): pass def setLang(self, additionalParams): if 'keys_list' not in additionalParams: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"CLEAR" ], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] else: self.keys_list = additionalParams['keys_list'] if 'shiftkeys_list' not in additionalParams: 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT" ]] else: self.keys_list = additionalParams['shiftkeys_list'] if additionalParams.get('invert_letters_case', False): for keys_list in [self.keys_list, self.shiftkeys_list]: for row in range(len(keys_list)): for idx in range(len(keys_list[row])): if len(keys_list[row][idx]) != 1: continue upper = keys_list[row][idx].upper() if upper == keys_list[row][idx]: keys_list[row][idx] = keys_list[row][idx].lower() else: keys_list[row][idx] = upper self.max_key = 47 + len(self.keys_list[4]) def virtualKeyBoardEntryComponent(self, keys): key_bg_width = self.key_bg and self.key_bg.size().width() or 45 key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [(keys)] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=png)) else: width = key_bg_width res.append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=self.key_bg)) text.append( MultiContentEntryText(pos=(x, 0), size=(width, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.markSelectedKey() def markSelectedKey(self): if self.previousSelectedKey is not None: self.list[self.previousSelectedKey / 12] = self.list[self.previousSelectedKey / 12][:-1] width = self.key_sel.size().width() x = self.list[self.selectedKey / 12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self["list"].setList(self.list) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].setMarkedPos(-2) elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].insertChar(" ".encode("UTF-8"), self["text"].currPos, False, True) self["text"].innerright() self["text"].update() elif text == "OK": self.close(self["text"].getText().encode("UTF-8")) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].insertChar(text, self["text"].currPos, False, True) self["text"].innerright() self["text"].update() def ok(self): self.close(self["text"].getText()) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey % 12 self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr( getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
def __init__( self, session, text="", filename="", currDir=None, bookmarks=None, userMode=False, windowTitle=_("Select location"), minFree=None, autoAdd=False, editDir=False, inhibitDirs=None, inhibitMounts=None, ): if not inhibitDirs: inhibitDirs = [] if not inhibitMounts: inhibitMounts = [] Screen.__init__(self, session) NumericalTextInput.__init__(self, handleTimeout=False) HelpableScreen.__init__(self) self.setUseableChars(u"1234567890abcdefghijklmnopqrstuvwxyz") self.qs_timer = eTimer() self.qs_timer.callback.append(self.timeout) self.qs_timer_type = 0 self.curr_pos = -1 self.quickselect = "" self["text"] = Label(text) self["textbook"] = Label(_("Bookmarks")) self.text = text self.filename = filename self.minFree = minFree self.realBookmarks = bookmarks self.bookmarks = bookmarks and bookmarks.value[:] or [] self.userMode = userMode self.autoAdd = autoAdd self.editDir = editDir self.inhibitDirs = inhibitDirs self["filelist"] = FileList( currDir, showDirectories=True, showFiles=False, inhibitMounts=inhibitMounts, inhibitDirs=inhibitDirs ) self["booklist"] = MenuList(self.bookmarks) self["key_green"] = Button(_("OK")) self["key_yellow"] = Button(_("Rename")) self["key_blue"] = Button(_("Remove bookmark")) self["key_red"] = Button(_("Cancel")) self["green"] = Pixmap() self["yellow"] = Pixmap() self["blue"] = Pixmap() self["red"] = Pixmap() self["target"] = Label() if self.userMode: self.usermodeOn() class LocationBoxActionMap(HelpableActionMap): def __init__(self, parent, context, actions=None, prio=0): if not actions: actions = {} HelpableActionMap.__init__(self, parent, context, actions, prio) self.box = parent def action(self, contexts, action): self.box.timeout(force=True) return HelpableActionMap.action(self, contexts, action) self["WizardActions"] = LocationBoxActionMap( self, "WizardActions", {"ok": (self.ok, _("select")), "back": (self.cancel, _("Cancel"))}, -2 ) self["DirectionActions"] = LocationBoxActionMap( self, "DirectionActions", {"left": self.left, "right": self.right, "up": self.up, "down": self.down}, -2 ) self["ColorActions"] = LocationBoxActionMap( self, "ColorActions", {"red": self.cancel, "green": self.select, "yellow": self.changeName, "blue": self.addRemoveBookmark}, -2, ) self["EPGSelectActions"] = LocationBoxActionMap( self, "EPGSelectActions", { "prevService": (self.switchToBookList, _("switch to bookmarks")), "nextService": (self.switchToFileList, _("switch to filelist")), }, -2, ) self["MenuActions"] = LocationBoxActionMap(self, "MenuActions", {"menu": (self.showMenu, _("menu"))}, -2) self["NumberActions"] = NumberActionMap( ["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, ) self.onShown.extend( (boundFunction(self.setTitle, _("Select Location")), self.updateTarget, self.showHideRename) ) self.onLayoutFinish.append(self.switchToFileListOnStart) self.onClose.append(self.disableTimer)
class VirtualKeyBoard(Screen): def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_("Virtual keyboard")) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Save")) self["key_yellow"] = self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len( kwargs.get("text", "").decode("utf-8", 'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) def __onClose(self): self.sms.timer.stop() def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() def setLang(self): if self.lang == 'ar_AE': 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"ض", u"ص", u"ث", u"ق", u"ف", u"غ", u"ع", u"ه", u"خ", u"ح", u"ج", u"د" ], [ u"ش", u"س", u"ي", u"ب", u"ل", u"ا", u"ت", u"ن", u"م", u"ك", u"ط", u"#" ], [ u"ئ", u"ء", u"ؤ", u"ر", u"لا", u"ى", u"ة", u"و", u"ز", "ظ", u"ذ", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"+", u"-", u"*", u"/", u".", u",", u"@", u"%", u"&", u"OK" ]] self.shiftkeys_list = [[ u"EXIT", u"!", u'"', u"§", u"$", u"^", u"<", u">", u"(", u")", u"=", u"BACKSPACE" ], [ u"َ", u"ً", u"ُ", u"ٌ", u"لإ", u"إ", u"‘", u"÷", u"×", u"؛", u"<", u">" ], [ u"ِ", u"ٍ", u"]", u"[", u"لأ", u"أ", u"ـ", u"،", u"/", u":", u"~", u"'" ], [ u"ْ", u"}", u"{", u"لآ", u"آ", u"’", u",", u".", u"؟", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"?", u"\\", u"=", u"ّ", u"~", u"OK" ]] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*" ], [ 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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK" ]] self.nextLang = 'de_DE' elif 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" ], [ 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"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ß", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ 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"?", u"\\", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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"=", u"ς", u"ε", u"ρ", u"τ", u"υ", u"θ", u"ι", u"ο", u"π", u"[", u"]" ], [ u"α", u"σ", u"δ", u"φ", u"γ", u"η", u"ξ", u"κ", u"λ", u";", u"'", u"-" ], [ u"\\", u"ζ", u"χ", u"ψ", u"ω", u"β", u"ν", u"μ", u",", ".", u"/", u"ALL" ], [ u"SHIFT", u"SPACE", u"ά", u"έ", u"ή", u"ί", u"ό", u"ύ", u"ώ", u"ϊ", u"ϋ", u"OK" ]] self.shiftkeys_list = [[ u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"BACKSPACE" ], [ u"+", u"€", u"Ε", u"Ρ", u"Τ", u"Υ", u"Θ", u"Ι", u"Ο", u"Π", u"{", u"}" ], [ u"Α", u"Σ", u"Δ", u"Φ", u"Γ", u"Η", u"Ξ", u"Κ", u"Λ", u":", u'"', u"_" ], [ u"|", u"Ζ", u"Χ", u"Ψ", u"Ω", u"Β", u"Ν", u"Μ", u"<", u">", u"?", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ά", u"Έ", u"Ή", u"Ί", u"Ό", u"Ύ", u"Ώ", u"Ϊ", u"Ϋ", u"OK" ]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*" ], [ 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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK" ]] self.nextLang = 'fa_IR' elif self.lang == 'fa_IR': self.keys_list = [[ u"EXIT", u"\u06F1", u"\u06F2", u"\u06F3", u"\u06F4", u"\u06F5", u"\u06F6", u"\u06F7", u"\u06F8", u"\u06F9", u"\u06F0", u"BACKSPACE" ], [ u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"-", u"\u062C" ], [ u"\u0634", u"\u0633", u"\u06CC", u"\u0628", u"\u0644", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u06A9", u"\u06AF", u"\u067E" ], [ u"<", u"\u0638", u"\u0637", u"\u0632", u"\u0631", u"\u0630", u"\u062F", u"\u0626", u"\u0648", ".", u"/", u"ALL" ], [ u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*" ]] self.shiftkeys_list = [ [ u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"(", u")", u"=", u"BACKSPACE" ], [ u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u060C", u"\u061B", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"+", u"\u0686" ], [ u"\u0634", u"\u0633", u"\u06CC", u"\u0628", u"\u06C0", u"\u0622", u"\u062A", u"\u0646", u"\u0645", u"?", u'"', u"|" ], [ u">", u"\u0629", u"\u064A", u"\u0698", u"\u0624", u"\u0625", u"\u0623", u"\u0621", u";", u":", u"\u061F", u"CLEAR" ], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~"] ] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ 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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'fr_FR' elif self.lang == 'fr_FR': 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"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"é", u"è" ], [ u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"ê", u"ë" ], [ u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"=", u"ALL" ], [ u"SHIFT", u"SPACE", u"ù", u"â", u"ï", u"ô", u"ç", u"#", u"-", u"OK", u"LEFT", u"RIGHT" ]] self.shiftkeys_list = [[ u"EXIT", u"&", u'@', u'"', u"€", u"§", u"!", u"ç", u"(", u")", u"_", u"BACKSPACE" ], [ u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"É", u"È" ], [ u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"Ê", u"Ë" ], [ u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"+", u"~", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ù", u"Â", u"Ï", u"Ô", u"°", u"/", u"\\", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'lv_LV' elif self.lang == 'lv_LV': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"ž", u"ALL" ], [ u"SHIFT", u"SPACE", u"ā", u"č", u"ē", u"ģ", u"ī", u"ķ", u"ļ", u"ņ", u"LEFT", u"RIGHT" ]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"#", u"?", u"Ž", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ā", u"Č", u"Ē", u"Ģ", u"Ī", u"Ķ", u"Ļ", u"Ņ", u"LEFT", u"RIGHT" ]] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL" ], [ u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK" ]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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"а", u"б", u"в", u"г", u"д", u"е", u"ё", u"ж", u"з", u"и", u"й", u"+" ], [ u"к", u"л", u"м", u"н", u"о", u"п", u"р", u"с", u"т", u"у", u"ф", u"#" ], [ u"<", u"х", u"ц", u"ч", u"ш", u"щ", u"ъ", u"ы", u",", u".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ь", u"э", u"ю", u"я", u"OK", u"LEFT", u"RIGHT" ]] self.shiftkeys_list = [[ u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE" ], [ u"А", u"Б", u"В", u"Г", u"Д", u"Е", u"Ё", u"Ж", u"З", u"И", u"Й", u"*" ], [ u"К", u"Л", u"М", u"Н", u"О", u"П", u"Р", u"С", u"Т", u"У", u"Ф", u"'" ], [ u">", u"Х", u"Ц", u"Ч", u"Ш", u"Щ", u"Ъ", u"Ы", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Э", u"Ю", u"Я", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'sk_SK' elif self.lang == 'sk_SK': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'" ], [ u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK" ]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ 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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'th_TH' elif self.lang == 'th_TH': self.keys_list = [ [ u"EXIT", "\xe0\xb9\x85", "\xe0\xb8\xa0", "\xe0\xb8\x96", "\xe0\xb8\xb8", "\xe0\xb8\xb6", "\xe0\xb8\x84", "\xe0\xb8\x95", "\xe0\xb8\x88", "\xe0\xb8\x82", "\xe0\xb8\x8a", u"BACKSPACE" ], [ "\xe0\xb9\x86", "\xe0\xb9\x84", "\xe0\xb8\xb3", "\xe0\xb8\x9e", "\xe0\xb8\xb0", "\xe0\xb8\xb1", "\xe0\xb8\xb5", "\xe0\xb8\xa3", "\xe0\xb8\x99", "\xe0\xb8\xa2", "\xe0\xb8\x9a", "\xe0\xb8\xa5" ], [ "\xe0\xb8\x9f", "\xe0\xb8\xab", "\xe0\xb8\x81", "\xe0\xb8\x94", "\xe0\xb9\x80", "\xe0\xb9\x89", "\xe0\xb9\x88", "\xe0\xb8\xb2", "\xe0\xb8\xaa", "\xe0\xb8\xa7", "\xe0\xb8\x87", "\xe0\xb8\x83" ], [ "\xe0\xb8\x9c", "\xe0\xb8\x9b", "\xe0\xb9\x81", "\xe0\xb8\xad", "\xe0\xb8\xb4", "\xe0\xb8\xb7", "\xe0\xb8\x97", "\xe0\xb8\xa1", "\xe0\xb9\x83", "\xe0\xb8\x9d", "", u"ALL" ], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"] ] self.shiftkeys_list = [ [ u"EXIT", "\xe0\xb9\x91", "\xe0\xb9\x92", "\xe0\xb9\x93", "\xe0\xb9\x94", "\xe0\xb8\xb9", "\xe0\xb9\x95", "\xe0\xb9\x96", "\xe0\xb9\x97", "\xe0\xb9\x98", "\xe0\xb9\x99", u"BACKSPACE" ], [ "\xe0\xb9\x90", "", "\xe0\xb8\x8e", "\xe0\xb8\x91", "\xe0\xb8\x98", "\xe0\xb9\x8d", "\xe0\xb9\x8a", "\xe0\xb8\x93", "\xe0\xb8\xaf", "\xe0\xb8\x8d", "\xe0\xb8\x90", "\xe0\xb8\x85" ], [ "\xe0\xb8\xa4", "\xe0\xb8\x86", "\xe0\xb8\x8f", "\xe0\xb9\x82", "\xe0\xb8\x8c", "\xe0\xb9\x87", "\xe0\xb9\x8b", "\xe0\xb8\xa9", "\xe0\xb8\xa8", "\xe0\xb8\x8b", "", "\xe0\xb8\xbf" ], [ "", "", "\xe0\xb8\x89", "\xe0\xb8\xae", "\xe0\xb8\xba", "\xe0\xb9\x8c", "", "\xe0\xb8\x92", "\xe0\xb8\xac", "\xe0\xb8\xa6", "", u"CLEAR" ], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"] ] self.nextLang = 'en_EN' else: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL" ], [ u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*" ]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~" ]] self.lang = 'en_EN' self.nextLang = 'ar_AE' self["country"].setText(self.lang) self["key_yellow"].setText(self.lang) self.max_key = 47 + len(self.keys_list[4]) def buildVirtualKeyBoard(self, selectedKey=0): list = [] if self.shiftMode: self.k_list = self.shiftkeys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append( VirtualKeyBoardEntryComponent(keys, selectedKey, True)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1, True)) selectedKey -= 12 else: self.k_list = self.keys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append( VirtualKeyBoardEntryComponent(keys, selectedKey)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1)) selectedKey -= 12 self["list"].setList(list) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard(self.selectedKey) def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].markAll() elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].char(" ".encode("UTF-8")) elif text == "OK": self.close(self["text"].getText()) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].char(text) def ok(self): self.close(self["text"].getText()) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey -= 1 if self.selectedKey == -1: self.selectedKey = 11 elif self.selectedKey == 11: self.selectedKey = 23 elif self.selectedKey == 23: self.selectedKey = 35 elif self.selectedKey == 35: self.selectedKey = 47 elif self.selectedKey == 47: self.selectedKey = self.max_key self.showActiveKey() def right(self): self.smsChar = None self.selectedKey += 1 if self.selectedKey == 12: self.selectedKey = 0 elif self.selectedKey == 24: self.selectedKey = 12 elif self.selectedKey == 36: self.selectedKey = 24 elif self.selectedKey == 48: self.selectedKey = 36 elif self.selectedKey > self.max_key: self.selectedKey = 48 self.showActiveKey() def up(self): self.smsChar = None self.selectedKey -= 12 if (self.selectedKey < 0) and (self.selectedKey > (self.max_key - 60)): self.selectedKey += 48 elif self.selectedKey < 0: self.selectedKey += 60 self.showActiveKey() def down(self): self.smsChar = None self.selectedKey += 12 if (self.selectedKey > self.max_key) and (self.selectedKey > 59): self.selectedKey -= 60 elif self.selectedKey > self.max_key: self.selectedKey -= 48 self.showActiveKey() def showActiveKey(self): self.buildVirtualKeyBoard(self.selectedKey) def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) print "SMS", number, self.smsChar self.selectAsciiKey(self.smsChar) def smsOK(self): print "SMS ok", self.smsChar if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr( getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.shiftMode = (keyslist is self.shiftkeys_list) self.selectedKey = selkey self.showActiveKey() return True selkey += 1 return False
def __init__(self, session, text = "", filename = "", currDir = None, bookmarks = None, userMode = False, windowTitle = "Select location", minFree = None, autoAdd = False, editDir = False, inhibitDirs = [], inhibitMounts = []): # Init parents Screen.__init__(self, session) NumericalTextInput.__init__(self, handleTimeout = False) HelpableScreen.__init__(self) # Set useable chars self.setUseableChars(u'1234567890abcdefghijklmnopqrstuvwxyz') # Quickselect Timer self.qs_timer = eTimer() self.qs_timer.callback.append(self.timeout) self.qs_timer_type = 0 # Initialize Quickselect self.curr_pos = -1 self.quickselect = "" # Set Text self["text"] = Label(text) self["textbook"] = Label(_("Bookmarks")) # Save parameters locally self.text = text self.filename = filename self.minFree = minFree self.realBookmarks = bookmarks self.bookmarks = bookmarks and bookmarks.value[:] or [] self.userMode = userMode self.autoAdd = autoAdd self.editDir = editDir self.inhibitDirs = inhibitDirs # Initialize FileList self["filelist"] = FileList(currDir, showDirectories = True, showFiles = False, inhibitMounts = inhibitMounts, inhibitDirs = inhibitDirs) # Initialize BookList self["booklist"] = MenuList(self.bookmarks) # Buttons self["key_green"] = Button(_("OK")) self["key_yellow"] = Button(_("Rename")) self["key_blue"] = Button(_("Remove bookmark")) self["key_red"] = Button(_("Cancel")) # Background for Buttons self["green"] = Pixmap() self["yellow"] = Pixmap() self["blue"] = Pixmap() self["red"] = Pixmap() # Initialize Target self["target"] = Label() if self.userMode: self.usermodeOn() # Custom Action Handler class LocationBoxActionMap(HelpableActionMap): def __init__(self, parent, context, actions = { }, prio=0): HelpableActionMap.__init__(self, parent, context, actions, prio) self.box = parent def action(self, contexts, action): # Reset Quickselect self.box.timeout(force = True) return HelpableActionMap.action(self, contexts, action) # Actions that will reset quickselect self["WizardActions"] = LocationBoxActionMap(self, "WizardActions", { "left": self.left, "right": self.right, "up": self.up, "down": self.down, "ok": (self.ok, _("select")), "back": (self.cancel, _("Cancel")), }, -2) self["ColorActions"] = LocationBoxActionMap(self, "ColorActions", { "red": self.cancel, "green": self.select, "yellow": self.changeName, "blue": self.addRemoveBookmark, }, -2) self["EPGSelectActions"] = LocationBoxActionMap(self, "EPGSelectActions", { "prevBouquet": (self.switchToBookList, _("switch to bookmarks")), "nextBouquet": (self.switchToFileList, _("switch to filelist")), }, -2) self["MenuActions"] = LocationBoxActionMap(self, "MenuActions", { "menu": (self.showMenu, _("menu")), }, -2) # Actions used by quickselect self["NumberActions"] = NumberActionMap(["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }) # Run some functions when shown self.onShown.extend(( boundFunction(self.setTitle, _(windowTitle)), self.updateTarget, self.showHideRename, )) self.onLayoutFinish.append(self.switchToFileListOnStart) # Make sure we remove our callback self.onClose.append(self.disableTimer)
def __init__(self, session, title="", text="", additionalParams={}): winWidth = 590 self.skin = '''<screen position="center,center" size="%d,500" title="" > <widget name="captcha" position="%d,%d" size="%d,%d" zPosition="2" transparent="1" alphatest="on" /> <widget name="key_red" position="10,10" zPosition="2" size="%d,35" valign="center" halign="left" font="Regular;22" transparent="1" foregroundColor="red" /> <widget name="key_ok" position="10,10" zPosition="2" size="%d,35" valign="center" halign="center" font="Regular;22" transparent="1" foregroundColor="white" /> <widget name="key_green" position="10,10" zPosition="2" size="%d,35" valign="center" halign="right" font="Regular;22" transparent="1" foregroundColor="green" /> <ePixmap pixmap="%s" position="25,195" size="542,80" zPosition="-4" alphatest="on" /> <widget name="header" position="25,160" size="500,26" transparent="1" noWrap="1" font="Regular;20" valign="top"/> <widget name="text" position="25,200" size="536,34" transparent="1" noWrap="1" font="Regular;26" valign="center" halign="right" /> <widget name="list" position="25,250" size="550,225" selectionDisabled="1" transparent="1" /> </screen> ''' % ( winWidth, 10, 55, \ winWidth - 20, 100, \ winWidth-20, \ winWidth-20, \ winWidth-20, \ GetIconDir("vk/vkey_text.png")) Screen.__init__(self, session) self.keys_list = [] self.shiftkeys_list = [] self.shiftMode = additionalParams.get('shift_mode', False) self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(GetIconDir("vk/vkey_bg.png")) self.key_sel = LoadPixmap(GetIconDir("vk/vkey_sel.png")) self.key_backspace = LoadPixmap(GetIconDir("vk/vkey_backspace.png")) self.key_all = LoadPixmap(GetIconDir("vk/vkey_all.png")) self.key_clr = LoadPixmap(GetIconDir("vk/vkey_clr.png")) self.key_esc = LoadPixmap(GetIconDir("vk/vkey_esc.png")) self.key_ok = LoadPixmap(GetIconDir("vk/vkey_ok.png")) self.key_shift = LoadPixmap(GetIconDir("vk/vkey_shift.png")) self.key_shift_sel = LoadPixmap(GetIconDir("vk/vkey_shift_sel.png")) self.key_space = LoadPixmap(GetIconDir("vk/vkey_space.png")) self.key_left = LoadPixmap(GetIconDir("vk/vkey_left.png")) self.key_right = LoadPixmap(GetIconDir("vk/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["key_green"] = Label(_("Accept")) self["key_ok"] = Label(_("OK")) self["key_red"] = Label(_("Cancel")) self["header"] = Label(title) self["text"] = Input(text=text.decode("utf-8", 'ignore')) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.startText = text self.setLang(additionalParams) self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.captchaPath = additionalParams['captcha_path'] self['captcha'] = Cover2() self.onShown.append(self.loadCaptcha)
class VirtualKeyBoard(Screen): def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_(title)) self.keys_list = [] self.text = "" self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_backspace.png")) self.key_all = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_all.png")) self.key_clr = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_clr.png")) self.key_esc = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_esc.png")) self.key_ok = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_ok.png")) self.key_shift = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_shift.png")) self.key_shift_sel = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_shift_sel.png")) self.key_space = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_space.png")) self.key_left = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename( SCOPE_ACTIVE_SKIN, "skin_default/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["country"] = Label(_("Keyboard language")) self["header"] = Label(title) self["text"] = Input(currPos=len( kwargs.get("text", "").decode("utf-8", 'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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" ], [ 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"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ß", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ 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"?", u"\\", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'th_TH' elif self.lang == 'th_TH': self.keys_list = [ [ u'EXIT', '\xe0\xb9\x85', '\xe0\xb8\xa0', '\xe0\xb8\x96', '\xe0\xb8\xb8', '\xe0\xb8\xb6', '\xe0\xb8\x84', '\xe0\xb8\x95', '\xe0\xb8\x88', '\xe0\xb8\x82', '\xe0\xb8\x8a', u'BACKSPACE' ], [ '\xe0\xb9\x86', '\xe0\xb9\x84', '\xe0\xb8\xb3', '\xe0\xb8\x9e', '\xe0\xb8\xb0', '\xe0\xb8\xb1', '\xe0\xb8\xb5', '\xe0\xb8\xa3', '\xe0\xb8\x99', '\xe0\xb8\xa2', '\xe0\xb8\x9a', '\xe0\xb8\xa5' ], [ '\xe0\xb8\x9f', '\xe0\xb8\xab', '\xe0\xb8\x81', '\xe0\xb8\x94', '\xe0\xb9\x80', '\xe0\xb9\x89', '\xe0\xb9\x88', '\xe0\xb8\xb2', '\xe0\xb8\xaa', '\xe0\xb8\xa7', '\xe0\xb8\x87' ], [ '\xe0\xb8\x9c', '\xe0\xb8\x9b', '\xe0\xb9\x81', '\xe0\xb8\xad', '\xe0\xb8\xb4', '\xe0\xb8\xb7', '\xe0\xb8\x97', '\xe0\xb8\xa1', '\xe0\xb9\x83', '\xe0\xb8\x9d' ], [u'SHIFT', u'SPACE', u'OK'] ] self.shiftkeys_list = [[ 'EXIT', '\xe0\xb9\x91', '\xe0\xb9\x92', '\xe0\xb9\x93', '\xe0\xb9\x94', '\xe0\xb8\xb9', '\xe0\xb8\xbf', '\xe0\xb9\x95', '\xe0\xb9\x96', '\xe0\xb9\x97', '\xe0\xb9\x98', '\xe0\xb9\x99', u'BACKSPACE' ], [ '\xe0\xb9\x90', '', '\xe0\xb8\x8e', '\xe0\xb8\x91', '\xe0\xb8\x98', '\xe0\xb9\x8d', '\xe0\xb9\x8a', '\xe0\xb8\x93', '\xe0\xb8\xaf', '\xe0\xb8\x8d', '\xe0\xb8\x90' ], [ '\xe0\xb8\xa4', '\xe0\xb8\x86', '\xe0\xb8\x8f', '\xe0\xb9\x82', '\xe0\xb8\x8c', '\xe0\xb9\x87', '\xe0\xb9\x8b', '\xe0\xb8\xa9', '\xe0\xb8\xa8', '\xe0\xb8\x8b' ], [ '', '', '\xe0\xb8\x89', '\xe0\xb8\xae', '\xe0\xb8\xba', '\xe0\xb9\x8c', '', '\xe0\xb8\x92', '\xe0\xb8\xac', '\xe0\xb8\xa6', u'CLEAR' ], [u'SHIFT', u'SPACE', u'OK']] self.nextLang = 'en_EN' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*" ], [ 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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK" ]] self.nextLang = 'en_EN' elif self.lang == 'fi_FI': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ 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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'en_EN' elif self.lang == 'ru_RU': 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"а", u"б", u"в", u"г", u"д", u"е", u"ё", u"ж", u"з", u"и", u"й", u"+" ], [ u"к", u"л", u"м", u"н", u"о", u"п", u"р", u"с", u"т", u"у", u"ф", u"#" ], [ u"<", u"х", u"ц", u"ч", u"ш", u"щ", u"ъ", u"ы", u",", u".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ь", u"э", u"ю", u"я", u"OK", u"LEFT", u"RIGHT" ]] self.shiftkeys_list = [[ u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE" ], [ u"А", u"Б", u"В", u"Г", u"Д", u"Е", u"Ё", u"Ж", u"З", u"И", u"Й", u"*" ], [ u"К", u"Л", u"М", u"Н", u"О", u"П", u"Р", u"С", u"Т", u"У", u"Ф", u"'" ], [ u">", u"Х", u"Ц", u"Ч", u"Ш", u"Щ", u"Ъ", u"Ы", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Э", u"Ю", u"Я", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'en_EN' elif self.lang == 'sv_SE': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ 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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT" ]] self.nextLang = 'en_EN' elif self.lang == 'sk_SK': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK", u"LEFT", u"RIGHT" ]] 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"*" ], [ u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'" ], [ u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK" ]] self.nextLang = 'en_EN' elif self.lang == 'cs_CZ': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL" ], [ u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*" ], [ 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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK" ]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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"=", u"ς", u"ε", u"ρ", u"τ", u"υ", u"θ", u"ι", u"ο", u"π", u"[", u"]" ], [ u"α", u"σ", u"δ", u"φ", u"γ", u"η", u"ξ", u"κ", u"λ", u";", u"'", u"-" ], [ u"\\", u"ζ", u"χ", u"ψ", u"ω", u"β", u"ν", u"μ", u",", ".", u"/", u"ALL" ], [ u"SHIFT", u"SPACE", u"ά", u"έ", u"ή", u"ί", u"ό", u"ύ", u"ώ", u"ϊ", u"ϋ", u"OK" ]] self.shiftkeys_list = [[ u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"BACKSPACE" ], [ u"+", u"€", u"Ε", u"Ρ", u"Τ", u"Υ", u"Θ", u"Ι", u"Ο", u"Π", u"{", u"}" ], [ u"Α", u"Σ", u"Δ", u"Φ", u"Γ", u"Η", u"Ξ", u"Κ", u"Λ", u":", u'"', u"_" ], [ u"|", u"Ζ", u"Χ", u"Ψ", u"Ω", u"Β", u"Ν", u"Μ", u"<", u">", u"?", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ά", u"Έ", u"Ή", u"Ί", u"Ό", u"Ύ", u"Ώ", u"Ϊ", u"Ϋ", u"OK" ]] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL" ], [ u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK" ]] self.nextLang = 'en_EN' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK" ]] self.nextLang = 'en_EN' elif self.lang == 'tr_TR': 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"f", u"g", u"ğ", u"i", u"o", u"d", u"r", u"n", u"h", u"p", u"q", u"w" ], [ u"u", u"i", u"e", u"a", u"ü", u"t", u"k", u"m", u"l", u"y", u"ş", u"-" ], [ u"j", u"ö", u"v", u"c", u"ç", u"z", u"s", u"b", u"x", u",", ".", u"CLEAR" ], [u"SHIFT", u"SPACE", u"+", u"OK"]] self.shiftkeys_list = [[ u"EXIT", u"*", u'"', u"^", u"$", u"%", u"'", u"(", u")", u"=", u"?", u"BACKSPACE" ], [ u"F", u"G", u"Ğ", u"I", u"O", u"D", u"R", u"N", u"H", u"P", u"Q", u"W" ], [ u"U", u"İ", u"E", u"A", u"Ü", u"T", u"K", u"M", u"L", u"Ş", u"|", u"X" ], [ u"J", u"Ö", u"V", u"C", u"Ç", u"Z", u"S", u"B", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u",", u";", u":", u"OK" ]] self.nextLang = 'en_EN' else: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL" ], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT" ]] self.lang = 'en_EN' self.nextLang = language.getLanguage() self["country"].setText( self.lang + (_(" press Yellow to change Keyboard language"))) self.max_key = 47 + len(self.keys_list[4]) def virtualKeyBoardEntryComponent(self, keys): key_bg_width = self.key_bg and self.key_bg.size().width() or 45 key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [keys] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=png)) else: width = key_bg_width res.append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=self.key_bg)) text.append( MultiContentEntryText(pos=(x, 0), size=(width, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.markSelectedKey() def markSelectedKey(self): if self.previousSelectedKey is not None: self.list[self.previousSelectedKey / 12] = self.list[self.previousSelectedKey / 12][:-1] width = self.key_sel.size().width() x = self.list[self.selectedKey / 12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self["list"].setList(self.list) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].markAll() elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].char(" ".encode("UTF-8")) elif text == "OK": self.close(self["text"].getText().encode("UTF-8")) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].char(text) def ok(self): self.close(self["text"].getText().encode("UTF-8")) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey %= 12 self.markSelectedKey() def keyNumberGlobal(self, number): if number == 1: self.text += "1" self["text"].setText(self.text.encode("utf-8")) elif number == 2: self.text += "2" self["text"].setText(self.text.encode("utf-8")) elif number == 3: self.text += "3" self["text"].setText(self.text.encode("utf-8")) elif number == 4: self.text += "4" self["text"].setText(self.text.encode("utf-8")) elif number == 5: self.text += "5" self["text"].setText(self.text.encode("utf-8")) elif number == 6: self.text += "6" self["text"].setText(self.text.encode("utf-8")) elif number == 7: self.text += "7" self["text"].setText(self.text.encode("utf-8")) elif number == 8: self.text += "8" self["text"].setText(self.text.encode("utf-8")) elif number == 9: self.text += "9" self["text"].setText(self.text.encode("utf-8")) elif number == 0: self.text += "0" self["text"].setText(self.text.encode("utf-8")) else: self.smsChar = self.sms.getKey(number) print "SMS", number, self.smsChar self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): #self.smsChar = None #if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): #self.okClicked() pass def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
class ChannelSelectionBase(Screen): def __init__(self, session): Screen.__init__(self, session) self["key_red"] = Button(_("All")) self["key_green"] = Button(_("Satellites")) self["key_yellow"] = Button(_("Provider")) self["key_blue"] = Button(_("Favourites")) #+++> TDT self["boquet"] = Label(_("Channel Selection")) #<+++ TDT self["list"] = ServiceList() self.servicelist = self["list"] self.numericalTextInput = NumericalTextInput() self.numericalTextInput.setUseableChars(u'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ') self.servicePathTV = [ ] self.servicePathRadio = [ ] self.servicePath = [ ] self.mode = MODE_TV self.pathChangeDisabled = False self.bouquetNumOffsetCache = { } self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"], { "showFavourites": self.showFavourites, "showAllServices": self.showAllServices, "showProviders": self.showProviders, "showSatellites": self.showSatellites, "nextBouquet": self.nextBouquet, "prevBouquet": self.prevBouquet, "nextMarker": self.nextMarker, "prevMarker": self.prevMarker, "gotAsciiCode": self.keyAsciiCode, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumber0 }) self.recallBouquetMode() def getBouquetNumOffset(self, bouquet): if not config.usage.multibouquet.value: return 0 str = bouquet.toString() offsetCount = 0 if not self.bouquetNumOffsetCache.has_key(str): serviceHandler = eServiceCenter.getInstance() bouquetlist = serviceHandler.list(self.bouquet_root) if not bouquetlist is None: while True: bouquetIterator = bouquetlist.getNext() if not bouquetIterator.valid(): #end of list break self.bouquetNumOffsetCache[bouquetIterator.toString()]=offsetCount if not (bouquetIterator.flags & eServiceReference.isDirectory): continue servicelist = serviceHandler.list(bouquetIterator) if not servicelist is None: while True: serviceIterator = servicelist.getNext() if not serviceIterator.valid(): #check if end of list break playable = not (serviceIterator.flags & (eServiceReference.isDirectory|eServiceReference.isMarker)) if playable: offsetCount += 1 return self.bouquetNumOffsetCache.get(str, offsetCount) def recallBouquetMode(self): if self.mode == MODE_TV: self.service_types = service_types_tv if config.usage.multibouquet.value: self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types) else: self.service_types = service_types_radio if config.usage.multibouquet.value: self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.radio" ORDER BY bouquet'%(self.service_types) self.bouquet_root = eServiceReference(self.bouquet_rootstr) def setTvMode(self): self.mode = MODE_TV self.servicePath = self.servicePathTV self.recallBouquetMode() title = self.instance.getTitle() pos = title.find(" (") if pos != -1: title = title[:pos] title += " (TV)" self.setTitle(title) def setRadioMode(self): self.mode = MODE_RADIO self.servicePath = self.servicePathRadio self.recallBouquetMode() title = self.instance.getTitle() pos = title.find(" (") if pos != -1: title = title[:pos] title += " (Radio)" self.setTitle(title) def setRoot(self, root, justSet=False): path = root.getPath() inBouquetRootList = path.find('FROM BOUQUET "bouquets.') != -1 #FIXME HACK pos = path.find('FROM BOUQUET') isBouquet = (pos != -1) and (root.flags & eServiceReference.isDirectory) if not inBouquetRootList and isBouquet: self.servicelist.setMode(ServiceList.MODE_FAVOURITES) self.servicelist.setNumberOffset(self.getBouquetNumOffset(root)) else: self.servicelist.setMode(ServiceList.MODE_NORMAL) self.servicelist.setRoot(root, justSet) self.buildTitleString() def removeModeStr(self, str): if self.mode == MODE_TV: pos = str.find(' (TV)') else: pos = str.find(' (Radio)') if pos != -1: return str[:pos] return str def getServiceName(self, ref): str = self.removeModeStr(ServiceReference(ref).getServiceName()) if not str: pathstr = ref.getPath() if 'FROM PROVIDERS' in pathstr: return _("Provider") if 'FROM SATELLITES' in pathstr: return _("Satellites") if ') ORDER BY name' in pathstr: return _("All") return str def buildTitleString(self): titleStr = self.instance.getTitle() pos = titleStr.find(']') if pos == -1: pos = titleStr.find(')') if pos != -1: titleStr = titleStr[:pos+1] Len = len(self.servicePath) if Len > 0: base_ref = self.servicePath[0] if Len > 1: end_ref = self.servicePath[Len-1] else: end_ref = None nameStr = self.getServiceName(base_ref) titleStr += ' ' + nameStr #+++> TDT self["boquet"].setText("Channel Selection") #<+++ TDT if end_ref is not None: if Len > 2: titleStr += '/../' else: titleStr += '/' nameStr = self.getServiceName(end_ref) titleStr += nameStr #+++> TDT self["boquet"].setText(nameStr) #<+++ TDT self.setTitle(titleStr) def moveUp(self): self.servicelist.moveUp() def moveDown(self): self.servicelist.moveDown() def clearPath(self): del self.servicePath[:] def enterPath(self, ref, justSet=False): self.servicePath.append(ref) self.setRoot(ref, justSet) def pathUp(self, justSet=False): prev = self.servicePath.pop() if self.servicePath: current = self.servicePath[-1] self.setRoot(current, justSet) if not justSet: self.setCurrentSelection(prev) return prev def isBasePathEqual(self, ref): if len(self.servicePath) > 1 and self.servicePath[0] == ref: return True return False def isPrevPathEqual(self, ref): length = len(self.servicePath) if length > 1 and self.servicePath[length-2] == ref: return True return False def preEnterPath(self, refstr): return False def showAllServices(self): if not self.pathChangeDisabled: refstr = '%s ORDER BY name'%(self.service_types) if not self.preEnterPath(refstr): ref = eServiceReference(refstr) currentRoot = self.getRoot() if currentRoot is None or currentRoot != ref: self.clearPath() self.enterPath(ref) def showSatellites(self): if not self.pathChangeDisabled: refstr = '%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types) if not self.preEnterPath(refstr): ref = eServiceReference(refstr) justSet=False prev = None if self.isBasePathEqual(ref): if self.isPrevPathEqual(ref): justSet=True prev = self.pathUp(justSet) else: currentRoot = self.getRoot() if currentRoot is None or currentRoot != ref: justSet=True self.clearPath() self.enterPath(ref, True) if justSet: serviceHandler = eServiceCenter.getInstance() servicelist = serviceHandler.list(ref) if not servicelist is None: while True: service = servicelist.getNext() if not service.valid(): #check if end of list break unsigned_orbpos = service.getUnsignedData(4) >> 16 orbpos = service.getData(4) >> 16 if orbpos < 0: orbpos += 3600 if service.getPath().find("FROM PROVIDER") != -1: service_type = _("Providers") elif service.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1: service_type = _("New") else: service_type = _("Services") try: # why we need this cast? service_name = str(nimmanager.getSatDescription(orbpos)) except: if unsigned_orbpos == 0xFFFF: #Cable service_name = _("Cable") elif unsigned_orbpos == 0xEEEE: #Terrestrial service_name = _("Terrestrial") else: if orbpos > 1800: # west orbpos = 3600 - orbpos h = _("W") else: h = _("E") service_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10) service.setName("%s - %s" % (service_name, service_type)) self.servicelist.addService(service) cur_ref = self.session.nav.getCurrentlyPlayingServiceReference() if cur_ref: pos = self.service_types.rfind(':') refstr = '%s (channelID == %08x%04x%04x) && %s ORDER BY name' %(self.service_types[:pos+1], cur_ref.getUnsignedData(4), # NAMESPACE cur_ref.getUnsignedData(2), # TSID cur_ref.getUnsignedData(3), # ONID self.service_types[pos+1:]) ref = eServiceReference(refstr) ref.setName(_("Current Transponder")) self.servicelist.addService(ref) self.servicelist.finishFill() if prev is not None: self.setCurrentSelection(prev) def showProviders(self): if not self.pathChangeDisabled: refstr = '%s FROM PROVIDERS ORDER BY name'%(self.service_types) if not self.preEnterPath(refstr): ref = eServiceReference(refstr) if self.isBasePathEqual(ref): self.pathUp() else: currentRoot = self.getRoot() if currentRoot is None or currentRoot != ref: self.clearPath() self.enterPath(ref) def changeBouquet(self, direction): if not self.pathChangeDisabled: if len(self.servicePath) > 1: #when enter satellite root list we must do some magic stuff.. ref = eServiceReference('%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types)) if self.isBasePathEqual(ref): self.showSatellites() else: self.pathUp() if direction < 0: self.moveUp() else: self.moveDown() ref = self.getCurrentSelection() self.enterPath(ref) def inBouquet(self): if self.servicePath and self.servicePath[0] == self.bouquet_root: return True return False def atBegin(self): return self.servicelist.atBegin() def atEnd(self): return self.servicelist.atEnd() def nextBouquet(self): self.changeBouquet(+1) def prevBouquet(self): self.changeBouquet(-1) def showFavourites(self): if not self.pathChangeDisabled: if not self.preEnterPath(self.bouquet_rootstr): if self.isBasePathEqual(self.bouquet_root): self.pathUp() else: currentRoot = self.getRoot() if currentRoot is None or currentRoot != self.bouquet_root: self.clearPath() self.enterPath(self.bouquet_root) def keyNumberGlobal(self, number): unichar = self.numericalTextInput.getKey(number) charstr = unichar.encode("utf-8") if len(charstr) == 1: self.servicelist.moveToChar(charstr[0]) def keyAsciiCode(self): unichar = unichr(getPrevAsciiCode()) charstr = unichar.encode("utf-8") if len(charstr) == 1: self.servicelist.moveToChar(charstr[0]) def getRoot(self): return self.servicelist.getRoot() def getCurrentSelection(self): return self.servicelist.getCurrent() def setCurrentSelection(self, service): self.servicelist.setCurrent(service) def getBouquetList(self): bouquets = [ ] serviceHandler = eServiceCenter.getInstance() if config.usage.multibouquet.value: list = serviceHandler.list(self.bouquet_root) if list: while True: s = list.getNext() if not s.valid(): break if s.flags & eServiceReference.isDirectory: info = serviceHandler.info(s) if info: bouquets.append((info.getName(s), s)) return bouquets else: info = serviceHandler.info(self.bouquet_root) if info: bouquets.append((info.getName(self.bouquet_root), self.bouquet_root)) return bouquets return None def keyNumber0(self, num): if len(self.servicePath) > 1: self.keyGoUp() else: self.keyNumberGlobal(num) def keyGoUp(self): if len(self.servicePath) > 1: if self.isBasePathEqual(self.bouquet_root): self.showFavourites() else: ref = eServiceReference('%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types)) if self.isBasePathEqual(ref): self.showSatellites() else: ref = eServiceReference('%s FROM PROVIDERS ORDER BY name'%(self.service_types)) if self.isBasePathEqual(ref): self.showProviders() else: self.showAllServices() def nextMarker(self): self.servicelist.moveToNextMarker() def prevMarker(self): self.servicelist.moveToPrevMarker()
def __init__(self, session, title = '', **kwargs): Screen.__init__(self, session) self.setTitle(_('Virtual KeyBoard')) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_bg.png')) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_sel.png')) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_backspace.png')) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_all.png')) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_clr.png')) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_esc.png')) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_ok.png')) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_shift.png')) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_shift_sel.png')) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_space.png')) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_left.png')) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, 'buttons/vkey_right.png')) self.keyImages = {'BACKSPACE': self.key_backspace, 'ALL': self.key_all, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right} self.keyImagesShift = {'BACKSPACE': self.key_backspace, 'CLEAR': self.key_clr, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift_sel, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right} self['country'] = StaticText('') self['header'] = Label() self['text'] = Input(currPos=len(kwargs.get('text', '').decode('utf-8', 'ignore')), allMarked=False, **kwargs) self['list'] = VirtualKeyBoardList([]) self['actions'] = NumberActionMap(['OkCancelActions', 'WizardActions', 'ColorActions', 'KeyboardInputActions', 'InputBoxActions', 'InputAsciiActions'], {'gotAsciiCode': self.keyGotAscii, 'ok': self.okClicked, 'OKLong': self.okLongClicked, 'cancel': self.exit, 'left': self.left, 'right': self.right, 'up': self.up, 'down': self.down, 'red': self.exit, 'green': self.ok, 'yellow': self.switchLang, 'blue': self.shiftClicked, 'deleteBackward': self.backClicked, 'deleteForward': self.forwardClicked, 'back': self.exit, 'pageUp': self.cursorRight, 'pageDown': self.cursorLeft, '1': self.keyNumberGlobal, '2': self.keyNumberGlobal, '3': self.keyNumberGlobal, '4': self.keyNumberGlobal, '5': self.keyNumberGlobal, '6': self.keyNumberGlobal, '7': self.keyNumberGlobal, '8': self.keyNumberGlobal, '9': self.keyNumberGlobal, '0': self.keyNumberGlobal}, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) return
def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_("Virtual keyboard")) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png")) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_all.png")) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png")) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png")) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png")) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png")) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len(kwargs.get("text", "").decode("utf-8",'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose)
class VirtualKeyBoard(Screen): def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_("Virtual keyboard")) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png")) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_all.png")) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png")) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png")) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png")) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png")) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("OK")) self["key_yellow"] = StaticText("") self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len(kwargs.get("text", "").decode("utf-8",'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) def __onClose(self): self.sms.timer.stop() def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() def setLang(self): if self.lang == 'ar_AE': 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"ض", u"ص", u"ث", u"ق", u"ف", u"غ", u"ع", u"ه", u"خ", u"ح", u"ج", u"د"], [u"ش", u"س", u"ي", u"ب", u"ل", u"ا", u"ت", u"ن", u"م", u"ك", u"ط", u"#"], [u"ئ", u"ء", u"ؤ", u"ر", u"لا", u"ى", u"ة", u"و", u"ز", "ظ", u"ذ", u"CLEAR"], [u"SHIFT", u"SPACE", u"+", u"-", u"*", u"/", u".", u",", u"@", u"%", u"&", u"OK"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"^", u"<", u">", u"(", u")", u"=", u"BACKSPACE"], [u"َ", u"ً", u"ُ", u"ٌ", u"لإ", u"إ", u"‘", u"÷", u"×", u"؛", u"<", u">"], [u"ِ", u"ٍ", u"]", u"[", u"لأ", u"أ", u"ـ", u"،", u"/", u":", u"~", u"'"], [u"ْ", u"}", u"{", u"لآ", u"آ", u"’", u",", u".", u"؟", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"=", u"ّ", u"~", u"OK"]] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*"], [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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]] self.nextLang = 'de_DE' elif 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"], [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"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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"=", u"ς", u"ε", u"ρ", u"τ", u"υ", u"θ", u"ι", u"ο", u"π", u"[", u"]"], [u"α", u"σ", u"δ", u"φ", u"γ", u"η", u"ξ", u"κ", u"λ", u";", u"'", u"-"], [u"\\", u"ζ", u"χ", u"ψ", u"ω", u"β", u"ν", u"μ", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ά", u"έ", u"ή", u"ί", u"ό", u"ύ", u"ώ", u"ϊ", u"ϋ", u"OK"]] self.shiftkeys_list = [ [u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"BACKSPACE"], [u"+", u"€", u"Ε", u"Ρ", u"Τ", u"Υ", u"Θ", u"Ι", u"Ο", u"Π", u"{", u"}"], [u"Α", u"Σ", u"Δ", u"Φ", u"Γ", u"Η", u"Ξ", u"Κ", u"Λ", u":", u'"', u"_"], [u"|", u"Ζ", u"Χ", u"Ψ", u"Ω", u"Β", u"Ν", u"Μ", u"<", u">", u"?", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ά", u"Έ", u"Ή", u"Ί", u"Ό", u"Ύ", u"Ώ", u"Ϊ", u"Ϋ", u"OK"]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*"], [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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]] self.nextLang = 'fa_IR' elif self.lang == 'fa_IR': self.keys_list = [ [u"EXIT", u"\u06F1", u"\u06F2", u"\u06F3", u"\u06F4", u"\u06F5", u"\u06F6", u"\u06F7", u"\u06F8", u"\u06F9", u"\u06F0", u"BACKSPACE"], [u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"-", u"\u062C"], [u"\u0634", u"\u0633", u"\u06CC", u"\u0628", u"\u0644", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u06A9", u"\u06AF", u"\u067E"], [u"<", u"\u0638", u"\u0637", u"\u0632", u"\u0631", u"\u0630", u"\u062F", u"\u0626", u"\u0648", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*"]] self.shiftkeys_list = [ [u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"(", u")", u"=", u"BACKSPACE"], [u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u060C", u"\u061B", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"+", u"\u0686"], [u"\u0634", u"\u0633", u"\u06CC", u"\u0628", u"\u06C0", u"\u0622", u"\u062A", u"\u0646", u"\u0645", u"?", u'"', u"|"], [u">", u"\u0629", u"\u064A", u"\u0698", u"\u0624", u"\u0625", u"\u0623", u"\u0621", u";", u":", u"\u061F", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~"]] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'fr_FR' elif self.lang == 'fr_FR': 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"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"é", u"è"], [u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"ê", u"ë"], [u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"=", u"ALL"], [u"SHIFT", u"SPACE", u"ù", u"â", u"ï", u"ô", u"ç", u"#", u"-", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"&", u'@', u'"', u"€", u"§", u"!", u"ç", u"(", u")", u"_", u"BACKSPACE"], [u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"É", u"È"], [u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"Ê", u"Ë"], [u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"+", u"~", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ù", u"Â", u"Ï", u"Ô", u"°", u"/",u"\\", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'lv_LV' elif self.lang == 'lv_LV': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"ž", u"ALL"], [u"SHIFT", u"SPACE", u"ā", u"č", u"ē", u"ģ", u"ī", u"ķ", u"ļ", u"ņ", u"LEFT", u"RIGHT"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"#", u"?", u"Ž", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ā", u"Č", u"Ē", u"Ģ", u"Ī", u"Ķ", u"Ļ", u"Ņ", u"LEFT", u"RIGHT"]] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK"]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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"а", u"б", u"в", u"г", u"д", u"е", u"ё", u"ж", u"з", u"и", u"й", u"+"], [u"к", u"л", u"м", u"н", u"о", u"п", u"р", u"с", u"т", u"у", u"ф", u"#"], [u"<", u"х", u"ц", u"ч", u"ш", u"щ", u"ъ", u"ы", u",", u".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ь", u"э", u"ю", u"я", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], [u"А", u"Б", u"В", u"Г", u"Д", u"Е", u"Ё", u"Ж", u"З", u"И", u"Й", u"*"], [u"К", u"Л", u"М", u"Н", u"О", u"П", u"Р", u"С", u"Т", u"У", u"Ф", u"'"], [u">", u"Х", u"Ц", u"Ч", u"Ш", u"Щ", u"Ъ", u"Ы", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Э", u"Ю", u"Я", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'sk_SK' elif self.lang =='sk_SK': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"], [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'th_TH' elif self.lang == 'th_TH': self.keys_list = [[u"EXIT", "\xe0\xb9\x85", "\xe0\xb8\xa0", "\xe0\xb8\x96", "\xe0\xb8\xb8", "\xe0\xb8\xb6", "\xe0\xb8\x84", "\xe0\xb8\x95", "\xe0\xb8\x88", "\xe0\xb8\x82", "\xe0\xb8\x8a", u"BACKSPACE"], ["\xe0\xb9\x86", "\xe0\xb9\x84", "\xe0\xb8\xb3", "\xe0\xb8\x9e", "\xe0\xb8\xb0", "\xe0\xb8\xb1", "\xe0\xb8\xb5", "\xe0\xb8\xa3", "\xe0\xb8\x99", "\xe0\xb8\xa2", "\xe0\xb8\x9a", "\xe0\xb8\xa5"], ["\xe0\xb8\x9f", "\xe0\xb8\xab", "\xe0\xb8\x81", "\xe0\xb8\x94", "\xe0\xb9\x80", "\xe0\xb9\x89", "\xe0\xb9\x88", "\xe0\xb8\xb2", "\xe0\xb8\xaa", "\xe0\xb8\xa7", "\xe0\xb8\x87", "\xe0\xb8\x83"], ["\xe0\xb8\x9c", "\xe0\xb8\x9b", "\xe0\xb9\x81", "\xe0\xb8\xad", "\xe0\xb8\xb4", "\xe0\xb8\xb7", "\xe0\xb8\x97", "\xe0\xb8\xa1", "\xe0\xb9\x83", "\xe0\xb8\x9d", "", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [[u"EXIT", "\xe0\xb9\x91", "\xe0\xb9\x92", "\xe0\xb9\x93", "\xe0\xb9\x94", "\xe0\xb8\xb9", "\xe0\xb9\x95", "\xe0\xb9\x96", "\xe0\xb9\x97", "\xe0\xb9\x98", "\xe0\xb9\x99", u"BACKSPACE"], ["\xe0\xb9\x90", "", "\xe0\xb8\x8e", "\xe0\xb8\x91", "\xe0\xb8\x98", "\xe0\xb9\x8d", "\xe0\xb9\x8a", "\xe0\xb8\x93", "\xe0\xb8\xaf", "\xe0\xb8\x8d", "\xe0\xb8\x90", "\xe0\xb8\x85"], ["\xe0\xb8\xa4", "\xe0\xb8\x86", "\xe0\xb8\x8f", "\xe0\xb9\x82", "\xe0\xb8\x8c", "\xe0\xb9\x87", "\xe0\xb9\x8b", "\xe0\xb8\xa9", "\xe0\xb8\xa8", "\xe0\xb8\x8b", "", "\xe0\xb8\xbf"], ["", "", "\xe0\xb8\x89", "\xe0\xb8\xae", "\xe0\xb8\xba", "\xe0\xb9\x8c", "", "\xe0\xb8\x92", "\xe0\xb8\xac", "\xe0\xb8\xa6", "", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'uk_UA' elif self.lang == 'uk_UA': 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"а", u"б", u"в", u"г", u"ґ", u"д", u"е", u"є", u"ж", u"з", u"и", u"+"], [u"і", u"ї", u"й", u"к", u"л", u"м", u"н", u"о", u"п", u"р", u"с", u"#"], [u"<", u"т", u"у", u"ф", u"х", u"ц", u"ч", u"ш", u",", u".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"щ", u"ь", u"ю", u"я", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], [u"А", u"Б", u"В", u"Г", u"Ґ", u"Д", u"Е", u"Є", u"Ж", u"З", u"И", u"*"], [u"І", u"Ї", u"Й", u"К", u"Л", u"М", u"Н", u"О", u"П", u"Р", u"С", u"'"], [u">", u"Т", u"У", u"Ф", u"Х", u"Ц", u"Ч", u"Ш", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"Щ", u"Ь", u"Ю", u"Я", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'en_EN' else: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~"]] self.lang = 'en_EN' self.nextLang = 'ar_AE' self["country"].setText(self.lang) self["key_yellow"].setText(language.lang[self.lang][0]) def virtualKeyBoardEntryComponent(self, keys): w, h = skin.parameters.get("VirtualKeyboard",(45, 45)) key_bg_width = self.key_bg and self.key_bg.size().width() or w key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [keys] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=png)) else: width = key_bg_width res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_bg)) text.append(MultiContentEntryText(pos=(x, 0), size=(width, h), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] self.max_key = 0 for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.max_key += len(keys) self.max_key -= 1 self.markSelectedKey() def markSelectedKey(self): w, h = skin.parameters.get("VirtualKeyboard",(45, 45)) if self.previousSelectedKey is not None: self.list[self.previousSelectedKey /12] = self.list[self.previousSelectedKey /12][:-1] width = self.key_sel.size().width() try: x = self.list[self.selectedKey/12][self.selectedKey % 12 + 1][1] except IndexError: self.selectedKey = self.max_key x = self.list[self.selectedKey/12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self["list"].setList(self.list) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].markAll() elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].char(" ".encode("UTF-8")) elif text == "OK": self.close(self["text"].getText()) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].char(text) def ok(self): self.close(self["text"].getText()) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey %= 12 self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
class VirtualKeyBoard(Screen): def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_(title)) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_backspace.png")) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_all.png")) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_clr.png")) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_esc.png")) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_ok.png")) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_shift.png")) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_shift_sel.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_space.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["country"] = StaticText("") self["header"] = Label() self["text"] = Input(currPos=len(kwargs.get("text", "").decode("utf-8",'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) def __onClose(self): self.sms.timer.stop() def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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"], [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"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*"], [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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'lv_LV' elif self.lang == 'lv_LV': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"ž", u"ALL"], [u"SHIFT", u"SPACE", u"ā", u"č", u"ē", u"ģ", u"ī", u"ķ", u"ļ", u"ņ", u"LEFT", u"RIGHT"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"#", u"?", u"Ž", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ā", u"Č", u"Ē", u"Ģ", u"Ī", u"Ķ", u"Ļ", u"Ņ", u"LEFT", u"RIGHT"]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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"а", u"б", u"в", u"г", u"д", u"е", u"ё", u"ж", u"з", u"и", u"й", u"+"], [u"к", u"л", u"м", u"н", u"о", u"п", u"р", u"с", u"т", u"у", u"ф", u"#"], [u"<", u"х", u"ц", u"ч", u"ш", u"щ", u"ъ", u"ы", u",", u".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ь", u"э", u"ю", u"я", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], [u"А", u"Б", u"В", u"Г", u"Д", u"Е", u"Ё", u"Ж", u"З", u"И", u"Й", u"*"], [u"К", u"Л", u"М", u"Н", u"О", u"П", u"Р", u"С", u"Т", u"У", u"Ф", u"'"], [u">", u"Х", u"Ц", u"Ч", u"Ш", u"Щ", u"Ъ", u"Ы", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Э", u"Ю", u"Я", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'sk_SK' elif self.lang =='sk_SK': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"], [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*"], [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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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"=", u"ς", u"ε", u"ρ", u"τ", u"υ", u"θ", u"ι", u"ο", u"π", u"[", u"]"], [u"α", u"σ", u"δ", u"φ", u"γ", u"η", u"ξ", u"κ", u"λ", u";", u"'", u"-"], [u"\\", u"ζ", u"χ", u"ψ", u"ω", u"β", u"ν", u"μ", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ά", u"έ", u"ή", u"ί", u"ό", u"ύ", u"ώ", u"ϊ", u"ϋ", u"OK"]] self.shiftkeys_list = [ [u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"BACKSPACE"], [u"+", u"€", u"Ε", u"Ρ", u"Τ", u"Υ", u"Θ", u"Ι", u"Ο", u"Π", u"{", u"}"], [u"Α", u"Σ", u"Δ", u"Φ", u"Γ", u"Η", u"Ξ", u"Κ", u"Λ", u":", u'"', u"_"], [u"|", u"Ζ", u"Χ", u"Ψ", u"Ω", u"Β", u"Ν", u"Μ", u"<", u">", u"?", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ά", u"Έ", u"Ή", u"Ί", u"Ό", u"Ύ", u"Ώ", u"Ϊ", u"Ϋ", u"OK"]] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK"]] self.nextLang = 'en_EN' else: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~"]] self.lang = 'en_EN' self.nextLang = 'de_DE' self["country"].setText(self.lang) self.max_key=47+len(self.keys_list[4]) def virtualKeyBoardEntryComponent(self, keys): w, h = skin.parameters.get("VirtualKeyboard",(45, 45)) key_bg_width = self.key_bg and self.key_bg.size().width() or w key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [keys] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=png)) else: width = key_bg_width res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_bg)) text.append(MultiContentEntryText(pos=(x, 0), size=(width, h), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.markSelectedKey() def markSelectedKey(self): w, h = skin.parameters.get("VirtualKeyboard",(45, 45)) if self.previousSelectedKey is not None: self.list[self.previousSelectedKey /12] = self.list[self.previousSelectedKey /12][:-1] width = self.key_sel.size().width() x = self.list[self.selectedKey/12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self["list"].setList(self.list) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].markAll() elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].char(" ".encode("UTF-8")) elif text == "OK": self.close(self["text"].getText()) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].char(text) def ok(self): self.close(self["text"].getText()) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey %= 12 self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): print "[VirtualKeyboard] pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
def __init__(self, default = "", fixed_size = False, visible_width = False): ConfigText.__init__(self, default = default, fixed_size = fixed_size, visible_width = visible_width) NumericalTextInput.__init__(self, nextFunc = self.nextFunc, handleTimeout = False, search = True)
class VirtualKeyBoard(Screen): def __init__(self, session, title='', **kwargs): Screen.__init__(self, session) self.setTitle(_('Virtual keyboard')) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_bg.png')) self.key_sel = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_sel.png')) self.key_backspace = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_backspace.png')) self.key_all = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_all.png')) self.key_clr = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_clr.png')) self.key_esc = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_esc.png')) self.key_ok = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_ok.png')) self.key_shift = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_shift.png')) self.key_shift_sel = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_shift_sel.png')) self.key_space = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_space.png')) self.key_left = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_left.png')) self.key_right = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_right.png')) self.keyImages = { 'BACKSPACE': self.key_backspace, 'ALL': self.key_all, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right } self.keyImagesShift = { 'BACKSPACE': self.key_backspace, 'CLEAR': self.key_clr, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift_sel, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right } self['country'] = StaticText('') self['header'] = Label(title) self['text'] = Input(currPos=len( kwargs.get('text', '').decode('utf-8', 'ignore')), allMarked=False, **kwargs) self['list'] = VirtualKeyBoardList([]) self['actions'] = NumberActionMap( [ 'OkCancelActions', 'WizardActions', 'ColorActions', 'KeyboardInputActions', 'InputBoxActions', 'InputAsciiActions' ], { 'gotAsciiCode': self.keyGotAscii, 'ok': self.okClicked, 'cancel': self.exit, 'left': self.left, 'right': self.right, 'up': self.up, 'down': self.down, 'red': self.exit, 'green': self.ok, 'yellow': self.switchLang, 'blue': self.shiftClicked, 'deleteBackward': self.backClicked, 'deleteForward': self.forwardClicked, 'back': self.exit, 'pageUp': self.cursorRight, 'pageDown': self.cursorLeft, '1': self.keyNumberGlobal, '2': self.keyNumberGlobal, '3': self.keyNumberGlobal, '4': self.keyNumberGlobal, '5': self.keyNumberGlobal, '6': self.keyNumberGlobal, '7': self.keyNumberGlobal, '8': self.keyNumberGlobal, '9': self.keyNumberGlobal, '0': self.keyNumberGlobal }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) def __onClose(self): self.sms.timer.stop() def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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' ], [ u'q', u'w', u'e', u'r', u't', u'z', u'u', u'i', u'o', u'p', u'\xfc', u'+' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf6', u'\xe4', u'#' ], [ u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'@', u'\xdf', u'OK', u'LEFT', u'RIGHT' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', 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'\xdc', u'*' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd6', u'\xc4', 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'?', u'\\', u'OK', u'LEFT', u'RIGHT' ]] self.nextLang = 'ar_AE' elif self.lang == 'ar_AE': 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'\u0636', u'\u0635', u'\u062b', u'\u0642', u'\u0641', u'\u063a', u'\u0639', u'\u0647', u'\u062e', u'\u062d', u'\u062c', u'\u062f' ], [ u'\u0634', u'\u0633', u'\u064a', u'\u0628', u'\u0644', u'\u0627', u'\u062a', u'\u0646', u'\u0645', u'\u0643', u'\u0637', u'\u0630' ], [ u'\u0626', u'\u0621', u'\u0624', u'\u0631', u'\u0644\u0627', u'\u0649', u'\u0629', u'\u0648', u'\u0632', '\xd8\xb8', u'#', u'ALL' ], [ u'SHIFT', u'SPACE', u'-', u'@', u'.', u'\u0644\u0622', u'\u0622', u'\u0644\u0623', u'\u0644\u0625', u'\u0625', u'\u0623', u'OK', u'LEFT', u'RIGHT' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', u'$', u'^', u'<', u'>', u'(', u')', u'=', u'BACKSPACE' ], [ u'\u064e', u'\u064b', u'\u064f', u'\u064c', u'%', u'\u060c', u'\u2018', u'\xf7', u'\xd7', u'\u061b', u'<', u'>' ], [ u'\u0650', u'\u064d', u']', u'[', u'*', u'+', u'\u0640', u'\u060c', u'/', u':', u'~', u"'" ], [ u'\u0652', u'}', u'{', u'-', u'/', u'\u2019', u',', u'.', u'\u061f', u':', u'_', u'CLEAR' ], [ u'SHIFT', u'SPACE', u'?', u'\\', u'=', u'\u0651', u'~', u'OK', u'LEFT', u'RIGHT' ]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': 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'\xfa', u'+' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf3', u'\xe1', u'#' ], [ u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'@', u'\u0141', u'\u0155', u'\xe9', u'\u010d', u'\xed', u'\u011b', u'\u0144', u'\u0148', u'OK' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', 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'\xda', u'*' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd3', u'\xc1', 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'?', u'\\', u'\u0154', u'\xc9', u'\u010c', u'\xcd', u'\u011a', u'\u0143', u'\u0147', u'OK' ]] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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'\xe9', u'+' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf6', u'\xe4', u'#' ], [ u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'@', u'\xdf', u'\u013a', u'OK', u'LEFT', u'RIGHT' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', 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'\xc9', u'*' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd6', u'\xc4', 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'?', u'\\', u'\u0139', u'OK', u'LEFT', u'RIGHT' ]] self.nextLang = 'lv_LV' elif self.lang == 'lv_LV': 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'y', u'u', u'i', u'o', u'p', u'-', u'\u0161' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u';', u"'", u'\u016b' ], [ u'<', u'z', u'x', u'c', u'v', u'b', u'n', u'm', u',', u'.', u'\u017e', u'ALL' ], [ u'SHIFT', u'SPACE', u'\u0101', u'\u010d', u'\u0113', u'\u0123', u'\u012b', u'\u0137', u'\u013c', u'\u0146', u'LEFT', u'RIGHT' ]] 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'Y', u'U', u'I', u'O', u'P', u'+', u'\u0160' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u':', u'"', u'\u016a' ], [ u'>', u'Z', u'X', u'C', u'V', u'B', u'N', u'M', u'#', u'?', u'\u017d', u'CLEAR' ], [ u'SHIFT', u'SPACE', u'\u0100', u'\u010c', u'\u0112', u'\u0122', u'\u012a', u'\u0136', u'\u013b', u'\u0145', u'LEFT', u'RIGHT' ]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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'\u0430', u'\u0431', u'\u0432', u'\u0433', u'\u0434', u'\u0435', u'\u0451', u'\u0436', u'\u0437', u'\u0438', u'\u0439', u'+' ], [ u'\u043a', u'\u043b', u'\u043c', u'\u043d', u'\u043e', u'\u043f', u'\u0440', u'\u0441', u'\u0442', u'\u0443', u'\u0444', u'#' ], [ u'<', u'\u0445', u'\u0446', u'\u0447', u'\u0448', u'\u0449', u'\u044a', u'\u044b', u',', u'.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'@', u'\u044c', u'\u044d', u'\u044e', u'\u044f', u'OK', u'LEFT', u'RIGHT' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', u'$', u'%', u'&', u'/', u'(', u')', u'=', u'BACKSPACE' ], [ u'\u0410', u'\u0411', u'\u0412', u'\u0413', u'\u0414', u'\u0415', u'\u0401', u'\u0416', u'\u0417', u'\u0418', u'\u0419', u'*' ], [ u'\u041a', u'\u041b', u'\u041c', u'\u041d', u'\u041e', u'\u041f', u'\u0420', u'\u0421', u'\u0422', u'\u0423', u'\u0424', u"'" ], [ u'>', u'\u0425', u'\u0426', u'\u0427', u'\u0428', u'\u0429', u'\u042a', u'\u042b', u';', u':', u'_', u'CLEAR' ], [ u'SHIFT', u'SPACE', u'?', u'\\', u'\u042c', u'\u042d', u'\u042e', u'\u042f', u'OK', u'LEFT', u'RIGHT' ]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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'\xe9', u'+' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\xf6', u'\xe4', u'#' ], [ u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'@', u'\xdf', u'\u013a', u'OK', u'LEFT', u'RIGHT' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', 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'\xc9', u'*' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\xd6', u'\xc4', 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'?', u'\\', u'\u0139', u'OK', u'LEFT', u'RIGHT' ]] self.nextLang = 'sk_SK' elif self.lang == 'sk_SK': 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'\xfa', u'+' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\u013e', u'@', u'#' ], [ u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'\u0161', u'\u010d', u'\u017e', u'\xfd', u'\xe1', u'\xed', u'\xe9', u'OK', u'LEFT', u'RIGHT' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', 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'\u0165', u'*' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\u0148', u'\u010f', u"'" ], [ u'\xc1', u'\xc9', u'\u010e', u'\xcd', u'\xdd', u'\xd3', u'\xda', u'\u017d', u'\u0160', u'\u010c', u'\u0164', u'\u0147' ], [ 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'?', u'\\', u'\xe4', u'\xf6', u'\xfc', u'\xf4', u'\u0155', u'\u013a', u'OK' ]] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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'\xfa', u'+' ], [ u'a', u's', u'd', u'f', u'g', u'h', u'j', u'k', u'l', u'\u016f', u'@', u'#' ], [ u'<', u'y', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'-', u'ALL' ], [ u'SHIFT', u'SPACE', u'\u011b', u'\u0161', u'\u010d', u'\u0159', u'\u017e', u'\xfd', u'\xe1', u'\xed', u'\xe9', u'OK' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'"', u'\xa7', 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'\u0165', u'*' ], [ u'A', u'S', u'D', u'F', u'G', u'H', u'J', u'K', u'L', u'\u0148', u'\u010f', 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'?', u'\\', u'\u010c', u'\u0158', u'\u0160', u'\u017d', u'\xda', u'\xc1', u'\xc9', u'OK' ]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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'=', u'\u03c2', u'\u03b5', u'\u03c1', u'\u03c4', u'\u03c5', u'\u03b8', u'\u03b9', u'\u03bf', u'\u03c0', u'[', u']' ], [ u'\u03b1', u'\u03c3', u'\u03b4', u'\u03c6', u'\u03b3', u'\u03b7', u'\u03be', u'\u03ba', u'\u03bb', u';', u"'", u'-' ], [ u'\\', u'\u03b6', u'\u03c7', u'\u03c8', u'\u03c9', u'\u03b2', u'\u03bd', u'\u03bc', u',', '.', u'/', u'ALL' ], [ u'SHIFT', u'SPACE', u'\u03ac', u'\u03ad', u'\u03ae', u'\u03af', u'\u03cc', u'\u03cd', u'\u03ce', u'\u03ca', u'\u03cb', u'OK' ]] self.shiftkeys_list = [[ u'EXIT', u'!', u'@', u'#', u'$', u'%', u'^', u'&', u'*', u'(', u')', u'BACKSPACE' ], [ u'+', u'\u20ac', u'\u0395', u'\u03a1', u'\u03a4', u'\u03a5', u'\u0398', u'\u0399', u'\u039f', u'\u03a0', u'{', u'}' ], [ u'\u0391', u'\u03a3', u'\u0394', u'\u03a6', u'\u0393', u'\u0397', u'\u039e', u'\u039a', u'\u039b', u':', u'"', u'_' ], [ u'|', u'\u0396', u'\u03a7', u'\u03a8', u'\u03a9', u'\u0392', u'\u039d', u'\u039c', u'<', u'>', u'?', u'CLEAR' ], [ u'SHIFT', u'SPACE', u'\u0386', u'\u0388', u'\u0389', u'\u038a', u'\u038c', u'\u038e', u'\u038f', u'\u03aa', u'\u03ab', u'OK' ]] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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'y', 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'z', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'/', u'ALL' ], [ u'SHIFT', u'SPACE', u'\u0105', u'\u0107', u'\u0119', u'\u0142', u'\u0144', u'\xf3', u'\u015b', u'\u017a', u'\u017c', 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'Y', 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'Z', u'X', u'C', u'V', u'B', u'N', u'M', u';', u':', u'_', u'CLEAR' ], [ u'SHIFT', u'SPACE', u'\u0104', u'\u0106', u'\u0118', u'\u0141', u'\u0143', u'\xd3', u'\u015a', u'\u0179', u'\u017b', u'OK' ]] self.nextLang = 'en_EN' else: 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'y', 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'z', u'x', u'c', u'v', u'b', u'n', u'm', u',', '.', u'/', u'ALL' ], [ u'SHIFT', u'SPACE', u'OK', u'LEFT', u'RIGHT', u'*' ]] 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'Y', 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'Z', u'X', u'C', u'V', u'B', u'N', u'M', u';', u':', u'_', u'CLEAR' ], [ u'SHIFT', u'SPACE', u'OK', u'LEFT', u'RIGHT', u'~' ]] self.lang = 'en_EN' self.nextLang = 'de_DE' self['country'].setText(self.lang) self.max_key = 47 + len(self.keys_list[4]) def virtualKeyBoardEntryComponent(self, keys): w, h = skin.parameters.get('VirtualKeyboard', (45, 45)) key_bg_width = self.key_bg and self.key_bg.size().width() or w key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [keys] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=png)) else: width = key_bg_width res.append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_bg)) text.append( MultiContentEntryText(pos=(x, 0), size=(width, h), font=0, text=key.encode('utf-8'), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.markSelectedKey() def markSelectedKey(self): w, h = skin.parameters.get('VirtualKeyboard', (45, 45)) if self.previousSelectedKey is not None: self.list[self.previousSelectedKey / 12] = self.list[self.previousSelectedKey / 12][:-1] width = self.key_sel.size().width() x = self.list[self.selectedKey / 12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append( MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self['list'].setList(self.list) def backClicked(self): self['text'].deleteBackward() def forwardClicked(self): self['text'].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode('UTF-8') if text == 'EXIT': self.close(None) elif text == 'BACKSPACE': self['text'].deleteBackward() elif text == 'ALL': self['text'].markAll() elif text == 'CLEAR': self['text'].deleteAllChars() self['text'].update() elif text == 'SHIFT': self.shiftClicked() elif text == 'SPACE': self['text'].char(' '.encode('UTF-8')) elif text == 'OK': self.close(self['text'].getText()) elif text == 'LEFT': self['text'].left() elif text == 'RIGHT': self['text'].right() else: self['text'].char(text) def ok(self): self.close(self['text'].getText()) def exit(self): self.close(None) def cursorRight(self): self['text'].right() def cursorLeft(self): self['text'].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey % 12 self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): print 'pressing ok now' self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr( getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == ' ': char = 'SPACE' for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
class VirtualKeyBoard(Screen, HelpableScreen): def __init__(self, session, title=_("Virtual KeyBoard Text:"), text="", maxSize=False, visible_width=False, type=Input.TEXT, currPos=0, allMarked=False): Screen.__init__(self, session) HelpableScreen.__init__(self) self.setTitle(_("Virtual keyboard")) prompt = title # Title should only be used for screen titles! self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_bg.png")) self.key_red_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_red.png")) self.key_green_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_green.png")) self.key_yellow_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_yellow.png")) self.key_blue_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_blue.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_backspace.png")) self.key_enter = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_enter.png")) self.key_first = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_first.png")) self.key_last = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_last.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_right.png")) self.key_shift0 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift0.png")) self.key_shift1 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift1.png")) self.key_shift2 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift2.png")) self.key_shift3 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift3.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space.png")) self.key_space_alt = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space_alt.png")) self.keyBackgrounds = { "EXIT": self.key_red_bg, "OK": self.key_green_bg, "SAVE": self.key_green_bg, "LOC": self.key_yellow_bg, "SHFT": self.key_blue_bg } self.keyImages = [{ "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift0, "SPACE": self.key_space_alt }, { "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift1, "SPACE": self.key_space_alt }, { "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift2, "SPACE": self.key_space_alt }, { "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift3, "SPACE": self.key_space_alt }] self.shiftMsgs = [ _("Lower case"), _("Upper case"), _("Special 1"), _("Special 2") ] self.english = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"", u"ENTER"], [u"SHIFT", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"", u"ENTER"], [u"SHIFT", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.french = [ [ [u"\u00B2", u"&", u"\u00E9", u"\"", u"'", u"(", u"-", u"\u00E8", u"_", u"\u00E7", u"\u00E0", u")", u"=", u"BACKSPACE"], [u"FIRST", u"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"$", u"[", u"]"], [u"LAST", u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"\u00F9", u"*", u"ENTER"], [u"SHIFT", u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"!", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"#", u"@", u"`"] ], [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00B0", u"+", u"BACKSPACE"], [u"FIRST", u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00A3", u"{", u"}"], [u"LAST", u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"%", u"\u00B5", u"ENTER"], [u"SHIFT", u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"/", u"\u00A7", u"\u00A6", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"~", u"^", u"\\"] ], [ [u"", u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"", u"BACKSPACE"], [u"FIRST", u"", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u""], [u"LAST", u"", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"", u"ENTER"], [u"SHIFT", u"", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.german = [ [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00DF", u"'", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FC", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"+", U"ENTER"], [u"SHIFT", u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"#", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"|", u"\\", u"\u00B5"] ], [ [u"\u00B0", u"!", u"\"", u"\u00A7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"`", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"\u00DC", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", U"ENTER"], [u"SHIFT", u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"@", U"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u20AC", u"\u00B2", u"\u00B3"] ] ] self.russian = [ [ [u"\u0451", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0439", u"\u0446", u"\u0443", u"\u043A", u"\u0435", u"\u043D", u"\u0433", u"\u0448", u"\u0449", u"\u0437", u"\u0445", u"\u044A", u"\u00A7"], [u"LAST", u"\u0444", u"\u044B", u"\u0432", u"\u0430", u"\u043F", u"\u0440", u"\u043E", u"\u043B", u"\u0434", u"\u0436", u"\u044D", u"\\", u"ENTER"], [u"SHIFT", u"\u044F", u"\u0447", u"\u0441", u"\u043C", u"\u0438", u"\u0442", u"\u044C", u"\u0431", u"\u044E", u".", u"@", u"&", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"<"] ], [ [u"\u0401", u"!", u"\"", u"\u2116", u";", u"%", u":", u"?", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"\u0419", u"\u0426", u"\u0423", u"\u041A", u"\u0415", u"\u041D", u"\u0413", u"\u0428", u"\u0429", u"\u0417", u"\u0425", u"\u042A", u"\u20BD"], [u"LAST", u"\u0424", u"\u042B", u"\u0412", u"\u0410", u"\u041F", u"\u0420", u"\u041E", u"\u041B", u"\u0414", u"\u0416", u"\u042D", u"/", u"ENTER"], [u"SHIFT", u"\u042F", u"\u0427", u"\u0421", u"\u041C", u"\u0418", u"\u0422", u"\u042C", u"\u0411", u"\u042E", u",", u"#", u"$", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u">"] ] ] self.scandinavian = [ [ [u"\u00A7", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"+", u"@", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u00E5", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"'", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u00AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"\u00BD", u"!", u"\"", u"#", u"\u00A4", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"|", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00C5", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00BB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"\u00E3", u"\u00F5", u"BACKSPACE"], [u"FIRST", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u"", u""], [u"LAST", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"\u00C3", u"\u00D5", u"ENTER"], [u"SHIFT", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.spanish = [ [ [u"\\", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"'", u"\u00A1", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"@", u"+", u"\u00E7"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F1", u"[", u"]", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"\u00FC"] ], [ [u"|", u"!", u"\"", u"\u00B7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"\u00BF", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"#", u"*", u"\u00C7"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D1", u"{", u"}", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"\u00DC"] ] ] self.locales = { "ar_BH": [_("Arabic"), _("Bahrain"), self.arabic(self.english)], "ar_EG": [_("Arabic"), _("Egypt"), self.arabic(self.english)], "ar_JO": [_("Arabic"), _("Jordan"), self.arabic(self.english)], "ar_KW": [_("Arabic"), _("Kuwait"), self.arabic(self.english)], "ar_LB": [_("Arabic"), _("Lebanon"), self.arabic(self.english)], "ar_OM": [_("Arabic"), _("Oman"), self.arabic(self.english)], "ar_QA": [_("Arabic"), _("Qatar"), self.arabic(self.english)], "ar_SA": [_("Arabic"), _("Saudi Arabia"), self.arabic(self.english)], "ar_SY": [_("Arabic"), _("Syrian Arab Republic"), self.arabic(self.english)], "ar_AE": [_("Arabic"), _("United Arab Emirates"), self.arabic(self.english)], "ar_YE": [_("Arabic"), _("Yemen"), self.arabic(self.english)], "cs_CZ": [_("Czech"), _("Czechia"), [ [ [u";", u"+", u"\u011B", u"\u0161", u"\u010D", u"\u0159", u"\u017E", u"\u00FD", u"\u00E1", u"\u00ED", u"\u00E9", u"=", u"", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FA", u")", u""], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u016F", u"\u00A7", u"", u"ENTER"], [u"SHIFT", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u0148", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"%", u"", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"/", u"(", u""], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\"", u"!", u"'", u"ENTER"], [u"SHIFT", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"_", u"\u0147", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"~", u"\u011A", u"\u0160", u"\u010C", u"\u0158", u"\u017D", u"\u00DD", u"\u00C1", u"\u00CD", u"\u00C9", u"`", u"", u"BACKSPACE"], [u"FIRST", u"\\", u"|", u"\u20AC", u"\u0165", u"\u0164", u"", u"", u"", u"\u00F3", u"\u00D3", u"\u00DA", u"\u00F7", u"\u00D7"], [u"LAST", u"", u"\u0111", u"\u00D0", u"[", u"]", u"\u010F", u"\u010E", u"\u0142", u"\u0141", u"\u016E", u"$", u"\u00DF", u"ENTER"], [u"SHIFT", u"", u"#", u"&", u"@", u"{", u"}", u"", u"<", u">", u"*", u"", u"\u00A4", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "nl_NL": [_("Dutch"), _("Netherlands"), self.dutch(self.english)], "en_AU": [_("English"), _("Australian"), self.australian(self.english)], "en_GB": [_("English"), _("United Kingdom"), self.unitedKingdom(self.english)], "en_US": [_("English"), _("United States"), self.english], "en_EN": [_("English"), _("Various"), self.english], "et_EE": [_("Estonian"), _("Estonia"), self.estonian(self.scandinavian)], "fi_FI": [_("Finnish"), _("Finland"), self.finnish(self.scandinavian)], "fr_BE": [_("French"), _("Belgian"), self.belgian(self.french)], "fr_FR": [_("French"), _("France"), self.french], "de_DE": [_("German"), _("Germany"), self.german], "el_GR": [_("Greek (Modern)"), _("Greece"), [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u";", u"\u03C2", u"\u03B5", u"\u03C1", u"\u03C4", u"\u03C5", u"\u03B8", u"\u03B9", u"\u03BF", u"\u03C0", u"[", u"]", u"/"], [u"LAST", u"\u03B1", u"\u03C3", u"\u03B4", u"\u03C6", u"\u03B3", u"\u03B7", u"\u03BE", u"\u03BA", u"\u03BB", u"", u"'", u"\\", u"ENTER"], [u"SHIFT", u"<", u"\u03B6", u"\u03C7", u"\u03C8", u"\u03C9", u"\u03B2", u"\u03BD", u"\u03BC", u",", ".", u"\u03CA", u"\u03CB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u03AC", u"\u03AD", u"\u03AE", u"\u03AF", u"\u03CC", u"\u03CD", u"\u03CE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u":", u"", u"\u0395", u"\u03A1", u"\u03A4", u"\u03A5", u"\u0398", u"\u0399", u"\u039F", u"\u03A0", u"{", u"}", u"?"], [u"LAST", u"\u0391", u"\u03A3", u"\u0394", u"\u03A6", u"\u0393", u"\u0397", u"\u039E", u"\u039A", u"\u039B", u"", u"\"", u"|", u"ENTER"], [u"SHIFT", u">", u"\u0396", u"\u03A7", u"\u03A8", u"\u03A9", u"\u0392", u"\u039D", u"\u039C", u"<", u">", u"\u03AA", u"\u03AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u0386", u"\u0388", u"\u0389", u"\u038A", u"\u038C", u"\u038E", u"\u038F"] ], [ [u"", u"", u"\u00B2", u"\u00B3", u"\u00A3", u"\u00A7", u"\u00B6", u"\u20AC", u"\u00A4", u"\u00A6", u"\u00B0", u"\u00B1", u"\u00BD", u"BACKSPACE"], [u"FIRST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u""], [u"LAST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "lv_LV": [_("Latvian"), _("Latvia"), self.latvian(self.english)], "lt_LT": [_("Lithuanian"), _("Lithuania"), self.lithuanian(self.english)], "nb_NO": [_("Norwegian"), _("Norway"), self.norwegian(self.scandinavian)], "fa_IR": [_("Persian"), _("Iran, Islamic Republic"), self.persian(self.english)], "pl_PL": [_("Polish"), _("Poland"), self.polish(self.english)], "ru_RU": [_("Russian"), _("Russian Federation"), self.russian], "sk_SK": [_("Slovak"), _("Slovakia"), [ [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"\u00E1", u"\u00E4", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u010D", u"\u010F", u"\u00E9"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00ED", u"\u013A", u"\u013E", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"\u0148", u"\u00F3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00F4", u"\u0155", u"\u0161", u"\u0165", u"\u00FA", u"\u00FD", u"\u017E"] ], [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00C1", u"\u00C4", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u010C", u"\u010E", u"\u00C9"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00CD", u"\u0139", u"\u013D", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"\u0147", u"\u00D3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00D4", u"\u0154", u"\u0160", u"\u0164", u"\u00DA", u"\u00DD", u"\u017D"] ], [ [u"", u"", u"\u00A7", u"\u00B0", u"\u00A4", u"\u20AC", u"\u00DF", u"\u0111", u"\u0110", u"\u0142", u"\u0141", u"", u"", u"BACKSPACE"], [u"FIRST", u"", u"", u"'", u"\"", u"+", u"-", u"\u00D7", u"\u00F7", u"=", u"_", u"~", u"", u""], [u"LAST", u"", u"", u"/", u"\\", u";", u"[", u"]", u"{", u"}", u"|", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "es_ES": [_("Spanish"), _("Spain"), self.spanish], "sv_SE": [_("Swedish"), _("Sweden"), self.swedish(self.scandinavian)], "th_TH": [_("Thai"), _("Thailand"), [ [ [u"", u"", u"\u0E45", u"\u0E20", u"\u0E16", u"\u0E38", u"\u0E36", u"\u0E04", u"\u0E15", u"\u0E08", u"\u0E02", u"\u0E0A", u"", u"BACKSPACE"], [u"FIRST", u"\u0E46", u"\u0E44", u"\u0E33", u"\u0E1E", u"\u0E30", u"\u0E31", u"\u0E35", u"\u0E23", u"\u0E19", u"\u0E22", u"\u0E1A", u"\u0E25", u""], [u"LAST", u"\u0E1F", u"\u0E2B", u"\u0E01", u"\u0E14", u"\u0E40", u"\u0E49", u"\u0E48", u"\u0E32", u"\u0E2A", u"\u0E27", u"\u0E07", u"\u0E03", u"OK"], [u"SHIFT", u"\u0E1C", u"\u0E1B", u"\u0E41", u"\u0E2D", u"\u0E34", u"\u0E37", u"\u0E17", u"\u0E21", u"\u0E43", u"\u0E1D", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"", u"\u0E51", u"\u0E52", u"\u0E53", u"\u0E54", u"\u0E39", u"\u0E55", u"\u0E56", u"\u0E57", u"\u0E58", u"\u0E59", u"", u"BACKSPACE"], [u"FIRST", u"\u0E50", u"", u"\u0E0E", u"\u0E11", u"\u0E18", u"\u0E4D", u"\u0E4A", u"\u0E13", u"\u0E2F", u"\u0E0D", u"\u0E10", u"\u0E05", u""], [u"LAST", u"\u0E24", u"\u0E06", u"\u0E0F", u"\u0E42", u"\u0E0C", u"\u0E47", u"\u0E4B", u"\u0E29", u"\u0E28", u"\u0E0B", u"", u"\u0E3F", u"OK"], [u"SHIFT", u"", u"", u"\u0E09", u"\u0E2E", u"\u0E3A", u"\u0E4C", u"", u"\u0E12", u"\u0E2C", u"\u0E26", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "uk_UA": [_("Ukrainian"), _("Ukraine"), self.ukranian(self.russian)] } self["actions"] = HelpableNumberActionMap(self, "VirtualKeyBoardActions", { "cancel": (self.cancel, _("Cancel any text changes and exit")), "save": (self.save, _("Save any text changes and exit")), "locale": (self.localeMenu, _("Select the virtual keyboard locale from a menu")), "shift": (self.shiftClicked, _("Select the virtual keyboard shifted character set")), "select": (self.processSelect, _("Select the character or action under the virtual keyboard cursor")), "up": (self.up, _("Move the virtual keyboard cursor up")), "left": (self.left, _("Move the virtual keyboard cursor left")), "right": (self.right, _("Move the virtual keyboard cursor right")), "down": (self.down, _("Move the virtual keyboard cursor down")), "first": (self.cursorFirst, _("Move the text buffer cursor to the first character")), "prev": (self.cursorLeft, _("Move the text buffer cursor left")), "next": (self.cursorRight, _("Move the text buffer cursor right")), "last": (self.cursorLast, _("Move the text buffer cursor to the last character")), "toggleOverwrite": (self.keyToggleOW, _("Toggle new text inserts before or overwrites existing text")), "backspace": (self.backClicked, _("Delete the character to the left of text buffer cursor")), "delete": (self.forwardClicked, _("Delete the character under the text buffer cursor")), "1": (self.keyNumberGlobal, _("Number or SMS style data entry")), "2": (self.keyNumberGlobal, _("Number or SMS style data entry")), "3": (self.keyNumberGlobal, _("Number or SMS style data entry")), "4": (self.keyNumberGlobal, _("Number or SMS style data entry")), "5": (self.keyNumberGlobal, _("Number or SMS style data entry")), "6": (self.keyNumberGlobal, _("Number or SMS style data entry")), "7": (self.keyNumberGlobal, _("Number or SMS style data entry")), "8": (self.keyNumberGlobal, _("Number or SMS style data entry")), "9": (self.keyNumberGlobal, _("Number or SMS style data entry")), "0": (self.keyNumberGlobal, _("Number or SMS style data entry")), "gotAsciiCode": (self.keyGotAscii, _("Keyboard data entry")) }, -2, description=_("Virtual KeyBoard Functions")) self.lang = language.getLanguage() self["prompt"] = Label(prompt) self["text"] = Input(text=text, maxSize=maxSize, visible_width=visible_width, type=type, currPos=len(text.decode("utf-8", "ignore")), allMarked=allMarked) self["list"] = VirtualKeyBoardList([]) self["mode"] = Label(_("INS")) self["locale"] = Label(_("Locale") + ": " + self.lang) self["language"] = Label(_("Language") + ": " + self.lang) self["key_info"] = StaticText(_("INFO")) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Save")) self["key_yellow"] = StaticText(_("Select locale")) self["key_blue"] = StaticText(self.shiftMsgs[1]) self["key_help"] = StaticText(_("HELP")) width, self.height = skin.parameters.get("VirtualKeyBoard", (45, 45)) self.width = self.key_bg and self.key_bg.size().width() or width self.shiftColors = skin.parameters.get("VirtualKeyBoardShiftColors", (0x00ffffff, 0x00ffffff, 0x0000ffff, 0x00ff00ff)) # Ensure there is a color for each shift level! self.language = None self.location = None self.keyList = [] self.shiftLevels = 0 self.shiftLevel = 0 self.keyboardWidth = 0 self.keyboardHeight = 0 self.maxKey = 0 self.overwrite = False self.selectedKey = None self.sms = NumericalTextInput(self.smsGotChar) self.smsChar = None self.setLocale() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) def arabic(self, base): keyList = copy.deepcopy(base) keyList[1][0][8] = u"\u066D" keyList.extend([[ [u"\u0630", u"\u0661", u"\u0662", u"\u0663", u"\u0664", u"\u0665", u"\u0666", u"\u0667", u"\u0668", u"\u0669", u"\u0660", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"\u062C", u"\u062F", u"\\"], [u"LAST", u"\u0634", u"\u0633", u"\u064A", u"\u0628", u"\u0644", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u0643", u"\u0637", u"", u"ENTER"], [u"SHIFT", u"\u0626", u"\u0621", u"\u0624", u"\u0631", u"\uFEFB", u"\u0649", u"\u0629", u"\u0648", u"\u0632", u"\u0638", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"\u0651", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"\u066D", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u00F7", u"\u00D7", u"\u061B", u">", u"<", u"|"], [u"LAST", u"\u0634", u"\u0633", u"\u064A", u"\u0628", u"\u0644", u"\u0623", u"\u0640", u"\u060C", u"/", u":", u"\"", u"", u"ENTER"], [u"SHIFT", u"\u0626", u"\u0621", u"\u0624", u"\u0631", u"\uFEF5", u"\u0622", u"\u0629", u",", u".", u"\u061F", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]]) return keyList def australian(self, base): keyList = copy.deepcopy(base) keyList[0][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".au", u".tv"]) keyList[1][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".au", u".tv"]) return keyList def belgian(self, base): keyList = copy.deepcopy(base) keyList[0][0][6] = u"\u00A7" keyList[0][0][8] = u"!" keyList[0][0][12] = u"-" keyList[0][2][12] = u"\u00B5" keyList[0][3][11] = u"=" keyList[1][0][0] = u"\u00B3" keyList[1][0][12] = u"_" keyList[1][1][11] = u"*" keyList[1][2][12] = u"\u00A3" keyList[1][3][11] = u"+" return keyList def dutch(self, base): keyList = copy.deepcopy(base) keyList[0][0][0] = u"@" keyList[0][0][11] = u"/" keyList[0][0][12] = u"\u00BA" keyList[0][1][11] = u"\u00A8" keyList[0][1][12] = u"*" keyList[0][1][13] = u"<" keyList[0][2][10] = u"+" keyList[0][2][11] = u"\u00B4" keyList[0][2][12] = u"\\" keyList[0][3] = [u"SHIFT", u"]", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"-", u"{", u"SHIFT"] keyList[0][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".nl", u".tv"]) keyList[1][0] = [u"\u00A7", u"!", u"\"", u"#", u"$", u"%", u"&", u"_", u"(", u")", u"'", u"?", u"~", u"BACKSPACE"] keyList[1][1][11] = u"^" keyList[1][1][12] = u"|" keyList[1][1][13] = u">" keyList[1][2][10] = u"\u00B1" keyList[1][2][11] = u"`" keyList[1][2][12] = u"\u00A6" keyList[1][3] = [u"SHIFT", u"[", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"=", u"}", u"SHIFT"] keyList[1][-1].extend([u"www.", u".com", u".net", u".org", u".edu", u".nl", u".tv"]) keyList.append([ [u"\u00AC", u"\u00B9", u"\u00B2", u"\u00B3", u"\u00BC", u"\u00BD", u"\u00BE", u"\u00A3", u"{", u"}", u"$", u"\\", u"", u"BACKSPACE"], [u"FIRST", u"", u"", u"\u20AC", u"\u00B6", u"", u"", u"", u"", u"", u"", u"", u"", u""], [u"LAST", u"", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"ENTER"], [u"SHIFT", u"\u00A6", u"\u00AB", u"\u00BB", u"\u00A2", u"", u"", u"", u"\u00B5", u"", u"\u00B7", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def estonian(self, base): keyList = copy.deepcopy(base) keyList[0][1][11] = u"\u00FC" keyList[0][1][12] = u"\u00F5" keyList[0][1][13] = u"\u0161" keyList[0][3][12] = u"\u017E" keyList[0][4].extend([u"[", u"]", u"\\"]) keyList[1][1][11] = u"\u00DC" keyList[1][1][12] = u"\u00D5" keyList[1][1][13] = u"\u0160" keyList[1][3][12] = u"\u017D" keyList[1][4].extend([u"{", u"}", u"\u00A3", u"$", u"\u20AC"]) del keyList[2] return keyList def finnish(self, base): keyList = copy.deepcopy(base) keyList[0][4].append(u"\\") keyList[1][4].extend([u"\u00A3", u"$", u"\u20AC"]) return keyList def latvian(self, base): keyList = copy.deepcopy(base) keyList.append([ [u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"BACKSPACE"], [u"FIRST", u"", u"\u0113", u"\u0112", u"\u0157", u"\u0156", u"\u016B", u"\u016A", u"\u012B", u"\u012A", u"\u014D", u"\u014C", u"", u""], [u"LAST", u"\u0101", u"\u0100", u"\u0161", u"\u0160", u"\u0123", u"\u0122", u"\u0137", u"\u0136", u"\u013C", u"\u013B", u"", u"", u"ENTER"], [u"SHIFT", u"\u017E", u"\u017D", u"\u010D", u"\u010C", u"", u"\u0146", u"\u0145", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def lithuanian(self, base): keyList = copy.deepcopy(base) keyList[0][0] = [u"`", u"\u0105", u"\u010D", u"\u0119", u"\u0117", u"\u012F", u"\u0161", u"\u0173", u"\u016B", u"", u"", u"", u"\u017E", u"BACKSPACE"] keyList[0][1][13] = u"" keyList[0][2][12] = u"\\" keyList[1][0] = [u"~", u"\u0104", u"\u010C", u"\u0118", u"\u0116", u"\u012E", u"\u0160", u"\u0172", u"\u016A", u"\u201E", u"\u201C", u"", u"\u017D", u"BACKSPACE"] keyList[1][1][13] = u"" keyList[1][2][12] = u"|" keyList.append([ [u"\u02DC", u"\u00BC", u"\u00BD", u"\u00BE", u"\u00A4", u"\u00A2", u"\u00B0", u"\u00A7", u"\u00D7", u"\u00AB", u"\u00BB", u"\u00F7", u"\u00B1", u"BACKSPACE"], [u"FIRST", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"\u00AD"], [u"LAST", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"ENTER"], [u"SHIFT", u"", u"\u00DF", u"\u00A9", u"\u00AE", u"\u2122", u"\u00AC", u"\u00A3", u"\u20AC", u"\u00B7", u"\u00B9", u"\u00B2", u"\u00B3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def norwegian(self, base): keyList = copy.deepcopy(base) keyList[0][0][0] = u"|" keyList[0][0][12] = u"\\" keyList[0][2][10] = u"\u00F8" keyList[0][2][11] = u"\u00E6" keyList[0][3][12] = u"\u00B5" keyList[1][0][0] = u"\u00A7" keyList[1][0][12] = u"@" keyList[1][2][10] = u"\u00D8" keyList[1][2][11] = u"\u00C6" keyList[1][3][12] = u"" keyList[1][4].extend([u"\u00A3", u"$", u"\u20AC"]) return keyList def persian(self, base): keyList = copy.deepcopy(base) keyList.append([ [u"\u00F7", u"\u06F1", u"\u06F2", u"\u06F3", u"\u06F4", u"\u06F5", u"\u06F6", u"\u06F7", u"\u06F8", u"\u06F9", u"\u06F0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"\u062C", u"\u0686", u"\u067E"], [u"LAST", u"\u0634", u"\u0633", u"\u0649", u"\u0628", u"\u0644", u"\u0622", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u06A9", u"\u06AF", u"ENTER"], [u"SHIFT", u"\u0638", u"\u0637", u"\u0698", u"\u0632", u"\u0631", u"\u0630", u"\u062F", u"\u0626", u"\u0621", u"\u0648", u"\u060C", u"\u061F", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ]) return keyList def polish(self, base): keyList = copy.deepcopy(base) keyList[0][3][11] = u"\u0105" keyList[0][3][12] = u"\u0107" keyList[0][-1].extend([u"\u0119", u"\u0142", u"\u0144", u"\u00F3", u"\u015B", u"\u017A", u"\u017C"]) keyList[1][2][12] = u"\u20AC" keyList[1][3][11] = u"\u0104" keyList[1][3][12] = u"\u0106" keyList[1][-1].extend([u"\u0118", u"\u0141", u"\u0143", u"\u00D3", u"\u015A", u"\u0179", u"\u017B"]) return keyList def swedish(self, base): keyList = copy.deepcopy(base) keyList[0][4].extend([u"\\", u"\u00B5"]) keyList[1][4].extend([u"\u00A3", u"$", u"\u20AC"]) return keyList def ukranian(self, base): keyList = copy.deepcopy(base) keyList[0][1][12] = u"\u0457" keyList[0][2][2] = u"\u0456" keyList[0][2][11] = u"\u0454" keyList[0][3][11] = u"\u0491" keyList[0][4].append(u"@") keyList[1][1][12] = u"\u0407" keyList[1][2][2] = u"\u0406" keyList[1][2][11] = u"\u0404" keyList[1][3][11] = u"\u0490" keyList[1][4].append(u"#") return keyList def unitedKingdom(self, base): keyList = copy.deepcopy(base) keyList[0][1][13] = u"\u00A6" keyList[0][2][12] = u"#" keyList[0][3] = [u"SHIFT", u"\\", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"", u"SHIFT"] # keyList[0][-1].extend([u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA"]) # English users don't use the accented characters. keyList[1][0][0] = u"\u00AC" keyList[1][0][2] = u"\"" keyList[1][0][3] = u"\u00A3" keyList[1][1][13] = u"\u20AC" keyList[1][2][11] = u"@" keyList[1][2][12] = u"~" keyList[1][3] = [u"SHIFT", u"|", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"", u"SHIFT"] # keyList[1][-1].extend([u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA"]) # English users don't use the accented characters. return keyList def smsGotChar(self): if self.smsChar and self.selectAsciiKey(self.smsChar): self.processSelect() def setLocale(self): self.language, self.location, self.keyList = self.locales.get(self.lang, [None, None, None]) if self.language is None or self.location is None or self.keyList is None: self.lang = "en_EN" self.language = _("English") self.location = _("Various") self.keyList = self.english self.shiftLevel = 0 self["locale"].setText(_("Locale") + ": " + self.lang + " (" + self.language + " - " + self.location + ")") def buildVirtualKeyBoard(self): self.shiftLevels = len(self.keyList) if self.shiftLevel >= self.shiftLevels: self.shiftLevel = 0 self.keyboardWidth = len(self.keyList[self.shiftLevel][0]) self.keyboardHeight = len(self.keyList[self.shiftLevel]) self.maxKey = self.keyboardWidth * (self.keyboardHeight - 1) + len(self.keyList[self.shiftLevel][-1]) - 1 # print "[VirtualKeyBoard] DEBUG: Width=%d, Height=%d, Keys=%d, maxKey=%d, shiftLevels=%d" % (self.keyboardWidth, self.keyboardHeight, self.maxKey + 1, self.maxKey, self.shiftLevels) self.list = [] for keys in self.keyList[self.shiftLevel]: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.previousSelectedKey = None if self.selectedKey is None: self.selectedKey = self.keyboardWidth self.markSelectedKey() def virtualKeyBoardEntryComponent(self, keys): res = [keys] text = [] offset = 14 - self.keyboardWidth # 14 represents the maximum buttons per row as defined here and in the skin (14 x self.width). x = self.width * offset / 2 if offset % 2: x += self.width / 2 for key in keys: image = self.keyImages[self.shiftLevel].get(key, None) if image: width = image.size().width() res.append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(width, self.height), png=image)) else: width = self.width res.append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(width, self.height), png=self.keyBackgrounds.get(key, self.key_bg))) if len(key) > 1: # NOTE: UTF8 / Unicode glyphs only count as one character here. text.append(MultiContentEntryText(pos=(x, 0), size=(width, self.height), font=1, flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER, text=_(key.encode("utf-8")), color=self.shiftColors[self.shiftLevel])) else: text.append(MultiContentEntryText(pos=(x, 0), size=(width, self.height), font=0, flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER, text=key.encode("utf-8"), color=self.shiftColors[self.shiftLevel])) x += width return res + text def markSelectedKey(self): if self.previousSelectedKey is not None: self.list[self.previousSelectedKey / self.keyboardWidth] = self.list[self.previousSelectedKey / self.keyboardWidth][:-1] if self.selectedKey > self.maxKey: self.selectedKey = self.maxKey x = self.list[self.selectedKey / self.keyboardWidth][self.selectedKey % self.keyboardWidth + 1][1] if self.key_sel is None: width = self.width else: width = self.key_sel.size().width() self.list[self.selectedKey / self.keyboardWidth].append(MultiContentEntryPixmapAlphaBlend(pos=(x, 0), size=(width, self.height), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self["list"].setList(self.list) def okClicked(self): # Deprecated legacy interface to new processSelect used by YouTubeVirtualKeyBoard self.processSelect() def processSelect(self): self.smsChar = None text = self.keyList[self.shiftLevel][self.selectedKey / self.keyboardWidth][self.selectedKey % self.keyboardWidth].encode("UTF-8") if text == u"": pass elif text == u"ALL": self["text"].markAll() elif text == u"BACK": self["text"].deleteBackward() elif text == u"BACKSPACE": self["text"].deleteBackward() elif text == u"BLANK": pass elif text == u"CLR": self["text"].deleteAllChars() self["text"].update() elif text == u"ENTER": self.save() elif text == u"ESC": self.cancel() elif text == u"EXIT": self.cancel() elif text == u"FIRST": self["text"].home() elif text == u"LOC": self.localeMenu() elif text == u"LAST": self["text"].end() elif text == u"LEFT": self["text"].left() elif text == u"OK": self.save() elif text == u"RIGHT": self["text"].right() elif text == u"SAVE": self.save() elif text == u"SHIFT": self.shiftClicked() elif text == u"Shift": self.shiftClicked() elif text == u"SPACE": self["text"].char(" ".encode("UTF-8")) else: self["text"].char(text.encode("UTF-8")) def cancel(self): self.close(None) def save(self): self.close(self["text"].getText()) def localeMenu(self): languages = [] for locale, data in self.locales.iteritems(): languages.append((data[0] + " - " + data[1] + " (" + locale + ")", locale)) languages = sorted(languages) index = 0 default = 0 for item in languages: if item[1] == self.lang: default = index break index += 1 self.session.openWithCallback(self.localeMenuCallback, ChoiceBox, _("Available locales are:"), list=languages, selection=default, keys=[]) def localeMenuCallback(self, choice): if choice: self.lang = choice[1] self.setLocale() self.buildVirtualKeyBoard() def shiftClicked(self): self.smsChar = None self.shiftLevel = (self.shiftLevel + 1) % self.shiftLevels nextLevel = (self.shiftLevel + 1) % self.shiftLevels self["key_blue"].setText(self.shiftMsgs[nextLevel]) self.buildVirtualKeyBoard() def keyToggleOW(self): self["text"].toggleOverwrite() self.overwrite = not self.overwrite if self.overwrite: self["mode"].setText(_("OVR")) else: self["mode"].setText(_("INS")) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def cursorFirst(self): self["text"].home() def cursorLeft(self): self["text"].left() def cursorRight(self): self["text"].right() def cursorLast(self): self["text"].end() def up(self): self.smsChar = None self.selectedKey -= self.keyboardWidth if self.selectedKey < 0: self.selectedKey = self.maxKey / self.keyboardWidth * self.keyboardWidth + self.selectedKey % self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey -= self.keyboardWidth self.markSelectedKey() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / self.keyboardWidth * self.keyboardWidth + (self.selectedKey + self.keyboardWidth - 1) % self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey = self.maxKey self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / self.keyboardWidth * self.keyboardWidth + (self.selectedKey + 1) % self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey = self.selectedKey / self.keyboardWidth * self.keyboardWidth self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += self.keyboardWidth if self.selectedKey > self.maxKey: self.selectedKey %= self.keyboardWidth self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode("utf-8"))): self.processSelect() def selectAsciiKey(self, char): if char == u" ": char = u"SPACE" self.shiftLevel = -1 for keyList in (self.keyList): self.shiftLevel = (self.shiftLevel + 1) % self.shiftLevels self.buildVirtualKeyBoard() selkey = 0 for keys in keyList: for key in keys: if key == char: self.selectedKey = selkey self.markSelectedKey() return True selkey += 1 return False
def __init__(self, session, text='', filename='', currDir=None, bookmarks=None, userMode=False, windowTitle=_('Select location'), minFree=None, autoAdd=False, editDir=False, inhibitDirs=None, inhibitMounts=None): if not inhibitDirs: inhibitDirs = [] if not inhibitMounts: inhibitMounts = [] Screen.__init__(self, session) NumericalTextInput.__init__(self, handleTimeout=False) HelpableScreen.__init__(self) self.setUseableChars(u'1234567890abcdefghijklmnopqrstuvwxyz') self.qs_timer = eTimer() self.qs_timer.callback.append(self.timeout) self.qs_timer_type = 0 self.curr_pos = -1 self.quickselect = '' self['text'] = Label(text) self['textbook'] = Label(_('Bookmarks')) self.text = text self.filename = filename self.minFree = minFree self.realBookmarks = bookmarks self.bookmarks = bookmarks and bookmarks.value[:] or [] self.userMode = userMode self.autoAdd = autoAdd self.editDir = editDir self.inhibitDirs = inhibitDirs self['filelist'] = FileList(currDir, showDirectories=True, showFiles=False, inhibitMounts=inhibitMounts, inhibitDirs=inhibitDirs) self['booklist'] = MenuList(self.bookmarks) self['key_green'] = Button(_('OK')) self['key_yellow'] = Button(_('Rename')) self['key_blue'] = Button(_('Remove bookmark')) self['key_red'] = Button(_('Cancel')) self['green'] = Pixmap() self['yellow'] = Pixmap() self['blue'] = Pixmap() self['red'] = Pixmap() self['target'] = Label() self['targetfreespace'] = Label() if self.userMode: self.usermodeOn() class LocationBoxActionMap(HelpableActionMap): def __init__(self, parent, context, actions=None, prio=0): if not actions: actions = {} HelpableActionMap.__init__(self, parent, context, actions, prio) self.box = parent def action(self, contexts, action): self.box.timeout(force=True) return HelpableActionMap.action(self, contexts, action) self['WizardActions'] = LocationBoxActionMap(self, 'WizardActions', { 'ok': (self.ok, _('select')), 'back': (self.cancel, _('Cancel')) }, -2) self['DirectionActions'] = LocationBoxActionMap( self, 'DirectionActions', { 'left': self.left, 'right': self.right, 'up': self.up, 'down': self.down }, -2) self['ColorActions'] = LocationBoxActionMap( self, 'ColorActions', { 'red': self.cancel, 'green': self.select, 'yellow': self.changeName, 'blue': self.addRemoveBookmark }, -2) self['EPGSelectActions'] = LocationBoxActionMap( self, 'EPGSelectActions', { 'prevService': (self.switchToBookList, _('switch to bookmarks')), 'nextService': (self.switchToFileList, _('switch to filelist')) }, -2) self['MenuActions'] = LocationBoxActionMap( self, 'MenuActions', {'menu': (self.showMenu, _('menu'))}, -2) self['NumberActions'] = NumberActionMap( ['NumberActions'], { '1': self.keyNumberGlobal, '2': self.keyNumberGlobal, '3': self.keyNumberGlobal, '4': self.keyNumberGlobal, '5': self.keyNumberGlobal, '6': self.keyNumberGlobal, '7': self.keyNumberGlobal, '8': self.keyNumberGlobal, '9': self.keyNumberGlobal, '0': self.keyNumberGlobal }) self.onShown.extend((boundFunction(self.setTitle, _('Select Location')), self.updateTarget, self.showHideRename)) self.onLayoutFinish.append(self.switchToFileListOnStart) self.onClose.append(self.disableTimer)
class VirtualKeyBoard(Screen): def __init__(self, session, title="", text=""): Screen.__init__(self, session) self.setTitle(_(title)) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.text = text self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self["country"] = Label(_("Keyboard language")) self["header"] = Label(title) self["text"] = Label(self.text) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.backClicked, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "back": self.exit, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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"], [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"CLEAR"], [u"SHIFT", u"SPACE", u"@", u"ß", 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"*"], [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"?", u"\\", u"OK"]] self.nextLang = 'en_EN' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*"], [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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]] self.nextLang = 'en_EN' elif self.lang == 'fi_FI': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", 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"*"], [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"?", u"\\", u"Ĺ", u"OK"]] self.nextLang = 'en_EN' elif self.lang == 'ru_RU': 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"й", u"ц", u"у", u"к", u"е", u"н", u"г", u"ш", u"щ", u"з", u"х", u"+"], [u"ф", u"ы", u"в", u"а", u"б", u"п", u"р", u"о", u"л", u"д", u"ж", u"#"], [u"<", u"э", u"я", u"ч", u"с", u"м", u"и", u"т", u",", ".", u"-", u"CLEAR"], [u"SHIFT", u"SPACE", u"@", u"ь", u"ю", u"ъ", u"OK"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], [u"Й", u"Ц", u"У", u"К", u"Е", u"Н", u"Г", u"Ш", u"Щ", u"З", u"I", u"Х", u"*"], [u"Ф", u"Ы", u"В", u"А", u"П", u"Р", u"О", u"О", u"Л", u"Д", u"Ж", u"'"], [u">", u"Э", u"Я", u"Ч", u"С", u"М", u"И", u"Т", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Б", u"Ю", u"Ъ", u"OK"]] self.nextLang = 'en_EN' elif self.lang == 'sv_SE': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", 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"*"], [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"?", u"\\", u"Ĺ", u"OK"]] self.nextLang = 'en_EN' elif self.lang =='sk_SK': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", 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"*"], [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"], [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]] self.nextLang = 'en_EN' elif self.lang == 'cs_CZ': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR"], [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*"], [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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]] self.nextLang = 'en_EN' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"CLEAR"], [u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK"]] self.nextLang = 'en_EN' else: 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"y", 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"z", 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"Y", 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"Z", 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' self.nextLang = language.getLanguage() #self["country"].setText(self.lang + (_(" press Yellow to change Keyboard language"))) self.max_key=47+len(self.keys_list[4]) def buildVirtualKeyBoard(self, selectedKey=0): list = [] if self.shiftMode: self.k_list = self.shiftkeys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append(VirtualKeyBoardEntryComponent(keys, selectedKey,True)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1,True)) selectedKey -= 12 else: self.k_list = self.keys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append(VirtualKeyBoardEntryComponent(keys, selectedKey)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1)) selectedKey -= 12 self["list"].setList(list) def backClicked(self): self.smsChar = None self.text = self.text[:-1] self["text"].setText(self.text.encode("utf-8")) def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard(self.selectedKey) def okClicked(self): self.smsChar = None if self.shiftMode: list = self.shiftkeys_list else: list = self.keys_list selectedKey = self.selectedKey text = None for x in list: if selectedKey < 12: if selectedKey < len(x): text = x[selectedKey] break else: selectedKey -= 12 if text is None: return text = text.encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": ss=unicode(self["text"].getText(),"utf-8") ss=ss[:-1] self.text = str(ss.encode("utf-8")) self["text"].setText(self.text) elif text == "CLEAR": self.text = "" self["text"].setText(self.text.encode("utf-8")) elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self.text += " " self["text"].setText(self.text.encode("utf-8")) elif text == "OK": self.close(self.text.encode("utf-8")) else: self.text += text self["text"].setText(self.text.encode("utf-8")) def ok(self): self.close(self.text.encode("utf-8")) def exit(self): self.close(None) def left(self): self.smsChar = None self.selectedKey -= 1 if self.selectedKey == -1: self.selectedKey = 11 elif self.selectedKey == 11: self.selectedKey = 23 elif self.selectedKey == 23: self.selectedKey = 35 elif self.selectedKey == 35: self.selectedKey = 47 elif self.selectedKey == 47: self.selectedKey = self.max_key self.showActiveKey() def right(self): self.smsChar = None self.selectedKey += 1 if self.selectedKey == 12: self.selectedKey = 0 elif self.selectedKey == 24: self.selectedKey = 12 elif self.selectedKey == 36: self.selectedKey = 24 elif self.selectedKey == 48: self.selectedKey = 36 elif self.selectedKey > self.max_key: self.selectedKey = 48 self.showActiveKey() def up(self): self.smsChar = None self.selectedKey -= 12 if (self.selectedKey < 0) and (self.selectedKey > (self.max_key-60)): self.selectedKey += 48 elif self.selectedKey < 0: self.selectedKey += 60 self.showActiveKey() def down(self): self.smsChar = None self.selectedKey += 12 if (self.selectedKey > self.max_key) and (self.selectedKey > 59): self.selectedKey -= 60 elif self.selectedKey > self.max_key: self.selectedKey -= 48 self.showActiveKey() def showActiveKey(self): self.buildVirtualKeyBoard(self.selectedKey) def keyNumberGlobal(self, number): if number == 1: self.text += "1" self["text"].setText(self.text.encode("utf-8")) elif number == 2: self.text += "2" self["text"].setText(self.text.encode("utf-8")) elif number == 3: self.text += "3" self["text"].setText(self.text.encode("utf-8")) elif number == 4: self.text += "4" self["text"].setText(self.text.encode("utf-8")) elif number == 5: self.text += "5" self["text"].setText(self.text.encode("utf-8")) elif number == 6: self.text += "6" self["text"].setText(self.text.encode("utf-8")) elif number == 7: self.text += "7" self["text"].setText(self.text.encode("utf-8")) elif number == 8: self.text += "8" self["text"].setText(self.text.encode("utf-8")) elif number == 9: self.text += "9" self["text"].setText(self.text.encode("utf-8")) elif number == 0: self.text += "0" self["text"].setText(self.text.encode("utf-8")) else: self.smsChar = self.sms.getKey(number) print "SMS", number, self.smsChar self.selectAsciiKey(self.smsChar) def smsOK(self): print "SMS ok", self.smsChar if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.shiftMode = (keyslist is self.shiftkeys_list) self.selectedKey = selkey self.showActiveKey() return True selkey += 1 return False
def __init__(self, session, title=_("Virtual KeyBoard Text:"), text="", maxSize=False, visible_width=False, type=Input.TEXT, currPos=0, allMarked=False): Screen.__init__(self, session) HelpableScreen.__init__(self) self.setTitle(_("Virtual keyboard")) prompt = title # Title should only be used for screen titles! self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_bg.png")) self.key_red_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_red.png")) self.key_green_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_green.png")) self.key_yellow_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_yellow.png")) self.key_blue_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_blue.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_backspace.png")) self.key_enter = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_enter.png")) self.key_first = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_first.png")) self.key_last = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_last.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_right.png")) self.key_shift0 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift0.png")) self.key_shift1 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift1.png")) self.key_shift2 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift2.png")) self.key_shift3 = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_shift3.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space.png")) self.key_space_alt = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "buttons/vkey_space_alt.png")) self.keyBackgrounds = { "EXIT": self.key_red_bg, "OK": self.key_green_bg, "SAVE": self.key_green_bg, "LOC": self.key_yellow_bg, "SHFT": self.key_blue_bg } self.keyImages = [{ "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift0, "SPACE": self.key_space_alt }, { "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift1, "SPACE": self.key_space_alt }, { "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift2, "SPACE": self.key_space_alt }, { "BACKSPACE": self.key_backspace, "ENTER": self.key_enter, "FIRST": self.key_first, "LAST": self.key_last, "LEFT": self.key_left, "RIGHT": self.key_right, "SHIFT": self.key_shift3, "SPACE": self.key_space_alt }] self.shiftMsgs = [ _("Lower case"), _("Upper case"), _("Special 1"), _("Special 2") ] self.english = [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"[", u"]", u"\\"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u";", u"'", u"", u"ENTER"], [u"SHIFT", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"/", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"{", u"}", u"|"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u":", u"\"", u"", u"ENTER"], [u"SHIFT", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"<", u">", u"?", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.french = [ [ [u"\u00B2", u"&", u"\u00E9", u"\"", u"'", u"(", u"-", u"\u00E8", u"_", u"\u00E7", u"\u00E0", u")", u"=", u"BACKSPACE"], [u"FIRST", u"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"$", u"[", u"]"], [u"LAST", u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"\u00F9", u"*", u"ENTER"], [u"SHIFT", u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"!", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"#", u"@", u"`"] ], [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00B0", u"+", u"BACKSPACE"], [u"FIRST", u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00A3", u"{", u"}"], [u"LAST", u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"%", u"\u00B5", u"ENTER"], [u"SHIFT", u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"/", u"\u00A7", u"\u00A6", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"~", u"^", u"\\"] ], [ [u"", u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"", u"BACKSPACE"], [u"FIRST", u"", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u""], [u"LAST", u"", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"", u"ENTER"], [u"SHIFT", u"", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.german = [ [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00DF", u"'", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FC", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"+", U"ENTER"], [u"SHIFT", u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"#", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"|", u"\\", u"\u00B5"] ], [ [u"\u00B0", u"!", u"\"", u"\u00A7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"`", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"\u00DC", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", U"ENTER"], [u"SHIFT", u">", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"@", U"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u20AC", u"\u00B2", u"\u00B3"] ] ] self.russian = [ [ [u"\u0451", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u"\u0439", u"\u0446", u"\u0443", u"\u043A", u"\u0435", u"\u043D", u"\u0433", u"\u0448", u"\u0449", u"\u0437", u"\u0445", u"\u044A", u"\u00A7"], [u"LAST", u"\u0444", u"\u044B", u"\u0432", u"\u0430", u"\u043F", u"\u0440", u"\u043E", u"\u043B", u"\u0434", u"\u0436", u"\u044D", u"\\", u"ENTER"], [u"SHIFT", u"\u044F", u"\u0447", u"\u0441", u"\u043C", u"\u0438", u"\u0442", u"\u044C", u"\u0431", u"\u044E", u".", u"@", u"&", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"<"] ], [ [u"\u0401", u"!", u"\"", u"\u2116", u";", u"%", u":", u"?", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u"\u0419", u"\u0426", u"\u0423", u"\u041A", u"\u0415", u"\u041D", u"\u0413", u"\u0428", u"\u0429", u"\u0417", u"\u0425", u"\u042A", u"\u20BD"], [u"LAST", u"\u0424", u"\u042B", u"\u0412", u"\u0410", u"\u041F", u"\u0420", u"\u041E", u"\u041B", u"\u0414", u"\u0416", u"\u042D", u"/", u"ENTER"], [u"SHIFT", u"\u042F", u"\u0427", u"\u0421", u"\u041C", u"\u0418", u"\u0422", u"\u042C", u"\u0411", u"\u042E", u",", u"#", u"$", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u">"] ] ] self.scandinavian = [ [ [u"\u00A7", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"+", u"@", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u00E5", u"[", u"]"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F6", u"\u00E4", u"'", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u00AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"\u00BD", u"!", u"\"", u"#", u"\u00A4", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"|", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u00C5", u"{", u"}"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D6", u"\u00C4", u"*", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00BB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"\u00E2", u"\u00EA", u"\u00EE", u"\u00F4", u"\u00FB", u"\u00E4", u"\u00EB", u"\u00EF", u"\u00F6", u"\u00FC", u"\u00E3", u"\u00F5", u"BACKSPACE"], [u"FIRST", u"\u00E0", u"\u00E8", u"\u00EC", u"\u00F2", u"\u00F9", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"", u"", u""], [u"LAST", u"\u00C2", u"\u00CA", u"\u00CE", u"\u00D4", u"\u00DB", u"\u00C4", u"\u00CB", u"\u00CF", u"\u00D6", u"\u00DC", u"\u00C3", u"\u00D5", u"ENTER"], [u"SHIFT", u"\u00C0", u"\u00C8", u"\u00CC", u"\u00D2", u"\u00D9", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ] self.spanish = [ [ [u"\\", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"'", u"\u00A1", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"@", u"+", u"\u00E7"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00F1", u"[", u"]", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u20AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00E1", u"\u00E9", u"\u00ED", u"\u00F3", u"\u00FA", u"\u00FC"] ], [ [u"|", u"!", u"\"", u"\u00B7", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"?", u"\u00BF", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"#", u"*", u"\u00C7"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00D1", u"{", u"}", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"\u00AC", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"", u"\u00C1", u"\u00C9", u"\u00CD", u"\u00D3", u"\u00DA", u"\u00DC"] ] ] self.locales = { "ar_BH": [_("Arabic"), _("Bahrain"), self.arabic(self.english)], "ar_EG": [_("Arabic"), _("Egypt"), self.arabic(self.english)], "ar_JO": [_("Arabic"), _("Jordan"), self.arabic(self.english)], "ar_KW": [_("Arabic"), _("Kuwait"), self.arabic(self.english)], "ar_LB": [_("Arabic"), _("Lebanon"), self.arabic(self.english)], "ar_OM": [_("Arabic"), _("Oman"), self.arabic(self.english)], "ar_QA": [_("Arabic"), _("Qatar"), self.arabic(self.english)], "ar_SA": [_("Arabic"), _("Saudi Arabia"), self.arabic(self.english)], "ar_SY": [_("Arabic"), _("Syrian Arab Republic"), self.arabic(self.english)], "ar_AE": [_("Arabic"), _("United Arab Emirates"), self.arabic(self.english)], "ar_YE": [_("Arabic"), _("Yemen"), self.arabic(self.english)], "cs_CZ": [_("Czech"), _("Czechia"), [ [ [u";", u"+", u"\u011B", u"\u0161", u"\u010D", u"\u0159", u"\u017E", u"\u00FD", u"\u00E1", u"\u00ED", u"\u00E9", u"=", u"", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"z", u"u", u"i", u"o", u"p", u"\u00FA", u")", u""], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u016F", u"\u00A7", u"", u"ENTER"], [u"SHIFT", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"\u0148", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"%", u"", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Z", u"U", u"I", u"O", u"P", u"/", u"(", u""], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\"", u"!", u"'", u"ENTER"], [u"SHIFT", u"Y", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"_", u"\u0147", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"~", u"\u011A", u"\u0160", u"\u010C", u"\u0158", u"\u017D", u"\u00DD", u"\u00C1", u"\u00CD", u"\u00C9", u"`", u"", u"BACKSPACE"], [u"FIRST", u"\\", u"|", u"\u20AC", u"\u0165", u"\u0164", u"", u"", u"", u"\u00F3", u"\u00D3", u"\u00DA", u"\u00F7", u"\u00D7"], [u"LAST", u"", u"\u0111", u"\u00D0", u"[", u"]", u"\u010F", u"\u010E", u"\u0142", u"\u0141", u"\u016E", u"$", u"\u00DF", u"ENTER"], [u"SHIFT", u"", u"#", u"&", u"@", u"{", u"}", u"", u"<", u">", u"*", u"", u"\u00A4", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "nl_NL": [_("Dutch"), _("Netherlands"), self.dutch(self.english)], "en_AU": [_("English"), _("Australian"), self.australian(self.english)], "en_GB": [_("English"), _("United Kingdom"), self.unitedKingdom(self.english)], "en_US": [_("English"), _("United States"), self.english], "en_EN": [_("English"), _("Various"), self.english], "et_EE": [_("Estonian"), _("Estonia"), self.estonian(self.scandinavian)], "fi_FI": [_("Finnish"), _("Finland"), self.finnish(self.scandinavian)], "fr_BE": [_("French"), _("Belgian"), self.belgian(self.french)], "fr_FR": [_("French"), _("France"), self.french], "de_DE": [_("German"), _("Germany"), self.german], "el_GR": [_("Greek (Modern)"), _("Greece"), [ [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"-", u"=", u"BACKSPACE"], [u"FIRST", u";", u"\u03C2", u"\u03B5", u"\u03C1", u"\u03C4", u"\u03C5", u"\u03B8", u"\u03B9", u"\u03BF", u"\u03C0", u"[", u"]", u"/"], [u"LAST", u"\u03B1", u"\u03C3", u"\u03B4", u"\u03C6", u"\u03B3", u"\u03B7", u"\u03BE", u"\u03BA", u"\u03BB", u"", u"'", u"\\", u"ENTER"], [u"SHIFT", u"<", u"\u03B6", u"\u03C7", u"\u03C8", u"\u03C9", u"\u03B2", u"\u03BD", u"\u03BC", u",", ".", u"\u03CA", u"\u03CB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u03AC", u"\u03AD", u"\u03AE", u"\u03AF", u"\u03CC", u"\u03CD", u"\u03CE"] ], [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"_", u"+", u"BACKSPACE"], [u"FIRST", u":", u"", u"\u0395", u"\u03A1", u"\u03A4", u"\u03A5", u"\u0398", u"\u0399", u"\u039F", u"\u03A0", u"{", u"}", u"?"], [u"LAST", u"\u0391", u"\u03A3", u"\u0394", u"\u03A6", u"\u0393", u"\u0397", u"\u039E", u"\u039A", u"\u039B", u"", u"\"", u"|", u"ENTER"], [u"SHIFT", u">", u"\u0396", u"\u03A7", u"\u03A8", u"\u03A9", u"\u0392", u"\u039D", u"\u039C", u"<", u">", u"\u03AA", u"\u03AB", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u0386", u"\u0388", u"\u0389", u"\u038A", u"\u038C", u"\u038E", u"\u038F"] ], [ [u"", u"", u"\u00B2", u"\u00B3", u"\u00A3", u"\u00A7", u"\u00B6", u"\u20AC", u"\u00A4", u"\u00A6", u"\u00B0", u"\u00B1", u"\u00BD", u"BACKSPACE"], [u"FIRST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u""], [u"LAST", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "lv_LV": [_("Latvian"), _("Latvia"), self.latvian(self.english)], "lt_LT": [_("Lithuanian"), _("Lithuania"), self.lithuanian(self.english)], "nb_NO": [_("Norwegian"), _("Norway"), self.norwegian(self.scandinavian)], "fa_IR": [_("Persian"), _("Iran, Islamic Republic"), self.persian(self.english)], "pl_PL": [_("Polish"), _("Poland"), self.polish(self.english)], "ru_RU": [_("Russian"), _("Russian Federation"), self.russian], "sk_SK": [_("Slovak"), _("Slovakia"), [ [ [u"~", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"\u00E1", u"\u00E4", u"BACKSPACE"], [u"FIRST", u"q", u"w", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"\u010D", u"\u010F", u"\u00E9"], [u"LAST", u"a", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"\u00ED", u"\u013A", u"\u013E", u"ENTER"], [u"SHIFT", u"<", u"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"\u0148", u"\u00F3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00F4", u"\u0155", u"\u0161", u"\u0165", u"\u00FA", u"\u00FD", u"\u017E"] ], [ [u"`", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"0", u"\u00C1", u"\u00C4", u"BACKSPACE"], [u"FIRST", u"Q", u"W", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"\u010C", u"\u010E", u"\u00C9"], [u"LAST", u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"\u00CD", u"\u0139", u"\u013D", u"ENTER"], [u"SHIFT", u">", u"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"?", u":", u"\u0147", u"\u00D3", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE", u"\u00D4", u"\u0154", u"\u0160", u"\u0164", u"\u00DA", u"\u00DD", u"\u017D"] ], [ [u"", u"", u"\u00A7", u"\u00B0", u"\u00A4", u"\u20AC", u"\u00DF", u"\u0111", u"\u0110", u"\u0142", u"\u0141", u"", u"", u"BACKSPACE"], [u"FIRST", u"", u"", u"'", u"\"", u"+", u"-", u"\u00D7", u"\u00F7", u"=", u"_", u"~", u"", u""], [u"LAST", u"", u"", u"/", u"\\", u";", u"[", u"]", u"{", u"}", u"|", u"", u"", u"ENTER"], [u"SHIFT", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "es_ES": [_("Spanish"), _("Spain"), self.spanish], "sv_SE": [_("Swedish"), _("Sweden"), self.swedish(self.scandinavian)], "th_TH": [_("Thai"), _("Thailand"), [ [ [u"", u"", u"\u0E45", u"\u0E20", u"\u0E16", u"\u0E38", u"\u0E36", u"\u0E04", u"\u0E15", u"\u0E08", u"\u0E02", u"\u0E0A", u"", u"BACKSPACE"], [u"FIRST", u"\u0E46", u"\u0E44", u"\u0E33", u"\u0E1E", u"\u0E30", u"\u0E31", u"\u0E35", u"\u0E23", u"\u0E19", u"\u0E22", u"\u0E1A", u"\u0E25", u""], [u"LAST", u"\u0E1F", u"\u0E2B", u"\u0E01", u"\u0E14", u"\u0E40", u"\u0E49", u"\u0E48", u"\u0E32", u"\u0E2A", u"\u0E27", u"\u0E07", u"\u0E03", u"OK"], [u"SHIFT", u"\u0E1C", u"\u0E1B", u"\u0E41", u"\u0E2D", u"\u0E34", u"\u0E37", u"\u0E17", u"\u0E21", u"\u0E43", u"\u0E1D", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ], [ [u"", u"", u"\u0E51", u"\u0E52", u"\u0E53", u"\u0E54", u"\u0E39", u"\u0E55", u"\u0E56", u"\u0E57", u"\u0E58", u"\u0E59", u"", u"BACKSPACE"], [u"FIRST", u"\u0E50", u"", u"\u0E0E", u"\u0E11", u"\u0E18", u"\u0E4D", u"\u0E4A", u"\u0E13", u"\u0E2F", u"\u0E0D", u"\u0E10", u"\u0E05", u""], [u"LAST", u"\u0E24", u"\u0E06", u"\u0E0F", u"\u0E42", u"\u0E0C", u"\u0E47", u"\u0E4B", u"\u0E29", u"\u0E28", u"\u0E0B", u"", u"\u0E3F", u"OK"], [u"SHIFT", u"", u"", u"\u0E09", u"\u0E2E", u"\u0E3A", u"\u0E4C", u"", u"\u0E12", u"\u0E2C", u"\u0E26", u"", u"", u"SHIFT"], [u"EXIT", u"LOC", u"LEFT", u"RIGHT", u"ALL", u"CLR", u"SPACE"] ] ]], "uk_UA": [_("Ukrainian"), _("Ukraine"), self.ukranian(self.russian)] } self["actions"] = HelpableNumberActionMap(self, "VirtualKeyBoardActions", { "cancel": (self.cancel, _("Cancel any text changes and exit")), "save": (self.save, _("Save any text changes and exit")), "locale": (self.localeMenu, _("Select the virtual keyboard locale from a menu")), "shift": (self.shiftClicked, _("Select the virtual keyboard shifted character set")), "select": (self.processSelect, _("Select the character or action under the virtual keyboard cursor")), "up": (self.up, _("Move the virtual keyboard cursor up")), "left": (self.left, _("Move the virtual keyboard cursor left")), "right": (self.right, _("Move the virtual keyboard cursor right")), "down": (self.down, _("Move the virtual keyboard cursor down")), "first": (self.cursorFirst, _("Move the text buffer cursor to the first character")), "prev": (self.cursorLeft, _("Move the text buffer cursor left")), "next": (self.cursorRight, _("Move the text buffer cursor right")), "last": (self.cursorLast, _("Move the text buffer cursor to the last character")), "toggleOverwrite": (self.keyToggleOW, _("Toggle new text inserts before or overwrites existing text")), "backspace": (self.backClicked, _("Delete the character to the left of text buffer cursor")), "delete": (self.forwardClicked, _("Delete the character under the text buffer cursor")), "1": (self.keyNumberGlobal, _("Number or SMS style data entry")), "2": (self.keyNumberGlobal, _("Number or SMS style data entry")), "3": (self.keyNumberGlobal, _("Number or SMS style data entry")), "4": (self.keyNumberGlobal, _("Number or SMS style data entry")), "5": (self.keyNumberGlobal, _("Number or SMS style data entry")), "6": (self.keyNumberGlobal, _("Number or SMS style data entry")), "7": (self.keyNumberGlobal, _("Number or SMS style data entry")), "8": (self.keyNumberGlobal, _("Number or SMS style data entry")), "9": (self.keyNumberGlobal, _("Number or SMS style data entry")), "0": (self.keyNumberGlobal, _("Number or SMS style data entry")), "gotAsciiCode": (self.keyGotAscii, _("Keyboard data entry")) }, -2, description=_("Virtual KeyBoard Functions")) self.lang = language.getLanguage() self["prompt"] = Label(prompt) self["text"] = Input(text=text, maxSize=maxSize, visible_width=visible_width, type=type, currPos=len(text.decode("utf-8", "ignore")), allMarked=allMarked) self["list"] = VirtualKeyBoardList([]) self["mode"] = Label(_("INS")) self["locale"] = Label(_("Locale") + ": " + self.lang) self["language"] = Label(_("Language") + ": " + self.lang) self["key_info"] = StaticText(_("INFO")) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText(_("Save")) self["key_yellow"] = StaticText(_("Select locale")) self["key_blue"] = StaticText(self.shiftMsgs[1]) self["key_help"] = StaticText(_("HELP")) width, self.height = skin.parameters.get("VirtualKeyBoard", (45, 45)) self.width = self.key_bg and self.key_bg.size().width() or width self.shiftColors = skin.parameters.get("VirtualKeyBoardShiftColors", (0x00ffffff, 0x00ffffff, 0x0000ffff, 0x00ff00ff)) # Ensure there is a color for each shift level! self.language = None self.location = None self.keyList = [] self.shiftLevels = 0 self.shiftLevel = 0 self.keyboardWidth = 0 self.keyboardHeight = 0 self.maxKey = 0 self.overwrite = False self.selectedKey = None self.sms = NumericalTextInput(self.smsGotChar) self.smsChar = None self.setLocale() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard)
def __init__(self, session, text = '', filename = '', currDir = None, bookmarks = None, userMode = False, windowTitle = None, minFree = None, autoAdd = False, editDir = False, inhibitDirs = None, inhibitMounts = None): if not inhibitDirs: inhibitDirs = [] if not inhibitMounts: inhibitMounts = [] Screen.__init__(self, session) NumericalTextInput.__init__(self, handleTimeout=False) HelpableScreen.__init__(self) self.setUseableChars(u'1234567890abcdefghijklmnopqrstuvwxyz') self.qs_timer = eTimer() self.qs_timer.callback.append(self.timeout) self.qs_timer_type = 0 self.curr_pos = -1 self.quickselect = '' self['text'] = Label(text) self['textbook'] = Label(_('Bookmarks')) self.text = text self.filename = filename self.minFree = minFree self.realBookmarks = bookmarks self.bookmarks = bookmarks and bookmarks.value[:] or [] self.userMode = userMode self.autoAdd = autoAdd self.editDir = editDir self.inhibitDirs = inhibitDirs self['filelist'] = FileList(currDir, showDirectories=True, showFiles=False, inhibitMounts=inhibitMounts, inhibitDirs=inhibitDirs) self['booklist'] = MenuList(self.bookmarks) self['key_green'] = Button(_('OK')) self['key_yellow'] = Button(_('Rename')) self['key_blue'] = Button(_('Remove bookmark')) self['key_red'] = Button(_('Cancel')) self['green'] = Pixmap() self['yellow'] = Pixmap() self['blue'] = Pixmap() self['red'] = Pixmap() self['target'] = Label() if self.userMode: self.usermodeOn() class LocationBoxActionMap(HelpableActionMap): def __init__(self, parent, context, actions = None, prio = 0): if not actions: actions = {} HelpableActionMap.__init__(self, parent, context, actions, prio) self.box = parent def action(self, contexts, action): self.box.timeout(force=True) return HelpableActionMap.action(self, contexts, action) self['WizardActions'] = LocationBoxActionMap(self, 'WizardActions', {'ok': (self.ok, _('select')), 'back': (self.cancel, _('Cancel'))}, -2) self['DirectionActions'] = LocationBoxActionMap(self, 'DirectionActions', {'left': self.left, 'right': self.right, 'up': self.up, 'down': self.down}, -2) self['ColorActions'] = LocationBoxActionMap(self, 'ColorActions', {'red': self.cancel, 'green': self.select, 'yellow': self.changeName, 'blue': self.addRemoveBookmark}, -2) self['EPGSelectActions'] = LocationBoxActionMap(self, 'EPGSelectActions', {'prevService': (self.switchToBookList, _('switch to bookmarks')), 'nextService': (self.switchToFileList, _('switch to filelist'))}, -2) self['MenuActions'] = LocationBoxActionMap(self, 'MenuActions', {'menu': (self.showMenu, _('menu'))}, -2) self['NumberActions'] = NumberActionMap(['NumberActions'], {'1': self.keyNumberGlobal, '2': self.keyNumberGlobal, '3': self.keyNumberGlobal, '4': self.keyNumberGlobal, '5': self.keyNumberGlobal, '6': self.keyNumberGlobal, '7': self.keyNumberGlobal, '8': self.keyNumberGlobal, '9': self.keyNumberGlobal, '0': self.keyNumberGlobal}) if windowTitle is None: windowTitle = _('Select location') self.onShown.extend((boundFunction(self.setTitle, _('Select Location')), self.updateTarget, self.showHideRename)) self.onLayoutFinish.append(self.switchToFileListOnStart) self.onClose.append(self.disableTimer) return
class VirtualKeyBoard(Screen): def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_("Virtual keyboard")) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png")) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_all.png")) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png")) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png")) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png")) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png")) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len(kwargs.get("text", "").decode("utf-8",'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose) def __onClose(self): self.sms.timer.stop() def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() def setLang(self): if self.lang == 'cs_CZ': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*"], [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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]] self.nextLang = 'de_DE' elif 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"], [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"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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"=", u"ς", u"ε", u"ρ", u"τ", u"υ", u"θ", u"ι", u"ο", u"π", u"[", u"]"], [u"α", u"σ", u"δ", u"φ", u"γ", u"η", u"ξ", u"κ", u"λ", u";", u"'", u"-"], [u"\\", u"ζ", u"χ", u"ψ", u"ω", u"β", u"ν", u"μ", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ά", u"έ", u"ή", u"ί", u"ό", u"ύ", u"ώ", u"ϊ", u"ϋ", u"OK"]] self.shiftkeys_list = [ [u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"BACKSPACE"], [u"+", u"€", u"Ε", u"Ρ", u"Τ", u"Υ", u"Θ", u"Ι", u"Ο", u"Π", u"{", u"}"], [u"Α", u"Σ", u"Δ", u"Φ", u"Γ", u"Η", u"Ξ", u"Κ", u"Λ", u":", u'"', u"_"], [u"|", u"Ζ", u"Χ", u"Ψ", u"Ω", u"Β", u"Ν", u"Μ", u"<", u">", u"?", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ά", u"Έ", u"Ή", u"Ί", u"Ό", u"Ύ", u"Ώ", u"Ϊ", u"Ϋ", u"OK"]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*"], [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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]] self.nextLang = 'fa_IR' elif self.lang == 'fa_IR': self.keys_list = [ [u"EXIT", u"\u06F1", u"\u06F2", u"\u06F3", u"\u06F4", u"\u06F5", u"\u06F6", u"\u06F7", u"\u06F8", u"\u06F9", u"\u06F0", u"BACKSPACE"], [u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u0641", u"\u063A", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"-", u"\u062C"], [u"\u0634", u"\u0633", u"\u06CC", u"\u0628", u"\u0644", u"\u0627", u"\u062A", u"\u0646", u"\u0645", u"\u06A9", u"\u06AF", u"\u067E"], [u"<", u"\u0638", u"\u0637", u"\u0632", u"\u0631", u"\u0630", u"\u062F", u"\u0626", u"\u0648", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*"]] self.shiftkeys_list = [ [u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"(", u")", u"=", u"BACKSPACE"], [u"\u0636", u"\u0635", u"\u062B", u"\u0642", u"\u060C", u"\u061B", u"\u0639", u"\u0647", u"\u062E", u"\u062D", u"+", u"\u0686"], [u"\u0634", u"\u0633", u"\u06CC", u"\u0628", u"\u06C0", u"\u0622", u"\u062A", u"\u0646", u"\u0645", u"?", u'"', u"|"], [u">", u"\u0629", u"\u064A", u"\u0698", u"\u0624", u"\u0625", u"\u0623", u"\u0621", u";", u":", u"\u061F", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~"]] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'fr_FR' elif self.lang == 'fr_FR': 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"a", u"z", u"e", u"r", u"t", u"y", u"u", u"i", u"o", u"p", u"é", u"è"], [u"q", u"s", u"d", u"f", u"g", u"h", u"j", u"k", u"l", u"m", u"ê", u"ë"], [u"<", u"w", u"x", u"c", u"v", u"b", u"n", u",", u";", u":", u"=", u"ALL"], [u"SHIFT", u"SPACE", u"ù", u"â", u"ï", u"ô", u"ç", u"#", u"-", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"&", u'@', u'"', u"€", u"§", u"!", u"ç", u"(", u")", u"_", u"BACKSPACE"], [u"A", u"Z", u"E", u"R", u"T", u"Y", u"U", u"I", u"O", u"P", u"É", u"È"], [u"Q", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"Ê", u"Ë"], [u">", u"W", u"X", u"C", u"V", u"B", u"N", u"?", u".", u"+", u"~", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ù", u"Â", u"Ï", u"Ô", u"°", u"/",u"\\", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'lv_LV' elif self.lang == 'lv_LV': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", u".", u"ž", u"ALL"], [u"SHIFT", u"SPACE", u"ā", u"č", u"ē", u"ģ", u"ī", u"ķ", u"ļ", u"ņ", u"LEFT", u"RIGHT"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u"#", u"?", u"Ž", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ā", u"Č", u"Ē", u"Ģ", u"Ī", u"Ķ", u"Ļ", u"Ņ", u"LEFT", u"RIGHT"]] self.nextLang = 'pl_PL' elif self.lang == 'pl_PL': 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ą", u"ć", u"ę", u"ł", u"ń", u"ó", u"ś", u"ź", u"ż", 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ą", u"Ć", u"Ę", u"Ł", u"Ń", u"Ó", u"Ś", u"Ź", u"Ż", u"OK"]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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"а", u"б", u"в", u"г", u"д", u"е", u"ё", u"ж", u"з", u"и", u"й", u"+"], [u"к", u"л", u"м", u"н", u"о", u"п", u"р", u"с", u"т", u"у", u"ф", u"#"], [u"<", u"х", u"ц", u"ч", u"ш", u"щ", u"ъ", u"ы", u",", u".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ь", u"э", u"ю", u"я", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], [u"А", u"Б", u"В", u"Г", u"Д", u"Е", u"Ё", u"Ж", u"З", u"И", u"Й", u"*"], [u"К", u"Л", u"М", u"Н", u"О", u"П", u"Р", u"С", u"Т", u"У", u"Ф", u"'"], [u">", u"Х", u"Ц", u"Ч", u"Ш", u"Щ", u"Ъ", u"Ы", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Э", u"Ю", u"Я", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'sk_SK' elif self.lang =='sk_SK': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"], [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'th_TH' elif self.lang == 'th_TH': self.keys_list = [[u"EXIT", "\xe0\xb9\x85", "\xe0\xb8\xa0", "\xe0\xb8\x96", "\xe0\xb8\xb8", "\xe0\xb8\xb6", "\xe0\xb8\x84", "\xe0\xb8\x95", "\xe0\xb8\x88", "\xe0\xb8\x82", "\xe0\xb8\x8a", u"BACKSPACE"], ["\xe0\xb9\x86", "\xe0\xb9\x84", "\xe0\xb8\xb3", "\xe0\xb8\x9e", "\xe0\xb8\xb0", "\xe0\xb8\xb1", "\xe0\xb8\xb5", "\xe0\xb8\xa3", "\xe0\xb8\x99", "\xe0\xb8\xa2", "\xe0\xb8\x9a", "\xe0\xb8\xa5"], ["\xe0\xb8\x9f", "\xe0\xb8\xab", "\xe0\xb8\x81", "\xe0\xb8\x94", "\xe0\xb9\x80", "\xe0\xb9\x89", "\xe0\xb9\x88", "\xe0\xb8\xb2", "\xe0\xb8\xaa", "\xe0\xb8\xa7", "\xe0\xb8\x87", "\xe0\xb8\x83"], ["\xe0\xb8\x9c", "\xe0\xb8\x9b", "\xe0\xb9\x81", "\xe0\xb8\xad", "\xe0\xb8\xb4", "\xe0\xb8\xb7", "\xe0\xb8\x97", "\xe0\xb8\xa1", "\xe0\xb9\x83", "\xe0\xb8\x9d", "", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [[u"EXIT", "\xe0\xb9\x91", "\xe0\xb9\x92", "\xe0\xb9\x93", "\xe0\xb9\x94", "\xe0\xb8\xb9", "\xe0\xb9\x95", "\xe0\xb9\x96", "\xe0\xb9\x97", "\xe0\xb9\x98", "\xe0\xb9\x99", u"BACKSPACE"], ["\xe0\xb9\x90", "", "\xe0\xb8\x8e", "\xe0\xb8\x91", "\xe0\xb8\x98", "\xe0\xb9\x8d", "\xe0\xb9\x8a", "\xe0\xb8\x93", "\xe0\xb8\xaf", "\xe0\xb8\x8d", "\xe0\xb8\x90", "\xe0\xb8\x85"], ["\xe0\xb8\xa4", "\xe0\xb8\x86", "\xe0\xb8\x8f", "\xe0\xb9\x82", "\xe0\xb8\x8c", "\xe0\xb9\x87", "\xe0\xb9\x8b", "\xe0\xb8\xa9", "\xe0\xb8\xa8", "\xe0\xb8\x8b", "", "\xe0\xb8\xbf"], ["", "", "\xe0\xb8\x89", "\xe0\xb8\xae", "\xe0\xb8\xba", "\xe0\xb9\x8c", "", "\xe0\xb8\x92", "\xe0\xb8\xac", "\xe0\xb8\xa6", "", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'en_EN' else: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"*"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT", u"~"]] self.lang = 'en_EN' self.nextLang = 'cs_CZ' self["country"].setText(self.lang) self.max_key=47+len(self.keys_list[4]) def virtualKeyBoardEntryComponent(self, keys): w, h = skin.parameters.get("VirtualKeyboard",(45, 45)) key_bg_width = self.key_bg and self.key_bg.size().width() or w key_images = self.shiftMode and self.keyImagesShift or self.keyImages res = [keys] text = [] x = 0 for key in keys: png = key_images.get(key, None) if png: width = png.size().width() res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=png)) else: width = key_bg_width res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_bg)) text.append(MultiContentEntryText(pos=(x, 0), size=(width, h), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER)) x += width return res + text def buildVirtualKeyBoard(self): self.previousSelectedKey = None self.list = [] for keys in self.shiftMode and self.shiftkeys_list or self.keys_list: self.list.append(self.virtualKeyBoardEntryComponent(keys)) self.markSelectedKey() def markSelectedKey(self): w, h = skin.parameters.get("VirtualKeyboard",(45, 45)) if self.previousSelectedKey is not None: self.list[self.previousSelectedKey /12] = self.list[self.previousSelectedKey /12][:-1] width = self.key_sel.size().width() x = self.list[self.selectedKey/12][self.selectedKey % 12 + 1][1] self.list[self.selectedKey / 12].append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, h), png=self.key_sel)) self.previousSelectedKey = self.selectedKey self["list"].setList(self.list) def backClicked(self): self["text"].deleteBackward() def forwardClicked(self): self["text"].deleteForward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() def okClicked(self): self.smsChar = None text = (self.shiftMode and self.shiftkeys_list or self.keys_list)[self.selectedKey / 12][self.selectedKey % 12].encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].markAll() elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].char(" ".encode("UTF-8")) elif text == "OK": self.close(self["text"].getText()) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].char(text) def ok(self): self.close(self["text"].getText()) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 11) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.max_key self.markSelectedKey() def right(self): self.smsChar = None self.selectedKey = self.selectedKey / 12 * 12 + (self.selectedKey + 1) % 12 if self.selectedKey > self.max_key: self.selectedKey = self.selectedKey / 12 * 12 self.markSelectedKey() def up(self): self.smsChar = None self.selectedKey -= 12 if self.selectedKey < 0: self.selectedKey = self.max_key / 12 * 12 + self.selectedKey % 12 if self.selectedKey > self.max_key: self.selectedKey -= 12 self.markSelectedKey() def down(self): self.smsChar = None self.selectedKey += 12 if self.selectedKey > self.max_key: self.selectedKey %= 12 self.markSelectedKey() def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) self.selectAsciiKey(self.smsChar) def smsOK(self): if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.selectedKey = selkey if self.shiftMode != (keyslist is self.shiftkeys_list): self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard() else: self.markSelectedKey() return True selkey += 1 return False
class VirtualKeyBoard(Screen): def __init__(self, session, title="", text=""): Screen.__init__(self, session) self.setTitle(_(title)) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.text = text self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Label(self.text) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap( [ "OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions" ], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.backClicked, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "back": self.exit, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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" ], [ 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"CLEAR" ], [u"SHIFT", u"SPACE", u"@", u"ß", 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"*" ], [ 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"?", u"\\", u"OK"]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*" ], [ 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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK" ]] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR" ], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", 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"*" ], [ 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"?", u"\\", u"Ĺ", u"OK" ]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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"й", u"ц", u"у", u"к", u"е", u"н", u"г", u"ш", u"щ", u"з", u"х", u"+" ], [ u"ф", u"ы", u"в", u"а", u"б", u"п", u"р", u"о", u"л", u"д", u"ж", u"#" ], [ u"<", u"э", u"я", u"ч", u"с", u"м", u"и", u"т", u",", ".", u"-", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"@", u"ь", u"ю", u"ъ", u"OK" ]] self.shiftkeys_list = [[ u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE" ], [ u"Й", u"Ц", u"У", u"К", u"Е", u"Н", u"Г", u"Ш", u"Щ", u"З", u"I", u"Х", u"*" ], [ u"Ф", u"Ы", u"В", u"А", u"П", u"Р", u"О", u"О", u"Л", u"Д", u"Ж", u"'" ], [ u">", u"Э", u"Я", u"Ч", u"С", u"М", u"И", u"Т", u";", u":", u"_", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Б", u"Ю", u"Ъ", u"OK" ]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR" ], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", 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"*" ], [ 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"?", u"\\", u"Ĺ", u"OK" ]] self.nextLang = 'sk_SK' elif self.lang == 'sk_SK': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", 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"*" ], [ u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'" ], [ u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK" ]] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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"#" ], [ u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"CLEAR" ], [ u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*" ], [ 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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK" ]] self.nextLang = 'en_EN' else: 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"y", 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"z", 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"Y", 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"Z", 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' self.nextLang = 'de_DE' self["country"].setText(self.lang) self.max_key = 47 + len(self.keys_list[4]) def buildVirtualKeyBoard(self, selectedKey=0): list = [] if self.shiftMode: self.k_list = self.shiftkeys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append( VirtualKeyBoardEntryComponent(keys, selectedKey, True)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1, True)) selectedKey -= 12 else: self.k_list = self.keys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append( VirtualKeyBoardEntryComponent(keys, selectedKey)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1)) selectedKey -= 12 self["list"].setList(list) def backClicked(self): self.smsChar = None self.text = self.text[:-1] self["text"].setText(self.text.encode("utf-8")) def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard(self.selectedKey) def okClicked(self): self.smsChar = None if self.shiftMode: list = self.shiftkeys_list else: list = self.keys_list selectedKey = self.selectedKey text = None for x in list: if selectedKey < 12: if selectedKey < len(x): text = x[selectedKey] break else: selectedKey -= 12 if text is None: return text = text.encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": ss = unicode(self["text"].getText(), "utf-8") ss = ss[:-1] self.text = str(ss.encode("utf-8")) self["text"].setText(self.text) elif text == "CLEAR": self.text = "" self["text"].setText(self.text.encode("utf-8")) elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self.text += " " self["text"].setText(self.text.encode("utf-8")) elif text == "OK": self.close(self.text.encode("utf-8")) else: self.text += text self["text"].setText(self.text.encode("utf-8")) def ok(self): self.close(self.text.encode("utf-8")) def exit(self): self.close(None) def left(self): self.smsChar = None self.selectedKey -= 1 if self.selectedKey == -1: self.selectedKey = 11 elif self.selectedKey == 11: self.selectedKey = 23 elif self.selectedKey == 23: self.selectedKey = 35 elif self.selectedKey == 35: self.selectedKey = 47 elif self.selectedKey == 47: self.selectedKey = self.max_key self.showActiveKey() def right(self): self.smsChar = None self.selectedKey += 1 if self.selectedKey == 12: self.selectedKey = 0 elif self.selectedKey == 24: self.selectedKey = 12 elif self.selectedKey == 36: self.selectedKey = 24 elif self.selectedKey == 48: self.selectedKey = 36 elif self.selectedKey > self.max_key: self.selectedKey = 48 self.showActiveKey() def up(self): self.smsChar = None self.selectedKey -= 12 if (self.selectedKey < 0) and (self.selectedKey > (self.max_key - 60)): self.selectedKey += 48 elif self.selectedKey < 0: self.selectedKey += 60 self.showActiveKey() def down(self): self.smsChar = None self.selectedKey += 12 if (self.selectedKey > self.max_key) and (self.selectedKey > 59): self.selectedKey -= 60 elif self.selectedKey > self.max_key: self.selectedKey -= 48 self.showActiveKey() def showActiveKey(self): self.buildVirtualKeyBoard(self.selectedKey) def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) print "SMS", number, self.smsChar self.selectAsciiKey(self.smsChar) def smsOK(self): print "SMS ok", self.smsChar if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr( getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.shiftMode = (keyslist is self.shiftkeys_list) self.selectedKey = selkey self.showActiveKey() return True selkey += 1 return False
def __init__(self, session, text="", filename="", currDir=None, bookmarks=None, userMode=False, windowTitle=None, minFree=None, autoAdd=False, editDir=False, inhibitDirs=None, inhibitMounts=None): # Init parents if not inhibitDirs: inhibitDirs = [] if not inhibitMounts: inhibitMounts = [] Screen.__init__(self, session) NumericalTextInput.__init__(self, handleTimeout=False) HelpableScreen.__init__(self) # Set useable chars self.setUseableChars(u'1234567890abcdefghijklmnopqrstuvwxyz') # Quickselect Timer self.qs_timer = eTimer() self.qs_timer.callback.append(self.timeout) self.qs_timer_type = 0 # Initialize Quickselect self.curr_pos = -1 self.quickselect = "" # Set Text self["text"] = Label(text) self["textbook"] = Label(_("Bookmarks")) # Save parameters locally self.text = text self.filename = filename self.minFree = minFree self.realBookmarks = bookmarks self.bookmarks = bookmarks and bookmarks.value[:] or [] self.userMode = userMode self.autoAdd = autoAdd self.editDir = editDir self.inhibitDirs = inhibitDirs # Initialize FileList self["filelist"] = FileList(currDir, showDirectories=True, showFiles=False, inhibitMounts=inhibitMounts, inhibitDirs=inhibitDirs) # Initialize BookList self["booklist"] = MenuList(self.bookmarks) # Buttons self["key_green"] = Button(_("OK")) self["key_yellow"] = Button(_("Rename")) self["key_blue"] = Button(_("Remove bookmark")) self["key_red"] = Button(_("Cancel")) self["key_menu"] = StaticText(_("MENU")) # Background for Buttons self["green"] = Pixmap() self["yellow"] = Pixmap() self["blue"] = Pixmap() self["red"] = Pixmap() # Initialize Target self["target"] = Label() if self.userMode: self.usermodeOn() # Custom Action Handler class LocationBoxActionMap(HelpableActionMap): def __init__(self, parent, context, actions=None, prio=0): if not actions: actions = {} HelpableActionMap.__init__(self, parent, context, actions, prio) self.box = parent def action(self, contexts, action): # Reset Quickselect self.box.timeout(force=True) return HelpableActionMap.action(self, contexts, action) # Actions that will reset quickselect self["WizardActions"] = LocationBoxActionMap(self, "WizardActions", { "ok": (self.ok, _("select")), "back": (self.cancel, _("Cancel")), }, -2) self["DirectionActions"] = LocationBoxActionMap( self, "DirectionActions", { "left": self.left, "right": self.right, "up": self.up, "down": self.down, }, -2) self["ColorActions"] = LocationBoxActionMap( self, "ColorActions", { "red": self.cancel, "green": self.select, "yellow": self.changeName, "blue": self.addRemoveBookmark, }, -2) self["EPGSelectActions"] = LocationBoxActionMap( self, "EPGSelectActions", { "prevService": (self.switchToBookList, _("switch to bookmarks")), "nextService": (self.switchToFileList, _("switch to filelist")), }, -2) self["MenuActions"] = LocationBoxActionMap(self, "MenuActions", { "menu": (self.showMenu, _("menu")), }, -2) # Actions used by quickselect self["NumberActions"] = NumberActionMap( ["NumberActions"], { "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }) # Run some functions when shown if windowTitle is None: windowTitle = _("Select location") self.onShown.extend(( boundFunction(self.setTitle, windowTitle), self.updateTarget, self.showHideRename, )) self.onLayoutFinish.append(self.switchToFileListOnStart) # Make sure we remove our callback self.onClose.append(self.disableTimer)
class VirtualKeyBoard(Screen): def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_(title)) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self["country"] = StaticText("") self["header"] = Label(title) self["text"] = Input(currPos=len(kwargs["text"]), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.backClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) def switchLang(self): self.lang = self.nextLang self.setLang() self.buildVirtualKeyBoard() 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"], [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"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'es_ES' elif self.lang == 'es_ES': #still missing keys (u"ùÙ") 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"Ł", u"ŕ", u"é", u"č", u"í", u"ě", u"ń", u"ň", 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"*"], [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"?", u"\\", u"Ŕ", u"É", u"Č", u"Í", u"Ě", u"Ń", u"Ň", u"OK"]] self.nextLang = 'fi_FI' elif self.lang == 'fi_FI': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'ru_RU' elif self.lang == 'ru_RU': 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"й", u"ц", u"у", u"к", u"е", u"н", u"г", u"ш", u"щ", u"з", u"х", u"+"], [u"ф", u"ы", u"в", u"а", u"б", u"п", u"р", u"о", u"л", u"д", u"ж", u"#"], [u"<", u"э", u"я", u"ч", u"с", u"м", u"и", u"т", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ь", u"ю", u"ъ", u"OK", u"LEFT", u"RIGHT"]] self.shiftkeys_list = [ [u"EXIT", u"!", u'"', u"§", u"$", u"%", u"&", u"/", u"(", u")", u"=", u"BACKSPACE"], [u"Й", u"Ц", u"У", u"К", u"Е", u"Н", u"Г", u"Ш", u"Щ", u"З", u"I", u"Х", u"*"], [u"Ф", u"Ы", u"В", u"А", u"П", u"Р", u"О", u"О", u"Л", u"Д", u"Ж", u"'"], [u">", u"Э", u"Я", u"Ч", u"С", u"М", u"И", u"Т", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"?", u"\\", u"Ь", u"Б", u"Ю", u"Ъ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'sv_SE' elif self.lang == 'sv_SE': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"@", u"ß", u"ĺ", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [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"?", u"\\", u"Ĺ", u"OK", u"LEFT", u"RIGHT"]] self.nextLang = 'sk_SK' elif self.lang =='sk_SK': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"š", u"č", u"ž", u"ý", u"á", u"í", u"é", u"OK", u"LEFT", u"RIGHT"]] 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"*"], [u"A", u"S", u"D", u"F", u"G", u"H", u"J", u"K", u"L", u"ň", u"ď", u"'"], [u"Á", u"É", u"Ď", u"Í", u"Ý", u"Ó", u"Ú", u"Ž", u"Š", 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"?", u"\\", u"ä", u"ö", u"ü", u"ô", u"ŕ", u"ĺ", u"OK"]] self.nextLang = 'cs_CZ' elif self.lang == 'cs_CZ': 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"#"], [u"<", u"y", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"-", u"ALL"], [u"SHIFT", u"SPACE", u"ě", u"š", u"č", u"ř", u"ž", u"ý", u"á", u"í", u"é", 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"*"], [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"?", u"\\", u"Č", u"Ř", u"Š", u"Ž", u"Ú", u"Á", u"É", u"OK"]] self.nextLang = 'el_GR' elif self.lang == 'el_GR': 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"=", u"ς", u"ε", u"ρ", u"τ", u"υ", u"θ", u"ι", u"ο", u"π", u"[", u"]"], [u"α", u"σ", u"δ", u"φ", u"γ", u"η", u"ξ", u"κ", u"λ", u";", u"'", u"-"], [u"\\", u"ζ", u"χ", u"ψ", u"ω", u"β", u"ν", u"μ", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"ά", u"έ", u"ή", u"ί", u"ό", u"ύ", u"ώ", u"ϊ", u"ϋ", u"OK"]] self.shiftkeys_list = [ [u"EXIT", u"!", u"@", u"#", u"$", u"%", u"^", u"&", u"*", u"(", u")", u"BACKSPACE"], [u"+", u"€", u"Ε", u"Ρ", u"Τ", u"Υ", u"Θ", u"Ι", u"Ο", u"Π", u"{", u"}"], [u"Α", u"Σ", u"Δ", u"Φ", u"Γ", u"Η", u"Ξ", u"Κ", u"Λ", u":", u'"', u"_"], [u"|", u"Ζ", u"Χ", u"Ψ", u"Ω", u"Β", u"Ν", u"Μ", u"<", u">", u"?", u"CLEAR"], [u"SHIFT", u"SPACE", u"Ά", u"Έ", u"Ή", u"Ί", u"Ό", u"Ύ", u"Ώ", u"Ϊ", u"Ϋ", u"OK"]] self.nextLang = 'en_EN' else: 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"y", 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"z", u"x", u"c", u"v", u"b", u"n", u"m", u",", ".", u"/", u"ALL"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] 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"Y", 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"Z", u"X", u"C", u"V", u"B", u"N", u"M", u";", u":", u"_", u"CLEAR"], [u"SHIFT", u"SPACE", u"OK", u"LEFT", u"RIGHT"]] self.lang = 'en_EN' self.nextLang = 'de_DE' self["country"].setText(self.lang) self.max_key=47+len(self.keys_list[4]) def buildVirtualKeyBoard(self, selectedKey=0): list = [] if self.shiftMode: self.k_list = self.shiftkeys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append(VirtualKeyBoardEntryComponent(keys, selectedKey,True)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1,True)) selectedKey -= 12 else: self.k_list = self.keys_list for keys in self.k_list: if selectedKey < 12 and selectedKey > -1: list.append(VirtualKeyBoardEntryComponent(keys, selectedKey)) else: list.append(VirtualKeyBoardEntryComponent(keys, -1)) selectedKey -= 12 self["list"].setList(list) def backClicked(self): self["text"].deleteBackward() def shiftClicked(self): self.smsChar = None self.shiftMode = not self.shiftMode self.buildVirtualKeyBoard(self.selectedKey) def okClicked(self): self.smsChar = None if self.shiftMode: list = self.shiftkeys_list else: list = self.keys_list selectedKey = self.selectedKey text = None for x in list: if selectedKey < 12: if selectedKey < len(x): text = x[selectedKey] break else: selectedKey -= 12 if text is None: return text = text.encode("UTF-8") if text == "EXIT": self.close(None) elif text == "BACKSPACE": self["text"].deleteBackward() elif text == "ALL": self["text"].markAll() elif text == "CLEAR": self["text"].deleteAllChars() self["text"].update() elif text == "SHIFT": self.shiftClicked() elif text == "SPACE": self["text"].char(" ".encode("UTF-8")) elif text == "OK": self.close(self["text"].getText().encode("UTF-8")) elif text == "LEFT": self["text"].left() elif text == "RIGHT": self["text"].right() else: self["text"].char(text) def ok(self): self.close(self["text"].getText().encode("UTF-8")) def exit(self): self.close(None) def cursorRight(self): self["text"].right() def cursorLeft(self): self["text"].left() def left(self): self.smsChar = None self.selectedKey -= 1 if self.selectedKey == -1: self.selectedKey = 11 elif self.selectedKey == 11: self.selectedKey = 23 elif self.selectedKey == 23: self.selectedKey = 35 elif self.selectedKey == 35: self.selectedKey = 47 elif self.selectedKey == 47: self.selectedKey = self.max_key self.showActiveKey() def right(self): self.smsChar = None self.selectedKey += 1 if self.selectedKey == 12: self.selectedKey = 0 elif self.selectedKey == 24: self.selectedKey = 12 elif self.selectedKey == 36: self.selectedKey = 24 elif self.selectedKey == 48: self.selectedKey = 36 elif self.selectedKey > self.max_key: self.selectedKey = 48 self.showActiveKey() def up(self): self.smsChar = None self.selectedKey -= 12 if (self.selectedKey < 0) and (self.selectedKey > (self.max_key-60)): self.selectedKey += 48 elif self.selectedKey < 0: self.selectedKey += 60 self.showActiveKey() def down(self): self.smsChar = None self.selectedKey += 12 if (self.selectedKey > self.max_key) and (self.selectedKey > 59): self.selectedKey -= 60 elif self.selectedKey > self.max_key: self.selectedKey -= 48 self.showActiveKey() def showActiveKey(self): self.buildVirtualKeyBoard(self.selectedKey) def keyNumberGlobal(self, number): self.smsChar = self.sms.getKey(number) print "SMS", number, self.smsChar self.selectAsciiKey(self.smsChar) def smsOK(self): print "SMS ok", self.smsChar if self.smsChar and self.selectAsciiKey(self.smsChar): print "pressing ok now" self.okClicked() def keyGotAscii(self): self.smsChar = None if self.selectAsciiKey(str(unichr(getPrevAsciiCode()).encode('utf-8'))): self.okClicked() def selectAsciiKey(self, char): if char == " ": char = "SPACE" for keyslist in (self.shiftkeys_list, self.keys_list): selkey = 0 for keys in keyslist: for key in keys: if key == char: self.shiftMode = (keyslist is self.shiftkeys_list) self.selectedKey = selkey self.showActiveKey() return True selkey += 1 return False
def __init__(self, session, title="", **kwargs): Screen.__init__(self, session) self.setTitle(_(title)) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_bg.png")) self.key_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_sel.png")) self.key_backspace = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_backspace.png")) self.key_all = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_all.png")) self.key_clr = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_clr.png")) self.key_esc = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_esc.png")) self.key_ok = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_ok.png")) self.key_shift = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_shift.png")) self.key_shift_sel = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_shift_sel.png")) self.key_space = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_space.png")) self.key_left = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_left.png")) self.key_right = LoadPixmap(path=resolveFilename(SCOPE_ACTIVE_SKIN, "buttons/vkey_right.png")) self.keyImages = { "BACKSPACE": self.key_backspace, "ALL": self.key_all, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self.keyImagesShift = { "BACKSPACE": self.key_backspace, "CLEAR": self.key_clr, "EXIT": self.key_esc, "OK": self.key_ok, "SHIFT": self.key_shift_sel, "SPACE": self.key_space, "LEFT": self.key_left, "RIGHT": self.key_right } self["country"] = StaticText("") self["header"] = Label() self["text"] = Input(currPos=len(kwargs.get("text", "").decode("utf-8",'ignore')), allMarked=False, **kwargs) self["list"] = VirtualKeyBoardList([]) self["actions"] = NumberActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.okClicked, "cancel": self.exit, "left": self.left, "right": self.right, "up": self.up, "down": self.down, "red": self.exit, "green": self.ok, "yellow": self.switchLang, "blue": self.shiftClicked, "deleteBackward": self.backClicked, "deleteForward": self.forwardClicked, "back": self.exit, "pageUp": self.cursorRight, "pageDown": self.cursorLeft, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal, }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose)
def __init__(self, session, title='', **kwargs): Screen.__init__(self, session) self.setTitle(_('Virtual keyboard')) self.keys_list = [] self.shiftkeys_list = [] self.lang = language.getLanguage() self.nextLang = None self.shiftMode = False self.selectedKey = 0 self.smsChar = None self.sms = NumericalTextInput(self.smsOK) self.key_bg = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_bg.png')) self.key_sel = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_sel.png')) self.key_backspace = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_backspace.png')) self.key_all = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_all.png')) self.key_clr = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_clr.png')) self.key_esc = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_esc.png')) self.key_ok = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_ok.png')) self.key_shift = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_shift.png')) self.key_shift_sel = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_shift_sel.png')) self.key_space = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_space.png')) self.key_left = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_left.png')) self.key_right = LoadPixmap(path=resolveFilename( SCOPE_CURRENT_SKIN, 'skin_default/vkey_right.png')) self.keyImages = { 'BACKSPACE': self.key_backspace, 'ALL': self.key_all, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right } self.keyImagesShift = { 'BACKSPACE': self.key_backspace, 'CLEAR': self.key_clr, 'EXIT': self.key_esc, 'OK': self.key_ok, 'SHIFT': self.key_shift_sel, 'SPACE': self.key_space, 'LEFT': self.key_left, 'RIGHT': self.key_right } self['country'] = StaticText('') self['header'] = Label(title) self['text'] = Input(currPos=len( kwargs.get('text', '').decode('utf-8', 'ignore')), allMarked=False, **kwargs) self['list'] = VirtualKeyBoardList([]) self['actions'] = NumberActionMap( [ 'OkCancelActions', 'WizardActions', 'ColorActions', 'KeyboardInputActions', 'InputBoxActions', 'InputAsciiActions' ], { 'gotAsciiCode': self.keyGotAscii, 'ok': self.okClicked, 'cancel': self.exit, 'left': self.left, 'right': self.right, 'up': self.up, 'down': self.down, 'red': self.exit, 'green': self.ok, 'yellow': self.switchLang, 'blue': self.shiftClicked, 'deleteBackward': self.backClicked, 'deleteForward': self.forwardClicked, 'back': self.exit, 'pageUp': self.cursorRight, 'pageDown': self.cursorLeft, '1': self.keyNumberGlobal, '2': self.keyNumberGlobal, '3': self.keyNumberGlobal, '4': self.keyNumberGlobal, '5': self.keyNumberGlobal, '6': self.keyNumberGlobal, '7': self.keyNumberGlobal, '8': self.keyNumberGlobal, '9': self.keyNumberGlobal, '0': self.keyNumberGlobal }, -2) self.setLang() self.onExecBegin.append(self.setKeyboardModeAscii) self.onLayoutFinish.append(self.buildVirtualKeyBoard) self.onClose.append(self.__onClose)