1 #ifndef SHORTCUTSSETTINGS_H
2 #define SHORTCUTSSETTINGS_H
3 
4 #include <QApplication>
5 #include <QHash>
6 #include <QKeySequence>
7 #include <QObject>
8 #include <QSettings>
9 
10 class ShortcutGroup
11 {
12 public:
13     enum Groups
14     {
15         Main_Window,
16         Deck_Editor,
17         Game_Lobby,
18         Card_Counters,
19         Player_Counters,
20         Power_Toughness,
21         Game_Phases,
22         Playing_Area,
23         Move_selected,
24         View,
25         Move_top,
26         Move_bottom,
27         Gameplay,
28         Drawing,
29         Chat_room,
30         Game_window,
31         Load_deck
32     };
33 
getGroupName(ShortcutGroup::Groups group)34     static QString getGroupName(ShortcutGroup::Groups group)
35     {
36         switch (group) {
37             case Main_Window:
38                 return QApplication::translate("shortcutsTab", "Main Window");
39             case Deck_Editor:
40                 return QApplication::translate("shortcutsTab", "Deck Editor");
41             case Game_Lobby:
42                 return QApplication::translate("shortcutsTab", "Game Lobby");
43             case Card_Counters:
44                 return QApplication::translate("shortcutsTab", "Card Counters");
45             case Player_Counters:
46                 return QApplication::translate("shortcutsTab", "Player Counters");
47             case Power_Toughness:
48                 return QApplication::translate("shortcutsTab", "Power and Toughness");
49             case Game_Phases:
50                 return QApplication::translate("shortcutsTab", "Game Phases");
51             case Playing_Area:
52                 return QApplication::translate("shortcutsTab", "Playing Area");
53             case Move_selected:
54                 return QApplication::translate("shortcutsTab", "Move Selected Card");
55             case View:
56                 return QApplication::translate("shortcutsTab", "View");
57             case Move_top:
58                 return QApplication::translate("shortcutsTab", "Move Top Card");
59             case Move_bottom:
60                 return QApplication::translate("shortcutsTab", "Move Bottom Card");
61             case Gameplay:
62                 return QApplication::translate("shortcutsTab", "Gameplay");
63             case Drawing:
64                 return QApplication::translate("shortcutsTab", "Drawing");
65             case Chat_room:
66                 return QApplication::translate("shortcutsTab", "Chat Room");
67             case Game_window:
68                 return QApplication::translate("shortcutsTab", "Game Window");
69             case Load_deck:
70                 return QApplication::translate("shortcutsTab", "Load Deck from Clipboard");
71         }
72 
73         return {};
74     }
75 };
76 
77 class ShortcutKey : public QList<QKeySequence>
78 {
79 public:
80     ShortcutKey(const QString &_name = QString(),
81                 QList<QKeySequence> _sequence = QList<QKeySequence>(),
82                 ShortcutGroup::Groups _group = ShortcutGroup::Main_Window);
setSequence(QList<QKeySequence> _sequence)83     void setSequence(QList<QKeySequence> _sequence)
84     {
85         QList<QKeySequence>::operator=(_sequence);
86     };
getName()87     const QString getName() const
88     {
89         return QApplication::translate("shortcutsTab", name.toUtf8().data());
90     };
getGroupName()91     const QString getGroupName() const
92     {
93         return ShortcutGroup::getGroupName(group);
94     };
95 
96 private:
97     QString name;
98     ShortcutGroup::Groups group;
99 };
100 
101 class ShortcutsSettings : public QObject
102 {
103     Q_OBJECT
104 public:
105     ShortcutsSettings(const QString &settingsFilePath, QObject *parent = nullptr);
106 
107     ShortcutKey getDefaultShortcut(const QString &name) const;
108     ShortcutKey getShortcut(const QString &name) const;
109     QKeySequence getSingleShortcut(const QString &name) const;
110     QString getDefaultShortcutString(const QString &name) const;
111     QString getShortcutString(const QString &name) const;
getAllShortcutKeys()112     QList<QString> getAllShortcutKeys() const
113     {
114         return shortCuts.keys();
115     };
116 
117     void setShortcuts(const QString &name, const QList<QKeySequence> &Sequence);
118     void setShortcuts(const QString &name, const QKeySequence &Sequence);
119     void setShortcuts(const QString &name, const QString &Sequences);
120 
121     bool isKeyAllowed(const QString &name, const QString &Sequences) const;
122     bool isValid(const QString &name, const QString &Sequences) const;
123 
124     void resetAllShortcuts();
125     void clearAllShortcuts();
126 
127 signals:
128     void shortCutChanged();
129 
130 private:
131     const QChar sep = ';';
132     const QString custom = "Custom"; // name of custom group in shortCutsFile
133     QString settingsFilePath;
134     QHash<QString, ShortcutKey> shortCuts;
135 
136     QString stringifySequence(const QList<QKeySequence> &Sequence) const;
137     QList<QKeySequence> parseSequenceString(const QString &stringSequence) const;
138 
139     const QHash<QString, ShortcutKey> defaultShortCuts = {
140         {"MainWindow/aCheckCardUpdates", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Check for Card Updates..."),
141                                                      parseSequenceString(""),
142                                                      ShortcutGroup::Main_Window)},
143         {"MainWindow/aConnect", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Connect..."),
144                                             parseSequenceString("Ctrl+L"),
145                                             ShortcutGroup::Main_Window)},
146         {"MainWindow/aDeckEditor", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Deck Editor"),
147                                                parseSequenceString(""),
148                                                ShortcutGroup::Main_Window)},
149         {"MainWindow/aDisconnect", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Disconnect"),
150                                                parseSequenceString(""),
151                                                ShortcutGroup::Main_Window)},
152         {"MainWindow/aExit",
153          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exit"), parseSequenceString(""), ShortcutGroup::Main_Window)},
154         {"MainWindow/aFullScreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Full screen"),
155                                                parseSequenceString("Ctrl+F"),
156                                                ShortcutGroup::Main_Window)},
157         {"MainWindow/aRegister", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Register..."),
158                                              parseSequenceString(""),
159                                              ShortcutGroup::Main_Window)},
160         {"MainWindow/aSettings", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Settings..."),
161                                              parseSequenceString(""),
162                                              ShortcutGroup::Main_Window)},
163         {"MainWindow/aSinglePlayer", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Start a Local Game..."),
164                                                  parseSequenceString(""),
165                                                  ShortcutGroup::Main_Window)},
166         {"MainWindow/aWatchReplay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Watch Replay..."),
167                                                 parseSequenceString(""),
168                                                 ShortcutGroup::Main_Window)},
169         {"TabDeckEditor/aAnalyzeDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Analyze Deck"),
170                                                    parseSequenceString(""),
171                                                    ShortcutGroup::Deck_Editor)},
172         {"TabDeckEditor/aClearFilterAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clear All Filters"),
173                                                       parseSequenceString(""),
174                                                       ShortcutGroup::Deck_Editor)},
175         {"TabDeckEditor/aClearFilterOne", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clear Selected Filter"),
176                                                       parseSequenceString(""),
177                                                       ShortcutGroup::Deck_Editor)},
178         {"TabDeckEditor/aClose",
179          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Close"), parseSequenceString(""), ShortcutGroup::Deck_Editor)},
180         {"TabDeckEditor/aDecrement", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card"),
181                                                  parseSequenceString("-"),
182                                                  ShortcutGroup::Deck_Editor)},
183         {"TabDeckEditor/aManageSets", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Manage Sets..."),
184                                                   parseSequenceString(""),
185                                                   ShortcutGroup::Deck_Editor)},
186         {"TabDeckEditor/aEditTokens", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Edit Custom Tokens..."),
187                                                   parseSequenceString(""),
188                                                   ShortcutGroup::Deck_Editor)},
189         {"TabDeckEditor/aExportDeckDecklist", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Export Deck"),
190                                                           parseSequenceString(""),
191                                                           ShortcutGroup::Deck_Editor)},
192         {"TabDeckEditor/aIncrement", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card"),
193                                                  parseSequenceString("+"),
194                                                  ShortcutGroup::Deck_Editor)},
195         {"TabDeckEditor/aLoadDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Deck..."),
196                                                 parseSequenceString("Ctrl+O"),
197                                                 ShortcutGroup::Deck_Editor)},
198         {"TabDeckEditor/aLoadDeckFromClipboard",
199          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Deck from Clipboard..."),
200                      parseSequenceString("Ctrl+Shift+V"),
201                      ShortcutGroup::Deck_Editor)},
202         {"TabDeckEditor/aNewDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "New Deck"),
203                                                parseSequenceString("Ctrl+N"),
204                                                ShortcutGroup::Deck_Editor)},
205         {"TabDeckEditor/aOpenCustomFolder",
206          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Open Custom Pictures Folder"),
207                      parseSequenceString(""),
208                      ShortcutGroup::Deck_Editor)},
209         {"TabDeckEditor/aPrintDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Print Deck..."),
210                                                  parseSequenceString("Ctrl+P"),
211                                                  ShortcutGroup::Deck_Editor)},
212         {"TabDeckEditor/aRemoveCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Delete Card"),
213                                                   parseSequenceString(""),
214                                                   ShortcutGroup::Deck_Editor)},
215         {"TabDeckEditor/aResetLayout", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reset Layout"),
216                                                    parseSequenceString(""),
217                                                    ShortcutGroup::Deck_Editor)},
218         {"TabDeckEditor/aSaveDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck"),
219                                                 parseSequenceString("Ctrl+S"),
220                                                 ShortcutGroup::Deck_Editor)},
221         {"TabDeckEditor/aSaveDeckAs", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck as..."),
222                                                   parseSequenceString("Ctrl+Shift+S"),
223                                                   ShortcutGroup::Deck_Editor)},
224         {"TabDeckEditor/aSaveDeckToClipboard",
225          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated"),
226                      parseSequenceString("Ctrl+Shift+C"),
227                      ShortcutGroup::Deck_Editor)},
228         {"TabDeckEditor/aSaveDeckToClipboardRaw",
229          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard"),
230                      parseSequenceString("Ctrl+Shift+R"),
231                      ShortcutGroup::Deck_Editor)},
232         {"DeckViewContainer/loadLocalButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Local Deck..."),
233                                                           parseSequenceString("Ctrl+O"),
234                                                           ShortcutGroup::Game_Lobby)},
235         {"DeckViewContainer/loadRemoteButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Remote Deck..."),
236                                                            parseSequenceString("Ctrl+Alt+O"),
237                                                            ShortcutGroup::Game_Lobby)},
238         {"DeckViewContainer/readyStartButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Ready to Start"),
239                                                            parseSequenceString("Ctrl+Shift+S"),
240                                                            ShortcutGroup::Game_Lobby)},
241         {"DeckViewContainer/sideboardLockButton",
242          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Toggle Sideboard Lock"),
243                      parseSequenceString("Ctrl+B"),
244                      ShortcutGroup::Game_Lobby)},
245         {"Player/aCCGreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Green Counter"),
246                                         parseSequenceString(""),
247                                         ShortcutGroup::Card_Counters)},
248         {"Player/aRCGreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Green Counter"),
249                                         parseSequenceString(""),
250                                         ShortcutGroup::Card_Counters)},
251         {"Player/aSCGreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Green Counters..."),
252                                         parseSequenceString(""),
253                                         ShortcutGroup::Card_Counters)},
254         {"Player/aCCYellow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Yellow Counter"),
255                                          parseSequenceString(""),
256                                          ShortcutGroup::Card_Counters)},
257         {"Player/aRCYellow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Yellow Counter"),
258                                          parseSequenceString(""),
259                                          ShortcutGroup::Card_Counters)},
260         {"Player/aSCYellow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Yellow Counters..."),
261                                          parseSequenceString(""),
262                                          ShortcutGroup::Card_Counters)},
263         {"Player/aCCRed", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Red Counter"),
264                                       parseSequenceString(""),
265                                       ShortcutGroup::Card_Counters)},
266         {"Player/aRCRed", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Red Counter"),
267                                       parseSequenceString(""),
268                                       ShortcutGroup::Card_Counters)},
269         {"Player/aSCRed", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Red Counters..."),
270                                       parseSequenceString(""),
271                                       ShortcutGroup::Card_Counters)},
272         {"Player/aInc", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Life Counter"),
273                                     parseSequenceString("F12"),
274                                     ShortcutGroup::Player_Counters)},
275         {"Player/aDec", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Life Counter"),
276                                     parseSequenceString("F11"),
277                                     ShortcutGroup::Player_Counters)},
278         {"Player/aSet", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Life Counters..."),
279                                     parseSequenceString("Ctrl+L"),
280                                     ShortcutGroup::Player_Counters)},
281         {"Player/aIncCounter_w", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add White Counter"),
282                                              parseSequenceString(""),
283                                              ShortcutGroup::Player_Counters)},
284         {"Player/aDecCounter_w", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove White Counter"),
285                                              parseSequenceString(""),
286                                              ShortcutGroup::Player_Counters)},
287         {"Player/aSetCounter_w", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set White Counters..."),
288                                              parseSequenceString(""),
289                                              ShortcutGroup::Player_Counters)},
290         {"Player/aIncCounter_u", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Blue Counter"),
291                                              parseSequenceString(""),
292                                              ShortcutGroup::Player_Counters)},
293         {"Player/aDecCounter_u", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Blue Counter"),
294                                              parseSequenceString(""),
295                                              ShortcutGroup::Player_Counters)},
296         {"Player/aSetCounter_u", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Blue Counters..."),
297                                              parseSequenceString(""),
298                                              ShortcutGroup::Player_Counters)},
299         {"Player/aIncCounter_b", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Black Counter"),
300                                              parseSequenceString(""),
301                                              ShortcutGroup::Player_Counters)},
302         {"Player/aDecCounter_b", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Black Counter"),
303                                              parseSequenceString(""),
304                                              ShortcutGroup::Player_Counters)},
305         {"Player/aSetCounter_b", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Black Counters..."),
306                                              parseSequenceString(""),
307                                              ShortcutGroup::Player_Counters)},
308         {"Player/aIncCounter_r", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Red Counter"),
309                                              parseSequenceString(""),
310                                              ShortcutGroup::Player_Counters)},
311         {"Player/aDecCounter_r", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Red Counter"),
312                                              parseSequenceString(""),
313                                              ShortcutGroup::Player_Counters)},
314         {"Player/aSetCounter_r", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Red Counters..."),
315                                              parseSequenceString(""),
316                                              ShortcutGroup::Player_Counters)},
317         {"Player/aIncCounter_g", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Green Counter"),
318                                              parseSequenceString(""),
319                                              ShortcutGroup::Player_Counters)},
320         {"Player/aDecCounter_g", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Green Counter"),
321                                              parseSequenceString(""),
322                                              ShortcutGroup::Player_Counters)},
323         {"Player/aSetCounter_g", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Green Counters..."),
324                                              parseSequenceString(""),
325                                              ShortcutGroup::Player_Counters)},
326         {"Player/aIncCounter_x", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Colorless Counter"),
327                                              parseSequenceString(""),
328                                              ShortcutGroup::Player_Counters)},
329         {"Player/aDecCounter_x", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Colorless Counter"),
330                                              parseSequenceString(""),
331                                              ShortcutGroup::Player_Counters)},
332         {"Player/aSetCounter_x", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Colorless Counters..."),
333                                              parseSequenceString(""),
334                                              ShortcutGroup::Player_Counters)},
335         {"Player/aIncCounter_storm", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Other Counter"),
336                                                  parseSequenceString(""),
337                                                  ShortcutGroup::Player_Counters)},
338         {"Player/aDecCounter_storm", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Other Counter"),
339                                                  parseSequenceString(""),
340                                                  ShortcutGroup::Player_Counters)},
341         {"Player/aSetCounter_storm", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Other Counters..."),
342                                                  parseSequenceString(""),
343                                                  ShortcutGroup::Player_Counters)},
344         {"Player/aIncP", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Power (+1/+0)"),
345                                      parseSequenceString("Ctrl++"),
346                                      ShortcutGroup::Power_Toughness)},
347         {"Player/aDecP", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Power (-1/-0)"),
348                                      parseSequenceString("Ctrl+-"),
349                                      ShortcutGroup::Power_Toughness)},
350         {"Player/aFlowP", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Move Toughness to Power (+1/-1)"),
351                                       parseSequenceString(""),
352                                       ShortcutGroup::Power_Toughness)},
353         {"Player/aIncT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Toughness (+0/+1)"),
354                                      parseSequenceString("Alt++"),
355                                      ShortcutGroup::Power_Toughness)},
356         {"Player/aDecT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Toughness (-0/-1)"),
357                                      parseSequenceString("Alt+-"),
358                                      ShortcutGroup::Power_Toughness)},
359         {"Player/aFlowT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Move Power to Toughness (-1/+1)"),
360                                       parseSequenceString(""),
361                                       ShortcutGroup::Power_Toughness)},
362         {"Player/aIncPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Power and Toughness (+1/+1)"),
363                                       parseSequenceString("Ctrl+Alt++"),
364                                       ShortcutGroup::Power_Toughness)},
365         {"Player/aDecPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Power and Toughness (-1/-1)"),
366                                       parseSequenceString("Ctrl+Alt+-"),
367                                       ShortcutGroup::Power_Toughness)},
368         {"Player/aSetPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Power and Toughness..."),
369                                       parseSequenceString("Ctrl+P"),
370                                       ShortcutGroup::Power_Toughness)},
371         {"Player/aResetPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reset Power and Toughness"),
372                                         parseSequenceString("Ctrl+Alt+0"),
373                                         ShortcutGroup::Power_Toughness)},
374         {"Player/phase0", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Untap"),
375                                       parseSequenceString("F5"),
376                                       ShortcutGroup::Game_Phases)},
377         {"Player/phase1",
378          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Upkeep"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
379         {"Player/phase2",
380          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw"), parseSequenceString("F6"), ShortcutGroup::Game_Phases)},
381         {"Player/phase3", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "First Main Phase"),
382                                       parseSequenceString("F7"),
383                                       ShortcutGroup::Game_Phases)},
384         {"Player/phase4", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Start Combat"),
385                                       parseSequenceString("F8"),
386                                       ShortcutGroup::Game_Phases)},
387         {"Player/phase5",
388          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Attack"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
389         {"Player/phase6",
390          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Block"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
391         {"Player/phase7",
392          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Damage"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
393         {"Player/phase8", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "End Combat"),
394                                       parseSequenceString(""),
395                                       ShortcutGroup::Game_Phases)},
396         {"Player/phase9", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Second Main Phase"),
397                                       parseSequenceString("F9"),
398                                       ShortcutGroup::Game_Phases)},
399         {"Player/phase10",
400          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "End"), parseSequenceString("F10"), ShortcutGroup::Game_Phases)},
401         {"Player/aNextPhase", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Next Phase"),
402                                           parseSequenceString("Ctrl+Space;Tab"),
403                                           ShortcutGroup::Game_Phases)},
404         {"Player/aNextPhaseAction", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Next Phase Action"),
405                                                 parseSequenceString("Shift+Tab"),
406                                                 ShortcutGroup::Game_Phases)},
407         {"Player/aNextTurn", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Next Turn"),
408                                          parseSequenceString("Ctrl+Return;Ctrl+Enter"),
409                                          ShortcutGroup::Game_Phases)},
410         {"Player/aTap", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Tap / Untap Card"),
411                                     parseSequenceString(""),
412                                     ShortcutGroup::Playing_Area)},
413         {"Player/aUntapAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Untap All"),
414                                          parseSequenceString("Ctrl+U"),
415                                          ShortcutGroup::Playing_Area)},
416         {"Player/aDoesntUntap", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Toggle Untap"),
417                                             parseSequenceString(""),
418                                             ShortcutGroup::Playing_Area)},
419         {"Player/aFlip", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Turn Card Over"),
420                                      parseSequenceString(""),
421                                      ShortcutGroup::Playing_Area)},
422         {"Player/aPeek", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Peek Card"),
423                                      parseSequenceString(""),
424                                      ShortcutGroup::Playing_Area)},
425         {"Player/aPlay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Play Card"),
426                                      parseSequenceString(""),
427                                      ShortcutGroup::Playing_Area)},
428         {"Player/aAttach", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Attach Card..."),
429                                        parseSequenceString("Ctrl+Alt+A"),
430                                        ShortcutGroup::Playing_Area)},
431         {"Player/aUnattach", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Unattach Card"),
432                                          parseSequenceString(""),
433                                          ShortcutGroup::Playing_Area)},
434         {"Player/aClone", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clone Card"),
435                                       parseSequenceString("Ctrl+J"),
436                                       ShortcutGroup::Playing_Area)},
437         {"Player/aCreateToken", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Create Token..."),
438                                             parseSequenceString("Ctrl+T"),
439                                             ShortcutGroup::Playing_Area)},
440         {"Player/aCreateRelatedTokens", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Create All Related Tokens"),
441                                                     parseSequenceString("Ctrl+Shift+T"),
442                                                     ShortcutGroup::Playing_Area)},
443         {"Player/aCreateAnotherToken", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Create Another Token"),
444                                                    parseSequenceString("Ctrl+G"),
445                                                    ShortcutGroup::Playing_Area)},
446         {"Player/aSetAnnotation", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Annotation..."),
447                                               parseSequenceString(""),
448                                               ShortcutGroup::Playing_Area)},
449         {"Player/aMoveToBottomLibrary", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Bottom of Library"),
450                                                     parseSequenceString(""),
451                                                     ShortcutGroup::Move_selected)},
452         {"Player/aMoveToExile", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"),
453                                             parseSequenceString(""),
454                                             ShortcutGroup::Move_selected)},
455         {"Player/aMoveToGraveyard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"),
456                                                 parseSequenceString("Ctrl+Del"),
457                                                 ShortcutGroup::Move_selected)},
458         {"Player/aMoveToHand",
459          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::Move_selected)},
460         {"Player/aMoveToTopLibrary", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Top of Library"),
461                                                  parseSequenceString(""),
462                                                  ShortcutGroup::Move_selected)},
463         {"Player/aPlayFacedown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield, Face Down"),
464                                              parseSequenceString(""),
465                                              ShortcutGroup::Move_selected)},
466         {"Player/aPlay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield"),
467                                      parseSequenceString(""),
468                                      ShortcutGroup::Move_selected)},
469         {"Player/aViewHand",
470          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::View)},
471         {"Player/aViewGraveyard",
472          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"), parseSequenceString("F4"), ShortcutGroup::View)},
473         {"Player/aViewLibrary",
474          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Library"), parseSequenceString("F3"), ShortcutGroup::View)},
475         {"Player/aViewRfg",
476          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"), parseSequenceString(""), ShortcutGroup::View)},
477         {"Player/aViewSideboard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Sideboard"),
478                                               parseSequenceString("Ctrl+F3"),
479                                               ShortcutGroup::View)},
480         {"Player/aViewTopCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Top Cards of Library"),
481                                              parseSequenceString("Ctrl+W"),
482                                              ShortcutGroup::View)},
483         {"Player/aCloseMostRecentZoneView", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Close Recent View"),
484                                                         parseSequenceString("Esc"),
485                                                         ShortcutGroup::View)},
486         {"Player/aMoveTopToPlay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Stack"),
487                                               parseSequenceString("Ctrl+Y"),
488                                               ShortcutGroup::Move_top)},
489         {"Player/aMoveTopToPlayFaceDown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield, Face Down"),
490                                                       parseSequenceString("Ctrl+Shift+E"),
491                                                       ShortcutGroup::Move_top)},
492         {"Player/aMoveTopCardToGraveyard",
493          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"), parseSequenceString(""), ShortcutGroup::Move_top)},
494         {"Player/aMoveTopCardsToGraveyard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard (Multiple)"),
495                                                         parseSequenceString("Ctrl+Shift+M"),
496                                                         ShortcutGroup::Move_top)},
497         {"Player/aMoveTopCardToExile",
498          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"), parseSequenceString(""), ShortcutGroup::Move_top)},
499         {"Player/aMoveTopCardsToExile", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile (Multiple)"),
500                                                     parseSequenceString(""),
501                                                     ShortcutGroup::Move_top)},
502         {"Player/aMoveTopCardToBottom", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Bottom of Library"),
503                                                     parseSequenceString(""),
504                                                     ShortcutGroup::Move_top)},
505         {"Player/aMoveBottomCardToGrave", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"),
506                                                       parseSequenceString(""),
507                                                       ShortcutGroup::Move_bottom)},
508         {"Player/aDrawArrow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw Arrow..."),
509                                           parseSequenceString(""),
510                                           ShortcutGroup::Gameplay)},
511         {"Player/aRemoveLocalArrows", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Local Arrows"),
512                                                   parseSequenceString("Ctrl+R"),
513                                                   ShortcutGroup::Gameplay)},
514         {"Player/aLeaveGame", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Leave Game"),
515                                           parseSequenceString("Ctrl+Q"),
516                                           ShortcutGroup::Gameplay)},
517         {"Player/aConcede",
518          ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Concede"), parseSequenceString("F2"), ShortcutGroup::Gameplay)},
519         {"Player/aRollDie", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Roll Dice..."),
520                                         parseSequenceString("Ctrl+I"),
521                                         ShortcutGroup::Gameplay)},
522         {"Player/aShuffle", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Library"),
523                                         parseSequenceString("Ctrl+S"),
524                                         ShortcutGroup::Gameplay)},
525         {"Player/aMulligan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Mulligan"),
526                                          parseSequenceString("Ctrl+M"),
527                                          ShortcutGroup::Drawing)},
528         {"Player/aDrawCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw a Card"),
529                                          parseSequenceString("Ctrl+D"),
530                                          ShortcutGroup::Drawing)},
531         {"Player/aDrawCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw Multiple Cards..."),
532                                           parseSequenceString("Ctrl+E"),
533                                           ShortcutGroup::Drawing)},
534         {"Player/aUndoDraw", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Undo Draw"),
535                                          parseSequenceString("Ctrl+Shift+D"),
536                                          ShortcutGroup::Drawing)},
537         {"Player/aAlwaysRevealTopCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Always Reveal Top Card"),
538                                                     parseSequenceString("Ctrl+N"),
539                                                     ShortcutGroup::Drawing)},
540         {"Player/aRotateViewCW", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Rotate View Clockwise"),
541                                              parseSequenceString(""),
542                                              ShortcutGroup::Gameplay)},
543         {"Player/aRotateViewCCW", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Rotate View Counterclockwise"),
544                                               parseSequenceString(""),
545                                               ShortcutGroup::Gameplay)},
546         {"Textbox/unfocusTextBox", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Unfocus Text Box"),
547                                                parseSequenceString("Esc"),
548                                                ShortcutGroup::Chat_room)},
549         {"tab_game/aFocusChat", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Focus Chat"),
550                                             parseSequenceString("Shift+Return"),
551                                             ShortcutGroup::Chat_room)},
552         {"tab_room/aClearChat", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clear Chat"),
553                                             parseSequenceString("F12"),
554                                             ShortcutGroup::Chat_room)},
555         {"Player/aResetLayout", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reset Layout"),
556                                             parseSequenceString(""),
557                                             ShortcutGroup::Game_window)},
558         {"DlgLoadDeckFromClipboard/refreshButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Refresh"),
559                                                                parseSequenceString("F5"),
560                                                                ShortcutGroup::Load_deck)}};
561 };
562 
563 #endif // SHORTCUTSSETTINGS_H
564