Kate
katevikeyparser.cpp
Go to the documentation of this file.
00001 /* This file is part of the KDE libraries and the Kate part. 00002 * 00003 * Copyright (C) 2008 Erlend Hamberg <ehamberg@gmail.com> 00004 * Copyright (C) 2008 Evgeniy Ivanov <powerfox@kde.ru> 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Library General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Library General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Library General Public License 00017 * along with this library; see the file COPYING.LIB. If not, write to 00018 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00019 * Boston, MA 02110-1301, USA. 00020 */ 00021 00022 #include "katevikeyparser.h" 00023 #include <QStringList> 00024 00025 KateViKeyParser* KateViKeyParser::m_instance = NULL; 00026 00027 KateViKeyParser::KateViKeyParser() 00028 { 00029 m_qt2katevi = new QHash<int, QString>; 00030 m_katevi2qt = new QHash<QString, int>; 00031 m_nameToKeyCode = new QHash<QString, int>; 00032 m_keyCodeToName = new QHash<int, QString>; 00033 00034 initKeyTables(); 00035 } 00036 00037 KateViKeyParser* KateViKeyParser::getInstance() 00038 { 00039 if ( m_instance == NULL ) { 00040 m_instance = new KateViKeyParser(); 00041 } 00042 00043 return m_instance; 00044 } 00045 00046 void KateViKeyParser::initKeyTables() 00047 { 00048 m_qt2katevi->insert( Qt::Key_Escape, QString( "esc" ) ); 00049 m_qt2katevi->insert( Qt::Key_Tab, QString( "tab" ) ); 00050 m_qt2katevi->insert( Qt::Key_Backtab, QString( "backtab" ) ); 00051 m_qt2katevi->insert( Qt::Key_Backspace, QString( "backspace" ) ); 00052 m_qt2katevi->insert( Qt::Key_Return, QString( "return" ) ); 00053 m_qt2katevi->insert( Qt::Key_Enter, QString( "enter" ) ); 00054 m_qt2katevi->insert( Qt::Key_Insert, QString( "insert" ) ); 00055 m_qt2katevi->insert( Qt::Key_Delete, QString( "delete" ) ); 00056 m_qt2katevi->insert( Qt::Key_Pause, QString( "pause" ) ); 00057 m_qt2katevi->insert( Qt::Key_Print, QString( "print" ) ); 00058 m_qt2katevi->insert( Qt::Key_SysReq, QString( "sysreq" ) ); 00059 m_qt2katevi->insert( Qt::Key_Clear, QString( "clear" ) ); 00060 m_qt2katevi->insert( Qt::Key_Home, QString( "home" ) ); 00061 m_qt2katevi->insert( Qt::Key_End, QString( "end" ) ); 00062 m_qt2katevi->insert( Qt::Key_Left, QString( "left" ) ); 00063 m_qt2katevi->insert( Qt::Key_Up, QString( "up" ) ); 00064 m_qt2katevi->insert( Qt::Key_Right, QString( "right" ) ); 00065 m_qt2katevi->insert( Qt::Key_Down, QString( "down" ) ); 00066 m_qt2katevi->insert( Qt::Key_PageUp, QString( "pageup" ) ); 00067 m_qt2katevi->insert( Qt::Key_PageDown, QString( "pagedown" ) ); 00068 m_qt2katevi->insert( Qt::Key_Shift, QString( "shift" ) ); 00069 m_qt2katevi->insert( Qt::Key_Control, QString( "control" ) ); 00070 m_qt2katevi->insert( Qt::Key_Meta, QString( "meta" ) ); 00071 m_qt2katevi->insert( Qt::Key_Alt, QString( "alt" ) ); 00072 m_qt2katevi->insert( Qt::Key_AltGr, QString( "altgr" ) ); 00073 m_qt2katevi->insert( Qt::Key_CapsLock, QString( "capslock" ) ); 00074 m_qt2katevi->insert( Qt::Key_NumLock, QString( "numlock" ) ); 00075 m_qt2katevi->insert( Qt::Key_ScrollLock, QString( "scrolllock" ) ); 00076 m_qt2katevi->insert( Qt::Key_F1, QString( "f1" ) ); 00077 m_qt2katevi->insert( Qt::Key_F2, QString( "f2" ) ); 00078 m_qt2katevi->insert( Qt::Key_F3, QString( "f3" ) ); 00079 m_qt2katevi->insert( Qt::Key_F4, QString( "f4" ) ); 00080 m_qt2katevi->insert( Qt::Key_F5, QString( "f5" ) ); 00081 m_qt2katevi->insert( Qt::Key_F6, QString( "f6" ) ); 00082 m_qt2katevi->insert( Qt::Key_F7, QString( "f7" ) ); 00083 m_qt2katevi->insert( Qt::Key_F8, QString( "f8" ) ); 00084 m_qt2katevi->insert( Qt::Key_F9, QString( "f9" ) ); 00085 m_qt2katevi->insert( Qt::Key_F10, QString( "f10" ) ); 00086 m_qt2katevi->insert( Qt::Key_F11, QString( "f11" ) ); 00087 m_qt2katevi->insert( Qt::Key_F12, QString( "f12" ) ); 00088 m_qt2katevi->insert( Qt::Key_F13, QString( "f13" ) ); 00089 m_qt2katevi->insert( Qt::Key_F14, QString( "f14" ) ); 00090 m_qt2katevi->insert( Qt::Key_F15, QString( "f15" ) ); 00091 m_qt2katevi->insert( Qt::Key_F16, QString( "f16" ) ); 00092 m_qt2katevi->insert( Qt::Key_F17, QString( "f17" ) ); 00093 m_qt2katevi->insert( Qt::Key_F18, QString( "f18" ) ); 00094 m_qt2katevi->insert( Qt::Key_F19, QString( "f19" ) ); 00095 m_qt2katevi->insert( Qt::Key_F20, QString( "f20" ) ); 00096 m_qt2katevi->insert( Qt::Key_F21, QString( "f21" ) ); 00097 m_qt2katevi->insert( Qt::Key_F22, QString( "f22" ) ); 00098 m_qt2katevi->insert( Qt::Key_F23, QString( "f23" ) ); 00099 m_qt2katevi->insert( Qt::Key_F24, QString( "f24" ) ); 00100 m_qt2katevi->insert( Qt::Key_F25, QString( "f25" ) ); 00101 m_qt2katevi->insert( Qt::Key_F26, QString( "f26" ) ); 00102 m_qt2katevi->insert( Qt::Key_F27, QString( "f27" ) ); 00103 m_qt2katevi->insert( Qt::Key_F28, QString( "f28" ) ); 00104 m_qt2katevi->insert( Qt::Key_F29, QString( "f29" ) ); 00105 m_qt2katevi->insert( Qt::Key_F30, QString( "f30" ) ); 00106 m_qt2katevi->insert( Qt::Key_F31, QString( "f31" ) ); 00107 m_qt2katevi->insert( Qt::Key_F32, QString( "f32" ) ); 00108 m_qt2katevi->insert( Qt::Key_F33, QString( "f33" ) ); 00109 m_qt2katevi->insert( Qt::Key_F34, QString( "f34" ) ); 00110 m_qt2katevi->insert( Qt::Key_F35, QString( "f35" ) ); 00111 m_qt2katevi->insert( Qt::Key_Super_L, QString( "super_l" ) ); 00112 m_qt2katevi->insert( Qt::Key_Super_R, QString( "super_r" ) ); 00113 m_qt2katevi->insert( Qt::Key_Menu, QString( "menu" ) ); 00114 m_qt2katevi->insert( Qt::Key_Hyper_L, QString( "hyper_l" ) ); 00115 m_qt2katevi->insert( Qt::Key_Hyper_R, QString( "hyper_r" ) ); 00116 m_qt2katevi->insert( Qt::Key_Help, QString( "help" ) ); 00117 m_qt2katevi->insert( Qt::Key_Direction_L, QString( "direction_l" ) ); 00118 m_qt2katevi->insert( Qt::Key_Direction_R, QString( "direction_r" ) ); 00119 m_qt2katevi->insert( Qt::Key_Multi_key, QString( "multi_key" ) ); 00120 m_qt2katevi->insert( Qt::Key_Codeinput, QString( "codeinput" ) ); 00121 m_qt2katevi->insert( Qt::Key_SingleCandidate, QString( "singlecandidate" ) ); 00122 m_qt2katevi->insert( Qt::Key_MultipleCandidate, QString( "multiplecandidate" ) ); 00123 m_qt2katevi->insert( Qt::Key_PreviousCandidate, QString( "previouscandidate" ) ); 00124 m_qt2katevi->insert( Qt::Key_Mode_switch, QString( "mode_switch" ) ); 00125 m_qt2katevi->insert( Qt::Key_Kanji, QString( "kanji" ) ); 00126 m_qt2katevi->insert( Qt::Key_Muhenkan, QString( "muhenkan" ) ); 00127 m_qt2katevi->insert( Qt::Key_Henkan, QString( "henkan" ) ); 00128 m_qt2katevi->insert( Qt::Key_Romaji, QString( "romaji" ) ); 00129 m_qt2katevi->insert( Qt::Key_Hiragana, QString( "hiragana" ) ); 00130 m_qt2katevi->insert( Qt::Key_Katakana, QString( "katakana" ) ); 00131 m_qt2katevi->insert( Qt::Key_Hiragana_Katakana, QString( "hiragana_katakana" ) ); 00132 m_qt2katevi->insert( Qt::Key_Zenkaku, QString( "zenkaku" ) ); 00133 m_qt2katevi->insert( Qt::Key_Hankaku, QString( "hankaku" ) ); 00134 m_qt2katevi->insert( Qt::Key_Zenkaku_Hankaku, QString( "zenkaku_hankaku" ) ); 00135 m_qt2katevi->insert( Qt::Key_Touroku, QString( "touroku" ) ); 00136 m_qt2katevi->insert( Qt::Key_Massyo, QString( "massyo" ) ); 00137 m_qt2katevi->insert( Qt::Key_Kana_Lock, QString( "kana_lock" ) ); 00138 m_qt2katevi->insert( Qt::Key_Kana_Shift, QString( "kana_shift" ) ); 00139 m_qt2katevi->insert( Qt::Key_Eisu_Shift, QString( "eisu_shift" ) ); 00140 m_qt2katevi->insert( Qt::Key_Eisu_toggle, QString( "eisu_toggle" ) ); 00141 m_qt2katevi->insert( Qt::Key_Hangul, QString( "hangul" ) ); 00142 m_qt2katevi->insert( Qt::Key_Hangul_Start, QString( "hangul_start" ) ); 00143 m_qt2katevi->insert( Qt::Key_Hangul_End, QString( "hangul_end" ) ); 00144 m_qt2katevi->insert( Qt::Key_Hangul_Hanja, QString( "hangul_hanja" ) ); 00145 m_qt2katevi->insert( Qt::Key_Hangul_Jamo, QString( "hangul_jamo" ) ); 00146 m_qt2katevi->insert( Qt::Key_Hangul_Romaja, QString( "hangul_romaja" ) ); 00147 m_qt2katevi->insert( Qt::Key_Hangul_Jeonja, QString( "hangul_jeonja" ) ); 00148 m_qt2katevi->insert( Qt::Key_Hangul_Banja, QString( "hangul_banja" ) ); 00149 m_qt2katevi->insert( Qt::Key_Hangul_PreHanja, QString( "hangul_prehanja" ) ); 00150 m_qt2katevi->insert( Qt::Key_Hangul_PostHanja, QString( "hangul_posthanja" ) ); 00151 m_qt2katevi->insert( Qt::Key_Hangul_Special, QString( "hangul_special" ) ); 00152 m_qt2katevi->insert( Qt::Key_Dead_Grave, QString( "dead_grave" ) ); 00153 m_qt2katevi->insert( Qt::Key_Dead_Acute, QString( "dead_acute" ) ); 00154 m_qt2katevi->insert( Qt::Key_Dead_Circumflex, QString( "dead_circumflex" ) ); 00155 m_qt2katevi->insert( Qt::Key_Dead_Tilde, QString( "dead_tilde" ) ); 00156 m_qt2katevi->insert( Qt::Key_Dead_Macron, QString( "dead_macron" ) ); 00157 m_qt2katevi->insert( Qt::Key_Dead_Breve, QString( "dead_breve" ) ); 00158 m_qt2katevi->insert( Qt::Key_Dead_Abovedot, QString( "dead_abovedot" ) ); 00159 m_qt2katevi->insert( Qt::Key_Dead_Diaeresis, QString( "dead_diaeresis" ) ); 00160 m_qt2katevi->insert( Qt::Key_Dead_Abovering, QString( "dead_abovering" ) ); 00161 m_qt2katevi->insert( Qt::Key_Dead_Doubleacute, QString( "dead_doubleacute" ) ); 00162 m_qt2katevi->insert( Qt::Key_Dead_Caron, QString( "dead_caron" ) ); 00163 m_qt2katevi->insert( Qt::Key_Dead_Cedilla, QString( "dead_cedilla" ) ); 00164 m_qt2katevi->insert( Qt::Key_Dead_Ogonek, QString( "dead_ogonek" ) ); 00165 m_qt2katevi->insert( Qt::Key_Dead_Iota, QString( "dead_iota" ) ); 00166 m_qt2katevi->insert( Qt::Key_Dead_Voiced_Sound, QString( "dead_voiced_sound" ) ); 00167 m_qt2katevi->insert( Qt::Key_Dead_Semivoiced_Sound, QString( "dead_semivoiced_sound" ) ); 00168 m_qt2katevi->insert( Qt::Key_Dead_Belowdot, QString( "dead_belowdot" ) ); 00169 m_qt2katevi->insert( Qt::Key_Dead_Hook, QString( "dead_hook" ) ); 00170 m_qt2katevi->insert( Qt::Key_Dead_Horn, QString( "dead_horn" ) ); 00171 m_qt2katevi->insert( Qt::Key_Back, QString( "back" ) ); 00172 m_qt2katevi->insert( Qt::Key_Forward, QString( "forward" ) ); 00173 m_qt2katevi->insert( Qt::Key_Stop, QString( "stop" ) ); 00174 m_qt2katevi->insert( Qt::Key_Refresh, QString( "refresh" ) ); 00175 m_qt2katevi->insert( Qt::Key_VolumeDown, QString( "volumedown" ) ); 00176 m_qt2katevi->insert( Qt::Key_VolumeMute, QString( "volumemute" ) ); 00177 m_qt2katevi->insert( Qt::Key_VolumeUp, QString( "volumeup" ) ); 00178 m_qt2katevi->insert( Qt::Key_BassBoost, QString( "bassboost" ) ); 00179 m_qt2katevi->insert( Qt::Key_BassUp, QString( "bassup" ) ); 00180 m_qt2katevi->insert( Qt::Key_BassDown, QString( "bassdown" ) ); 00181 m_qt2katevi->insert( Qt::Key_TrebleUp, QString( "trebleup" ) ); 00182 m_qt2katevi->insert( Qt::Key_TrebleDown, QString( "trebledown" ) ); 00183 m_qt2katevi->insert( Qt::Key_MediaPlay, QString( "mediaplay" ) ); 00184 m_qt2katevi->insert( Qt::Key_MediaStop, QString( "mediastop" ) ); 00185 m_qt2katevi->insert( Qt::Key_MediaPrevious, QString( "mediaprevious" ) ); 00186 m_qt2katevi->insert( Qt::Key_MediaNext, QString( "medianext" ) ); 00187 m_qt2katevi->insert( Qt::Key_MediaRecord, QString( "mediarecord" ) ); 00188 m_qt2katevi->insert( Qt::Key_HomePage, QString( "homepage" ) ); 00189 m_qt2katevi->insert( Qt::Key_Favorites, QString( "favorites" ) ); 00190 m_qt2katevi->insert( Qt::Key_Search, QString( "search" ) ); 00191 m_qt2katevi->insert( Qt::Key_Standby, QString( "standby" ) ); 00192 m_qt2katevi->insert( Qt::Key_OpenUrl, QString( "openurl" ) ); 00193 m_qt2katevi->insert( Qt::Key_LaunchMail, QString( "launchmail" ) ); 00194 m_qt2katevi->insert( Qt::Key_LaunchMedia, QString( "launchmedia" ) ); 00195 m_qt2katevi->insert( Qt::Key_Launch0, QString( "launch0" ) ); 00196 m_qt2katevi->insert( Qt::Key_Launch1, QString( "launch1" ) ); 00197 m_qt2katevi->insert( Qt::Key_Launch2, QString( "launch2" ) ); 00198 m_qt2katevi->insert( Qt::Key_Launch3, QString( "launch3" ) ); 00199 m_qt2katevi->insert( Qt::Key_Launch4, QString( "launch4" ) ); 00200 m_qt2katevi->insert( Qt::Key_Launch5, QString( "launch5" ) ); 00201 m_qt2katevi->insert( Qt::Key_Launch6, QString( "launch6" ) ); 00202 m_qt2katevi->insert( Qt::Key_Launch7, QString( "launch7" ) ); 00203 m_qt2katevi->insert( Qt::Key_Launch8, QString( "launch8" ) ); 00204 m_qt2katevi->insert( Qt::Key_Launch9, QString( "launch9" ) ); 00205 m_qt2katevi->insert( Qt::Key_LaunchA, QString( "launcha" ) ); 00206 m_qt2katevi->insert( Qt::Key_LaunchB, QString( "launchb" ) ); 00207 m_qt2katevi->insert( Qt::Key_LaunchC, QString( "launchc" ) ); 00208 m_qt2katevi->insert( Qt::Key_LaunchD, QString( "launchd" ) ); 00209 m_qt2katevi->insert( Qt::Key_LaunchE, QString( "launche" ) ); 00210 m_qt2katevi->insert( Qt::Key_LaunchF, QString( "launchf" ) ); 00211 m_qt2katevi->insert( Qt::Key_MediaLast, QString( "medialast" ) ); 00212 m_qt2katevi->insert( Qt::Key_unknown, QString( "unknown" ) ); 00213 m_qt2katevi->insert( Qt::Key_Call, QString( "call" ) ); 00214 m_qt2katevi->insert( Qt::Key_Context1, QString( "context1" ) ); 00215 m_qt2katevi->insert( Qt::Key_Context2, QString( "context2" ) ); 00216 m_qt2katevi->insert( Qt::Key_Context3, QString( "context3" ) ); 00217 m_qt2katevi->insert( Qt::Key_Context4, QString( "context4" ) ); 00218 m_qt2katevi->insert( Qt::Key_Flip, QString( "flip" ) ); 00219 m_qt2katevi->insert( Qt::Key_Hangup, QString( "hangup" ) ); 00220 m_qt2katevi->insert( Qt::Key_No, QString( "no" ) ); 00221 m_qt2katevi->insert( Qt::Key_Select, QString( "select" ) ); 00222 m_qt2katevi->insert( Qt::Key_Yes, QString( "yes" ) ); 00223 m_qt2katevi->insert( Qt::Key_Execute, QString( "execute" ) ); 00224 m_qt2katevi->insert( Qt::Key_Printer, QString( "printer" ) ); 00225 m_qt2katevi->insert( Qt::Key_Play, QString( "play" ) ); 00226 m_qt2katevi->insert( Qt::Key_Sleep, QString( "sleep" ) ); 00227 m_qt2katevi->insert( Qt::Key_Zoom, QString( "zoom" ) ); 00228 m_qt2katevi->insert( Qt::Key_Cancel, QString( "cancel" ) ); 00229 00230 for (QHash<int, QString>::const_iterator i = m_qt2katevi->constBegin(); 00231 i != m_qt2katevi->constEnd(); ++i) { 00232 m_katevi2qt->insert( i.value(), i.key() ); 00233 } 00234 00235 m_nameToKeyCode->insert( QString( "invalid" ), -1 ); 00236 m_nameToKeyCode->insert( QString( "esc" ), 1 ); 00237 m_nameToKeyCode->insert( QString( "tab" ), 2 ); 00238 m_nameToKeyCode->insert( QString( "backtab" ), 3 ); 00239 m_nameToKeyCode->insert( QString( "backspace" ), 4 ); 00240 m_nameToKeyCode->insert( QString( "return" ), 5 ); 00241 m_nameToKeyCode->insert( QString( "enter" ), 6 ); 00242 m_nameToKeyCode->insert( QString( "insert" ), 7 ); 00243 m_nameToKeyCode->insert( QString( "delete" ), 8 ); 00244 m_nameToKeyCode->insert( QString( "pause" ), 9 ); 00245 m_nameToKeyCode->insert( QString( "print" ), 10 ); 00246 m_nameToKeyCode->insert( QString( "sysreq" ), 11 ); 00247 m_nameToKeyCode->insert( QString( "clear" ), 12 ); 00248 m_nameToKeyCode->insert( QString( "home" ), 13 ); 00249 m_nameToKeyCode->insert( QString( "end" ), 14 ); 00250 m_nameToKeyCode->insert( QString( "left" ), 15 ); 00251 m_nameToKeyCode->insert( QString( "up" ), 16 ); 00252 m_nameToKeyCode->insert( QString( "right" ), 17 ); 00253 m_nameToKeyCode->insert( QString( "down" ), 18 ); 00254 m_nameToKeyCode->insert( QString( "pageup" ), 19 ); 00255 m_nameToKeyCode->insert( QString( "pagedown" ), 20 ); 00256 m_nameToKeyCode->insert( QString( "shift" ), 21 ); 00257 m_nameToKeyCode->insert( QString( "control" ), 22 ); 00258 m_nameToKeyCode->insert( QString( "meta" ), 23 ); 00259 m_nameToKeyCode->insert( QString( "alt" ), 24 ); 00260 m_nameToKeyCode->insert( QString( "altgr" ), 25 ); 00261 m_nameToKeyCode->insert( QString( "capslock" ), 26 ); 00262 m_nameToKeyCode->insert( QString( "numlock" ), 27 ); 00263 m_nameToKeyCode->insert( QString( "scrolllock" ), 28 ); 00264 m_nameToKeyCode->insert( QString( "f1" ), 29 ); 00265 m_nameToKeyCode->insert( QString( "f2" ), 30 ); 00266 m_nameToKeyCode->insert( QString( "f3" ), 31 ); 00267 m_nameToKeyCode->insert( QString( "f4" ), 32 ); 00268 m_nameToKeyCode->insert( QString( "f5" ), 33 ); 00269 m_nameToKeyCode->insert( QString( "f6" ), 34 ); 00270 m_nameToKeyCode->insert( QString( "f7" ), 35 ); 00271 m_nameToKeyCode->insert( QString( "f8" ), 36 ); 00272 m_nameToKeyCode->insert( QString( "f9" ), 37 ); 00273 m_nameToKeyCode->insert( QString( "f10" ), 38 ); 00274 m_nameToKeyCode->insert( QString( "f11" ), 39 ); 00275 m_nameToKeyCode->insert( QString( "f12" ), 40 ); 00276 m_nameToKeyCode->insert( QString( "f13" ), 41 ); 00277 m_nameToKeyCode->insert( QString( "f14" ), 42 ); 00278 m_nameToKeyCode->insert( QString( "f15" ), 43 ); 00279 m_nameToKeyCode->insert( QString( "f16" ), 44 ); 00280 m_nameToKeyCode->insert( QString( "f17" ), 45 ); 00281 m_nameToKeyCode->insert( QString( "f18" ), 46 ); 00282 m_nameToKeyCode->insert( QString( "f19" ), 47 ); 00283 m_nameToKeyCode->insert( QString( "f20" ), 48 ); 00284 m_nameToKeyCode->insert( QString( "f21" ), 49 ); 00285 m_nameToKeyCode->insert( QString( "f22" ), 50 ); 00286 m_nameToKeyCode->insert( QString( "f23" ), 51 ); 00287 m_nameToKeyCode->insert( QString( "f24" ), 52 ); 00288 m_nameToKeyCode->insert( QString( "f25" ), 53 ); 00289 m_nameToKeyCode->insert( QString( "f26" ), 54 ); 00290 m_nameToKeyCode->insert( QString( "f27" ), 55 ); 00291 m_nameToKeyCode->insert( QString( "f28" ), 56 ); 00292 m_nameToKeyCode->insert( QString( "f29" ), 57 ); 00293 m_nameToKeyCode->insert( QString( "f30" ), 58 ); 00294 m_nameToKeyCode->insert( QString( "f31" ), 59 ); 00295 m_nameToKeyCode->insert( QString( "f32" ), 60 ); 00296 m_nameToKeyCode->insert( QString( "f33" ), 61 ); 00297 m_nameToKeyCode->insert( QString( "f34" ), 62 ); 00298 m_nameToKeyCode->insert( QString( "f35" ), 63 ); 00299 m_nameToKeyCode->insert( QString( "super_l" ), 64 ); 00300 m_nameToKeyCode->insert( QString( "super_r" ), 65 ); 00301 m_nameToKeyCode->insert( QString( "menu" ), 66 ); 00302 m_nameToKeyCode->insert( QString( "hyper_l" ), 67 ); 00303 m_nameToKeyCode->insert( QString( "hyper_r" ), 68 ); 00304 m_nameToKeyCode->insert( QString( "help" ), 69 ); 00305 m_nameToKeyCode->insert( QString( "direction_l" ), 70 ); 00306 m_nameToKeyCode->insert( QString( "direction_r" ), 71 ); 00307 m_nameToKeyCode->insert( QString( "multi_key" ), 172 ); 00308 m_nameToKeyCode->insert( QString( "codeinput" ), 173 ); 00309 m_nameToKeyCode->insert( QString( "singlecandidate" ), 174 ); 00310 m_nameToKeyCode->insert( QString( "multiplecandidate" ), 175 ); 00311 m_nameToKeyCode->insert( QString( "previouscandidate" ), 176 ); 00312 m_nameToKeyCode->insert( QString( "mode_switch" ), 177 ); 00313 m_nameToKeyCode->insert( QString( "kanji" ), 178 ); 00314 m_nameToKeyCode->insert( QString( "muhenkan" ), 179 ); 00315 m_nameToKeyCode->insert( QString( "henkan" ), 180 ); 00316 m_nameToKeyCode->insert( QString( "romaji" ), 181 ); 00317 m_nameToKeyCode->insert( QString( "hiragana" ), 182 ); 00318 m_nameToKeyCode->insert( QString( "katakana" ), 183 ); 00319 m_nameToKeyCode->insert( QString( "hiragana_katakana" ), 184 ); 00320 m_nameToKeyCode->insert( QString( "zenkaku" ), 185 ); 00321 m_nameToKeyCode->insert( QString( "hankaku" ), 186 ); 00322 m_nameToKeyCode->insert( QString( "zenkaku_hankaku" ), 187 ); 00323 m_nameToKeyCode->insert( QString( "touroku" ), 188 ); 00324 m_nameToKeyCode->insert( QString( "massyo" ), 189 ); 00325 m_nameToKeyCode->insert( QString( "kana_lock" ), 190 ); 00326 m_nameToKeyCode->insert( QString( "kana_shift" ), 191 ); 00327 m_nameToKeyCode->insert( QString( "eisu_shift" ), 192 ); 00328 m_nameToKeyCode->insert( QString( "eisu_toggle" ), 193 ); 00329 m_nameToKeyCode->insert( QString( "hangul" ), 194 ); 00330 m_nameToKeyCode->insert( QString( "hangul_start" ), 195 ); 00331 m_nameToKeyCode->insert( QString( "hangul_end" ), 196 ); 00332 m_nameToKeyCode->insert( QString( "hangul_hanja" ), 197 ); 00333 m_nameToKeyCode->insert( QString( "hangul_jamo" ), 198 ); 00334 m_nameToKeyCode->insert( QString( "hangul_romaja" ), 199 ); 00335 m_nameToKeyCode->insert( QString( "hangul_jeonja" ), 200 ); 00336 m_nameToKeyCode->insert( QString( "hangul_banja" ), 201 ); 00337 m_nameToKeyCode->insert( QString( "hangul_prehanja" ), 202 ); 00338 m_nameToKeyCode->insert( QString( "hangul_posthanja" ), 203 ); 00339 m_nameToKeyCode->insert( QString( "hangul_special" ), 204 ); 00340 m_nameToKeyCode->insert( QString( "dead_grave" ), 205 ); 00341 m_nameToKeyCode->insert( QString( "dead_acute" ), 206 ); 00342 m_nameToKeyCode->insert( QString( "dead_circumflex" ), 207 ); 00343 m_nameToKeyCode->insert( QString( "dead_tilde" ), 208 ); 00344 m_nameToKeyCode->insert( QString( "dead_macron" ), 209 ); 00345 m_nameToKeyCode->insert( QString( "dead_breve" ), 210 ); 00346 m_nameToKeyCode->insert( QString( "dead_abovedot" ), 211 ); 00347 m_nameToKeyCode->insert( QString( "dead_diaeresis" ), 212 ); 00348 m_nameToKeyCode->insert( QString( "dead_abovering" ), 213 ); 00349 m_nameToKeyCode->insert( QString( "dead_doubleacute" ), 214 ); 00350 m_nameToKeyCode->insert( QString( "dead_caron" ), 215 ); 00351 m_nameToKeyCode->insert( QString( "dead_cedilla" ), 216 ); 00352 m_nameToKeyCode->insert( QString( "dead_ogonek" ), 217 ); 00353 m_nameToKeyCode->insert( QString( "dead_iota" ), 218 ); 00354 m_nameToKeyCode->insert( QString( "dead_voiced_sound" ), 219 ); 00355 m_nameToKeyCode->insert( QString( "dead_semivoiced_sound" ), 220 ); 00356 m_nameToKeyCode->insert( QString( "dead_belowdot" ), 221 ); 00357 m_nameToKeyCode->insert( QString( "dead_hook" ), 222 ); 00358 m_nameToKeyCode->insert( QString( "dead_horn" ), 223 ); 00359 m_nameToKeyCode->insert( QString( "back" ), 224 ); 00360 m_nameToKeyCode->insert( QString( "forward" ), 225 ); 00361 m_nameToKeyCode->insert( QString( "stop" ), 226 ); 00362 m_nameToKeyCode->insert( QString( "refresh" ), 227 ); 00363 m_nameToKeyCode->insert( QString( "volumedown" ), 228 ); 00364 m_nameToKeyCode->insert( QString( "volumemute" ), 229 ); 00365 m_nameToKeyCode->insert( QString( "volumeup" ), 230 ); 00366 m_nameToKeyCode->insert( QString( "bassboost" ), 231 ); 00367 m_nameToKeyCode->insert( QString( "bassup" ), 232 ); 00368 m_nameToKeyCode->insert( QString( "bassdown" ), 233 ); 00369 m_nameToKeyCode->insert( QString( "trebleup" ), 234 ); 00370 m_nameToKeyCode->insert( QString( "trebledown" ), 235 ); 00371 m_nameToKeyCode->insert( QString( "mediaplay" ), 236 ); 00372 m_nameToKeyCode->insert( QString( "mediastop" ), 237 ); 00373 m_nameToKeyCode->insert( QString( "mediaprevious" ), 238 ); 00374 m_nameToKeyCode->insert( QString( "medianext" ), 239 ); 00375 m_nameToKeyCode->insert( QString( "mediarecord" ), 240 ); 00376 m_nameToKeyCode->insert( QString( "homepage" ), 241 ); 00377 m_nameToKeyCode->insert( QString( "favorites" ), 242 ); 00378 m_nameToKeyCode->insert( QString( "search" ), 243 ); 00379 m_nameToKeyCode->insert( QString( "standby" ), 244 ); 00380 m_nameToKeyCode->insert( QString( "openurl" ), 245 ); 00381 m_nameToKeyCode->insert( QString( "launchmail" ), 246 ); 00382 m_nameToKeyCode->insert( QString( "launchmedia" ), 247 ); 00383 m_nameToKeyCode->insert( QString( "launch0" ), 248 ); 00384 m_nameToKeyCode->insert( QString( "launch1" ), 249 ); 00385 m_nameToKeyCode->insert( QString( "launch2" ), 250 ); 00386 m_nameToKeyCode->insert( QString( "launch3" ), 251 ); 00387 m_nameToKeyCode->insert( QString( "launch4" ), 252 ); 00388 m_nameToKeyCode->insert( QString( "launch5" ), 253 ); 00389 m_nameToKeyCode->insert( QString( "launch6" ), 254 ); 00390 m_nameToKeyCode->insert( QString( "launch7" ), 255 ); 00391 m_nameToKeyCode->insert( QString( "launch8" ), 256 ); 00392 m_nameToKeyCode->insert( QString( "launch9" ), 257 ); 00393 m_nameToKeyCode->insert( QString( "launcha" ), 258 ); 00394 m_nameToKeyCode->insert( QString( "launchb" ), 259 ); 00395 m_nameToKeyCode->insert( QString( "launchc" ), 260 ); 00396 m_nameToKeyCode->insert( QString( "launchd" ), 261 ); 00397 m_nameToKeyCode->insert( QString( "launche" ), 262 ); 00398 m_nameToKeyCode->insert( QString( "launchf" ), 263 ); 00399 m_nameToKeyCode->insert( QString( "medialast" ), 264 ); 00400 m_nameToKeyCode->insert( QString( "unknown" ), 265 ); 00401 m_nameToKeyCode->insert( QString( "call" ), 266 ); 00402 m_nameToKeyCode->insert( QString( "context1" ), 267 ); 00403 m_nameToKeyCode->insert( QString( "context2" ), 268 ); 00404 m_nameToKeyCode->insert( QString( "context3" ), 269 ); 00405 m_nameToKeyCode->insert( QString( "context4" ), 270 ); 00406 m_nameToKeyCode->insert( QString( "flip" ), 271 ); 00407 m_nameToKeyCode->insert( QString( "hangup" ), 272 ); 00408 m_nameToKeyCode->insert( QString( "no" ), 273 ); 00409 m_nameToKeyCode->insert( QString( "select" ), 274 ); 00410 m_nameToKeyCode->insert( QString( "yes" ), 275 ); 00411 m_nameToKeyCode->insert( QString( "execute" ), 276 ); 00412 m_nameToKeyCode->insert( QString( "printer" ), 277 ); 00413 m_nameToKeyCode->insert( QString( "play" ), 278 ); 00414 m_nameToKeyCode->insert( QString( "sleep" ), 279 ); 00415 m_nameToKeyCode->insert( QString( "zoom" ), 280 ); 00416 m_nameToKeyCode->insert( QString( "cancel" ), 281 ); 00417 00418 m_nameToKeyCode->insert( QString( "a" ), 282 ); 00419 m_nameToKeyCode->insert( QString( "b" ), 283 ); 00420 m_nameToKeyCode->insert( QString( "c" ), 284 ); 00421 m_nameToKeyCode->insert( QString( "d" ), 285 ); 00422 m_nameToKeyCode->insert( QString( "e" ), 286 ); 00423 m_nameToKeyCode->insert( QString( "f" ), 287 ); 00424 m_nameToKeyCode->insert( QString( "d" ), 288 ); 00425 m_nameToKeyCode->insert( QString( "h" ), 289 ); 00426 m_nameToKeyCode->insert( QString( "i" ), 290 ); 00427 m_nameToKeyCode->insert( QString( "j" ), 291 ); 00428 m_nameToKeyCode->insert( QString( "k" ), 292 ); 00429 m_nameToKeyCode->insert( QString( "l" ), 293 ); 00430 m_nameToKeyCode->insert( QString( "m" ), 294 ); 00431 m_nameToKeyCode->insert( QString( "n" ), 295 ); 00432 m_nameToKeyCode->insert( QString( "o" ), 296 ); 00433 m_nameToKeyCode->insert( QString( "p" ), 297 ); 00434 m_nameToKeyCode->insert( QString( "q" ), 298 ); 00435 m_nameToKeyCode->insert( QString( "r" ), 299 ); 00436 m_nameToKeyCode->insert( QString( "s" ), 300 ); 00437 m_nameToKeyCode->insert( QString( "t" ), 301 ); 00438 m_nameToKeyCode->insert( QString( "u" ), 302 ); 00439 m_nameToKeyCode->insert( QString( "v" ), 303 ); 00440 m_nameToKeyCode->insert( QString( "w" ), 304 ); 00441 m_nameToKeyCode->insert( QString( "x" ), 305 ); 00442 m_nameToKeyCode->insert( QString( "y" ), 306 ); 00443 m_nameToKeyCode->insert( QString( "z" ), 307 ); 00444 m_nameToKeyCode->insert( QString( "`" ), 308 ); 00445 m_nameToKeyCode->insert( QString( "!" ), 309 ); 00446 m_nameToKeyCode->insert( QString( "\"" ), 310 ); 00447 m_nameToKeyCode->insert( QString( "$" ), 311 ); 00448 m_nameToKeyCode->insert( QString( "%" ), 312 ); 00449 m_nameToKeyCode->insert( QString( "^" ), 313 ); 00450 m_nameToKeyCode->insert( QString( "&" ), 314 ); 00451 m_nameToKeyCode->insert( QString( "*" ), 315 ); 00452 m_nameToKeyCode->insert( QString( "(" ), 316 ); 00453 m_nameToKeyCode->insert( QString( ")" ), 317 ); 00454 m_nameToKeyCode->insert( QString( "-" ), 318 ); 00455 m_nameToKeyCode->insert( QString( "_" ), 319 ); 00456 m_nameToKeyCode->insert( QString( "=" ), 320 ); 00457 m_nameToKeyCode->insert( QString( "+" ), 321 ); 00458 m_nameToKeyCode->insert( QString( "[" ), 322 ); 00459 m_nameToKeyCode->insert( QString( "]" ), 323 ); 00460 m_nameToKeyCode->insert( QString( "{" ), 324 ); 00461 m_nameToKeyCode->insert( QString( "}" ), 325 ); 00462 m_nameToKeyCode->insert( QString( ":" ), 326 ); 00463 m_nameToKeyCode->insert( QString( ";" ), 327 ); 00464 m_nameToKeyCode->insert( QString( "@" ), 328 ); 00465 m_nameToKeyCode->insert( QString( "'" ), 329 ); 00466 m_nameToKeyCode->insert( QString( "#" ), 330 ); 00467 m_nameToKeyCode->insert( QString( "~" ), 331 ); 00468 m_nameToKeyCode->insert( QString( "\\" ), 332 ); 00469 m_nameToKeyCode->insert( QString( "|" ), 333 ); 00470 m_nameToKeyCode->insert( QString( "," ), 334 ); 00471 m_nameToKeyCode->insert( QString( "." ), 335 ); 00472 //m_nameToKeyCode->insert( QString( ">" ), 336 ); 00473 m_nameToKeyCode->insert( QString( "/" ), 337 ); 00474 m_nameToKeyCode->insert( QString( "?" ), 338 ); 00475 m_nameToKeyCode->insert( QString( " " ), 339 ); 00476 //m_nameToKeyCode->insert( QString( "<" ), 341 ); 00477 00478 for (QHash<QString, int>::const_iterator i = m_nameToKeyCode->constBegin(); 00479 i != m_nameToKeyCode->constEnd(); ++i) { 00480 m_keyCodeToName->insert( i.value(), i.key() ); 00481 } 00482 } 00483 00484 QString KateViKeyParser::qt2vi( int key ) const 00485 { 00486 return ( m_qt2katevi->contains( key ) ? m_qt2katevi->value( key ) : "invalid" ); 00487 } 00488 00489 int KateViKeyParser::vi2qt( const QString &keypress ) const 00490 { 00491 return ( m_katevi2qt->contains( keypress ) ? m_katevi2qt->value( keypress ) : -1 ); 00492 } 00493 00494 00495 const QString KateViKeyParser::encodeKeySequence( const QString &keys ) const 00496 { 00497 QString encodedSequence; 00498 unsigned int keyCodeTemp = 0; 00499 int startOfBlock = -1; 00500 00501 bool insideTag = false; 00502 QChar c; 00503 for ( int i = 0; i < keys.length(); i++ ) { 00504 c = keys.at( i ); 00505 if ( insideTag ) { 00506 if ( c == '>' ) { 00507 QString temp; 00508 temp.setNum( 0xE000+keyCodeTemp, 16); 00509 QChar code(0xE000+keyCodeTemp ); 00510 encodedSequence.append( code ); 00511 keyCodeTemp = 0; 00512 insideTag = false; 00513 continue; 00514 } 00515 else { 00516 // contains modifiers 00517 if ( keys.mid( i ).indexOf( '-' ) != -1 && keys.mid( i ).indexOf( '-' ) < keys.mid( i ).indexOf( '>' ) ) { 00518 QStringList tokens = keys.mid( i, keys.mid( i ).indexOf( '>' ) ).toLower().split( '-' ); 00519 00520 foreach ( const QString& str, tokens ) { 00521 if ( str == "s" && ( keyCodeTemp & 0x01 ) != 0x1 ) 00522 keyCodeTemp += 0x1; 00523 else if ( str == "c" && ( keyCodeTemp & 0x02 ) != 0x2 ) 00524 keyCodeTemp += 0x2; 00525 else if ( str == "a" && ( keyCodeTemp & 0x04 ) != 0x4 ) 00526 keyCodeTemp += 0x4; 00527 else if ( str == "m" && ( keyCodeTemp & 0x08 ) != 0x8 ) 00528 keyCodeTemp += 0x8; 00529 else { 00530 if ( m_nameToKeyCode->contains( str ) || ( str.length() == 1 && str.at( 0 ).isLetterOrNumber() ) ) { 00531 if ( m_nameToKeyCode->contains( str ) ) { 00532 keyCodeTemp += m_nameToKeyCode->value( str ) * 0x10; 00533 } else { 00534 keyCodeTemp += str.at( 0 ).unicode() * 0x10; 00535 } 00536 } else { 00537 int endOfBlock = keys.indexOf( '>' ); 00538 if ( endOfBlock -= -1 ) { 00539 endOfBlock = keys.length()-1; 00540 } 00541 encodedSequence.clear(); 00542 encodedSequence.append( m_nameToKeyCode->value( "invalid" ) ); 00543 break; 00544 } 00545 } 00546 } 00547 } 00548 else { 00549 QString str = keys.mid( i, keys.indexOf( '>', i )-i ).toLower(); 00550 if ( keys.indexOf( '>', i ) != -1 && ( m_nameToKeyCode->contains( str ) || ( str.length() == 1 && str.at( 0 ).isLetterOrNumber() ) ) ) { 00551 if ( m_nameToKeyCode->contains( str ) ) { 00552 keyCodeTemp += m_nameToKeyCode->value( str ) * 0x10; 00553 } else { 00554 keyCodeTemp += str.at( 0 ).unicode() * 0x10; 00555 } 00556 } else { 00557 int endOfBlock = keys.indexOf( '>' ); 00558 if ( endOfBlock -= -1 ) { 00559 endOfBlock = keys.length()-1; 00560 } 00561 encodedSequence.clear(); 00562 keyCodeTemp = m_nameToKeyCode->value( "invalid" ) * 0x10; 00563 } 00564 00565 } 00566 i += keys.mid( i, keys.mid( i ).indexOf( '>' ) ).length()-1; 00567 } 00568 } 00569 else { 00570 if ( c == '<' ) { 00571 // if there's no closing '>', or if there is an opening '<' before the next '>', interpret as a literal '<' 00572 QString rest = keys.mid( i ); 00573 if ( rest.indexOf( '>', 1 ) == -1 || ( rest.indexOf( '<', 1 ) < rest.indexOf( '>', 1 ) && rest.indexOf( '<', 1 ) != -1 ) ) { 00574 encodedSequence.append( c ); 00575 continue; 00576 } 00577 startOfBlock = i; 00578 insideTag = true; 00579 continue; 00580 } else { 00581 encodedSequence.append( c ); 00582 } 00583 } 00584 } 00585 00586 return encodedSequence; 00587 } 00588 00589 const QString KateViKeyParser::decodeKeySequence( const QString &keys ) const 00590 { 00591 QString ret; 00592 00593 for ( int i = 0; i < keys.length(); i++ ) { 00594 QChar c = keys.at( i ); 00595 int keycode = c.unicode(); 00596 00597 if ( ( keycode & 0xE000 ) != 0xE000 ) { 00598 ret.append( c ); 00599 } else { 00600 ret.append( '<' ); 00601 00602 if ( ( keycode & 0x1 ) == 0x1 ) { 00603 ret.append( QLatin1String( "s-") ); 00604 //keycode -= 0x1; 00605 } 00606 if ( ( keycode & 0x2 ) == 0x2 ) { 00607 ret.append( QLatin1String( "c-") ); 00608 //keycode -= 0x2; 00609 } 00610 if ( ( keycode & 0x4 ) == 0x4 ) { 00611 ret.append( QLatin1String( "a-") ); 00612 //keycode -= 0x4; 00613 } 00614 if ( ( keycode & 0x8 ) == 0x8 ) { 00615 ret.append( QLatin1String( "m-") ); 00616 //keycode -= 0x8; 00617 } 00618 00619 if ( ( keycode & 0xE000 ) == 0xE000 ) { 00620 ret.append( m_keyCodeToName->value( ( keycode-0xE000 )/0x10 ) ); 00621 } else { 00622 ret.append( QChar( keycode ) ); 00623 } 00624 ret.append( '>' ); 00625 } 00626 } 00627 00628 return ret; 00629 } 00630 00631 char KateViKeyParser::scanCodeToChar(quint32 code, Qt::KeyboardModifiers modifiers, bool isLetter) const 00632 { 00633 //Do not forget to ignore letters with shift. Should work with punctuation and special characters ($, ^) only. 00634 //any punctuation (without shift) that has different signs in different layouts should be added to the second switch. 00635 if ((modifiers & Qt::ShiftModifier) && !isLetter) 00636 { 00637 switch(code) 00638 { 00639 case 10: 00640 return '!'; 00641 case 11: 00642 return '@'; 00643 case 12: 00644 return '#'; 00645 case 13: 00646 return '$'; 00647 case 14: 00648 return '%'; 00649 case 15: 00650 return '^'; 00651 case 16: 00652 return '&'; 00653 case 17: 00654 return '*'; 00655 case 18: 00656 return '('; 00657 case 19: 00658 return ')'; 00659 default: 00660 return '0'; 00661 } 00662 } 00663 switch(code) 00664 { 00665 case 24: 00666 return 'q'; 00667 case 25: 00668 return 'w'; 00669 case 26: 00670 return 'e'; 00671 case 27: 00672 return 'r'; 00673 case 28: 00674 return 't'; 00675 case 29: 00676 return 'y'; 00677 case 30: 00678 return 'u'; 00679 case 31: 00680 return 'i'; 00681 case 32: 00682 return 'o'; 00683 case 33: 00684 return 'p'; 00685 case 34: 00686 return '['; 00687 case 35: 00688 return ']'; 00689 case 38: 00690 return 'a'; 00691 case 39: 00692 return 's'; 00693 case 40: 00694 return 'd'; 00695 case 41: 00696 return 'f'; 00697 case 42: 00698 return 'g'; 00699 case 43: 00700 return 'h'; 00701 case 44: 00702 return 'j'; 00703 case 45: 00704 return 'k'; 00705 case 46: 00706 return 'l'; 00707 case 47: 00708 return ';'; 00709 case 48: 00710 return '\''; 00711 case 49: 00712 return '`'; 00713 case 52: 00714 return 'z'; 00715 case 53: 00716 return 'x'; 00717 case 54: 00718 return 'c'; 00719 case 55: 00720 return 'v'; 00721 case 56: 00722 return 'b'; 00723 case 57: 00724 return 'n'; 00725 case 58: 00726 return 'm'; 00727 case 59: 00728 return ','; 00729 case 60: 00730 return '.'; 00731 case 61: 00732 return '/'; 00733 default: 00734 return 0; 00735 } 00736 return 0; 00737 } 00738 00739 const QChar KateViKeyParser::KeyEventToQChar(int keyCode, const QString &text, 00740 Qt::KeyboardModifiers mods, quint32 nativeScanCode) const 00741 { 00742 QChar key; 00743 00744 if ( !text.isEmpty() ) { 00745 key = text.at(0); 00746 } 00747 00748 if ( text.isEmpty() || ( text.length() == 1 && text.at(0) < 0x20 ) 00749 || ( mods != Qt::NoModifier && mods != Qt::ShiftModifier ) ) { 00750 QString keyPress; 00751 00752 keyPress.append( '<' ); 00753 keyPress.append( ( mods & Qt::ShiftModifier ) ? "s-" : "" ); 00754 keyPress.append( ( mods & Qt::ControlModifier ) ? "c-" : "" ); 00755 keyPress.append( ( mods & Qt::AltModifier ) ? "a-" : "" ); 00756 keyPress.append( ( mods & Qt::MetaModifier ) ? "m-" : "" ); 00757 keyPress.append( keyCode <= 0xFF ? QChar( keyCode ) : qt2vi( keyCode ) ); 00758 keyPress.append( '>' ); 00759 00760 key = encodeKeySequence( keyPress ).at( 0 ); 00761 } else { 00762 //maybe we have a non-latin letter, try to convert to latin charachter 00763 //note that non-latin letter in Latin layout can be a punctuation character (also some punctuation differs too) 00764 QChar tempChar(text.at(0)); 00765 //don't touch latin keys 00766 if ((keyCode < Qt::Key_A || keyCode > Qt::Key_Z) && tempChar.isLetter()) { 00767 char ch = scanCodeToChar(nativeScanCode, mods, tempChar.isLetter()); 00768 if (ch != 0) { 00769 key = QChar(ch); 00770 if (key.isLetter()) { 00771 if (tempChar.isUpper()) { 00772 key = QChar(ch).toUpper(); 00773 } else { 00774 key = QChar(ch).toLower(); //scanCodeToChar returns lower, but we don't want to depend on it 00775 } 00776 } 00777 } 00778 else { 00779 key = tempChar; 00780 } 00781 } 00782 else { 00783 key = tempChar; 00784 } 00785 } 00786 00787 return key; 00788 }
KDE 4.6 API Reference