1 #include "shortcutmanager.hpp"
2 
3 #include <algorithm>
4 
5 #include <QApplication>
6 #include <QStringList>
7 
8 #include "shortcut.hpp"
9 #include "shortcuteventhandler.hpp"
10 
11 namespace CSMPrefs
12 {
ShortcutManager()13     ShortcutManager::ShortcutManager()
14     {
15         createLookupTables();
16         mEventHandler = new ShortcutEventHandler(this);
17     }
18 
addShortcut(Shortcut * shortcut)19     void ShortcutManager::addShortcut(Shortcut* shortcut)
20     {
21         mShortcuts.insert(std::make_pair(shortcut->getName(), shortcut));
22         mShortcuts.insert(std::make_pair(shortcut->getModifierName(), shortcut));
23         mEventHandler->addShortcut(shortcut);
24     }
25 
removeShortcut(Shortcut * shortcut)26     void ShortcutManager::removeShortcut(Shortcut* shortcut)
27     {
28         std::pair<ShortcutMap::iterator, ShortcutMap::iterator> range = mShortcuts.equal_range(shortcut->getName());
29 
30         for (ShortcutMap::iterator it = range.first; it != range.second;)
31         {
32             if (it->second == shortcut)
33             {
34                 mShortcuts.erase(it++);
35             }
36             else
37             {
38                 ++it;
39             }
40         }
41 
42         mEventHandler->removeShortcut(shortcut);
43     }
44 
getSequence(const std::string & name,QKeySequence & sequence) const45     bool ShortcutManager::getSequence(const std::string& name, QKeySequence& sequence) const
46     {
47         SequenceMap::const_iterator item = mSequences.find(name);
48         if (item != mSequences.end())
49         {
50             sequence = item->second;
51 
52             return true;
53         }
54         else
55             return false;
56     }
57 
setSequence(const std::string & name,const QKeySequence & sequence)58     void ShortcutManager::setSequence(const std::string& name, const QKeySequence& sequence)
59     {
60         // Add to map/modify
61         SequenceMap::iterator item = mSequences.find(name);
62         if (item != mSequences.end())
63         {
64             item->second = sequence;
65         }
66         else
67         {
68             mSequences.insert(std::make_pair(name, sequence));
69         }
70 
71         // Change active shortcuts
72         std::pair<ShortcutMap::iterator, ShortcutMap::iterator> rangeS = mShortcuts.equal_range(name);
73 
74         for (ShortcutMap::iterator it = rangeS.first; it != rangeS.second; ++it)
75         {
76             it->second->setSequence(sequence);
77         }
78     }
79 
getModifier(const std::string & name,int & modifier) const80     bool ShortcutManager::getModifier(const std::string& name, int& modifier) const
81     {
82         ModifierMap::const_iterator item = mModifiers.find(name);
83         if (item != mModifiers.end())
84         {
85             modifier = item->second;
86 
87             return true;
88         }
89         else
90             return false;
91     }
92 
setModifier(const std::string & name,int modifier)93     void ShortcutManager::setModifier(const std::string& name, int modifier)
94     {
95         // Add to map/modify
96         ModifierMap::iterator item = mModifiers.find(name);
97         if (item != mModifiers.end())
98         {
99             item->second = modifier;
100         }
101         else
102         {
103             mModifiers.insert(std::make_pair(name, modifier));
104         }
105 
106         // Change active shortcuts
107         std::pair<ShortcutMap::iterator, ShortcutMap::iterator> rangeS = mShortcuts.equal_range(name);
108 
109         for (ShortcutMap::iterator it = rangeS.first; it != rangeS.second; ++it)
110         {
111             it->second->setModifier(modifier);
112         }
113     }
114 
convertToString(const QKeySequence & sequence) const115     std::string ShortcutManager::convertToString(const QKeySequence& sequence) const
116     {
117         const int MouseKeyMask = 0x01FFFFFF;
118         const int ModMask = 0x7E000000;
119 
120         std::string result;
121 
122         for (int i = 0; i < (int)sequence.count(); ++i)
123         {
124             int mods = sequence[i] & ModMask;
125             int key = sequence[i] & MouseKeyMask;
126 
127             if (key)
128             {
129                 NameMap::const_iterator searchResult = mNames.find(key);
130                 if (searchResult != mNames.end())
131                 {
132                     if (mods && i == 0)
133                     {
134                         if (mods & Qt::ControlModifier)
135                             result.append("Ctrl+");
136                         if (mods & Qt::ShiftModifier)
137                             result.append("Shift+");
138                         if (mods & Qt::AltModifier)
139                             result.append("Alt+");
140                         if (mods & Qt::MetaModifier)
141                             result.append("Meta+");
142                         if (mods & Qt::KeypadModifier)
143                             result.append("Keypad+");
144                         if (mods & Qt::GroupSwitchModifier)
145                             result.append("GroupSwitch+");
146                     }
147                     else if (i > 0)
148                     {
149                         result.append("+");
150                     }
151 
152                     result.append(searchResult->second);
153                 }
154             }
155         }
156 
157         return result;
158     }
159 
convertToString(int modifier) const160     std::string ShortcutManager::convertToString(int modifier) const
161     {
162         NameMap::const_iterator searchResult = mNames.find(modifier);
163         if (searchResult != mNames.end())
164         {
165             return searchResult->second;
166         }
167         else
168             return "";
169     }
170 
convertToString(const QKeySequence & sequence,int modifier) const171     std::string ShortcutManager::convertToString(const QKeySequence& sequence, int modifier) const
172     {
173         std::string concat = convertToString(sequence) + ";" + convertToString(modifier);
174         return concat;
175     }
176 
convertFromString(const std::string & data,QKeySequence & sequence) const177     void ShortcutManager::convertFromString(const std::string& data, QKeySequence& sequence) const
178     {
179         const int MaxKeys = 4; // A limitation of QKeySequence
180 
181         size_t end = data.find(';');
182         size_t size = std::min(end, data.size());
183 
184         std::string value = data.substr(0, size);
185         size_t start = 0;
186 
187         int keyPos = 0;
188         int mods = 0;
189 
190         int keys[MaxKeys] = {};
191 
192         while (start < value.size())
193         {
194             end = data.find('+', start);
195             end = std::min(end, value.size());
196 
197             std::string name = value.substr(start, end - start);
198 
199             if (name == "Ctrl")
200             {
201                 mods |= Qt::ControlModifier;
202             }
203             else if (name == "Shift")
204             {
205                 mods |= Qt::ShiftModifier;
206             }
207             else if (name == "Alt")
208             {
209                 mods |= Qt::AltModifier;
210             }
211             else if (name == "Meta")
212             {
213                 mods |= Qt::MetaModifier;
214             }
215             else if (name == "Keypad")
216             {
217                 mods |= Qt::KeypadModifier;
218             }
219             else if (name == "GroupSwitch")
220             {
221                 mods |= Qt::GroupSwitchModifier;
222             }
223             else
224             {
225                 KeyMap::const_iterator searchResult = mKeys.find(name);
226                 if (searchResult != mKeys.end())
227                 {
228                     keys[keyPos] = mods | searchResult->second;
229 
230                     mods = 0;
231                     keyPos += 1;
232 
233                     if (keyPos >= MaxKeys)
234                         break;
235                 }
236             }
237 
238             start = end + 1;
239         }
240 
241         sequence = QKeySequence(keys[0], keys[1], keys[2], keys[3]);
242     }
243 
convertFromString(const std::string & data,int & modifier) const244     void ShortcutManager::convertFromString(const std::string& data, int& modifier) const
245     {
246         size_t start = data.find(';') + 1;
247         start = std::min(start, data.size());
248 
249         std::string name = data.substr(start);
250         KeyMap::const_iterator searchResult = mKeys.find(name);
251         if (searchResult != mKeys.end())
252         {
253             modifier = searchResult->second;
254         }
255         else
256         {
257             modifier = 0;
258         }
259     }
260 
convertFromString(const std::string & data,QKeySequence & sequence,int & modifier) const261     void ShortcutManager::convertFromString(const std::string& data, QKeySequence& sequence, int& modifier) const
262     {
263         convertFromString(data, sequence);
264         convertFromString(data, modifier);
265     }
266 
createLookupTables()267     void ShortcutManager::createLookupTables()
268     {
269         // Mouse buttons
270         mNames.insert(std::make_pair(Qt::LeftButton, "LMB"));
271         mNames.insert(std::make_pair(Qt::RightButton, "RMB"));
272         mNames.insert(std::make_pair(Qt::MiddleButton, "MMB"));
273         mNames.insert(std::make_pair(Qt::XButton1, "Mouse4"));
274         mNames.insert(std::make_pair(Qt::XButton2, "Mouse5"));
275 
276         // Keyboard buttons
277         for (size_t i = 0; QtKeys[i].first != 0; ++i)
278         {
279             mNames.insert(QtKeys[i]);
280         }
281 
282         // Generate inverse map
283         for (NameMap::const_iterator it = mNames.begin(); it != mNames.end(); ++it)
284         {
285             mKeys.insert(std::make_pair(it->second, it->first));
286         }
287     }
288 
processToolTip(const QString & toolTip) const289     QString ShortcutManager::processToolTip(const QString& toolTip) const
290     {
291         const QChar SequenceStart = '{';
292         const QChar SequenceEnd = '}';
293 
294         QStringList substrings;
295 
296         int prevIndex = 0;
297         int startIndex = toolTip.indexOf(SequenceStart);
298         int endIndex = (startIndex != -1) ? toolTip.indexOf(SequenceEnd, startIndex) : -1;
299 
300         // Process every valid shortcut escape sequence
301         while (startIndex != -1 && endIndex != -1)
302         {
303             int count = startIndex - prevIndex;
304             if (count > 0)
305             {
306                 substrings.push_back(toolTip.mid(prevIndex, count));
307             }
308 
309             // Find sequence name
310             startIndex += 1; // '{' character
311             count = endIndex - startIndex;
312             if (count > 0)
313             {
314                 QString settingName = toolTip.mid(startIndex, count);
315 
316                 QKeySequence sequence;
317                 int modifier;
318 
319                 if (getSequence(settingName.toUtf8().data(), sequence))
320                 {
321                     QString value = QString::fromUtf8(convertToString(sequence).c_str());
322                     substrings.push_back(value);
323                 }
324                 else if (getModifier(settingName.toUtf8().data(), modifier))
325                 {
326                     QString value = QString::fromUtf8(convertToString(modifier).c_str());
327                     substrings.push_back(value);
328                 }
329 
330                 prevIndex = endIndex + 1; // '}' character
331             }
332 
333             startIndex = toolTip.indexOf(SequenceStart, endIndex);
334             endIndex = (startIndex != -1) ? toolTip.indexOf(SequenceEnd, startIndex) : -1;
335         }
336 
337         if (prevIndex < toolTip.size())
338         {
339             substrings.push_back(toolTip.mid(prevIndex));
340         }
341 
342         return substrings.join("");
343     }
344 
345     const std::pair<int, const char*> ShortcutManager::QtKeys[] =
346     {
347         std::make_pair((int)Qt::Key_Space                  , "Space"),
348         std::make_pair((int)Qt::Key_Exclam                 , "Exclam"),
349         std::make_pair((int)Qt::Key_QuoteDbl               , "QuoteDbl"),
350         std::make_pair((int)Qt::Key_NumberSign             , "NumberSign"),
351         std::make_pair((int)Qt::Key_Dollar                 , "Dollar"),
352         std::make_pair((int)Qt::Key_Percent                , "Percent"),
353         std::make_pair((int)Qt::Key_Ampersand              , "Ampersand"),
354         std::make_pair((int)Qt::Key_Apostrophe             , "Apostrophe"),
355         std::make_pair((int)Qt::Key_ParenLeft              , "ParenLeft"),
356         std::make_pair((int)Qt::Key_ParenRight             , "ParenRight"),
357         std::make_pair((int)Qt::Key_Asterisk               , "Asterisk"),
358         std::make_pair((int)Qt::Key_Plus                   , "Plus"),
359         std::make_pair((int)Qt::Key_Comma                  , "Comma"),
360         std::make_pair((int)Qt::Key_Minus                  , "Minus"),
361         std::make_pair((int)Qt::Key_Period                 , "Period"),
362         std::make_pair((int)Qt::Key_Slash                  , "Slash"),
363         std::make_pair((int)Qt::Key_0                      , "0"),
364         std::make_pair((int)Qt::Key_1                      , "1"),
365         std::make_pair((int)Qt::Key_2                      , "2"),
366         std::make_pair((int)Qt::Key_3                      , "3"),
367         std::make_pair((int)Qt::Key_4                      , "4"),
368         std::make_pair((int)Qt::Key_5                      , "5"),
369         std::make_pair((int)Qt::Key_6                      , "6"),
370         std::make_pair((int)Qt::Key_7                      , "7"),
371         std::make_pair((int)Qt::Key_8                      , "8"),
372         std::make_pair((int)Qt::Key_9                      , "9"),
373         std::make_pair((int)Qt::Key_Colon                  , "Colon"),
374         std::make_pair((int)Qt::Key_Semicolon              , "Semicolon"),
375         std::make_pair((int)Qt::Key_Less                   , "Less"),
376         std::make_pair((int)Qt::Key_Equal                  , "Equal"),
377         std::make_pair((int)Qt::Key_Greater                , "Greater"),
378         std::make_pair((int)Qt::Key_Question               , "Question"),
379         std::make_pair((int)Qt::Key_At                     , "At"),
380         std::make_pair((int)Qt::Key_A                      , "A"),
381         std::make_pair((int)Qt::Key_B                      , "B"),
382         std::make_pair((int)Qt::Key_C                      , "C"),
383         std::make_pair((int)Qt::Key_D                      , "D"),
384         std::make_pair((int)Qt::Key_E                      , "E"),
385         std::make_pair((int)Qt::Key_F                      , "F"),
386         std::make_pair((int)Qt::Key_G                      , "G"),
387         std::make_pair((int)Qt::Key_H                      , "H"),
388         std::make_pair((int)Qt::Key_I                      , "I"),
389         std::make_pair((int)Qt::Key_J                      , "J"),
390         std::make_pair((int)Qt::Key_K                      , "K"),
391         std::make_pair((int)Qt::Key_L                      , "L"),
392         std::make_pair((int)Qt::Key_M                      , "M"),
393         std::make_pair((int)Qt::Key_N                      , "N"),
394         std::make_pair((int)Qt::Key_O                      , "O"),
395         std::make_pair((int)Qt::Key_P                      , "P"),
396         std::make_pair((int)Qt::Key_Q                      , "Q"),
397         std::make_pair((int)Qt::Key_R                      , "R"),
398         std::make_pair((int)Qt::Key_S                      , "S"),
399         std::make_pair((int)Qt::Key_T                      , "T"),
400         std::make_pair((int)Qt::Key_U                      , "U"),
401         std::make_pair((int)Qt::Key_V                      , "V"),
402         std::make_pair((int)Qt::Key_W                      , "W"),
403         std::make_pair((int)Qt::Key_X                      , "X"),
404         std::make_pair((int)Qt::Key_Y                      , "Y"),
405         std::make_pair((int)Qt::Key_Z                      , "Z"),
406         std::make_pair((int)Qt::Key_BracketLeft            , "BracketLeft"),
407         std::make_pair((int)Qt::Key_Backslash              , "Backslash"),
408         std::make_pair((int)Qt::Key_BracketRight           , "BracketRight"),
409         std::make_pair((int)Qt::Key_AsciiCircum            , "AsciiCircum"),
410         std::make_pair((int)Qt::Key_Underscore             , "Underscore"),
411         std::make_pair((int)Qt::Key_QuoteLeft              , "QuoteLeft"),
412         std::make_pair((int)Qt::Key_BraceLeft              , "BraceLeft"),
413         std::make_pair((int)Qt::Key_Bar                    , "Bar"),
414         std::make_pair((int)Qt::Key_BraceRight             , "BraceRight"),
415         std::make_pair((int)Qt::Key_AsciiTilde             , "AsciiTilde"),
416         std::make_pair((int)Qt::Key_nobreakspace           , "nobreakspace"),
417         std::make_pair((int)Qt::Key_exclamdown             , "exclamdown"),
418         std::make_pair((int)Qt::Key_cent                   , "cent"),
419         std::make_pair((int)Qt::Key_sterling               , "sterling"),
420         std::make_pair((int)Qt::Key_currency               , "currency"),
421         std::make_pair((int)Qt::Key_yen                    , "yen"),
422         std::make_pair((int)Qt::Key_brokenbar              , "brokenbar"),
423         std::make_pair((int)Qt::Key_section                , "section"),
424         std::make_pair((int)Qt::Key_diaeresis              , "diaeresis"),
425         std::make_pair((int)Qt::Key_copyright              , "copyright"),
426         std::make_pair((int)Qt::Key_ordfeminine            , "ordfeminine"),
427         std::make_pair((int)Qt::Key_guillemotleft          , "guillemotleft"),
428         std::make_pair((int)Qt::Key_notsign                , "notsign"),
429         std::make_pair((int)Qt::Key_hyphen                 , "hyphen"),
430         std::make_pair((int)Qt::Key_registered             , "registered"),
431         std::make_pair((int)Qt::Key_macron                 , "macron"),
432         std::make_pair((int)Qt::Key_degree                 , "degree"),
433         std::make_pair((int)Qt::Key_plusminus              , "plusminus"),
434         std::make_pair((int)Qt::Key_twosuperior            , "twosuperior"),
435         std::make_pair((int)Qt::Key_threesuperior          , "threesuperior"),
436         std::make_pair((int)Qt::Key_acute                  , "acute"),
437         std::make_pair((int)Qt::Key_mu                     , "mu"),
438         std::make_pair((int)Qt::Key_paragraph              , "paragraph"),
439         std::make_pair((int)Qt::Key_periodcentered         , "periodcentered"),
440         std::make_pair((int)Qt::Key_cedilla                , "cedilla"),
441         std::make_pair((int)Qt::Key_onesuperior            , "onesuperior"),
442         std::make_pair((int)Qt::Key_masculine              , "masculine"),
443         std::make_pair((int)Qt::Key_guillemotright         , "guillemotright"),
444         std::make_pair((int)Qt::Key_onequarter             , "onequarter"),
445         std::make_pair((int)Qt::Key_onehalf                , "onehalf"),
446         std::make_pair((int)Qt::Key_threequarters          , "threequarters"),
447         std::make_pair((int)Qt::Key_questiondown           , "questiondown"),
448         std::make_pair((int)Qt::Key_Agrave                 , "Agrave"),
449         std::make_pair((int)Qt::Key_Aacute                 , "Aacute"),
450         std::make_pair((int)Qt::Key_Acircumflex            , "Acircumflex"),
451         std::make_pair((int)Qt::Key_Atilde                 , "Atilde"),
452         std::make_pair((int)Qt::Key_Adiaeresis             , "Adiaeresis"),
453         std::make_pair((int)Qt::Key_Aring                  , "Aring"),
454         std::make_pair((int)Qt::Key_AE                     , "AE"),
455         std::make_pair((int)Qt::Key_Ccedilla               , "Ccedilla"),
456         std::make_pair((int)Qt::Key_Egrave                 , "Egrave"),
457         std::make_pair((int)Qt::Key_Eacute                 , "Eacute"),
458         std::make_pair((int)Qt::Key_Ecircumflex            , "Ecircumflex"),
459         std::make_pair((int)Qt::Key_Ediaeresis             , "Ediaeresis"),
460         std::make_pair((int)Qt::Key_Igrave                 , "Igrave"),
461         std::make_pair((int)Qt::Key_Iacute                 , "Iacute"),
462         std::make_pair((int)Qt::Key_Icircumflex            , "Icircumflex"),
463         std::make_pair((int)Qt::Key_Idiaeresis             , "Idiaeresis"),
464         std::make_pair((int)Qt::Key_ETH                    , "ETH"),
465         std::make_pair((int)Qt::Key_Ntilde                 , "Ntilde"),
466         std::make_pair((int)Qt::Key_Ograve                 , "Ograve"),
467         std::make_pair((int)Qt::Key_Oacute                 , "Oacute"),
468         std::make_pair((int)Qt::Key_Ocircumflex            , "Ocircumflex"),
469         std::make_pair((int)Qt::Key_Otilde                 , "Otilde"),
470         std::make_pair((int)Qt::Key_Odiaeresis             , "Odiaeresis"),
471         std::make_pair((int)Qt::Key_multiply               , "multiply"),
472         std::make_pair((int)Qt::Key_Ooblique               , "Ooblique"),
473         std::make_pair((int)Qt::Key_Ugrave                 , "Ugrave"),
474         std::make_pair((int)Qt::Key_Uacute                 , "Uacute"),
475         std::make_pair((int)Qt::Key_Ucircumflex            , "Ucircumflex"),
476         std::make_pair((int)Qt::Key_Udiaeresis             , "Udiaeresis"),
477         std::make_pair((int)Qt::Key_Yacute                 , "Yacute"),
478         std::make_pair((int)Qt::Key_THORN                  , "THORN"),
479         std::make_pair((int)Qt::Key_ssharp                 , "ssharp"),
480         std::make_pair((int)Qt::Key_division               , "division"),
481         std::make_pair((int)Qt::Key_ydiaeresis             , "ydiaeresis"),
482         std::make_pair((int)Qt::Key_Escape                 , "Escape"),
483         std::make_pair((int)Qt::Key_Tab                    , "Tab"),
484         std::make_pair((int)Qt::Key_Backtab                , "Backtab"),
485         std::make_pair((int)Qt::Key_Backspace              , "Backspace"),
486         std::make_pair((int)Qt::Key_Return                 , "Return"),
487         std::make_pair((int)Qt::Key_Enter                  , "Enter"),
488         std::make_pair((int)Qt::Key_Insert                 , "Insert"),
489         std::make_pair((int)Qt::Key_Delete                 , "Delete"),
490         std::make_pair((int)Qt::Key_Pause                  , "Pause"),
491         std::make_pair((int)Qt::Key_Print                  , "Print"),
492         std::make_pair((int)Qt::Key_SysReq                 , "SysReq"),
493         std::make_pair((int)Qt::Key_Clear                  , "Clear"),
494         std::make_pair((int)Qt::Key_Home                   , "Home"),
495         std::make_pair((int)Qt::Key_End                    , "End"),
496         std::make_pair((int)Qt::Key_Left                   , "Left"),
497         std::make_pair((int)Qt::Key_Up                     , "Up"),
498         std::make_pair((int)Qt::Key_Right                  , "Right"),
499         std::make_pair((int)Qt::Key_Down                   , "Down"),
500         std::make_pair((int)Qt::Key_PageUp                 , "PageUp"),
501         std::make_pair((int)Qt::Key_PageDown               , "PageDown"),
502         std::make_pair((int)Qt::Key_Shift                  , "Shift"),
503         std::make_pair((int)Qt::Key_Control                , "Control"),
504         std::make_pair((int)Qt::Key_Meta                   , "Meta"),
505         std::make_pair((int)Qt::Key_Alt                    , "Alt"),
506         std::make_pair((int)Qt::Key_CapsLock               , "CapsLock"),
507         std::make_pair((int)Qt::Key_NumLock                , "NumLock"),
508         std::make_pair((int)Qt::Key_ScrollLock             , "ScrollLock"),
509         std::make_pair((int)Qt::Key_F1                     , "F1"),
510         std::make_pair((int)Qt::Key_F2                     , "F2"),
511         std::make_pair((int)Qt::Key_F3                     , "F3"),
512         std::make_pair((int)Qt::Key_F4                     , "F4"),
513         std::make_pair((int)Qt::Key_F5                     , "F5"),
514         std::make_pair((int)Qt::Key_F6                     , "F6"),
515         std::make_pair((int)Qt::Key_F7                     , "F7"),
516         std::make_pair((int)Qt::Key_F8                     , "F8"),
517         std::make_pair((int)Qt::Key_F9                     , "F9"),
518         std::make_pair((int)Qt::Key_F10                    , "F10"),
519         std::make_pair((int)Qt::Key_F11                    , "F11"),
520         std::make_pair((int)Qt::Key_F12                    , "F12"),
521         std::make_pair((int)Qt::Key_F13                    , "F13"),
522         std::make_pair((int)Qt::Key_F14                    , "F14"),
523         std::make_pair((int)Qt::Key_F15                    , "F15"),
524         std::make_pair((int)Qt::Key_F16                    , "F16"),
525         std::make_pair((int)Qt::Key_F17                    , "F17"),
526         std::make_pair((int)Qt::Key_F18                    , "F18"),
527         std::make_pair((int)Qt::Key_F19                    , "F19"),
528         std::make_pair((int)Qt::Key_F20                    , "F20"),
529         std::make_pair((int)Qt::Key_F21                    , "F21"),
530         std::make_pair((int)Qt::Key_F22                    , "F22"),
531         std::make_pair((int)Qt::Key_F23                    , "F23"),
532         std::make_pair((int)Qt::Key_F24                    , "F24"),
533         std::make_pair((int)Qt::Key_F25                    , "F25"),
534         std::make_pair((int)Qt::Key_F26                    , "F26"),
535         std::make_pair((int)Qt::Key_F27                    , "F27"),
536         std::make_pair((int)Qt::Key_F28                    , "F28"),
537         std::make_pair((int)Qt::Key_F29                    , "F29"),
538         std::make_pair((int)Qt::Key_F30                    , "F30"),
539         std::make_pair((int)Qt::Key_F31                    , "F31"),
540         std::make_pair((int)Qt::Key_F32                    , "F32"),
541         std::make_pair((int)Qt::Key_F33                    , "F33"),
542         std::make_pair((int)Qt::Key_F34                    , "F34"),
543         std::make_pair((int)Qt::Key_F35                    , "F35"),
544         std::make_pair((int)Qt::Key_Super_L                , "Super_L"),
545         std::make_pair((int)Qt::Key_Super_R                , "Super_R"),
546         std::make_pair((int)Qt::Key_Menu                   , "Menu"),
547         std::make_pair((int)Qt::Key_Hyper_L                , "Hyper_L"),
548         std::make_pair((int)Qt::Key_Hyper_R                , "Hyper_R"),
549         std::make_pair((int)Qt::Key_Help                   , "Help"),
550         std::make_pair((int)Qt::Key_Direction_L            , "Direction_L"),
551         std::make_pair((int)Qt::Key_Direction_R            , "Direction_R"),
552         std::make_pair((int)Qt::Key_Back                   , "Back"),
553         std::make_pair((int)Qt::Key_Forward                , "Forward"),
554         std::make_pair((int)Qt::Key_Stop                   , "Stop"),
555         std::make_pair((int)Qt::Key_Refresh                , "Refresh"),
556         std::make_pair((int)Qt::Key_VolumeDown             , "VolumeDown"),
557         std::make_pair((int)Qt::Key_VolumeMute             , "VolumeMute"),
558         std::make_pair((int)Qt::Key_VolumeUp               , "VolumeUp"),
559         std::make_pair((int)Qt::Key_BassBoost              , "BassBoost"),
560         std::make_pair((int)Qt::Key_BassUp                 , "BassUp"),
561         std::make_pair((int)Qt::Key_BassDown               , "BassDown"),
562         std::make_pair((int)Qt::Key_TrebleUp               , "TrebleUp"),
563         std::make_pair((int)Qt::Key_TrebleDown             , "TrebleDown"),
564         std::make_pair((int)Qt::Key_MediaPlay              , "MediaPlay"),
565         std::make_pair((int)Qt::Key_MediaStop              , "MediaStop"),
566         std::make_pair((int)Qt::Key_MediaPrevious          , "MediaPrevious"),
567         std::make_pair((int)Qt::Key_MediaNext              , "MediaNext"),
568         std::make_pair((int)Qt::Key_MediaRecord            , "MediaRecord"),
569         std::make_pair((int)Qt::Key_MediaPause             , "MediaPause"),
570         std::make_pair((int)Qt::Key_MediaTogglePlayPause   , "MediaTogglePlayPause"),
571         std::make_pair((int)Qt::Key_HomePage               , "HomePage"),
572         std::make_pair((int)Qt::Key_Favorites              , "Favorites"),
573         std::make_pair((int)Qt::Key_Search                 , "Search"),
574         std::make_pair((int)Qt::Key_Standby                , "Standby"),
575         std::make_pair((int)Qt::Key_OpenUrl                , "OpenUrl"),
576         std::make_pair((int)Qt::Key_LaunchMail             , "LaunchMail"),
577         std::make_pair((int)Qt::Key_LaunchMedia            , "LaunchMedia"),
578         std::make_pair((int)Qt::Key_Launch0                , "Launch0"),
579         std::make_pair((int)Qt::Key_Launch1                , "Launch1"),
580         std::make_pair((int)Qt::Key_Launch2                , "Launch2"),
581         std::make_pair((int)Qt::Key_Launch3                , "Launch3"),
582         std::make_pair((int)Qt::Key_Launch4                , "Launch4"),
583         std::make_pair((int)Qt::Key_Launch5                , "Launch5"),
584         std::make_pair((int)Qt::Key_Launch6                , "Launch6"),
585         std::make_pair((int)Qt::Key_Launch7                , "Launch7"),
586         std::make_pair((int)Qt::Key_Launch8                , "Launch8"),
587         std::make_pair((int)Qt::Key_Launch9                , "Launch9"),
588         std::make_pair((int)Qt::Key_LaunchA                , "LaunchA"),
589         std::make_pair((int)Qt::Key_LaunchB                , "LaunchB"),
590         std::make_pair((int)Qt::Key_LaunchC                , "LaunchC"),
591         std::make_pair((int)Qt::Key_LaunchD                , "LaunchD"),
592         std::make_pair((int)Qt::Key_LaunchE                , "LaunchE"),
593         std::make_pair((int)Qt::Key_LaunchF                , "LaunchF"),
594         std::make_pair((int)Qt::Key_MonBrightnessUp        , "MonBrightnessUp"),
595         std::make_pair((int)Qt::Key_MonBrightnessDown      , "MonBrightnessDown"),
596         std::make_pair((int)Qt::Key_KeyboardLightOnOff     , "KeyboardLightOnOff"),
597         std::make_pair((int)Qt::Key_KeyboardBrightnessUp   , "KeyboardBrightnessUp"),
598         std::make_pair((int)Qt::Key_KeyboardBrightnessDown , "KeyboardBrightnessDown"),
599         std::make_pair((int)Qt::Key_PowerOff               , "PowerOff"),
600         std::make_pair((int)Qt::Key_WakeUp                 , "WakeUp"),
601         std::make_pair((int)Qt::Key_Eject                  , "Eject"),
602         std::make_pair((int)Qt::Key_ScreenSaver            , "ScreenSaver"),
603         std::make_pair((int)Qt::Key_WWW                    , "WWW"),
604         std::make_pair((int)Qt::Key_Memo                   , "Memo"),
605         std::make_pair((int)Qt::Key_LightBulb              , "LightBulb"),
606         std::make_pair((int)Qt::Key_Shop                   , "Shop"),
607         std::make_pair((int)Qt::Key_History                , "History"),
608         std::make_pair((int)Qt::Key_AddFavorite            , "AddFavorite"),
609         std::make_pair((int)Qt::Key_HotLinks               , "HotLinks"),
610         std::make_pair((int)Qt::Key_BrightnessAdjust       , "BrightnessAdjust"),
611         std::make_pair((int)Qt::Key_Finance                , "Finance"),
612         std::make_pair((int)Qt::Key_Community              , "Community"),
613         std::make_pair((int)Qt::Key_AudioRewind            , "AudioRewind"),
614         std::make_pair((int)Qt::Key_BackForward            , "BackForward"),
615         std::make_pair((int)Qt::Key_ApplicationLeft        , "ApplicationLeft"),
616         std::make_pair((int)Qt::Key_ApplicationRight       , "ApplicationRight"),
617         std::make_pair((int)Qt::Key_Book                   , "Book"),
618         std::make_pair((int)Qt::Key_CD                     , "CD"),
619         std::make_pair((int)Qt::Key_Calculator             , "Calculator"),
620         std::make_pair((int)Qt::Key_ToDoList               , "ToDoList"),
621         std::make_pair((int)Qt::Key_ClearGrab              , "ClearGrab"),
622         std::make_pair((int)Qt::Key_Close                  , "Close"),
623         std::make_pair((int)Qt::Key_Copy                   , "Copy"),
624         std::make_pair((int)Qt::Key_Cut                    , "Cut"),
625         std::make_pair((int)Qt::Key_Display                , "Display"),
626         std::make_pair((int)Qt::Key_DOS                    , "DOS"),
627         std::make_pair((int)Qt::Key_Documents              , "Documents"),
628         std::make_pair((int)Qt::Key_Excel                  , "Excel"),
629         std::make_pair((int)Qt::Key_Explorer               , "Explorer"),
630         std::make_pair((int)Qt::Key_Game                   , "Game"),
631         std::make_pair((int)Qt::Key_Go                     , "Go"),
632         std::make_pair((int)Qt::Key_iTouch                 , "iTouch"),
633         std::make_pair((int)Qt::Key_LogOff                 , "LogOff"),
634         std::make_pair((int)Qt::Key_Market                 , "Market"),
635         std::make_pair((int)Qt::Key_Meeting                , "Meeting"),
636         std::make_pair((int)Qt::Key_MenuKB                 , "MenuKB"),
637         std::make_pair((int)Qt::Key_MenuPB                 , "MenuPB"),
638         std::make_pair((int)Qt::Key_MySites                , "MySites"),
639         std::make_pair((int)Qt::Key_News                   , "News"),
640         std::make_pair((int)Qt::Key_OfficeHome             , "OfficeHome"),
641         std::make_pair((int)Qt::Key_Option                 , "Option"),
642         std::make_pair((int)Qt::Key_Paste                  , "Paste"),
643         std::make_pair((int)Qt::Key_Phone                  , "Phone"),
644         std::make_pair((int)Qt::Key_Calendar               , "Calendar"),
645         std::make_pair((int)Qt::Key_Reply                  , "Reply"),
646         std::make_pair((int)Qt::Key_Reload                 , "Reload"),
647         std::make_pair((int)Qt::Key_RotateWindows          , "RotateWindows"),
648         std::make_pair((int)Qt::Key_RotationPB             , "RotationPB"),
649         std::make_pair((int)Qt::Key_RotationKB             , "RotationKB"),
650         std::make_pair((int)Qt::Key_Save                   , "Save"),
651         std::make_pair((int)Qt::Key_Send                   , "Send"),
652         std::make_pair((int)Qt::Key_Spell                  , "Spell"),
653         std::make_pair((int)Qt::Key_SplitScreen            , "SplitScreen"),
654         std::make_pair((int)Qt::Key_Support                , "Support"),
655         std::make_pair((int)Qt::Key_TaskPane               , "TaskPane"),
656         std::make_pair((int)Qt::Key_Terminal               , "Terminal"),
657         std::make_pair((int)Qt::Key_Tools                  , "Tools"),
658         std::make_pair((int)Qt::Key_Travel                 , "Travel"),
659         std::make_pair((int)Qt::Key_Video                  , "Video"),
660         std::make_pair((int)Qt::Key_Word                   , "Word"),
661         std::make_pair((int)Qt::Key_Xfer                   , "Xfer"),
662         std::make_pair((int)Qt::Key_ZoomIn                 , "ZoomIn"),
663         std::make_pair((int)Qt::Key_ZoomOut                , "ZoomOut"),
664         std::make_pair((int)Qt::Key_Away                   , "Away"),
665         std::make_pair((int)Qt::Key_Messenger              , "Messenger"),
666         std::make_pair((int)Qt::Key_WebCam                 , "WebCam"),
667         std::make_pair((int)Qt::Key_MailForward            , "MailForward"),
668         std::make_pair((int)Qt::Key_Pictures               , "Pictures"),
669         std::make_pair((int)Qt::Key_Music                  , "Music"),
670         std::make_pair((int)Qt::Key_Battery                , "Battery"),
671         std::make_pair((int)Qt::Key_Bluetooth              , "Bluetooth"),
672         std::make_pair((int)Qt::Key_WLAN                   , "WLAN"),
673         std::make_pair((int)Qt::Key_UWB                    , "UWB"),
674         std::make_pair((int)Qt::Key_AudioForward           , "AudioForward"),
675         std::make_pair((int)Qt::Key_AudioRepeat            , "AudioRepeat"),
676         std::make_pair((int)Qt::Key_AudioRandomPlay        , "AudioRandomPlay"),
677         std::make_pair((int)Qt::Key_Subtitle               , "Subtitle"),
678         std::make_pair((int)Qt::Key_AudioCycleTrack        , "AudioCycleTrack"),
679         std::make_pair((int)Qt::Key_Time                   , "Time"),
680         std::make_pair((int)Qt::Key_Hibernate              , "Hibernate"),
681         std::make_pair((int)Qt::Key_View                   , "View"),
682         std::make_pair((int)Qt::Key_TopMenu                , "TopMenu"),
683         std::make_pair((int)Qt::Key_PowerDown              , "PowerDown"),
684         std::make_pair((int)Qt::Key_Suspend                , "Suspend"),
685         std::make_pair((int)Qt::Key_ContrastAdjust         , "ContrastAdjust"),
686         std::make_pair((int)Qt::Key_LaunchG                , "LaunchG"),
687         std::make_pair((int)Qt::Key_LaunchH                , "LaunchH"),
688         std::make_pair((int)Qt::Key_TouchpadToggle         , "TouchpadToggle"),
689         std::make_pair((int)Qt::Key_TouchpadOn             , "TouchpadOn"),
690         std::make_pair((int)Qt::Key_TouchpadOff            , "TouchpadOff"),
691         std::make_pair((int)Qt::Key_MicMute                , "MicMute"),
692         std::make_pair((int)Qt::Key_Red                    , "Red"),
693         std::make_pair((int)Qt::Key_Green                  , "Green"),
694         std::make_pair((int)Qt::Key_Yellow                 , "Yellow"),
695         std::make_pair((int)Qt::Key_Blue                   , "Blue"),
696         std::make_pair((int)Qt::Key_ChannelUp              , "ChannelUp"),
697         std::make_pair((int)Qt::Key_ChannelDown            , "ChannelDown"),
698         std::make_pair((int)Qt::Key_Guide                  , "Guide"),
699         std::make_pair((int)Qt::Key_Info                   , "Info"),
700         std::make_pair((int)Qt::Key_Settings               , "Settings"),
701         std::make_pair((int)Qt::Key_MicVolumeUp            , "MicVolumeUp"),
702         std::make_pair((int)Qt::Key_MicVolumeDown          , "MicVolumeDown"),
703         std::make_pair((int)Qt::Key_New                    , "New"),
704         std::make_pair((int)Qt::Key_Open                   , "Open"),
705         std::make_pair((int)Qt::Key_Find                   , "Find"),
706         std::make_pair((int)Qt::Key_Undo                   , "Undo"),
707         std::make_pair((int)Qt::Key_Redo                   , "Redo"),
708         std::make_pair((int)Qt::Key_AltGr                  , "AltGr"),
709         std::make_pair((int)Qt::Key_Multi_key              , "Multi_key"),
710         std::make_pair((int)Qt::Key_Kanji                  , "Kanji"),
711         std::make_pair((int)Qt::Key_Muhenkan               , "Muhenkan"),
712         std::make_pair((int)Qt::Key_Henkan                 , "Henkan"),
713         std::make_pair((int)Qt::Key_Romaji                 , "Romaji"),
714         std::make_pair((int)Qt::Key_Hiragana               , "Hiragana"),
715         std::make_pair((int)Qt::Key_Katakana               , "Katakana"),
716         std::make_pair((int)Qt::Key_Hiragana_Katakana      , "Hiragana_Katakana"),
717         std::make_pair((int)Qt::Key_Zenkaku                , "Zenkaku"),
718         std::make_pair((int)Qt::Key_Hankaku                , "Hankaku"),
719         std::make_pair((int)Qt::Key_Zenkaku_Hankaku        , "Zenkaku_Hankaku"),
720         std::make_pair((int)Qt::Key_Touroku                , "Touroku"),
721         std::make_pair((int)Qt::Key_Massyo                 , "Massyo"),
722         std::make_pair((int)Qt::Key_Kana_Lock              , "Kana_Lock"),
723         std::make_pair((int)Qt::Key_Kana_Shift             , "Kana_Shift"),
724         std::make_pair((int)Qt::Key_Eisu_Shift             , "Eisu_Shift"),
725         std::make_pair((int)Qt::Key_Eisu_toggle            , "Eisu_toggle"),
726         std::make_pair((int)Qt::Key_Hangul                 , "Hangul"),
727         std::make_pair((int)Qt::Key_Hangul_Start           , "Hangul_Start"),
728         std::make_pair((int)Qt::Key_Hangul_End             , "Hangul_End"),
729         std::make_pair((int)Qt::Key_Hangul_Hanja           , "Hangul_Hanja"),
730         std::make_pair((int)Qt::Key_Hangul_Jamo            , "Hangul_Jamo"),
731         std::make_pair((int)Qt::Key_Hangul_Romaja          , "Hangul_Romaja"),
732         std::make_pair((int)Qt::Key_Codeinput              , "Codeinput"),
733         std::make_pair((int)Qt::Key_Hangul_Jeonja          , "Hangul_Jeonja"),
734         std::make_pair((int)Qt::Key_Hangul_Banja           , "Hangul_Banja"),
735         std::make_pair((int)Qt::Key_Hangul_PreHanja        , "Hangul_PreHanja"),
736         std::make_pair((int)Qt::Key_Hangul_PostHanja       , "Hangul_PostHanja"),
737         std::make_pair((int)Qt::Key_SingleCandidate        , "SingleCandidate"),
738         std::make_pair((int)Qt::Key_MultipleCandidate      , "MultipleCandidate"),
739         std::make_pair((int)Qt::Key_PreviousCandidate      , "PreviousCandidate"),
740         std::make_pair((int)Qt::Key_Hangul_Special         , "Hangul_Special"),
741         std::make_pair((int)Qt::Key_Mode_switch            , "Mode_switch"),
742         std::make_pair((int)Qt::Key_Dead_Grave             , "Dead_Grave"),
743         std::make_pair((int)Qt::Key_Dead_Acute             , "Dead_Acute"),
744         std::make_pair((int)Qt::Key_Dead_Circumflex        , "Dead_Circumflex"),
745         std::make_pair((int)Qt::Key_Dead_Tilde             , "Dead_Tilde"),
746         std::make_pair((int)Qt::Key_Dead_Macron            , "Dead_Macron"),
747         std::make_pair((int)Qt::Key_Dead_Breve             , "Dead_Breve"),
748         std::make_pair((int)Qt::Key_Dead_Abovedot          , "Dead_Abovedot"),
749         std::make_pair((int)Qt::Key_Dead_Diaeresis         , "Dead_Diaeresis"),
750         std::make_pair((int)Qt::Key_Dead_Abovering         , "Dead_Abovering"),
751         std::make_pair((int)Qt::Key_Dead_Doubleacute       , "Dead_Doubleacute"),
752         std::make_pair((int)Qt::Key_Dead_Caron             , "Dead_Caron"),
753         std::make_pair((int)Qt::Key_Dead_Cedilla           , "Dead_Cedilla"),
754         std::make_pair((int)Qt::Key_Dead_Ogonek            , "Dead_Ogonek"),
755         std::make_pair((int)Qt::Key_Dead_Iota              , "Dead_Iota"),
756         std::make_pair((int)Qt::Key_Dead_Voiced_Sound      , "Dead_Voiced_Sound"),
757         std::make_pair((int)Qt::Key_Dead_Semivoiced_Sound  , "Dead_Semivoiced_Sound"),
758         std::make_pair((int)Qt::Key_Dead_Belowdot          , "Dead_Belowdot"),
759         std::make_pair((int)Qt::Key_Dead_Hook              , "Dead_Hook"),
760         std::make_pair((int)Qt::Key_Dead_Horn              , "Dead_Horn"),
761         std::make_pair((int)Qt::Key_MediaLast              , "MediaLast"),
762         std::make_pair((int)Qt::Key_Select                 , "Select"),
763         std::make_pair((int)Qt::Key_Yes                    , "Yes"),
764         std::make_pair((int)Qt::Key_No                     , "No"),
765         std::make_pair((int)Qt::Key_Cancel                 , "Cancel"),
766         std::make_pair((int)Qt::Key_Printer                , "Printer"),
767         std::make_pair((int)Qt::Key_Execute                , "Execute"),
768         std::make_pair((int)Qt::Key_Sleep                  , "Sleep"),
769         std::make_pair((int)Qt::Key_Play                   , "Play"),
770         std::make_pair((int)Qt::Key_Zoom                   , "Zoom"),
771         std::make_pair((int)Qt::Key_Exit                   , "Exit"),
772         std::make_pair((int)Qt::Key_Context1               , "Context1"),
773         std::make_pair((int)Qt::Key_Context2               , "Context2"),
774         std::make_pair((int)Qt::Key_Context3               , "Context3"),
775         std::make_pair((int)Qt::Key_Context4               , "Context4"),
776         std::make_pair((int)Qt::Key_Call                   , "Call"),
777         std::make_pair((int)Qt::Key_Hangup                 , "Hangup"),
778         std::make_pair((int)Qt::Key_Flip                   , "Flip"),
779         std::make_pair((int)Qt::Key_ToggleCallHangup       , "ToggleCallHangup"),
780         std::make_pair((int)Qt::Key_VoiceDial              , "VoiceDial"),
781         std::make_pair((int)Qt::Key_LastNumberRedial       , "LastNumberRedial"),
782         std::make_pair((int)Qt::Key_Camera                 , "Camera"),
783         std::make_pair((int)Qt::Key_CameraFocus            , "CameraFocus"),
784         std::make_pair(0                                   , (const char*) nullptr)
785     };
786 
787 }
788