예제 #1
0
    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)
예제 #3
0
    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)
예제 #4
0
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])
예제 #5
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)
예제 #6
0
	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)
예제 #7
0
	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
예제 #8
0
파일: Input.py 프로젝트: kingvuplus/eg-e2
 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)
예제 #9
0
	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
예제 #10
0
    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)
예제 #11
0
파일: config.py 프로젝트: 4doe/enigma2-old
	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
예제 #12
0
	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)
예제 #13
0
파일: Input.py 프로젝트: aitchala/enigma2
	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)
예제 #14
0
	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()
예제 #15
0
	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)
예제 #16
0
 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:"))
예제 #17
0
	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)
예제 #18
0
 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)
예제 #19
0
	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)
예제 #20
0
    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
예제 #22
0
	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
예제 #23
0
	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)
예제 #24
0
    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)
예제 #25
0
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
예제 #26
0
	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)
예제 #27
0
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
예제 #28
0
		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()
예제 #29
0
		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()
예제 #30
0
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
예제 #31
0
    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)
예제 #32
0
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)
예제 #34
0
    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)
예제 #35
0
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
예제 #36
0
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()
예제 #37
0
 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
예제 #38
0
	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
예제 #40
0
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
예제 #41
0
	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)
예제 #42
0
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
예제 #43
0
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
예제 #44
0
    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)
예제 #45
0
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
예제 #46
0
	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)
예제 #47
0
	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)
예제 #48
0
    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
예제 #49
0
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
예제 #50
0
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
예제 #51
0
    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)
예제 #52
0
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
예제 #53
0
	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)
예제 #54
0
 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)