Ok, the long awaited config wizard is here (at least in a very basic state). There...
[quassel.git] / src / contrib / libqxt-2007-10-24 / src / gui / qxtapplication_win.cpp
1 /****************************************************************************\r
2 **\r
3 ** Copyright (C) Qxt Foundation. Some rights reserved.\r
4 **\r
5 ** This file is part of the QxtGui module of the Qt eXTension library\r
6 **\r
7 ** This library is free software; you can redistribute it and/or modify it\r
8 ** under the terms of th Common Public License, version 1.0, as published by\r
9 ** IBM.\r
10 **\r
11 ** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY\r
12 ** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY\r
13 ** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR\r
14 ** FITNESS FOR A PARTICULAR PURPOSE.\r
15 **\r
16 ** You should have received a copy of the CPL along with this file.\r
17 ** See the LICENSE file and the cpl1.0.txt file included with the source\r
18 ** distribution for more information. If you did not receive a copy of the\r
19 ** license, contact the Qxt Foundation.\r
20 **\r
21 ** <http://libqxt.sourceforge.net>  <foundation@libqxt.org>\r
22 **\r
23 ****************************************************************************/\r
24 #include "qxtapplication.h"\r
25 #include "qxtapplication_p.h"\r
26 #include <qt_windows.h>\r
27 #include <QWidget>\r
28 \r
29 bool QxtApplication::winEventFilter(MSG* msg, long* result)\r
30 {\r
31         foreach (QxtNativeEventFilter* filter, qxt_d().nativeFilters)\r
32         {\r
33                 if (filter && filter->winEventFilter(msg, result))\r
34                         return true;\r
35         }\r
36 \r
37     if (msg->message == WM_HOTKEY)\r
38     {\r
39         uint modifiers = LOWORD(msg->lParam);\r
40         uint keycode = HIWORD(msg->lParam);\r
41         qxt_d().activateHotKey(modifiers, keycode);\r
42     }\r
43     return QApplication::winEventFilter(msg, result);\r
44 }\r
45 \r
46 uint QxtApplicationPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) const\r
47 {\r
48     // MOD_ALT, MOD_CONTROL, (MOD_KEYUP), MOD_SHIFT, MOD_WIN\r
49     uint native = 0;\r
50     if (modifiers & Qt::ShiftModifier)\r
51         native |= MOD_SHIFT;\r
52     if (modifiers & Qt::ControlModifier)\r
53         native |= MOD_CONTROL;\r
54     if (modifiers & Qt::AltModifier)\r
55         native |= MOD_ALT;\r
56     if (modifiers & Qt::MetaModifier)\r
57         native |= MOD_WIN;\r
58     // TODO: resolve these?\r
59     //if (modifiers & Qt::KeypadModifier)\r
60     //if (modifiers & Qt::GroupSwitchModifier)\r
61     return native;\r
62 }\r
63 \r
64 uint QxtApplicationPrivate::nativeKeycode(Qt::Key key) const\r
65 {\r
66     switch (key)\r
67     {\r
68     case Qt::Key_Escape:\r
69         return VK_ESCAPE;\r
70     case Qt::Key_Tab:\r
71     case Qt::Key_Backtab:\r
72         return VK_TAB;\r
73     case Qt::Key_Backspace:\r
74         return VK_BACK;\r
75     case Qt::Key_Return:\r
76     case Qt::Key_Enter:\r
77         return VK_RETURN;\r
78     case Qt::Key_Insert:\r
79         return VK_INSERT;\r
80     case Qt::Key_Delete:\r
81         return VK_DELETE;\r
82     case Qt::Key_Pause:\r
83         return VK_PAUSE;\r
84     case Qt::Key_Print:\r
85         return VK_PRINT;\r
86     case Qt::Key_Clear:\r
87         return VK_CLEAR;\r
88     case Qt::Key_Home:\r
89         return VK_HOME;\r
90     case Qt::Key_End:\r
91         return VK_END;\r
92     case Qt::Key_Left:\r
93         return VK_LEFT;\r
94     case Qt::Key_Up:\r
95         return VK_UP;\r
96     case Qt::Key_Right:\r
97         return VK_RIGHT;\r
98     case Qt::Key_Down:\r
99         return VK_DOWN;\r
100     case Qt::Key_PageUp:\r
101         return VK_PRIOR;\r
102     case Qt::Key_PageDown:\r
103         return VK_NEXT;\r
104     case Qt::Key_F1:\r
105         return VK_F1;\r
106     case Qt::Key_F2:\r
107         return VK_F2;\r
108     case Qt::Key_F3:\r
109         return VK_F3;\r
110     case Qt::Key_F4:\r
111         return VK_F4;\r
112     case Qt::Key_F5:\r
113         return VK_F5;\r
114     case Qt::Key_F6:\r
115         return VK_F6;\r
116     case Qt::Key_F7:\r
117         return VK_F7;\r
118     case Qt::Key_F8:\r
119         return VK_F8;\r
120     case Qt::Key_F9:\r
121         return VK_F9;\r
122     case Qt::Key_F10:\r
123         return VK_F10;\r
124     case Qt::Key_F11:\r
125         return VK_F11;\r
126     case Qt::Key_F12:\r
127         return VK_F12;\r
128     case Qt::Key_F13:\r
129         return VK_F13;\r
130     case Qt::Key_F14:\r
131         return VK_F14;\r
132     case Qt::Key_F15:\r
133         return VK_F15;\r
134     case Qt::Key_F16:\r
135         return VK_F16;\r
136     case Qt::Key_F17:\r
137         return VK_F17;\r
138     case Qt::Key_F18:\r
139         return VK_F18;\r
140     case Qt::Key_F19:\r
141         return VK_F19;\r
142     case Qt::Key_F20:\r
143         return VK_F20;\r
144     case Qt::Key_F21:\r
145         return VK_F21;\r
146     case Qt::Key_F22:\r
147         return VK_F22;\r
148     case Qt::Key_F23:\r
149         return VK_F23;\r
150     case Qt::Key_F24:\r
151         return VK_F24;\r
152     case Qt::Key_Space:\r
153         return VK_SPACE;\r
154     case Qt::Key_Asterisk:\r
155         return VK_MULTIPLY;\r
156     case Qt::Key_Plus:\r
157         return VK_ADD;\r
158     case Qt::Key_Comma:\r
159         return VK_SEPARATOR;\r
160     case Qt::Key_Minus:\r
161         return VK_SUBTRACT;\r
162     case Qt::Key_Slash:\r
163         return VK_DIVIDE;\r
164 \r
165         // numbers\r
166     case Qt::Key_0:\r
167     case Qt::Key_1:\r
168     case Qt::Key_2:\r
169     case Qt::Key_3:\r
170     case Qt::Key_4:\r
171     case Qt::Key_5:\r
172     case Qt::Key_6:\r
173     case Qt::Key_7:\r
174     case Qt::Key_8:\r
175     case Qt::Key_9:\r
176         return key;\r
177 \r
178         // letters\r
179     case Qt::Key_A:\r
180     case Qt::Key_B:\r
181     case Qt::Key_C:\r
182     case Qt::Key_D:\r
183     case Qt::Key_E:\r
184     case Qt::Key_F:\r
185     case Qt::Key_G:\r
186     case Qt::Key_H:\r
187     case Qt::Key_I:\r
188     case Qt::Key_J:\r
189     case Qt::Key_K:\r
190     case Qt::Key_L:\r
191     case Qt::Key_M:\r
192     case Qt::Key_N:\r
193     case Qt::Key_O:\r
194     case Qt::Key_P:\r
195     case Qt::Key_Q:\r
196     case Qt::Key_R:\r
197     case Qt::Key_S:\r
198     case Qt::Key_T:\r
199     case Qt::Key_U:\r
200     case Qt::Key_V:\r
201     case Qt::Key_W:\r
202     case Qt::Key_X:\r
203     case Qt::Key_Y:\r
204     case Qt::Key_Z:\r
205         return key;\r
206 \r
207     default:\r
208         return 0;\r
209     }\r
210 }\r
211 \r
212 bool QxtApplicationPrivate::registerHotKey(uint modifiers, uint keycode, QWidget* receiver)\r
213 {\r
214     Q_ASSERT(receiver);\r
215     return RegisterHotKey(receiver->winId(), modifiers ^ keycode, modifiers, keycode);\r
216 }\r
217 \r
218 bool QxtApplicationPrivate::unregisterHotKey(uint modifiers, uint keycode, QWidget* receiver)\r
219 {\r
220     Q_ASSERT(receiver);\r
221     return UnregisterHotKey(receiver->winId(), modifiers ^ keycode);\r
222 }\r