예제 #1
0
 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)
예제 #2
0
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