00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "kkeyserver_win.h"
00021
00022 #include <kdebug.h>
00023 #include <windows.h>
00024
00025 namespace KKeyServer
00026 {
00027
00028 struct TransKey {
00029 uint keySymQt;
00030 uint keySymWin;
00031 };
00032
00033 static const TransKey KeyTbl[] =
00034 {
00035 { Qt::Key_Cancel, VK_CANCEL },
00036 { Qt::Key_Backspace, VK_BACK },
00037 { Qt::Key_Tab, VK_TAB },
00038 { Qt::Key_Clear, VK_CLEAR },
00039 { Qt::Key_Return, VK_RETURN },
00040 { Qt::Key_Shift, VK_SHIFT },
00041 { Qt::Key_Control, VK_CONTROL },
00042 { Qt::Key_Alt, VK_MENU },
00043 { Qt::Key_Pause, VK_PAUSE },
00044 { Qt::Key_CapsLock, VK_CAPITAL },
00045 { Qt::Key_Escape, VK_ESCAPE },
00046 { Qt::Key_Mode_switch, VK_MODECHANGE },
00047 { Qt::Key_Space, VK_SPACE },
00048 { Qt::Key_PageUp, VK_PRIOR },
00049 { Qt::Key_PageDown, VK_NEXT },
00050 { Qt::Key_End, VK_END },
00051 { Qt::Key_Home, VK_HOME },
00052 { Qt::Key_Left, VK_LEFT },
00053 { Qt::Key_Up, VK_UP },
00054 { Qt::Key_Right, VK_RIGHT },
00055 { Qt::Key_Down, VK_DOWN },
00056 { Qt::Key_Select, VK_SELECT },
00057 { Qt::Key_Printer, VK_PRINT },
00058 { Qt::Key_Execute, VK_EXECUTE },
00059 { Qt::Key_Print, VK_SNAPSHOT },
00060 { Qt::Key_Insert, VK_INSERT },
00061 { Qt::Key_Delete, VK_DELETE },
00062 { Qt::Key_Help, VK_HELP },
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 { Qt::Key_Meta, VK_LWIN },
00100 { Qt::Key_Meta, VK_RWIN },
00101 { Qt::Key_Menu, VK_APPS },
00102 { Qt::Key_Sleep, VK_SLEEP },
00103 { Qt::Key_0, VK_NUMPAD0 },
00104 { Qt::Key_1, VK_NUMPAD1 },
00105 { Qt::Key_2, VK_NUMPAD2 },
00106 { Qt::Key_3, VK_NUMPAD3 },
00107 { Qt::Key_4, VK_NUMPAD4 },
00108 { Qt::Key_5, VK_NUMPAD5 },
00109 { Qt::Key_6, VK_NUMPAD6 },
00110 { Qt::Key_7, VK_NUMPAD7 },
00111 { Qt::Key_8, VK_NUMPAD8 },
00112 { Qt::Key_9, VK_NUMPAD9 },
00113 { Qt::Key_Asterisk, VK_MULTIPLY },
00114 { Qt::Key_Plus, VK_ADD },
00115 { Qt::Key_Comma, VK_SEPARATOR },
00116 { Qt::Key_Minus, VK_SUBTRACT },
00117 { Qt::Key_Period, VK_DECIMAL },
00118 { Qt::Key_Slash, VK_DIVIDE },
00119 { Qt::Key_F1, VK_F1 },
00120 { Qt::Key_F2, VK_F2 },
00121 { Qt::Key_F3, VK_F3 },
00122 { Qt::Key_F4, VK_F4 },
00123 { Qt::Key_F5, VK_F5 },
00124 { Qt::Key_F6, VK_F6 },
00125 { Qt::Key_F7, VK_F7 },
00126 { Qt::Key_F8, VK_F8 },
00127 { Qt::Key_F9, VK_F9 },
00128 { Qt::Key_F10, VK_F10 },
00129 { Qt::Key_F11, VK_F11 },
00130 { Qt::Key_F12, VK_F12 },
00131 { Qt::Key_F13, VK_F13 },
00132 { Qt::Key_F14, VK_F14 },
00133 { Qt::Key_F15, VK_F15 },
00134 { Qt::Key_F16, VK_F16 },
00135 { Qt::Key_F17, VK_F17 },
00136 { Qt::Key_F18, VK_F18 },
00137 { Qt::Key_F19, VK_F19 },
00138 { Qt::Key_F20, VK_F20 },
00139 { Qt::Key_F21, VK_F21 },
00140 { Qt::Key_F22, VK_F22 },
00141 { Qt::Key_F23, VK_F23 },
00142 { Qt::Key_F24, VK_F24 },
00143 { Qt::Key_NumLock, VK_NUMLOCK },
00144 { Qt::Key_ScrollLock, VK_SCROLL },
00145
00146
00147
00148
00149
00150 { Qt::Key_Shift, VK_LSHIFT },
00151 { Qt::Key_Shift, VK_RSHIFT },
00152 { Qt::Key_Control, VK_LCONTROL },
00153 { Qt::Key_Control, VK_RCONTROL },
00154 { Qt::Key_Alt, VK_LMENU },
00155 { Qt::Key_Alt, VK_RMENU },
00156
00157
00158
00159 #if(_WIN32_WINNT >= 0x0500)
00160 { Qt::Key_Back, VK_BROWSER_BACK },
00161 { Qt::Key_Forward, VK_BROWSER_FORWARD },
00162 { Qt::Key_Refresh, VK_BROWSER_REFRESH },
00163 { Qt::Key_Stop, VK_BROWSER_STOP },
00164 { Qt::Key_Search, VK_BROWSER_SEARCH },
00165 { Qt::Key_Favorites, VK_BROWSER_FAVORITES },
00166 { Qt::Key_HomePage, VK_BROWSER_HOME },
00167 { Qt::Key_VolumeMute, VK_VOLUME_MUTE },
00168 { Qt::Key_VolumeDown, VK_VOLUME_DOWN },
00169 { Qt::Key_VolumeUp, VK_VOLUME_UP },
00170 { Qt::Key_MediaNext, VK_MEDIA_NEXT_TRACK },
00171 { Qt::Key_MediaPrevious, VK_MEDIA_PREV_TRACK },
00172 { Qt::Key_MediaStop, VK_MEDIA_STOP },
00173 { Qt::Key_MediaPlay, VK_MEDIA_PLAY_PAUSE },
00174 { Qt::Key_LaunchMail, VK_LAUNCH_MAIL },
00175 { Qt::Key_LaunchMedia, VK_LAUNCH_MEDIA_SELECT },
00176 { Qt::Key_Launch0, VK_LAUNCH_APP1 },
00177 { Qt::Key_Launch1, VK_LAUNCH_APP2 },
00178 #endif
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 { Qt::Key_Play, VK_PLAY },
00192 { Qt::Key_Zoom, VK_ZOOM },
00193 { Qt::Key_Clear, VK_OEM_CLEAR },
00194
00195 };
00196
00197 bool keyQtToModWin( int keyQt, uint* mod )
00198 {
00199 *mod = 0;
00200 if (keyQt & Qt::ShiftModifier) {
00201 *mod |= MOD_SHIFT;
00202 }
00203 if (keyQt & Qt::ControlModifier) {
00204 *mod |= MOD_CONTROL;
00205 }
00206 if (keyQt & Qt::AltModifier) {
00207 *mod |= MOD_ALT;
00208 }
00209 if (keyQt & Qt::MetaModifier) {
00210 *mod |= MOD_WIN;
00211 }
00212
00213 return true;
00214 }
00215
00216 bool modWinToKeyQt( uint mod, int *keyQt )
00217 {
00218 *keyQt = 0;
00219 if (mod & MOD_SHIFT) {
00220 *keyQt |= Qt::ShiftModifier;
00221 }
00222 if (mod & MOD_CONTROL) {
00223 *keyQt |= Qt::ControlModifier;
00224 }
00225 if (mod & MOD_ALT) {
00226 *keyQt |= Qt::AltModifier;
00227 }
00228 if (mod & MOD_WIN) {
00229 *keyQt |= Qt::MetaModifier;
00230 }
00231
00232 return true;
00233 }
00234
00235 bool keyQtToCodeWin( int keyQt, uint* sym )
00236 {
00237 int symQt = keyQt & ~Qt::KeyboardModifierMask;
00238
00239 if( symQt >= Qt::Key_A && symQt <= Qt::Key_Z ) {
00240 *sym = symQt;
00241 return true;
00242 }
00243
00244 for( uint i = 0; i < sizeof(KeyTbl); i++ ) {
00245 if( KeyTbl[i].keySymQt == symQt ) {
00246 *sym = KeyTbl[i].keySymWin;
00247 return true;
00248 }
00249 }
00250
00251 *sym = 0;
00252 if( symQt != Qt::Key_Shift && symQt != Qt::Key_Control && symQt != Qt::Key_Alt &&
00253 symQt != Qt::Key_Meta && symQt != Qt::Key_Direction_L && symQt != Qt::Key_Direction_R )
00254 kDebug(125) << "Sym::initQt( " << QString::number(keyQt,16) << " ): failed to convert key.";
00255 return false;
00256 }
00257
00258 bool codeWinToKeyQt( uint sym, int* keyQt )
00259 {
00260 if( sym >= Qt::Key_A && sym <= Qt::Key_Z ) {
00261 *keyQt = sym;
00262 return true;
00263 }
00264
00265 for( uint i = 0; i < sizeof(KeyTbl); i++ ) {
00266 if( KeyTbl[i].keySymWin == sym ) {
00267 *keyQt = KeyTbl[i].keySymQt;
00268 return true;
00269 }
00270 }
00271
00272 *keyQt = 0;
00273 return false;
00274 }
00275
00276 }