From b9163cec73e27d771e1393f214ffc485b2dfc94d Mon Sep 17 00:00:00 2001 From: csaez Date: Mon, 6 Jan 2014 22:46:12 -0300 Subject: [PATCH 1/4] multi-language keyboard support --- src/key_mapping/__init__.py | 57 +++++++++ src/key_mapping/english.py | 158 +++++++++++++++++++++++++ src/key_mapping/french.py | 172 +++++++++++++++++++++++++++ src/key_mapping/prefs.json | 3 + src/pyqt_keymapping.py | 26 +++++ src/qtevents.py | 224 +++++++++--------------------------- 6 files changed, 470 insertions(+), 170 deletions(-) create mode 100644 src/key_mapping/__init__.py create mode 100644 src/key_mapping/english.py create mode 100644 src/key_mapping/french.py create mode 100644 src/key_mapping/prefs.json create mode 100644 src/pyqt_keymapping.py diff --git a/src/key_mapping/__init__.py b/src/key_mapping/__init__.py new file mode 100644 index 0000000..4fc6da4 --- /dev/null +++ b/src/key_mapping/__init__.py @@ -0,0 +1,57 @@ +import os +import json +from . import * + + +class _JSONDict(dict): + + def __init__(self, fp, *args, **kwds): + super(_JSONDict, self).__init__(*args, **kwds) + self.fp = fp + if os.path.exists(fp): + with open(self.fp) as fp: + data = json.load(fp) + self.update(data) + + def __setitem__(self, key, value): + super(_JSONDict, self).__setitem__(key, value) + self.__updatejson__() + + def __delitem__(self, key): + super(_JSONDict, self).__delitem__(key) + self.__updatejson__() + + def clear(self): + super(_JSONDict, self).clear() + self.__updatejson__() + + def update(self, other): + super(_JSONDict, self).update(other) + self.__updatejson__() + + def __updatejson__(self): + with open(self.fp, "w") as fp: + json.dump(self, fp, indent=4) + +_prefs = _JSONDict(os.path.join(os.path.dirname(__file__), "prefs.json")) + + +def list_languages(): + return [x.split(".")[-2] for x in os.listdir(os.path.dirname(__file__)) + if not x.startswith("_") and x.endswith(".py")] + + +def get_mapping(): + lang = _prefs.get("language") + __import__("key_mapping." + lang) + return globals().get(lang).KEY_MAPPING + + +def set_language(lang): + if lang not in list_languages(): + print "WARNING: " + lang + " key_mapping not found." + _prefs["language"] = lang + + +def get_language(): + return _prefs.get("language") diff --git a/src/key_mapping/english.py b/src/key_mapping/english.py new file mode 100644 index 0000000..58d22e6 --- /dev/null +++ b/src/key_mapping/english.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from PyQt4.QtCore import Qt + +KEY_MAPPING = { + # key: ( Qt::Key, ascii, modifiers ) + + 8: (Qt.Key_Backspace, '', None), + 9: (Qt.Key_Tab, '\t', None), + 13: (Qt.Key_Enter, '\n', None), + 16: (Qt.Key_Shift, '', None), + 17: (Qt.Key_Control, '', None), + 18: (Qt.Key_Alt, '', None), + 19: (Qt.Key_Pause, '', None), + 20: (Qt.Key_CapsLock, '', None), + 27: (Qt.Key_Escape, '', None), + 32: (Qt.Key_Space, ' ', None), + 33: (Qt.Key_PageUp, '', None), + 34: (Qt.Key_PageDown, '', None), + 35: (Qt.Key_End, '', None), + 36: (Qt.Key_Home, '', None), + 37: (Qt.Key_Left, '', None), + 38: (Qt.Key_Up, '', None), + 39: (Qt.Key_Right, '', None), + 40: (Qt.Key_Down, '', None), + 44: (Qt.Key_SysReq, '', None), + 45: (Qt.Key_Insert, '', None), + 46: (Qt.Key_Delete, '', None), + 48: (Qt.Key_0, '0', None), + 49: (Qt.Key_1, '1', None), + 50: (Qt.Key_2, '2', None), + 51: (Qt.Key_3, '3', None), + 52: (Qt.Key_4, '4', None), + 53: (Qt.Key_5, '5', None), + 54: (Qt.Key_6, '6', None), + 55: (Qt.Key_7, '7', None), + 56: (Qt.Key_8, '8', None), + 57: (Qt.Key_9, '9', None), + 65: (Qt.Key_A, 'a', None), + 66: (Qt.Key_B, 'b', None), + 67: (Qt.Key_C, 'c', None), + 68: (Qt.Key_D, 'd', None), + 69: (Qt.Key_E, 'e', None), + 70: (Qt.Key_F, 'f', None), + 71: (Qt.Key_G, 'g', None), + 72: (Qt.Key_H, 'h', None), + 73: (Qt.Key_I, 'i', None), + 74: (Qt.Key_J, 'j', None), + 75: (Qt.Key_K, 'k', None), + 76: (Qt.Key_L, 'l', None), + 77: (Qt.Key_M, 'm', None), + 78: (Qt.Key_N, 'n', None), + 79: (Qt.Key_O, 'o', None), + 80: (Qt.Key_P, 'p', None), + 81: (Qt.Key_Q, 'q', None), + 82: (Qt.Key_R, 'r', None), + 83: (Qt.Key_S, 's', None), + 84: (Qt.Key_T, 't', None), + 85: (Qt.Key_U, 'u', None), + 86: (Qt.Key_V, 'v', None), + 87: (Qt.Key_W, 'w', None), + 88: (Qt.Key_X, 'x', None), + 89: (Qt.Key_Y, 'y', None), + 90: (Qt.Key_Z, 'z', None), + 93: (Qt.Key_Print, '', None), + 96: (Qt.Key_0, '0', Qt.KeypadModifier), + 97: (Qt.Key_1, '1', Qt.KeypadModifier), + 98: (Qt.Key_2, '2', Qt.KeypadModifier), + 99: (Qt.Key_3, '3', Qt.KeypadModifier), + 100: (Qt.Key_4, '4', Qt.KeypadModifier), + 101: (Qt.Key_5, '5', Qt.KeypadModifier), + 102: (Qt.Key_5, '6', Qt.KeypadModifier), + 103: (Qt.Key_5, '7', Qt.KeypadModifier), + 104: (Qt.Key_5, '8', Qt.KeypadModifier), + 105: (Qt.Key_5, '9', Qt.KeypadModifier), + 106: (Qt.Key_Asterisk, '*', Qt.KeypadModifier), + 107: (Qt.Key_Plus, '+', Qt.KeypadModifier), + 109: (Qt.Key_Minus, '-', Qt.KeypadModifier), + 110: (Qt.Key_Period, '.', Qt.KeypadModifier), + 111: (Qt.Key_Slash, '/', Qt.KeypadModifier), + 112: (Qt.Key_F1, '', None), + 113: (Qt.Key_F2, '', None), + 114: (Qt.Key_F3, '', None), + 115: (Qt.Key_F4, '', None), + 116: (Qt.Key_F5, '', None), + 117: (Qt.Key_F6, '', None), + 118: (Qt.Key_F7, '', None), + 119: (Qt.Key_F8, '', None), + 120: (Qt.Key_F9, '', None), + 121: (Qt.Key_F10, '', None), + 122: (Qt.Key_F11, '', None), + 113: (Qt.Key_F12, '', None), + 144: (Qt.Key_NumLock, '', None), + 145: (Qt.Key_ScrollLock, '', None), + 186: (Qt.Key_Semicolon, ';', None), + 187: (Qt.Key_Equal, '=', None), + 188: (Qt.Key_Comma, ',', None), + 189: (Qt.Key_Minus, '-', None), + 190: (Qt.Key_Period, '.', None), + 191: (Qt.Key_Slash, '/', None), + 192: (Qt.Key_QuoteLeft, '`', None), + 219: (Qt.Key_BracketLeft, '[', None), + 220: (Qt.Key_Backslash, '\\', None), + 221: (Qt.Key_BraceRight, ']', None), + 222: (Qt.Key_QuoteLeft, "'", None), + + # Calculate the SHIFT key as 300 + key value + 348: (Qt.Key_ParenRight, ')', None), # Shift+0 + 349: (Qt.Key_Exclam, '!', None), # Shift+1 + 350: (Qt.Key_At, '@', None), # Shift+2 + 351: (Qt.Key_NumberSign, '#', None), # Shift+3 + 352: (Qt.Key_Dollar, '$', None), # Shift+4 + 353: (Qt.Key_Percent, '%', None), # Shift+5 + 354: (Qt.Key_6, '6', None), + 355: (Qt.Key_Ampersand, '&', None), # Shift+7 + 356: (Qt.Key_Asterisk, '*', None), # Shift+8 + 357: (Qt.Key_ParenLeft, '(', None), # Shift+9 + + 365: (Qt.Key_A, 'A', None), + 366: (Qt.Key_B, 'B', None), + 367: (Qt.Key_C, 'C', None), + 368: (Qt.Key_D, 'D', None), + 369: (Qt.Key_E, 'E', None), + 370: (Qt.Key_F, 'F', None), + 371: (Qt.Key_G, 'G', None), + 372: (Qt.Key_H, 'H', None), + 373: (Qt.Key_I, 'I', None), + 374: (Qt.Key_J, 'J', None), + 375: (Qt.Key_K, 'K', None), + 376: (Qt.Key_L, 'L', None), + 377: (Qt.Key_M, 'M', None), + 378: (Qt.Key_N, 'N', None), + 379: (Qt.Key_O, 'O', None), + 380: (Qt.Key_P, 'P', None), + 381: (Qt.Key_Q, 'Q', None), + 382: (Qt.Key_R, 'R', None), + 383: (Qt.Key_S, 'S', None), + 384: (Qt.Key_T, 'T', None), + 385: (Qt.Key_U, 'U', None), + 386: (Qt.Key_V, 'V', None), + 387: (Qt.Key_W, 'W', None), + 388: (Qt.Key_X, 'X', None), + 389: (Qt.Key_Y, 'Y', None), + 390: (Qt.Key_Z, 'Z', None), + + 486: (Qt.Key_Colon, ':', None), # Shift+; + 487: (Qt.Key_Plus, '+', None), # Shift++ + 488: (Qt.Key_Less, '<', None), # Shift+, + 489: (Qt.Key_Underscore, '_', None), # Shift+- + 490: (Qt.Key_Greater, '>', None), # Shift+> + 491: (Qt.Key_Question, '?', None), # Shift+? + 492: (Qt.Key_AsciiTilde, '~', None), # Shift+` + 519: (Qt.Key_BraceLeft, '{', None), # Shift+[ + 520: (Qt.Key_Bar, '|', None), # Shift+ + 521: (Qt.Key_BraceRight, '}', None), # Shift+] + 522: (Qt.Key_QuoteDbl, '"', None), # Shift+' +} diff --git a/src/key_mapping/french.py b/src/key_mapping/french.py new file mode 100644 index 0000000..89af4b9 --- /dev/null +++ b/src/key_mapping/french.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from PyQt4.QtCore import Qt + +KEY_MAPPING = { + # key: ( Qt::Key, ascii, modifiers ) + "8": (Qt.Key_Backspace, '', None), + "9": (Qt.Key_Tab, '\t', None), + "13": (Qt.Key_Enter, '\n', None), + "16": (Qt.Key_Shift, '', None), + "17": (Qt.Key_Control, '', None), + "18": (Qt.Key_Alt, '', None), + "19": (Qt.Key_Pause, '', None), + "20": (Qt.Key_CapsLock, '', None), + "27": (Qt.Key_Escape, '', None), + "32": (Qt.Key_Space, ' ', None), + "33": (Qt.Key_PageUp, '', None), + "34": (Qt.Key_PageDown, '', None), + "35": (Qt.Key_End, '', None), + "36": (Qt.Key_Home, '', None), + "37": (Qt.Key_Left, '', None), + "38": (Qt.Key_Up, '', None), + "39": (Qt.Key_Right, '', None), + "40": (Qt.Key_Down, '', None), + "44": (Qt.Key_SysReq, '', None), + "45": (Qt.Key_Insert, '', None), + "46": (Qt.Key_Delete, '', None), + "48": (Qt.Key_0, u'à', None), + "alt-48": (Qt.Key_At, '@', None), + "49": (Qt.Key_Ampersand, '&', None), + "50": (Qt.Key_2, u'é', None), + "alt-50": (Qt.Key_AsciiTilde, '~', None), + "51": (Qt.Key_QuoteDbl, '"', None), + "alt-51": (Qt.Key_NumberSign, '#', None), + "52": (Qt.Key_QuoteLeft, "'", None), + "alt-52": (Qt.Key_BraceLeft, "{", None), + "53": (Qt.Key_ParenLeft, '(', None), + "alt-53": (Qt.Key_BracketLeft, '[', None), + "54": (Qt.Key_Minus, '-', None), + "alt-54": (Qt.Key_Bar, '|', None), + "55": (Qt.Key_7, u'è', None), + "56": (Qt.Key_Underscore, '_', None), + "alt-56": (Qt.Key_Backslash, '\\', None), + "57": (Qt.Key_9, u'ç', None), + "alt-57": (Qt.Key_unknown, u'^', None), + "65": (Qt.Key_A, 'a', None), + "66": (Qt.Key_B, 'b', None), + "67": (Qt.Key_C, 'c', None), + "68": (Qt.Key_D, 'd', None), + "69": (Qt.Key_E, 'e', None), + "70": (Qt.Key_F, 'f', None), + "71": (Qt.Key_G, 'g', None), + "72": (Qt.Key_H, 'h', None), + "73": (Qt.Key_I, 'i', None), + "74": (Qt.Key_J, 'j', None), + "75": (Qt.Key_K, 'k', None), + "76": (Qt.Key_L, 'l', None), + "77": (Qt.Key_M, 'm', None), + "78": (Qt.Key_N, 'n', None), + "79": (Qt.Key_O, 'o', None), + "80": (Qt.Key_P, 'p', None), + "81": (Qt.Key_Q, 'q', None), + "82": (Qt.Key_R, 'r', None), + "83": (Qt.Key_S, 's', None), + "84": (Qt.Key_T, 't', None), + "85": (Qt.Key_U, 'u', None), + "86": (Qt.Key_V, 'v', None), + "87": (Qt.Key_W, 'w', None), + "88": (Qt.Key_X, 'x', None), + "89": (Qt.Key_Y, 'y', None), + "90": (Qt.Key_Z, 'z', None), + "93": (Qt.Key_Print, '', None), + "96": (Qt.Key_0, '0', Qt.KeypadModifier), + "97": (Qt.Key_1, '1', Qt.KeypadModifier), + "98": (Qt.Key_2, '2', Qt.KeypadModifier), + "99": (Qt.Key_3, '3', Qt.KeypadModifier), + "100": (Qt.Key_4, '4', Qt.KeypadModifier), + "101": (Qt.Key_5, '5', Qt.KeypadModifier), + "102": (Qt.Key_5, '6', Qt.KeypadModifier), + "103": (Qt.Key_5, '7', Qt.KeypadModifier), + "104": (Qt.Key_5, '8', Qt.KeypadModifier), + "105": (Qt.Key_5, '9', Qt.KeypadModifier), + "106": (Qt.Key_Asterisk, '*', Qt.KeypadModifier), + "107": (Qt.Key_Plus, '+', Qt.KeypadModifier), + "109": (Qt.Key_Minus, '-', Qt.KeypadModifier), + "110": (Qt.Key_Period, '.', Qt.KeypadModifier), + "111": (Qt.Key_Slash, '/', Qt.KeypadModifier), + "112": (Qt.Key_F1, '', None), + "113": (Qt.Key_F2, '', None), + "114": (Qt.Key_F3, '', None), + "115": (Qt.Key_F4, '', None), + "116": (Qt.Key_F5, '', None), + "117": (Qt.Key_F6, '', None), + "118": (Qt.Key_F7, '', None), + "119": (Qt.Key_F8, '', None), + "120": (Qt.Key_F9, '', None), + "121": (Qt.Key_F10, '', None), + "122": (Qt.Key_F11, '', None), + "113": (Qt.Key_F12, '', None), + "144": (Qt.Key_NumLock, '', None), + "145": (Qt.Key_ScrollLock, '', None), + "186": (Qt.Key_Dollar, '$', None), + "alt-186": (Qt.Key_Dollar, u'¤', None), + "187": (Qt.Key_Equal, '=', None), + "alt-187": (Qt.Key_BraceRight, '}', None), + "188": (Qt.Key_Comma, ',', None), + "189": (Qt.Key_Minus, '-', None), + "190": (Qt.Key_Period, ';', None), + "191": (Qt.Key_Colon, ':', None), + "192": (Qt.Key_Asterisk, u'ù', None), + "219": (Qt.Key_ParenRight, ')', None), + "alt-219": (Qt.Key_BracketRight, ']', None), + "220": (Qt.Key_Asterisk, '*', None), + "221": (Qt.Key_BracketRight, ']', None), + "222": (Qt.Key_unknown, u"²", None), + "223": (Qt.Key_Exclam, "!", None), + "226": (Qt.Key_Less, "<", None), + + # Calculate the SHIFT key as 300 + key value + "348": (Qt.Key_ParenRight, '0', None), # Shift+0 + "349": (Qt.Key_Exclam, '1', None), # Shift+1 + "350": (Qt.Key_At, '2', None), # Shift+2 + "351": (Qt.Key_NumberSign, '3', None), # Shift+3 + "352": (Qt.Key_Dollar, '4', None), # Shift+4 + "353": (Qt.Key_Percent, '5', None), # Shift+5 + "354": (Qt.Key_6, '6', None), + "355": (Qt.Key_Ampersand, '7', None), # Shift+7 + "356": (Qt.Key_Asterisk, '8', None), # Shift+8 + "357": (Qt.Key_ParenLeft, '9', None), # Shift+9 + + "365": (Qt.Key_A, 'A', None), + "366": (Qt.Key_B, 'B', None), + "367": (Qt.Key_C, 'C', None), + "368": (Qt.Key_D, 'D', None), + "369": (Qt.Key_E, 'E', None), + "370": (Qt.Key_F, 'F', None), + "371": (Qt.Key_G, 'G', None), + "372": (Qt.Key_H, 'H', None), + "373": (Qt.Key_I, 'I', None), + "374": (Qt.Key_J, 'J', None), + "375": (Qt.Key_K, 'K', None), + "376": (Qt.Key_L, 'L', None), + "377": (Qt.Key_M, 'M', None), + "378": (Qt.Key_N, 'N', None), + "379": (Qt.Key_O, 'O', None), + "380": (Qt.Key_P, 'P', None), + "381": (Qt.Key_Q, 'Q', None), + "382": (Qt.Key_R, 'R', None), + "383": (Qt.Key_S, 'S', None), + "384": (Qt.Key_T, 'T', None), + "385": (Qt.Key_U, 'U', None), + "386": (Qt.Key_V, 'V', None), + "387": (Qt.Key_W, 'W', None), + "388": (Qt.Key_X, 'X', None), + "389": (Qt.Key_Y, 'Y', None), + "390": (Qt.Key_Z, 'Z', None), + + "486": (Qt.Key_Dollar, u'£', None), # Shift+; + "487": (Qt.Key_Plus, '+', None), # Shift++ + "488": (Qt.Key_Question, '?', None), # Shift+, + "489": (Qt.Key_Underscore, '_', None), # Shift+- + "490": (Qt.Key_Period, '.', None), # Shift+> + "491": (Qt.Key_Slash, '/', None), # Shift+? + "492": (Qt.Key_Percent, '%', None), # Shift+` + "519": (Qt.Key_ParenRight, u'°', None), # Shift+[ + "520": (Qt.Key_Asterisk, u'µ', None), # Shift+ + "521": (Qt.Key_unknown, u'¨', None), # Shift+] + "522": (Qt.Key_QuoteDbl, '"', None), # Shift+' + "523": (Qt.Key_unknown, u'§', None), + "526": (Qt.Key_Greater, '>', None) +} diff --git a/src/key_mapping/prefs.json b/src/key_mapping/prefs.json new file mode 100644 index 0000000..e9947c3 --- /dev/null +++ b/src/key_mapping/prefs.json @@ -0,0 +1,3 @@ +{ + "language": "english" +} \ No newline at end of file diff --git a/src/pyqt_keymapping.py b/src/pyqt_keymapping.py new file mode 100644 index 0000000..ee22781 --- /dev/null +++ b/src/pyqt_keymapping.py @@ -0,0 +1,26 @@ +import sip +import sys +from PyQt4.QtGui import QWidget, QInputDialog + +# Add this plug-in path to python path +if __sipath__ not in sys.path: + sys.path.append(__sipath__) + + +def XSILoadPlugin(in_reg): + in_reg.Name = "PyQt_KeyboardMapping" + in_reg.Author = "Cesar Saez" + in_reg.RegisterCommand("PyQt_SetKeyboardMapping") + + +def PyQt_SetKeyboardMapping_Execute(): + import key_mapping as km + sianchor = Application.getQtSoftimageAnchor() + sianchor = sip.wrapinstance(long(sianchor), QWidget) + languages = km.list_languages() + lang, ok = QInputDialog.getItem( + sianchor, "Set PyQt Keyboard Mapping", "Keyboard Mapping", + languages, languages.index(km.get_language())) + if ok: + km.set_language(str(lang)) + Application.UpdatePlugins() diff --git a/src/qtevents.py b/src/qtevents.py index 143536c..6a32e51 100644 --- a/src/qtevents.py +++ b/src/qtevents.py @@ -1,7 +1,7 @@ import sys # Add this plug-in path to python path if __sipath__ not in sys.path: - sys.path.append( __sipath__ ) + sys.path.append(__sipath__) import Qt Qt.initialize() @@ -14,160 +14,9 @@ si = disp("XSI.Application") # Create a mapping of virtual keys -import win32con -KEY_MAPPING = { - # key: ( Qt::Key, ascii, modifiers ) - - 8: ( Qt.Key_Backspace, '', None ), - 9: ( Qt.Key_Tab, '\t', None ), - 13: ( Qt.Key_Enter, '\n', None ), - 16: ( Qt.Key_Shift, '', None ), - 17: ( Qt.Key_Control, '', None ), - 18: ( Qt.Key_Alt, '', None ), - 19: ( Qt.Key_Pause, '', None ), - 20: ( Qt.Key_CapsLock, '', None ), - 27: ( Qt.Key_Escape, '', None ), - 32: ( Qt.Key_Space, ' ', None ), - 33: ( Qt.Key_PageUp, '', None ), - 34: ( Qt.Key_PageDown, '', None ), - 35: ( Qt.Key_End, '', None ), - 36: ( Qt.Key_Home, '', None ), - 37: ( Qt.Key_Left, '', None ), - 38: ( Qt.Key_Up, '', None ), - 39: ( Qt.Key_Right, '', None ), - 40: ( Qt.Key_Down, '', None ), - 44: ( Qt.Key_SysReq, '', None ), - 45: ( Qt.Key_Insert, '', None ), - 46: ( Qt.Key_Delete, '', None ), - 48: ( Qt.Key_0, '0', None ), - 49: ( Qt.Key_1, '1', None ), - 50: ( Qt.Key_2, '2', None ), - 51: ( Qt.Key_3, '3', None ), - 52: ( Qt.Key_4, '4', None ), - 53: ( Qt.Key_5, '5', None ), - 54: ( Qt.Key_6, '6', None ), - 55: ( Qt.Key_7, '7', None ), - 56: ( Qt.Key_8, '8', None ), - 57: ( Qt.Key_9, '9', None ), - 65: ( Qt.Key_A, 'a', None ), - 66: ( Qt.Key_B, 'b', None ), - 67: ( Qt.Key_C, 'c', None ), - 68: ( Qt.Key_D, 'd', None ), - 69: ( Qt.Key_E, 'e', None ), - 70: ( Qt.Key_F, 'f', None ), - 71: ( Qt.Key_G, 'g', None ), - 72: ( Qt.Key_H, 'h', None ), - 73: ( Qt.Key_I, 'i', None ), - 74: ( Qt.Key_J, 'j', None ), - 75: ( Qt.Key_K, 'k', None ), - 76: ( Qt.Key_L, 'l', None ), - 77: ( Qt.Key_M, 'm', None ), - 78: ( Qt.Key_N, 'n', None ), - 79: ( Qt.Key_O, 'o', None ), - 80: ( Qt.Key_P, 'p', None ), - 81: ( Qt.Key_Q, 'q', None ), - 82: ( Qt.Key_R, 'r', None ), - 83: ( Qt.Key_S, 's', None ), - 84: ( Qt.Key_T, 't', None ), - 85: ( Qt.Key_U, 'u', None ), - 86: ( Qt.Key_V, 'v', None ), - 87: ( Qt.Key_W, 'w', None ), - 88: ( Qt.Key_X, 'x', None ), - 89: ( Qt.Key_Y, 'y', None ), - 90: ( Qt.Key_Z, 'z', None ), - 93: ( Qt.Key_Print, '', None ), - 96: ( Qt.Key_0, '0', Qt.KeypadModifier ), - 97: ( Qt.Key_1, '1', Qt.KeypadModifier ), - 98: ( Qt.Key_2, '2', Qt.KeypadModifier ), - 99: ( Qt.Key_3, '3', Qt.KeypadModifier ), - 100: ( Qt.Key_4, '4', Qt.KeypadModifier ), - 101: ( Qt.Key_5, '5', Qt.KeypadModifier ), - 102: ( Qt.Key_5, '6', Qt.KeypadModifier ), - 103: ( Qt.Key_5, '7', Qt.KeypadModifier ), - 104: ( Qt.Key_5, '8', Qt.KeypadModifier ), - 105: ( Qt.Key_5, '9', Qt.KeypadModifier ), - 106: ( Qt.Key_Asterisk, '*', Qt.KeypadModifier ), - 107: ( Qt.Key_Plus, '+', Qt.KeypadModifier ), - 109: ( Qt.Key_Minus, '-', Qt.KeypadModifier ), - 110: ( Qt.Key_Period, '.', Qt.KeypadModifier ), - 111: ( Qt.Key_Slash, '/', Qt.KeypadModifier ), - 112: ( Qt.Key_F1, '', None ), - 113: ( Qt.Key_F2, '', None ), - 114: ( Qt.Key_F3, '', None ), - 115: ( Qt.Key_F4, '', None ), - 116: ( Qt.Key_F5, '', None ), - 117: ( Qt.Key_F6, '', None ), - 118: ( Qt.Key_F7, '', None ), - 119: ( Qt.Key_F8, '', None ), - 120: ( Qt.Key_F9, '', None ), - 121: ( Qt.Key_F10, '', None ), - 122: ( Qt.Key_F11, '', None ), - 113: ( Qt.Key_F12, '', None ), - 144: ( Qt.Key_NumLock, '', None ), - 145: ( Qt.Key_ScrollLock, '', None ), - 186: ( Qt.Key_Semicolon, ';', None ), - 187: ( Qt.Key_Equal, '=', None ), - 188: ( Qt.Key_Comma, ',', None ), - 189: ( Qt.Key_Minus, '-', None ), - 190: ( Qt.Key_Period, '.', None ), - 191: ( Qt.Key_Slash, '/', None ), - 192: ( Qt.Key_QuoteLeft, '`', None ), - 219: ( Qt.Key_BracketLeft, '[', None ), - 220: ( Qt.Key_Backslash, '\\', None ), - 221: ( Qt.Key_BraceRight, ']', None ), - 222: ( Qt.Key_QuoteLeft, "'", None ), - - # Calculate the SHIFT key as 300 + key value - 348: ( Qt.Key_ParenRight, ')', None ), # Shift+0 - 349: ( Qt.Key_Exclam, '!', None ), # Shift+1 - 350: ( Qt.Key_At, '@', None ), # Shift+2 - 351: ( Qt.Key_NumberSign, '#', None ), # Shift+3 - 352: ( Qt.Key_Dollar, '$', None ), # Shift+4 - 353: ( Qt.Key_Percent, '%', None ), # Shift+5 - 354: ( Qt.Key_6, '6', None ), - 355: ( Qt.Key_Ampersand, '&', None ), # Shift+7 - 356: ( Qt.Key_Asterisk, '*', None ), # Shift+8 - 357: ( Qt.Key_ParenLeft, '(', None ), # Shift+9 - - 365: ( Qt.Key_A, 'A', None ), - 366: ( Qt.Key_B, 'B', None ), - 367: ( Qt.Key_C, 'C', None ), - 368: ( Qt.Key_D, 'D', None ), - 369: ( Qt.Key_E, 'E', None ), - 370: ( Qt.Key_F, 'F', None ), - 371: ( Qt.Key_G, 'G', None ), - 372: ( Qt.Key_H, 'H', None ), - 373: ( Qt.Key_I, 'I', None ), - 374: ( Qt.Key_J, 'J', None ), - 375: ( Qt.Key_K, 'K', None ), - 376: ( Qt.Key_L, 'L', None ), - 377: ( Qt.Key_M, 'M', None ), - 378: ( Qt.Key_N, 'N', None ), - 379: ( Qt.Key_O, 'O', None ), - 380: ( Qt.Key_P, 'P', None ), - 381: ( Qt.Key_Q, 'Q', None ), - 382: ( Qt.Key_R, 'R', None ), - 383: ( Qt.Key_S, 'S', None ), - 384: ( Qt.Key_T, 'T', None ), - 385: ( Qt.Key_U, 'U', None ), - 386: ( Qt.Key_V, 'V', None ), - 387: ( Qt.Key_W, 'W', None ), - 388: ( Qt.Key_X, 'X', None ), - 389: ( Qt.Key_Y, 'Y', None ), - 390: ( Qt.Key_Z, 'Z', None ), - - 486: ( Qt.Key_Colon, ':', None ), # Shift+; - 487: ( Qt.Key_Plus, '+', None ), # Shift++ - 488: ( Qt.Key_Less, '<', None ), # Shift+, - 489: ( Qt.Key_Underscore, '_', None ), # Shift+- - 490: ( Qt.Key_Greater, '>', None ), # Shift+> - 491: ( Qt.Key_Question, '?', None ), # Shift+? - 492: ( Qt.Key_AsciiTilde, '~', None ), # Shift+` - 519: ( Qt.Key_BraceLeft, '{', None ), # Shift+[ - 520: ( Qt.Key_Bar, '|', None ), # Shift+\ - 521: ( Qt.Key_BraceRight, '}', None ), # Shift+] - 522: ( Qt.Key_QuoteDbl, '"', None ), # Shift+' -} +import key_mapping +KEY_MAPPING = key_mapping.get_mapping() + def consumeKey(ctxt, pressed): """ @@ -188,10 +37,10 @@ def consumeKey(ctxt, pressed): modifier |= Qt.ControlModifier if mask and C.siAltMask: - modifier |= Qt.AltModifier + modifier |= Qt.AltModifier # Generate a Qt Key Event to be processed - result = KEY_MAPPING.get(kcode) + result = KEY_MAPPING.get(kcode) if result: if pressed: event = QKeyEvent.KeyPress @@ -202,7 +51,9 @@ def consumeKey(ctxt, pressed): modifier |= result[2] # Send the event along to the focused widget - QApplication.sendEvent(QApplication.instance().focusWidget(), QKeyEvent(event, result[0], modifier, result[1])) + QApplication.sendEvent( + QApplication.instance().focusWidget(), QKeyEvent(event, result[0], modifier, result[1])) + def isFocusWidget(): """ @@ -217,6 +68,7 @@ def isFocusWidget(): return focus + def xsi_version(): """ Calculate the version number from the string. @@ -232,12 +84,14 @@ def xsi_version(): return value # Softimage plugin registration + + def XSILoadPlugin(reg): reg.Author = "Steven Caron" reg.Name = "QtEvents" reg.Major = 0 reg.Minor = 1 - + reg.RegisterEvent("QtEvents_KeyDown", C.siOnKeyDown) reg.RegisterEvent("QtEvents_KeyUp", C.siOnKeyUp) @@ -276,20 +130,23 @@ def XSILoadPlugin(reg): reg.RegisterEvent("QtEvents_SelectionChange", C.siOnSelectionChange) reg.RegisterEvent("QtEvents_ValueChange", C.siOnValueChange) - # mute immediately. the dialog is responsble for turning the events it needs on + # mute immediately. the dialog is responsble for turning the events it + # needs on events = si.EventInfos from sisignals import EVENT_MAPPING - for key,value in EVENT_MAPPING.iteritems(): + for key, value in EVENT_MAPPING.iteritems(): event = events(value) if si.ClassName(event) == "EventInfo": event.Mute = True return True -def XSIUnloadPlugin( reg ): + +def XSIUnloadPlugin(reg): si.LogMessage("%s has been unloaded." % reg.Name, C.siVerbose) return True + def QtEvents_KeyDown_OnEvent(ctxt): # Block XSI keys from processing, pass along to Qt if isFocusWidget(): @@ -300,6 +157,7 @@ def QtEvents_KeyDown_OnEvent(ctxt): return True + def QtEvents_KeyUp_OnEvent(ctxt): # Block XSI keys from processing, pass along to Qt if isFocusWidget(): @@ -310,86 +168,112 @@ def QtEvents_KeyUp_OnEvent(ctxt): return True + def QtEvents_Activate_OnEvent(ctxt): from sisignals import signals signals.siActivate.emit(ctxt.GetAttribute("State")) + def QtEvents_FileExport_OnEvent(ctxt): from sisignals import signals signals.siFileExport.emit(ctxt.GetAttribute("FileName")) + def QtEvents_FileImport_OnEvent(ctxt): from sisignals import signals signals.siFileImport.emit(ctxt.GetAttribute("FileName")) -#def QtEvents_CustomFileExport_OnEvent(ctxt): +# def QtEvents_CustomFileExport_OnEvent(ctxt): + +# def QtEvents_CustomFileImport_OnEvent(ctxt): -#def QtEvents_CustomFileImport_OnEvent(ctxt): def QtEvents_RenderFrame_OnEvent(ctxt): from sisignals import signals - signals.siRenderFrame.emit(ctxt.GetAttribute("FileName" ), ctxt.GetAttribute("Frame")) + signals.siRenderFrame.emit( + ctxt.GetAttribute("FileName"), ctxt.GetAttribute("Frame")) + def QtEvents_RenderSequence_OnEvent(ctxt): from sisignals import signals - signals.siRenderSequence.emit(ctxt.GetAttribute("FileName" ), ctxt.GetAttribute("Frame")) + signals.siRenderSequence.emit( + ctxt.GetAttribute("FileName"), ctxt.GetAttribute("Frame")) + def QtEvents_RenderAbort_OnEvent(ctxt): from sisignals import signals - signals.siRenderAbort.emit(ctxt.GetAttribute("FileName" ), ctxt.GetAttribute("Frame")) + signals.siRenderAbort.emit( + ctxt.GetAttribute("FileName"), ctxt.GetAttribute("Frame")) + def QtEvents_PassChange_OnEvent(ctxt): from sisignals import signals signals.siPassChange.emit(ctxt.GetAttribute("TargetPass")) + def QtEvents_SceneOpen_OnEvent(ctxt): from sisignals import signals signals.siSceneOpen.emit(ctxt.GetAttribute("FileName")) + def QtEvents_SceneSaveAs_OnEvent(ctxt): from sisignals import signals signals.siSceneSaveAs.emit(ctxt.GetAttribute("FileName")) + def QtEvents_SceneSave_OnEvent(ctxt): from sisignals import signals signals.siSceneSave.emit(ctxt.GetAttribute("FileName")) + def QtEvents_ChangeProject_OnEvent(ctxt): from sisignals import signals signals.siChangeProject.emit(ctxt.GetAttribute("NewProjectPath")) + def QtEvents_ConnectShader_OnEvent(ctxt): from sisignals import signals - signals.siConnectShader.emit(ctxt.GetAttribute("Source" ), ctxt.GetAttribute("Target")) + signals.siConnectShader.emit( + ctxt.GetAttribute("Source"), ctxt.GetAttribute("Target")) + def QtEvents_DisconnectShader_OnEvent(ctxt): from sisignals import signals - signals.siDisconnectShader.emit(ctxt.GetAttribute("Source" ), ctxt.GetAttribute("Target")) + signals.siDisconnectShader.emit( + ctxt.GetAttribute("Source"), ctxt.GetAttribute("Target")) + def QtEvents_CreateShader_OnEvent(ctxt): from sisignals import signals - signals.siCreateShader.emit(ctxt.GetAttribute("Shader" ), ctxt.GetAttribute("ProgID")) + signals.siCreateShader.emit( + ctxt.GetAttribute("Shader"), ctxt.GetAttribute("ProgID")) + def QtEvents_SourcePathChange_OnEvent(ctxt): from sisignals import signals signals.siSourcePathChange.emit(ctxt.GetAttribute("FileName")) + def QtEvents_DragAndDrop_OnEvent(ctxt): from sisignals import signals signals.siDragAndDrop.emit(ctxt.GetAttribute("DragSource")) + def QtEvents_ObjectAdded_OnEvent(ctxt): from sisignals import signals signals.siObjectAdded.emit(ctxt.GetAttribute("Objects")) + def QtEvents_ObjectRemoved_OnEvent(ctxt): from sisignals import signals signals.siObjectRemoved.emit(ctxt.GetAttribute("Objects")) + def QtEvents_SelectionChange_OnEvent(ctxt): from sisignals import signals signals.siSelectionChange.emit(ctxt.GetAttribute("ChangeType")) + def QtEvents_ValueChange_OnEvent(ctxt): from sisignals import signals signals.siValueChange.emit(ctxt.GetAttribute("FullName")) From ff1eba3d60ed9a5408897750c7c7c6754a71b092 Mon Sep 17 00:00:00 2001 From: csaez Date: Mon, 6 Jan 2014 23:55:10 -0300 Subject: [PATCH 2/4] spanish keyboard mapping --- src/key_mapping/__init__.py | 1 - src/key_mapping/spanish.py | 158 ++++++++++++++++++++++++++++++++++++ src/qtevents.py | 4 + 3 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 src/key_mapping/spanish.py diff --git a/src/key_mapping/__init__.py b/src/key_mapping/__init__.py index 4fc6da4..a444989 100644 --- a/src/key_mapping/__init__.py +++ b/src/key_mapping/__init__.py @@ -1,6 +1,5 @@ import os import json -from . import * class _JSONDict(dict): diff --git a/src/key_mapping/spanish.py b/src/key_mapping/spanish.py new file mode 100644 index 0000000..33d7e8b --- /dev/null +++ b/src/key_mapping/spanish.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from PyQt4.QtCore import Qt + +KEY_MAPPING = { + # key: ( Qt::Key, ascii, modifiers ) + + 8: (Qt.Key_Backspace, '', None), + 9: (Qt.Key_Tab, '\t', None), + 13: (Qt.Key_Enter, '\n', None), + 16: (Qt.Key_Shift, '', None), + 17: (Qt.Key_Control, '', None), + 18: (Qt.Key_Alt, '', None), + 19: (Qt.Key_Pause, '', None), + 20: (Qt.Key_CapsLock, '', None), + 27: (Qt.Key_Escape, '', None), + 32: (Qt.Key_Space, ' ', None), + 33: (Qt.Key_PageUp, '', None), + 34: (Qt.Key_PageDown, '', None), + 35: (Qt.Key_End, '', None), + 36: (Qt.Key_Home, '', None), + 37: (Qt.Key_Left, '', None), + 38: (Qt.Key_Up, '', None), + 39: (Qt.Key_Right, '', None), + 40: (Qt.Key_Down, '', None), + 44: (Qt.Key_SysReq, '', None), + 45: (Qt.Key_Insert, '', None), + 46: (Qt.Key_Delete, '', None), + 48: (Qt.Key_0, '0', None), + 49: (Qt.Key_1, '1', None), + 50: (Qt.Key_2, '2', None), + 51: (Qt.Key_3, '3', None), + 52: (Qt.Key_4, '4', None), + 53: (Qt.Key_5, '5', None), + 54: (Qt.Key_6, '6', None), + 55: (Qt.Key_7, '7', None), + 56: (Qt.Key_8, '8', None), + 57: (Qt.Key_9, '9', None), + 65: (Qt.Key_A, 'a', None), + 66: (Qt.Key_B, 'b', None), + 67: (Qt.Key_C, 'c', None), + 68: (Qt.Key_D, 'd', None), + 69: (Qt.Key_E, 'e', None), + 70: (Qt.Key_F, 'f', None), + 71: (Qt.Key_G, 'g', None), + 72: (Qt.Key_H, 'h', None), + 73: (Qt.Key_I, 'i', None), + 74: (Qt.Key_J, 'j', None), + 75: (Qt.Key_K, 'k', None), + 76: (Qt.Key_L, 'l', None), + 77: (Qt.Key_M, 'm', None), + 78: (Qt.Key_N, 'n', None), + 79: (Qt.Key_O, 'o', None), + 80: (Qt.Key_P, 'p', None), + 81: (Qt.Key_Q, 'q', None), + 82: (Qt.Key_R, 'r', None), + 83: (Qt.Key_S, 's', None), + 84: (Qt.Key_T, 't', None), + 85: (Qt.Key_U, 'u', None), + 86: (Qt.Key_V, 'v', None), + 87: (Qt.Key_W, 'w', None), + 88: (Qt.Key_X, 'x', None), + 89: (Qt.Key_Y, 'y', None), + 90: (Qt.Key_Z, 'z', None), + 93: (Qt.Key_Print, '', None), + 96: (Qt.Key_0, '0', Qt.KeypadModifier), + 97: (Qt.Key_1, '1', Qt.KeypadModifier), + 98: (Qt.Key_2, '2', Qt.KeypadModifier), + 99: (Qt.Key_3, '3', Qt.KeypadModifier), + 100: (Qt.Key_4, '4', Qt.KeypadModifier), + 101: (Qt.Key_5, '5', Qt.KeypadModifier), + 102: (Qt.Key_5, '6', Qt.KeypadModifier), + 103: (Qt.Key_5, '7', Qt.KeypadModifier), + 104: (Qt.Key_5, '8', Qt.KeypadModifier), + 105: (Qt.Key_5, '9', Qt.KeypadModifier), + 106: (Qt.Key_Asterisk, '*', Qt.KeypadModifier), + 107: (Qt.Key_Plus, '+', Qt.KeypadModifier), + 109: (Qt.Key_Minus, '-', Qt.KeypadModifier), + 110: (Qt.Key_Period, '.', Qt.KeypadModifier), + 111: (Qt.Key_Slash, '/', Qt.KeypadModifier), + 112: (Qt.Key_F1, '', None), + 113: (Qt.Key_F2, '', None), + 114: (Qt.Key_F3, '', None), + 115: (Qt.Key_F4, '', None), + 116: (Qt.Key_F5, '', None), + 117: (Qt.Key_F6, '', None), + 118: (Qt.Key_F7, '', None), + 119: (Qt.Key_F8, '', None), + 120: (Qt.Key_F9, '', None), + 121: (Qt.Key_F10, '', None), + 122: (Qt.Key_F11, '', None), + 113: (Qt.Key_F12, '', None), + 144: (Qt.Key_NumLock, '', None), + 145: (Qt.Key_ScrollLock, '', None), + 186: (Qt.Key_Semicolon, ';', None), + 187: (Qt.Key_Equal, '=', None), + 188: (Qt.Key_Comma, ',', None), + 189: (Qt.Key_Minus, '-', None), + 190: (Qt.Key_Period, '.', None), + 191: (Qt.Key_Slash, '/', None), + 192: (Qt.Key_QuoteLeft, '`', None), + 219: (Qt.Key_BracketLeft, "'", None), + 220: (Qt.Key_Backslash, '\\', None), + 221: (Qt.Key_BraceRight, '¡', None), + 222: (Qt.Key_QuoteLeft, "'", None), + + # Calculate the SHIFT key as 300 + key value + 348: (Qt.Key_ParenRight, '=', None), # Shift+0 + 349: (Qt.Key_Exclam, '!', None), # Shift+1 + 350: (Qt.Key_At, '"', None), # Shift+2 + 351: (Qt.Key_NumberSign, '·', None), # Shift+3 + 352: (Qt.Key_Dollar, '$', None), # Shift+4 + 353: (Qt.Key_Percent, '%', None), # Shift+5 + 354: (Qt.Key_6, '&', None), # Shift+6 + 355: (Qt.Key_Ampersand, '/', None), # Shift+7 + 356: (Qt.Key_Asterisk, '(', None), # Shift+8 + 357: (Qt.Key_ParenLeft, ')', None), # Shift+9 + + 365: (Qt.Key_A, 'A', None), + 366: (Qt.Key_B, 'B', None), + 367: (Qt.Key_C, 'C', None), + 368: (Qt.Key_D, 'D', None), + 369: (Qt.Key_E, 'E', None), + 370: (Qt.Key_F, 'F', None), + 371: (Qt.Key_G, 'G', None), + 372: (Qt.Key_H, 'H', None), + 373: (Qt.Key_I, 'I', None), + 374: (Qt.Key_J, 'J', None), + 375: (Qt.Key_K, 'K', None), + 376: (Qt.Key_L, 'L', None), + 377: (Qt.Key_M, 'M', None), + 378: (Qt.Key_N, 'N', None), + 379: (Qt.Key_O, 'O', None), + 380: (Qt.Key_P, 'P', None), + 381: (Qt.Key_Q, 'Q', None), + 382: (Qt.Key_R, 'R', None), + 383: (Qt.Key_S, 'S', None), + 384: (Qt.Key_T, 'T', None), + 385: (Qt.Key_U, 'U', None), + 386: (Qt.Key_V, 'V', None), + 387: (Qt.Key_W, 'W', None), + 388: (Qt.Key_X, 'X', None), + 389: (Qt.Key_Y, 'Y', None), + 390: (Qt.Key_Z, 'Z', None), + + 486: (Qt.Key_Colon, ':', None), # Shift+; + 487: (Qt.Key_Plus, '+', None), # Shift++ + 488: (Qt.Key_Less, ';', None), # Shift+, + 489: (Qt.Key_Underscore, '_', None), # Shift+- + 490: (Qt.Key_Greater, ':', None), # Shift+> + 491: (Qt.Key_Question, '?', None), # Shift+? + 492: (Qt.Key_AsciiTilde, '~', None), # Shift+` + 519: (Qt.Key_BraceLeft, '?', None), # Shift+[ + 520: (Qt.Key_Bar, '|', None), # Shift+ + 521: (Qt.Key_BraceRight, '¿', None), # Shift+] + 522: (Qt.Key_QuoteDbl, '"', None), # Shift+' +} diff --git a/src/qtevents.py b/src/qtevents.py index 6a32e51..0df6d43 100644 --- a/src/qtevents.py +++ b/src/qtevents.py @@ -39,6 +39,10 @@ def consumeKey(ctxt, pressed): if mask and C.siAltMask: modifier |= Qt.AltModifier + # Offseting kcode on AltGr mask + if mask == 6 and kcode + 600 in KEY_MAPPING: + kcode += 600 + # Generate a Qt Key Event to be processed result = KEY_MAPPING.get(kcode) if result: From 325b685f67542d6c079c37d1e538566e29983b92 Mon Sep 17 00:00:00 2001 From: csaez Date: Tue, 7 Jan 2014 00:26:49 -0300 Subject: [PATCH 3/4] Validate language on set_language() --- src/key_mapping/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/key_mapping/__init__.py b/src/key_mapping/__init__.py index a444989..32a692a 100644 --- a/src/key_mapping/__init__.py +++ b/src/key_mapping/__init__.py @@ -49,6 +49,7 @@ def get_mapping(): def set_language(lang): if lang not in list_languages(): print "WARNING: " + lang + " key_mapping not found." + return _prefs["language"] = lang From 8f9797ad61d1ad9139408187217808613cebc692 Mon Sep 17 00:00:00 2001 From: csaez Date: Tue, 7 Jan 2014 00:32:19 -0300 Subject: [PATCH 4/4] AltGr symbols and special chars --- src/key_mapping/spanish.py | 50 +++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/key_mapping/spanish.py b/src/key_mapping/spanish.py index 33d7e8b..d19123b 100644 --- a/src/key_mapping/spanish.py +++ b/src/key_mapping/spanish.py @@ -70,10 +70,10 @@ 99: (Qt.Key_3, '3', Qt.KeypadModifier), 100: (Qt.Key_4, '4', Qt.KeypadModifier), 101: (Qt.Key_5, '5', Qt.KeypadModifier), - 102: (Qt.Key_5, '6', Qt.KeypadModifier), - 103: (Qt.Key_5, '7', Qt.KeypadModifier), - 104: (Qt.Key_5, '8', Qt.KeypadModifier), - 105: (Qt.Key_5, '9', Qt.KeypadModifier), + 102: (Qt.Key_6, '6', Qt.KeypadModifier), + 103: (Qt.Key_7, '7', Qt.KeypadModifier), + 104: (Qt.Key_8, '8', Qt.KeypadModifier), + 105: (Qt.Key_9, '9', Qt.KeypadModifier), 106: (Qt.Key_Asterisk, '*', Qt.KeypadModifier), 107: (Qt.Key_Plus, '+', Qt.KeypadModifier), 109: (Qt.Key_Minus, '-', Qt.KeypadModifier), @@ -93,23 +93,24 @@ 113: (Qt.Key_F12, '', None), 144: (Qt.Key_NumLock, '', None), 145: (Qt.Key_ScrollLock, '', None), - 186: (Qt.Key_Semicolon, ';', None), - 187: (Qt.Key_Equal, '=', None), + 186: (Qt.Key_Semicolon, u'`', None), + 187: (Qt.Key_Equal, '+', None), 188: (Qt.Key_Comma, ',', None), 189: (Qt.Key_Minus, '-', None), 190: (Qt.Key_Period, '.', None), - 191: (Qt.Key_Slash, '/', None), - 192: (Qt.Key_QuoteLeft, '`', None), + 191: (Qt.Key_Slash, u'ç', None), + 192: (Qt.Key_QuoteLeft, u'ñ', None), 219: (Qt.Key_BracketLeft, "'", None), - 220: (Qt.Key_Backslash, '\\', None), - 221: (Qt.Key_BraceRight, '¡', None), - 222: (Qt.Key_QuoteLeft, "'", None), + 220: (Qt.Key_Backslash, u'º', None), + 221: (Qt.Key_BraceRight, u'¡', None), + 222: (Qt.Key_QuoteLeft, u"´", None), + 226: (Qt.Key_Less, "<", None), # Calculate the SHIFT key as 300 + key value 348: (Qt.Key_ParenRight, '=', None), # Shift+0 349: (Qt.Key_Exclam, '!', None), # Shift+1 350: (Qt.Key_At, '"', None), # Shift+2 - 351: (Qt.Key_NumberSign, '·', None), # Shift+3 + 351: (Qt.Key_NumberSign, u'·', None), # Shift+3 352: (Qt.Key_Dollar, '$', None), # Shift+4 353: (Qt.Key_Percent, '%', None), # Shift+5 354: (Qt.Key_6, '&', None), # Shift+6 @@ -144,15 +145,26 @@ 389: (Qt.Key_Y, 'Y', None), 390: (Qt.Key_Z, 'Z', None), - 486: (Qt.Key_Colon, ':', None), # Shift+; - 487: (Qt.Key_Plus, '+', None), # Shift++ + 486: (Qt.Key_Colon, '^', None), # Shift+; + 487: (Qt.Key_Plus, '*', None), # Shift++ 488: (Qt.Key_Less, ';', None), # Shift+, 489: (Qt.Key_Underscore, '_', None), # Shift+- 490: (Qt.Key_Greater, ':', None), # Shift+> - 491: (Qt.Key_Question, '?', None), # Shift+? - 492: (Qt.Key_AsciiTilde, '~', None), # Shift+` + 491: (Qt.Key_Question, u'Ç', None), # Shift+? + 492: (Qt.Key_AsciiTilde, u'Ñ', None), # Shift+` 519: (Qt.Key_BraceLeft, '?', None), # Shift+[ - 520: (Qt.Key_Bar, '|', None), # Shift+ - 521: (Qt.Key_BraceRight, '¿', None), # Shift+] - 522: (Qt.Key_QuoteDbl, '"', None), # Shift+' + 520: (Qt.Key_Bar, u'ª', None), # Shift+ + 521: (Qt.Key_BraceRight, u'¿', None), # Shift+] + 522: (Qt.Key_QuoteDbl, u'¨', None), # Shift+' + 526: (Qt.Key_Less, ">", None), + + 649: (Qt.Key_1, '|', None), # AltGr+1 + 650: (Qt.Key_2, '@', None), # AltGr+2 + 651: (Qt.Key_3, '#', None), # AltGr+3 + 654: (Qt.Key_6, u'¬', None), # AltGr+6 + 786: (Qt.Key_QuoteLeft, '[', None), # AltGr+` + 787: (Qt.Key_Equal, ']', None), # AltGr++ + 791: (Qt.Key_Slash, '}', None), # AltGr+ç + 820: (Qt.Key_Backslash, '\\', None), # AltGr+º + 822: (Qt.Key_QuoteLeft, "{", None), # AltGr+´ }