def __init__(self, Universe, args, parent=None): QtGui.QWidget.__init__(self, parent) self.setWindowTitle('Virtual Keyboard') #self.resize(450, 150) self.setFixedSize(450, 180) self.Universe = Universe self.e = None self.key_event = None self.button_list = [] self.capslock_on = False self.ctrl_status = False self.unicodeDict = UnicodeDict() try: a = args except IndexError: chars = self.getCharsTemplate() else: if a == "gr": chars = self.getGreekChars() elif a == "il": chars = self.getHebrewChars() elif a == "de": chars = self.getGermanChars() keys = self.getQwertzKeys() self.drawKeyboard(chars, keys)
class VirtualKeyboard(QtGui.QWidget): def __init__(self, Universe, args, parent=None): QtGui.QWidget.__init__(self, parent) self.setWindowTitle('Virtual Keyboard') #self.resize(450, 150) self.setFixedSize(450, 180) self.Universe = Universe self.e = None self.key_event = None self.button_list = [] self.capslock_on = False self.ctrl_status = False self.unicodeDict = UnicodeDict() try: a = args except IndexError: chars = self.getCharsTemplate() else: if a == "gr": chars = self.getGreekChars() elif a == "il": chars = self.getHebrewChars() elif a == "de": chars = self.getGermanChars() keys = self.getQwertzKeys() self.drawKeyboard(chars, keys) def drawKeyboard(self, chars, keys): line_pos = 0 line_width = 30 #self.drawFunktionkeyLine() self.drawFirstLine(chars[0], keys[0], line_pos) self.drawSecondLine(chars[1], keys[1], line_pos + line_width) self.drawThirdLine(chars[2], keys[2], line_pos + (2*line_width)) self.drawForthLine(chars[3], keys[3], line_pos + (3*line_width)) self.drawFifthLine(chars[4], keys[4], line_pos + (4*line_width)) self.enter = PushButtonVkbd("\u23ce", self) self.enter.resize(50, 60) self.enter.move(400, line_pos + line_width) self.connect(self.enter, QtCore.SIGNAL("clicked()"), functools.partial(self.writeToInputLine, "Enter" ) ) self.connect(self, QtCore.SIGNAL("keyPressedEnter()"), functools.partial(self.clickCurrentButton, self.enter)) self.button_list.append(self.enter) self.enter.show() self.enter.setFocus() def destroyKeyboard(self): print "destroy" for button in self.button_list: self.disconnect(self, QtCore.SIGNAL("keyPressedEnter()"), functools.partial(self.writeToInputLine, "Enter")) PushButtonVkbd.deleteLater(button) self.button_list = [] def capslockPressed(self): self.capslock_on = not self.capslock_on self.destroyKeyboard() if self.capslock_on: chars = self.getLevel2GermanChars() else: chars = self.getGermanChars() keys = self.getQwertzKeys() self.drawKeyboard(chars, keys) def connectButtons(self, button, chars, keys, i): self.connect(button, QtCore.SIGNAL("clicked()"), functools.partial(self.writeToInputLine, chars[i] ) ) self.connect(self, QtCore.SIGNAL("keyPressedAny()"), functools.partial(self.keyPressed, keys[i], button)) self.button_list.append(button) button.show() def drawFunktionkeyLine(self): chars = ["esc", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "", ""] keys = [Qt.Key_Escape, Qt.Key_F1, Qt.Key_F2, Qt.Key_F3, Qt.Key_F4, Qt.Key_F5, Qt.Key_F6, Qt.Key_F7, Qt.Key_F8, Qt.Key_F9, Qt.Key_F10, Qt.Key_F11, Qt.Key_F12, "", ""] for i in range( len(chars) ): button = PushButtonVkbd(chars[i], self) button.resize(30, 30) button.move(i*30, 0) self.connectButtons(button, chars, keys, i) def drawFirstLine(self, chars, keys, line_pos): #chars = self.getFirstLineChars() #keys = self.getFirstLineKeys() for i in range( len(chars) ): button = PushButtonVkbd(chars[i], self) if i == 13: button.resize(60, 30) button.move(i*30, line_pos) else: button.resize(30, 30) button.move(i*30, line_pos) self.connectButtons(button, chars, keys, i) def drawSecondLine(self, chars, keys, line_pos): #chars = self.getSecondLineChars() #keys = self.getSecondLineKeys() for i in range( len(chars) ): button = PushButtonVkbd(chars[i], self) if i == 0: button.resize(40, 30) button.move(i*30, line_pos) else: button.resize(30, 30) button.move((i+.35)*30, line_pos) self.connectButtons(button, chars, keys, i) def drawThirdLine(self, chars, keys, line_pos): #chars = self.getThirdLineChars() #keys = self.getThirdLineKeys() for i in range( len(chars) ): button = PushButtonVkbd(chars[i], self) if i == 0: button.resize(50, 30) button.move(i*30, line_pos) elif i == 12: button.resize(20, 30) button.move((i+.67)*30, line_pos) else: button.resize(30, 30) button.move((i+.67)*30, line_pos) self.connectButtons(button, chars, keys, i) def drawForthLine(self, chars, keys, line_pos): #chars = self.getForthLineChars() #keys = self.getForthLineKeys() for i in range( len(chars) ): button = PushButtonVkbd(chars[i], self) if i == 0: button.resize(40, 30) button.move(0, line_pos) elif i == 12: button.resize(80, 30) button.move((i+.35)*30, line_pos) # elif i == 13: # button.resize(300, 30) # button.move((i+1)*30, 90) else: button.resize(30, 30) button.move((i+.35)*30, line_pos) self.connectButtons(button, chars, keys, i) def drawFifthLine(self, chars, keys, line_pos): #chars = self.getFifthLineChars() #keys = self.getFifthLineKeys() for i in range( len(chars) ): button = PushButtonVkbd(chars[i], self) if i == 3: button.resize(150, 30) button.move(90, line_pos) elif i > 3: button.resize(30, 30) button.move((i+4)*30, line_pos) else: button.resize(30, 30) button.move(i*30, line_pos) self.connectButtons(button, chars, keys, i) def getGreekChars(self): return [["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "\u232b"], ["⇄", ";", "ς", "ε", "ρ", "τ", "υ", "θ", "ι", "ο", "π", "[", "]"], ["\u21ea", "α", "σ", "δ", "φ", "γ", "η", "ξ", "κ", "λ", "´", "'", ""], ["\u21E7", "|", "ζ", "χ", "ψ", "ω", "β", "ν", "μ", ",", ".", "/", "\u21E7"], ["ctrl", "\u2318", "alt", " ", "←", "↓", "↑", "→", "alt", "\u2325", "ctrl"]] def getHebrewChars(self): return [[";", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "\u232b"], ["⇄", "/", "'", "ק", "ר", "א", "ט", "ו", "ן", "ם", "פ", "]", "["], ["\u21ea", "ש", "ד", "ג", "כ", "ע", "י", "ח", "ל", "ך", "ף", ",", ""], ["\u21E7", "", "ז", "ס", "ב", "ה", "נ", "מ", "צ", "ת", "ץ", ".", "\u21E7"], ["ctrl", "\u2318", "alt", " ", "←", "↓", "↑", "→", "alt", "\u2325", "ctrl"]] def getGermanChars(self): return [["^", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", "´", "\u232b"], ["⇄", "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", "+"], ["\u21ea", "a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä", "#"], ["\u21E7", "<", "y", "x", "c", "v", "b", "n", "m", ",", "." ,"-", "\u21E7"], ["ctrl", "\u2318", "alt", " ", "←", "↓", "↑", "→", "agr", "\u2325", "ctrl"]] def getLevel2GermanChars(self): return [["°", "!", "\"", "§", "$", "%", "\u0038", "/", "(", ")", "=", "?", "`", "\u232b"], ["⇄", "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "Ü", "*"], ["\u21ea", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ö", "Ä", "'"], ["\u21E7", ">", "Y", "X", "C", "V", "B", "N", "M", ";", ":" ,"_", "\u21E7"], ["ctrl", "\u2318", "alt", " ", "←", "↓", "↑", "→", "agr", "\u2325", "ctrl"]] "Template for copying it if you want to make new layouts" def getCharsTemplate(self): return [["", "", "", "", "", "", "", "", "", "", "", "", "", "\u232b"], ["⇄", "", "", "", "", "", "", "", "", "", "", "", ""], ["\u21ea", "", "", "", "", "", "", "", "", "", "", "", ""], ["\u21E7", "", "", "", "", "", "", "", "", "", "" ,"", "\u21E7"], ["ctrl", "\u2318", "alt", " ", "←", "↓", "↑", "→", "alt", "\u2325", "ctrl"]] def getQwertzKeys(self): return [[16781906, Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_4, Qt.Key_5, Qt.Key_6, Qt.Key_7, Qt.Key_8, Qt.Key_9, Qt.Key_0, Qt.Key_ssharp, 16781905, Qt.Key_Backspace], [Qt.Key_Tab, Qt.Key_Q, Qt.Key_W, Qt.Key_E, Qt.Key_R, Qt.Key_T, Qt.Key_Z, Qt.Key_U, Qt.Key_I, Qt.Key_O, Qt.Key_P, Qt.Key_Udiaeresis, Qt.Key_Plus], [Qt.Key_CapsLock, Qt.Key_A, Qt.Key_S, Qt.Key_D, Qt.Key_F, Qt.Key_G, Qt.Key_H, Qt.Key_J, Qt.Key_K, Qt.Key_L, Qt.Key_Odiaeresis, Qt.Key_Adiaeresis, Qt.Key_NumberSign], [Qt.Key_Shift, Qt.Key_Less, Qt.Key_Y, Qt.Key_X, Qt.Key_C, Qt.Key_V, Qt.Key_B, Qt.Key_N, Qt.Key_M, Qt.Key_Comma, Qt.Key_Period, Qt.Key_Minus, -1], [Qt.Key_Control, Qt.Key_Meta, Qt.Key_Alt, Qt.Key_Space, Qt.Key_Left, Qt.Key_Down, Qt.Key_Up, Qt.Key_Right, Qt.Key_AltGr, -1, -1]] # def greekChars(self): # return ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "ς", "τ", "υ", "φ", "χ", "ψ", "ω" ] def writeToInputLine(self, char): name = self.getCharakterName(char) if name != -1: try: self.Universe.SpeakOut.synthOut(name) except: print char #if self.Universe != None: if char == "ctrl": self.ctrl_status = True print "control" else: if char == "\u232b":# backspace self.Universe.InputLine.backspace() elif char == "⇄": pass elif char == "\u21ea":# caps lock self.capslockPressed() elif char == "\u21E7":# shift pass elif char == "Enter": #self.Universe.Core.onCILEnterPressed() self.Universe.TabWidget.currentWidget().onCILEnterPressed() elif char == "\u2318":# meta print char elif char == "←": self.Universe.Body.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Key_Left, Qt.NoModifier, QtCore.QString("bla"), False, 1)) elif char == "↓": self.Universe.Body.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Key_Down, Qt.NoModifier, QtCore.QString("bla"), False, 1)) elif char == "↑": if self.ctrl_status: self.Universe.Core.inputline.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Key_Up, Qt.ControlModifier, QtCore.QString("bla"), False, 1)) else: self.Universe.Body.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Key_Up, Qt.NoModifier, QtCore.QString("bla"), False, 1)) elif char == "→": self.Universe.Body.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Key_Right, Qt.NoModifier, QtCore.QString("bla"), False, 1)) elif char == "esc": #self.Universe.Core.inputline.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, Qt.Key_Escape, Qt.NoModifier, QtCore.QString("bla"), False, 1)) self.Universe.Core.inputline.clear() elif char.startswith("f") and len(char) >= 2: #self.Universe.TabWidget.keyPressEvent(self.key_event) print self.Universe.Main, self.key_event.key(), self.e self.Universe.Main.keyPressEvent(QtGui.QKeyEvent(QtCore.QEvent.KeyPress, self.e, Qt.NoModifier, QtCore.QString(""), False, 1)) #self.Universe.Main.closeTab() else: #self.Universe.InputLine.insert(char) self.Universe.TabWidget.currentWidget().inputline.insert(char) self.ctrl_status = False def clickCurrentButton(self, button): button.animateClick() def keyPressed(self, key, button): #print "keyPressed", key, self.e if self.e == key: #print QtCore.QString( QtCore.QChar(key)) self.clickCurrentButton(button) def keyPressEvent(self, e): print "kbd", e.key() self.key_event = e if e.key() == QtCore.Qt.Key_Return: self.emit(QtCore.SIGNAL("keyPressedEnter()")) elif e.key() == QtCore.Qt.Key_Escape: self.Universe.Core.inputline.clear() # e.ignore() elif e.key() >= QtCore.Qt.Key_F1 and e.key() <= QtCore.Qt.Key_F12: print "fkey " self.Universe.Main.keyPressEvent(e) else: self.e = e.key() self.emit(QtCore.SIGNAL("keyPressedAny()")) def getCharakterName(self, char): dict = { "⇄" : "tabtaste", "\u232b" : -1,#"rücktaste", "\u21ea" : "dauergroßschreibtaste", "\u21E7" : "umschalttaste", "\u2318" : "meta-taste", "\u2325" : "menütaste", "ctrl" : "steuerung", "alt" : "alt", "agr" : "level3schift", "←" : -1,#"Pfeiltaste Links", "↓" : -1,#"Pfeiltaste Unten", "↑" : -1,#"Pfeiltaste Oben", "→" : -1,#"Pfeiltaste Rechts", } try: name = dict[char] except KeyError: return self.unicodeDict.getNameForChar(char) else: return name