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