Cockatrice 2026-06-27-Development-3.1.0-beta.3
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
shortcuts_settings.h
Go to the documentation of this file.
1
6
7#ifndef SHORTCUTSSETTINGS_H
8#define SHORTCUTSSETTINGS_H
9
10#include <QApplication>
11#include <QKeySequence>
12#include <QLoggingCategory>
13#include <QSettings>
14
15inline Q_LOGGING_CATEGORY(ShortcutsSettingsLog, "shortcuts_settings");
16
18{
19public:
43
44 static QString getGroupName(ShortcutGroup::Groups group)
45 {
46 switch (group) {
47 case Main_Window:
48 return QApplication::translate("shortcutsTab", "Main Window");
49 case Deck_Editor:
50 return QApplication::translate("shortcutsTab", "Deck Editor");
51 case Game_Lobby:
52 return QApplication::translate("shortcutsTab", "Game Lobby");
53 case Card_Counters:
54 return QApplication::translate("shortcutsTab", "Card Counters");
55 case Player_Counters:
56 return QApplication::translate("shortcutsTab", "Player Counters");
57 case Power_Toughness:
58 return QApplication::translate("shortcutsTab", "Power and Toughness");
59 case Game_Phases:
60 return QApplication::translate("shortcutsTab", "Game Phases");
61 case Playing_Area:
62 return QApplication::translate("shortcutsTab", "Playing Area");
63 case Move_selected:
64 return QApplication::translate("shortcutsTab", "Move Selected Card");
65 case View:
66 return QApplication::translate("shortcutsTab", "View");
67 case Move_top:
68 return QApplication::translate("shortcutsTab", "Move Top Card");
69 case Move_bottom:
70 return QApplication::translate("shortcutsTab", "Move Bottom Card");
71 case Gameplay:
72 return QApplication::translate("shortcutsTab", "Gameplay");
73 case Drawing:
74 return QApplication::translate("shortcutsTab", "Drawing");
75 case Hand:
76 return QApplication::translate("shortcutsTab", "Hand");
77 case Chat_room:
78 return QApplication::translate("shortcutsTab", "Chat Room");
79 case Game_window:
80 return QApplication::translate("shortcutsTab", "Game Window");
81 case Load_deck:
82 return QApplication::translate("shortcutsTab", "Load Deck from Clipboard");
83 case Replays:
84 return QApplication::translate("shortcutsTab", "Replays");
85 case Tabs:
86 return QApplication::translate("shortcutsTab", "Tabs");
87 }
88
89 return {};
90 }
91};
92
93class ShortcutKey : public QList<QKeySequence>
94{
95public:
96 explicit ShortcutKey(const QString &_name = QString(),
97 QList _sequence = QList(),
99 void setSequence(const QList &_sequence)
100 {
101 QList::operator=(_sequence);
102 }
103 [[nodiscard]] QString getName() const
104 {
105 return QApplication::translate("shortcutsTab", name.toUtf8().data());
106 }
107 [[nodiscard]] QString getGroupName() const
108 {
110 }
111
112private:
113 QString name;
115};
116
117class ShortcutsSettings : public QObject
118{
119 Q_OBJECT
120public:
121 explicit ShortcutsSettings(const QString &settingsFilePath, QObject *parent = nullptr);
122
123 [[nodiscard]] ShortcutKey getDefaultShortcut(const QString &name) const;
124 [[nodiscard]] ShortcutKey getShortcut(const QString &name) const;
125 [[nodiscard]] QKeySequence getSingleShortcut(const QString &name) const;
126 [[nodiscard]] QString getDefaultShortcutString(const QString &name) const;
127 [[nodiscard]] QString getShortcutString(const QString &name) const;
128 [[nodiscard]] QString getShortcutFriendlyName(const QString &shortcutName) const;
129 [[nodiscard]] QList<QString> getAllShortcutKeys() const
130 {
131 return shortCuts.keys();
132 }
133
134 void setShortcuts(const QString &name, const QList<QKeySequence> &Sequence);
135 void setShortcuts(const QString &name, const QKeySequence &Sequence);
136 void setShortcuts(const QString &name, const QString &sequences);
137
138 [[nodiscard]] bool isKeyAllowed(const QString &name, const QString &sequences) const;
139 [[nodiscard]] bool isValid(const QString &name, const QString &sequences) const;
140 [[nodiscard]] QStringList findOverlaps(const QString &name, const QString &sequences) const;
141
142 void resetAllShortcuts();
143 void clearAllShortcuts();
144 void migrateShortcuts();
145
146signals:
148
149private:
150 const QChar sep = ';';
151 const QString custom = "Custom"; // name of custom group in shortCutsFile
153 QHash<QString, ShortcutKey> shortCuts;
154
155 [[nodiscard]] QString stringifySequence(const QList<QKeySequence> &Sequence) const;
156 [[nodiscard]] QList<QKeySequence> parseSequenceString(const QString &stringSequence) const;
157
158 const QHash<QString, ShortcutKey> defaultShortCuts = {
159 {"MainWindow/aCheckCardUpdates", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Check for Card Updates..."),
162 {"MainWindow/aConnect", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Connect..."),
163 parseSequenceString("Ctrl+L"),
165 {"MainWindow/aDisconnect", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Disconnect"),
168 {"MainWindow/aExit",
169 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exit"), parseSequenceString(""), ShortcutGroup::Main_Window)},
170 {"MainWindow/aFullScreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Full screen"),
171 parseSequenceString("Ctrl+F"),
173 {"MainWindow/aRegister", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Register..."),
176 {"MainWindow/aSettings", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Settings..."),
177 parseSequenceString("Ctrl+Shift+P"),
179 {"MainWindow/aSinglePlayer", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Start a Local Game..."),
180 parseSequenceString("Ctrl+Shift+L"),
182 {"MainWindow/aWatchReplay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Watch Replay..."),
185 {"MainWindow/aStatusBar", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Show Status Bar"),
188 {"TabDeckEditor/aAnalyzeDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Analyze Deck (deckstats.net)"),
191 {"TabDeckEditor/aAnalyzeDeckTappedout",
192 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Analyze Deck (tappedout.net)"),
195 {"TabDeckEditor/aClearFilterAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clear All Filters"),
198 {"TabDeckEditor/aClearFilterOne", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clear Selected Filter"),
201 {"TabDeckEditor/aClose",
202 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Close"), parseSequenceString(""), ShortcutGroup::Deck_Editor)},
203 {"TabDeckEditor/aDecrement", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card"),
206 {"TabDeckEditor/aManageSets", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Manage Sets..."),
209 {"TabDeckEditor/aEditTokens", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Edit Custom Tokens..."),
212 {"TabDeckEditor/aExportDeckDecklist",
213 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Export Deck (decklist.org)"),
216 {"TabDeckEditor/aExportDeckDecklistXyz",
217 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Export Deck (decklist.xyz)"),
220 {"TabDeckEditor/aIncrement", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card"),
223 {"TabDeckEditor/aLoadDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Deck..."),
224 parseSequenceString("Ctrl+O"),
226 {"TabDeckEditor/aLoadDeckFromWebsite",
227 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load deck from online service..."),
228 parseSequenceString("Ctrl+Shift+O"),
230 {"TabDeckEditor/aLoadDeckFromClipboard",
231 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Deck from Clipboard..."),
232 parseSequenceString("Ctrl+Shift+V"),
234 {"TabDeckEditor/aEditDeckInClipboard",
235 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Edit Deck in Clipboard, Annotated"),
238 {"TabDeckEditor/aEditDeckInClipboardRaw",
239 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Edit Deck in Clipboard"),
242 {"TabDeckEditor/aNewDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "New Deck"),
243 parseSequenceString("Ctrl+N"),
245 {"TabDeckEditor/aOpenCustomFolder",
246 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Open Custom Pictures Folder"),
249 {"TabDeckEditor/aPrintDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Print Deck..."),
250 parseSequenceString("Ctrl+P"),
252 {"TabDeckEditor/aRemoveCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Delete Card"),
255 {"TabDeckEditor/aResetLayout", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reset Layout"),
258 {"TabDeckEditor/aSaveDeck", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck"),
259 parseSequenceString("Ctrl+S"),
261 {"TabDeckEditor/aSaveDeckAs", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck as..."),
262 parseSequenceString("Ctrl+Shift+S"),
264 {"TabDeckEditor/aSaveDeckToClipboard",
265 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated"),
266 parseSequenceString("Ctrl+Shift+C"),
268 {"TabDeckEditor/aSaveDeckToClipboardNoSetInfo",
269 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated (No Set Info)"),
272 {"TabDeckEditor/aSaveDeckToClipboardRaw",
273 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard"),
274 parseSequenceString("Ctrl+Shift+R"),
276 {"TabDeckEditor/aSaveDeckToClipboardRawNoSetInfo",
277 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard (No Set Info)"),
280 {"DeckViewContainer/loadLocalButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Local Deck..."),
281 parseSequenceString("Ctrl+O"),
283 {"DeckViewContainer/loadRemoteButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Remote Deck..."),
284 parseSequenceString("Ctrl+Alt+O"),
286 {"DeckViewContainer/loadFromClipboardButton",
287 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Deck from Clipboard..."),
288 parseSequenceString("Ctrl+Shift+V"),
290 {"DeckViewContainer/loadFromWebsiteButton",
291 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load from website..."),
292 parseSequenceString("Ctrl+Shift+O"),
294 {"DeckViewContainer/unloadDeckButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Unload Deck"),
295 parseSequenceString("Ctrl+Alt+U"),
297 {"DeckViewContainer/readyStartButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Ready to Start"),
298 parseSequenceString("Ctrl+Shift+S"),
300 {"DeckViewContainer/sideboardLockButton",
301 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Toggle Sideboard Lock"),
302 parseSequenceString("Ctrl+Shift+B"),
304 {"DeckViewContainer/forceStartGameButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Force Start"),
307 {"Player/aCCMagenta", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card Counter (F)"),
310 {"Player/aRCMagenta", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card Counter (F)"),
313 {"Player/aSCMagenta", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Card Counters (F)..."),
316 {"Player/aCCPurple", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card Counter (E)"),
319 {"Player/aRCPurple", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card Counter (E)"),
322 {"Player/aSCPurple", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Card Counters (E)..."),
325 {"Player/aCCCyan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card Counter(D)"),
328 {"Player/aRCCyan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card Counter (D)"),
331 {"Player/aSCCyan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Card Counters (D)..."),
334 {"Player/aCCGreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card Counter (C)"),
335 parseSequenceString("Ctrl+>"),
337 {"Player/aRCGreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card Counter (C)"),
338 parseSequenceString("Ctrl+<"),
340 {"Player/aSCGreen", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Card Counters (C)..."),
341 parseSequenceString("Ctrl+?"),
343 {"Player/aCCYellow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card Counter (B)"),
344 parseSequenceString("Ctrl+."),
346 {"Player/aRCYellow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card Counter (B)"),
347 parseSequenceString("Ctrl+,"),
349 {"Player/aSCYellow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Card Counters (B)..."),
350 parseSequenceString("Ctrl+/"),
352 {"Player/aCCRed", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Card Counter (A)"),
353 parseSequenceString("Alt+."),
355 {"Player/aRCRed", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Card Counter (A)"),
356 parseSequenceString("Alt+,"),
358 {"Player/aSCRed", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Card Counters (A)..."),
359 parseSequenceString("Alt+/"),
361 {"Player/aInc", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Life Counter"),
362 parseSequenceString("F12"),
364 {"Player/aDec", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Life Counter"),
365 parseSequenceString("F11"),
367 {"Player/aSet", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Life Counters..."),
368 parseSequenceString("Ctrl+L"),
370 {"Player/aIncCounter_w", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add White Counter"),
373 {"Player/aDecCounter_w", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove White Counter"),
376 {"Player/aSetCounter_w", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set White Counters..."),
379 {"Player/aIncCounter_u", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Blue Counter"),
382 {"Player/aDecCounter_u", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Blue Counter"),
385 {"Player/aSetCounter_u", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Blue Counters..."),
388 {"Player/aIncCounter_b", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Black Counter"),
391 {"Player/aDecCounter_b", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Black Counter"),
394 {"Player/aSetCounter_b", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Black Counters..."),
397 {"Player/aIncCounter_r", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Red Counter"),
400 {"Player/aDecCounter_r", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Red Counter"),
403 {"Player/aSetCounter_r", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Red Counters..."),
406 {"Player/aIncCounter_g", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Green Counter"),
409 {"Player/aDecCounter_g", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Green Counter"),
412 {"Player/aSetCounter_g", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Green Counters..."),
415 {"Player/aIncCounter_x", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Colorless Counter"),
418 {"Player/aDecCounter_x", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Colorless Counter"),
421 {"Player/aSetCounter_x", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Colorless Counters..."),
424 {"Player/aIncCounter_storm", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Other Counter"),
425 parseSequenceString("Ctrl+]"),
427 {"Player/aDecCounter_storm", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Other Counter"),
428 parseSequenceString("Ctrl+["),
430 {"Player/aSetCounter_storm", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Other Counters..."),
431 parseSequenceString("Ctrl+\\"),
433 {"Player/aIncrementAllCardCounters",
434 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Increment all card counters"),
435 parseSequenceString("Ctrl+Shift+A"),
437 {"Player/aIncP", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Power (+1/+0)"),
438 parseSequenceString("Ctrl++;Ctrl+="),
440 {"Player/aDecP", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Power (-1/-0)"),
441 parseSequenceString("Ctrl+-"),
443 {"Player/aFlowP", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Move Toughness to Power (+1/-1)"),
446 {"Player/aIncT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Toughness (+0/+1)"),
447 parseSequenceString("Alt++;Alt+="),
449 {"Player/aDecT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Toughness (-0/-1)"),
450 parseSequenceString("Alt+-"),
452 {"Player/aFlowT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Move Power to Toughness (-1/+1)"),
455 {"Player/aIncPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Add Power and Toughness (+1/+1)"),
456 parseSequenceString("Ctrl+Alt++;Ctrl+Alt+="),
458 {"Player/aDecPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Power and Toughness (-1/-1)"),
459 parseSequenceString("Ctrl+Alt+-"),
461 {"Player/aSetPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Power and Toughness..."),
462 parseSequenceString("Ctrl+P"),
464 {"Player/aResetPT", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reset Power and Toughness"),
465 parseSequenceString("Ctrl+Alt+0"),
467 {"Player/phase0", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Untap"),
470 {"Player/phase1",
471 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Upkeep"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
472 {"Player/phase2",
473 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw"), parseSequenceString("F6"), ShortcutGroup::Game_Phases)},
474 {"Player/phase3", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "First Main Phase"),
477 {"Player/phase4", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Start Combat"),
480 {"Player/phase5",
481 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Attack"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
482 {"Player/phase6",
483 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Block"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
484 {"Player/phase7",
485 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Damage"), parseSequenceString(""), ShortcutGroup::Game_Phases)},
486 {"Player/phase8", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "End Combat"),
489 {"Player/phase9", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Second Main Phase"),
492 {"Player/phase10",
493 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "End"), parseSequenceString("F10"), ShortcutGroup::Game_Phases)},
494 {"Player/aNextPhase", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Next Phase"),
495 parseSequenceString("Ctrl+Space;Tab"),
497 {"Player/aNextPhaseAction", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Next Phase Action"),
498 parseSequenceString("Shift+Tab"),
500 {"Player/aNextTurn", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Next Turn"),
501 parseSequenceString("Ctrl+Return;Ctrl+Enter"),
503 {"Player/aHide", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hide Card in Reveal Window"),
504 parseSequenceString("Alt+H"),
506 {"Player/aTap", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Tap / Untap Card"),
509 {"Player/aUntapAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Untap All"),
510 parseSequenceString("Ctrl+U"),
512 {"Player/aDoesntUntap", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Toggle Skip Untapping"),
513 parseSequenceString("Alt+U"),
515 {"Player/aFlip", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Turn Card Over"),
516 parseSequenceString("Alt+F"),
518 {"Player/aPeek", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Peek Card"),
519 parseSequenceString("Alt+L"),
521 {"Player/aPlay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Play Card"),
524 {"Player/aPlayFacedown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Play Card, Face Down"),
527 {"Player/aAttach", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Attach Card..."),
528 parseSequenceString("Ctrl+Alt+A"),
530 {"Player/aUnattach", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Unattach Card"),
531 parseSequenceString("Ctrl+Alt+U"),
533 {"Player/aClone", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clone Card"),
534 parseSequenceString("Ctrl+J"),
536 {"Player/aCreateToken", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Create Token..."),
537 parseSequenceString("Ctrl+T"),
539 {"Player/aCreateRelatedTokens", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Create All Related Tokens"),
540 parseSequenceString("Ctrl+Shift+T"),
542 {"Player/aCreateAnotherToken", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Create Another Token"),
543 parseSequenceString("Ctrl+G"),
545 {"Player/aSetAnnotation", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Set Annotation..."),
546 parseSequenceString("Alt+N"),
548 {"Player/aReduceLifeByPower", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reduce Life by Power"),
549 parseSequenceString("Ctrl+Shift+L"),
551 {"Player/aSelectAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Select All Cards in Zone"),
552 parseSequenceString("Ctrl+A"),
554 {"Player/aSelectRow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Select All Cards in Row"),
555 parseSequenceString("Ctrl+Shift+X"),
557 {"Player/aSelectColumn", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Select All Cards in Column"),
558 parseSequenceString("Ctrl+Shift+C"),
560 {"Player/aRevealToAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reveal Selected Cards to All Players"),
563 {"Player/aMoveToBottomLibrary", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Bottom of Library"),
564 parseSequenceString("Ctrl+B"),
566 {"Player/aMoveToExile", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"),
569 {"Player/aMoveToGraveyard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"),
570 parseSequenceString("Ctrl+Del"),
572 {"Player/aMoveToHand",
573 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::Move_selected)},
574 {"Player/aMoveToTopLibrary", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Top of Library"),
577 {"Player/aMoveToTable", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield"),
580 {"Player/aViewHand",
581 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::View)},
582 {"Player/aViewGraveyard",
583 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"), parseSequenceString("F4"), ShortcutGroup::View)},
584 {"Player/aViewLibrary",
585 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Library"), parseSequenceString("F3"), ShortcutGroup::View)},
586 {"Player/aViewRfg",
587 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"), parseSequenceString(""), ShortcutGroup::View)},
588 {"Player/aViewSideboard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Sideboard"),
589 parseSequenceString("Ctrl+F3"),
591 {"Player/aViewTopCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Top Cards of Library"),
592 parseSequenceString("Ctrl+W"),
594 {"Player/aViewBottomCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Bottom Cards of Library"),
595 parseSequenceString("Ctrl+Shift+W"),
597 {"Player/aCloseMostRecentZoneView", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Close Recent View"),
598 parseSequenceString("Esc"),
600 {"Player/aMoveTopToPlay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Stack"),
601 parseSequenceString("Ctrl+Y"),
603 {"Player/aMoveTopToPlayFaceDown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield, Face Down"),
604 parseSequenceString("Ctrl+Shift+E"),
606 {"Player/aMoveTopCardToGraveyard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"),
607 parseSequenceString("Alt+Y"),
609 {"Player/aMoveTopCardsToGraveyard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard (Multiple)"),
610 parseSequenceString("Alt+M"),
612 {"Player/aMoveTopCardsToGraveyardFaceDown",
613 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard (Multiple), Face Down"),
616 {"Player/aMoveTopCardToExile",
617 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"), parseSequenceString(""), ShortcutGroup::Move_top)},
618 {"Player/aMoveTopCardsToExile", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile (Multiple)"),
621 {"Player/aMoveTopCardsToExileFaceDown",
622 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile (Multiple), Face Down"),
625 {"Player/aMoveTopCardsUntil", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Stack Until Found"),
626 parseSequenceString("Ctrl+Shift+Y"),
628 {"Player/aMoveTopCardToBottom", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Bottom of Library"),
631 {"Player/aMoveBottomToPlay",
632 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Stack"), parseSequenceString(""), ShortcutGroup::Move_bottom)},
633 {"Player/aMoveBottomToPlayFaceDown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield, Face Down"),
636 {"Player/aMoveBottomCardToGrave", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"),
639 {"Player/aMoveBottomCardsToGrave", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard (Multiple)"),
642 {"Player/aMoveBottomCardsToGraveFaceDown",
643 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard (Multiple), Face Down"),
646 {"Player/aMoveBottomCardToExile",
647 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile"), parseSequenceString(""), ShortcutGroup::Move_bottom)},
648 {"Player/aMoveBottomCardsToExile", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile (Multiple)"),
651 {"Player/aMoveBottomCardsToExileFaceDown",
652 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Exile (Multiple), Face Down"),
655 {"Player/aMoveBottomCardToTop", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Top of Library"),
658 {"Player/aDrawBottomCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw Bottom Card"),
661 {"Player/aDrawBottomCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw Multiple Cards from Bottom..."),
664 {"Player/aDrawArrow", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw Arrow..."),
665 parseSequenceString("Alt+A"),
667 {"Player/aRemoveLocalArrows", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Remove Local Arrows"),
668 parseSequenceString("Ctrl+R"),
670 {"Player/aLeaveGame", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Leave Game"),
671 parseSequenceString("Ctrl+Q"),
673 {"Player/aConcede",
674 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Concede"), parseSequenceString("F2"), ShortcutGroup::Gameplay)},
675 {"Player/aRollDie", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Roll Dice..."),
676 parseSequenceString("Ctrl+I"),
678 {"Player/aFlipCoin", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Flip Coin"),
679 parseSequenceString("Ctrl+Shift+I"),
681 {"Player/aShuffle", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Library"),
682 parseSequenceString("Ctrl+S"),
684 {"Player/aShuffleTopCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Top Cards of Library"),
687 {"Player/aShuffleBottomCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Bottom Cards of Library"),
690 {"Player/aMulligan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Mulligan"),
691 parseSequenceString("Ctrl+M"),
693 {"Player/aMulliganSame", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Mulligan (Same hand size)"),
694 parseSequenceString("Ctrl+Shift+M"),
696 {"Player/aMulliganMinusOne", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Mulligan (Hand size - 1)"),
697 parseSequenceString("Ctrl+Shift+Alt+M"),
699 {"Player/aDrawCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw a Card"),
700 parseSequenceString("Ctrl+D"),
702 {"Player/aDrawCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Draw Multiple Cards..."),
703 parseSequenceString("Ctrl+E"),
705 {"Player/aUndoDraw", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Undo Draw"),
706 parseSequenceString("Ctrl+Shift+D"),
708 {"Player/aAlwaysRevealTopCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Always Reveal Top Card"),
709 parseSequenceString("Ctrl+N"),
711 {"Player/aAlwaysLookAtTopCard", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Always Look At Top Card"),
712 parseSequenceString("Ctrl+Shift+N"),
714 {"Player/aSortHandByName", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Sort Hand by Name"),
717 {"Player/aSortHandByType", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Sort Hand by Type"),
718 parseSequenceString("Ctrl+Shift+H"),
720 {"Player/aSortHandByManaValue", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Sort Hand by Mana Value"),
723 {"Player/aRevealHandToAll", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reveal Hand to All Players"),
726 {"Player/aRevealRandomHandCardToAll",
727 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reveal Random Card to All Players"),
730 {"Player/aRotateViewCW", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Rotate View Clockwise"),
733 {"Player/aRotateViewCCW", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Rotate View Counterclockwise"),
736 {"Player/unfocusTextBox", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Unfocus Text Box"),
737 parseSequenceString("Esc"),
739 {"Player/aFocusChat", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Focus Chat"),
740 parseSequenceString("Shift+Return"),
742 {"tab_room/aClearChat", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Clear Chat"),
743 parseSequenceString("F12"),
745 {"Player/aResetLayout", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Reset Layout"),
748 {"DlgLoadDeckFromClipboard/refreshButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Refresh"),
751 {"Replays/aSkipForward", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Skip Forward"),
752 parseSequenceString("Right"),
754 {"Replays/aSkipBackward", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Skip Backward"),
755 parseSequenceString("Left"),
757 {"Replays/aSkipForwardBig", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Skip Forward by a lot"),
758 parseSequenceString("Ctrl+Right"),
760 {"Replays/aSkipBackwardBig", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Skip Backward by a lot"),
761 parseSequenceString("Ctrl+Left"),
763 {"Replays/playButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Play/Pause"),
764 parseSequenceString("Space"),
766 {"Replays/fastForwardButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Toggle Fast Forward"),
767 parseSequenceString("Ctrl+P"),
769 {"Tabs/aTabDeckEditor",
770 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Deck Editor"), parseSequenceString(""), ShortcutGroup::Tabs)},
771 {"Tabs/aTabHome",
772 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Home"), parseSequenceString(""), ShortcutGroup::Tabs)},
773 {"Tabs/aTabVisualDeckStorage", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Visual Deck Storage"),
776 {"Tabs/aTabDeckStorage",
777 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Deck Storage"), parseSequenceString(""), ShortcutGroup::Tabs)},
778 {"Tabs/aTabReplays",
779 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Replays"), parseSequenceString(""), ShortcutGroup::Tabs)},
780 {"Tabs/aTabServer",
781 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Server"), parseSequenceString(""), ShortcutGroup::Tabs)},
782 {"Tabs/aTabAccount",
783 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Account"), parseSequenceString(""), ShortcutGroup::Tabs)},
784 {"Tabs/aTabAdmin", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Administration"),
787 {"Tabs/aTabLogs",
788 ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Logs"), parseSequenceString(""), ShortcutGroup::Tabs)},
789 };
790};
791
792#endif // SHORTCUTSSETTINGS_H
Definition shortcuts_settings.h:18
static QString getGroupName(ShortcutGroup::Groups group)
Definition shortcuts_settings.h:44
Groups
Definition shortcuts_settings.h:21
@ Game_Lobby
Definition shortcuts_settings.h:24
@ Tabs
Definition shortcuts_settings.h:41
@ Card_Counters
Definition shortcuts_settings.h:25
@ Gameplay
Definition shortcuts_settings.h:34
@ Player_Counters
Definition shortcuts_settings.h:26
@ Move_selected
Definition shortcuts_settings.h:30
@ View
Definition shortcuts_settings.h:31
@ Move_top
Definition shortcuts_settings.h:32
@ Playing_Area
Definition shortcuts_settings.h:29
@ Hand
Definition shortcuts_settings.h:36
@ Game_window
Definition shortcuts_settings.h:38
@ Deck_Editor
Definition shortcuts_settings.h:23
@ Main_Window
Definition shortcuts_settings.h:22
@ Drawing
Definition shortcuts_settings.h:35
@ Replays
Definition shortcuts_settings.h:40
@ Power_Toughness
Definition shortcuts_settings.h:27
@ Chat_room
Definition shortcuts_settings.h:37
@ Game_Phases
Definition shortcuts_settings.h:28
@ Move_bottom
Definition shortcuts_settings.h:33
@ Load_deck
Definition shortcuts_settings.h:39
Definition shortcuts_settings.h:94
void setSequence(const QList &_sequence)
Definition shortcuts_settings.h:99
QString getGroupName() const
Definition shortcuts_settings.h:107
QString name
Definition shortcuts_settings.h:113
ShortcutKey(const QString &_name=QString(), QList _sequence=QList(), ShortcutGroup::Groups _group=ShortcutGroup::Main_Window)
Definition shortcuts_settings.cpp:9
QString getName() const
Definition shortcuts_settings.h:103
ShortcutGroup::Groups group
Definition shortcuts_settings.h:114
void resetAllShortcuts()
Definition shortcuts_settings.cpp:197
void migrateShortcuts()
Migrates legacy shortcut key names to current naming scheme.
Definition shortcuts_settings.cpp:74
ShortcutKey getDefaultShortcut(const QString &name) const
Definition shortcuts_settings.cpp:109
ShortcutsSettings(const QString &settingsFilePath, QObject *parent=nullptr)
Definition shortcuts_settings.cpp:14
bool isValid(const QString &name, const QString &sequences) const
Definition shortcuts_settings.cpp:239
QString settingsFilePath
Definition shortcuts_settings.h:152
QString getShortcutFriendlyName(const QString &shortcutName) const
Definition shortcuts_settings.cpp:145
bool isKeyAllowed(const QString &name, const QString &sequences) const
Definition shortcuts_settings.cpp:219
QList< QString > getAllShortcutKeys() const
Definition shortcuts_settings.h:129
void clearAllShortcuts()
Definition shortcuts_settings.cpp:207
QKeySequence getSingleShortcut(const QString &name) const
Definition shortcuts_settings.cpp:130
QStringList findOverlaps(const QString &name, const QString &sequences) const
Definition shortcuts_settings.cpp:250
QHash< QString, ShortcutKey > shortCuts
Definition shortcuts_settings.h:153
void setShortcuts(const QString &name, const QList< QKeySequence > &Sequence)
Definition shortcuts_settings.cpp:176
const QString custom
Definition shortcuts_settings.h:151
QString getDefaultShortcutString(const QString &name) const
Definition shortcuts_settings.cpp:135
const QHash< QString, ShortcutKey > defaultShortCuts
Definition shortcuts_settings.h:158
QString getShortcutString(const QString &name) const
Definition shortcuts_settings.cpp:140
ShortcutKey getShortcut(const QString &name) const
Definition shortcuts_settings.cpp:114
QString stringifySequence(const QList< QKeySequence > &Sequence) const
Definition shortcuts_settings.cpp:156
QList< QKeySequence > parseSequenceString(const QString &stringSequence) const
Definition shortcuts_settings.cpp:166
const QChar sep
Definition shortcuts_settings.h:150
Q_LOGGING_CATEGORY(ShortcutsSettingsLog, "shortcuts_settings")