KDEUI
kkeyserver_win.cpp
Go to the documentation of this file.
00001 /* 00002 Copyright (C) 2008 Carlo Segato <brandon.ml@gmail.com> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00017 Boston, MA 02110-1301, USA. 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 //FIXME: under wince VK_MODECHANGE is not defined 00047 #ifndef _WIN32_WCE 00048 { Qt::Key_Mode_switch, VK_MODECHANGE }, 00049 #endif 00050 { Qt::Key_Space, VK_SPACE }, 00051 { Qt::Key_PageUp, VK_PRIOR }, 00052 { Qt::Key_PageDown, VK_NEXT }, 00053 { Qt::Key_End, VK_END }, 00054 { Qt::Key_Home, VK_HOME }, 00055 { Qt::Key_Left, VK_LEFT }, 00056 { Qt::Key_Up, VK_UP }, 00057 { Qt::Key_Right, VK_RIGHT }, 00058 { Qt::Key_Down, VK_DOWN }, 00059 { Qt::Key_Select, VK_SELECT }, 00060 { Qt::Key_Printer, VK_PRINT }, 00061 { Qt::Key_Execute, VK_EXECUTE }, 00062 { Qt::Key_Print, VK_SNAPSHOT }, 00063 { Qt::Key_Insert, VK_INSERT }, 00064 { Qt::Key_Delete, VK_DELETE }, 00065 { Qt::Key_Help, VK_HELP }, 00066 /* { 0, VK_0 }, 00067 { 0, VK_1 }, 00068 { 0, VK_2 }, 00069 { 0, VK_3 }, 00070 { 0, VK_4 }, 00071 { 0, VK_5 }, 00072 { 0, VK_6 }, 00073 { 0, VK_7 }, 00074 { 0, VK_8 }, 00075 { 0, VK_9 }, 00076 { 0, VK_A }, 00077 { 0, VK_B }, 00078 { 0, VK_C }, 00079 { 0, VK_D }, 00080 { 0, VK_E }, 00081 { 0, VK_F }, 00082 { 0, VK_G }, 00083 { 0, VK_H }, 00084 { 0, VK_I }, 00085 { 0, VK_J }, 00086 { 0, VK_K }, 00087 { 0, VK_L }, 00088 { 0, VK_M }, 00089 { 0, VK_N }, 00090 { 0, VK_O }, 00091 { 0, VK_P }, 00092 { 0, VK_Q }, 00093 { 0, VK_R }, 00094 { 0, VK_S }, 00095 { 0, VK_T }, 00096 { 0, VK_U }, 00097 { 0, VK_V }, 00098 { 0, VK_W }, 00099 { 0, VK_X }, 00100 { 0, VK_Y }, 00101 { 0, VK_Z },*/ 00102 { Qt::Key_Meta, VK_LWIN }, 00103 { Qt::Key_Meta, VK_RWIN }, 00104 { Qt::Key_Menu, VK_APPS }, 00105 { Qt::Key_Sleep, VK_SLEEP }, 00106 { Qt::Key_0, VK_NUMPAD0 }, 00107 { Qt::Key_1, VK_NUMPAD1 }, 00108 { Qt::Key_2, VK_NUMPAD2 }, 00109 { Qt::Key_3, VK_NUMPAD3 }, 00110 { Qt::Key_4, VK_NUMPAD4 }, 00111 { Qt::Key_5, VK_NUMPAD5 }, 00112 { Qt::Key_6, VK_NUMPAD6 }, 00113 { Qt::Key_7, VK_NUMPAD7 }, 00114 { Qt::Key_8, VK_NUMPAD8 }, 00115 { Qt::Key_9, VK_NUMPAD9 }, 00116 { Qt::Key_Asterisk, VK_MULTIPLY }, 00117 { Qt::Key_Plus, VK_ADD }, 00118 { Qt::Key_Comma, VK_SEPARATOR }, 00119 { Qt::Key_Minus, VK_SUBTRACT }, 00120 { Qt::Key_Period, VK_DECIMAL }, 00121 { Qt::Key_Slash, VK_DIVIDE }, 00122 { Qt::Key_F1, VK_F1 }, 00123 { Qt::Key_F2, VK_F2 }, 00124 { Qt::Key_F3, VK_F3 }, 00125 { Qt::Key_F4, VK_F4 }, 00126 { Qt::Key_F5, VK_F5 }, 00127 { Qt::Key_F6, VK_F6 }, 00128 { Qt::Key_F7, VK_F7 }, 00129 { Qt::Key_F8, VK_F8 }, 00130 { Qt::Key_F9, VK_F9 }, 00131 { Qt::Key_F10, VK_F10 }, 00132 { Qt::Key_F11, VK_F11 }, 00133 { Qt::Key_F12, VK_F12 }, 00134 { Qt::Key_F13, VK_F13 }, 00135 { Qt::Key_F14, VK_F14 }, 00136 { Qt::Key_F15, VK_F15 }, 00137 { Qt::Key_F16, VK_F16 }, 00138 { Qt::Key_F17, VK_F17 }, 00139 { Qt::Key_F18, VK_F18 }, 00140 { Qt::Key_F19, VK_F19 }, 00141 { Qt::Key_F20, VK_F20 }, 00142 { Qt::Key_F21, VK_F21 }, 00143 { Qt::Key_F22, VK_F22 }, 00144 { Qt::Key_F23, VK_F23 }, 00145 { Qt::Key_F24, VK_F24 }, 00146 { Qt::Key_NumLock, VK_NUMLOCK }, 00147 { Qt::Key_ScrollLock, VK_SCROLL }, 00148 // { 0, VK_OEM_FJ_JISHO }, 00149 // { Qt::Key_Massyo, VK_OEM_FJ_MASSHOU }, 00150 // { Qt::Key_Touroku, VK_OEM_FJ_TOUROKU }, 00151 // { 0, VK_OEM_FJ_LOYA }, 00152 // { 0, VK_OEM_FJ_ROYA }, 00153 { Qt::Key_Shift, VK_LSHIFT }, 00154 { Qt::Key_Shift, VK_RSHIFT }, 00155 { Qt::Key_Control, VK_LCONTROL }, 00156 { Qt::Key_Control, VK_RCONTROL }, 00157 { Qt::Key_Alt, VK_LMENU }, 00158 { Qt::Key_Alt, VK_RMENU }, 00159 00160 // winuser.h from psdk w2kserver2003R2 defines the following constants only for _WIN32_WINNT >= 0x0500 00161 // and we should also do so - otherwise the constants may not be available 00162 #if(_WIN32_WINNT >= 0x0500) 00163 { Qt::Key_Back, VK_BROWSER_BACK }, 00164 { Qt::Key_Forward, VK_BROWSER_FORWARD }, 00165 { Qt::Key_Refresh, VK_BROWSER_REFRESH }, 00166 { Qt::Key_Stop, VK_BROWSER_STOP }, 00167 { Qt::Key_Search, VK_BROWSER_SEARCH }, 00168 { Qt::Key_Favorites, VK_BROWSER_FAVORITES }, 00169 { Qt::Key_HomePage, VK_BROWSER_HOME }, 00170 { Qt::Key_VolumeMute, VK_VOLUME_MUTE }, 00171 { Qt::Key_VolumeDown, VK_VOLUME_DOWN }, 00172 { Qt::Key_VolumeUp, VK_VOLUME_UP }, 00173 { Qt::Key_MediaNext, VK_MEDIA_NEXT_TRACK }, 00174 { Qt::Key_MediaPrevious, VK_MEDIA_PREV_TRACK }, 00175 { Qt::Key_MediaStop, VK_MEDIA_STOP }, 00176 { Qt::Key_MediaPlay, VK_MEDIA_PLAY_PAUSE }, 00177 { Qt::Key_LaunchMail, VK_LAUNCH_MAIL }, 00178 { Qt::Key_LaunchMedia, VK_LAUNCH_MEDIA_SELECT }, 00179 { Qt::Key_Launch0, VK_LAUNCH_APP1 }, 00180 { Qt::Key_Launch1, VK_LAUNCH_APP2 }, 00181 #endif 00182 /* { 0, VK_OEM_1 }, 00183 { 0, VK_OEM_PLUS }, 00184 { 0, VK_OEM_COMMA }, 00185 { 0, VK_OEM_MINUS }, 00186 { 0, VK_OEM_PERIOD }, 00187 { 0, VK_OEM_2 }, 00188 { 0, VK_OEM_3 }, 00189 { 0, VK_OEM_4 }, 00190 { 0, VK_OEM_5 }, 00191 { 0, VK_OEM_6 }, 00192 { 0, VK_OEM_7 }, 00193 { 0, VK_OEM_8 },*/ 00194 { Qt::Key_Play, VK_PLAY }, 00195 { Qt::Key_Zoom, VK_ZOOM }, 00196 { Qt::Key_Clear, VK_OEM_CLEAR }, 00197 // { 0 00198 }; 00199 00200 bool keyQtToModWin( int keyQt, uint* mod ) 00201 { 00202 *mod = 0; 00203 if (keyQt & Qt::ShiftModifier) { 00204 *mod |= MOD_SHIFT; 00205 } 00206 if (keyQt & Qt::ControlModifier) { 00207 *mod |= MOD_CONTROL; 00208 } 00209 if (keyQt & Qt::AltModifier) { 00210 *mod |= MOD_ALT; 00211 } 00212 if (keyQt & Qt::MetaModifier) { 00213 *mod |= MOD_WIN; 00214 } 00215 00216 return true; 00217 } 00218 00219 bool modWinToKeyQt( uint mod, int *keyQt ) 00220 { 00221 *keyQt = 0; 00222 if (mod & MOD_SHIFT) { 00223 *keyQt |= Qt::ShiftModifier; 00224 } 00225 if (mod & MOD_CONTROL) { 00226 *keyQt |= Qt::ControlModifier; 00227 } 00228 if (mod & MOD_ALT) { 00229 *keyQt |= Qt::AltModifier; 00230 } 00231 if (mod & MOD_WIN) { 00232 *keyQt |= Qt::MetaModifier; 00233 } 00234 00235 return true; 00236 } 00237 00238 bool keyQtToCodeWin( int keyQt, uint* sym ) 00239 { 00240 int symQt = keyQt & ~Qt::KeyboardModifierMask; 00241 00242 if( symQt >= Qt::Key_A && symQt <= Qt::Key_Z ) { 00243 *sym = symQt; 00244 return true; 00245 } 00246 00247 for( uint i = 0; i < sizeof(KeyTbl); i++ ) { 00248 if( KeyTbl[i].keySymQt == symQt ) { 00249 *sym = KeyTbl[i].keySymWin; 00250 return true; 00251 } 00252 } 00253 00254 *sym = 0; 00255 if( symQt != Qt::Key_Shift && symQt != Qt::Key_Control && symQt != Qt::Key_Alt && 00256 symQt != Qt::Key_Meta && symQt != Qt::Key_Direction_L && symQt != Qt::Key_Direction_R ) 00257 kDebug(125) << "Sym::initQt( " << QString::number(keyQt,16) << " ): failed to convert key."; 00258 return false; 00259 } 00260 00261 bool codeWinToKeyQt( uint sym, int* keyQt ) 00262 { 00263 if( sym >= Qt::Key_A && sym <= Qt::Key_Z ) { 00264 *keyQt = sym; 00265 return true; 00266 } 00267 00268 for( uint i = 0; i < sizeof(KeyTbl); i++ ) { 00269 if( KeyTbl[i].keySymWin == sym ) { 00270 *keyQt = KeyTbl[i].keySymQt; 00271 return true; 00272 } 00273 } 00274 00275 *keyQt = 0; 00276 return false; 00277 } 00278 00279 }
KDE 4.6 API Reference