aboutsummaryrefslogtreecommitdiff
path: root/src/yuzu/configuration/config.cpp
diff options
context:
space:
mode:
authorAdityarup Laha <30696515+adityaruplaha@users.noreply.github.com>2019-02-16 16:19:29 +0100
committerfearlessTobi <thm.frey@gmail.com>2019-03-16 03:55:57 +0100
commit57a4a2ae0fc35906723ffc9f788f3cf7dd9c4ba5 (patch)
tree3ad8f3c6e2b2c26d10055e14be3197a932a48862 /src/yuzu/configuration/config.cpp
parent06ac6460d31036dddf7e4ae12355391035cc30ca (diff)
yuzu: Make hotkeys configurable via the GUI
* Adds a new Hotkeys tab in the Controls group. * Double-click a Hotkey to rebind it.
Diffstat (limited to 'src/yuzu/configuration/config.cpp')
-rw-r--r--src/yuzu/configuration/config.cpp59
1 files changed, 41 insertions, 18 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 4650f96a38..2e8ebfc128 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -2,6 +2,8 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
+#include <array>
+#include <QKeySequence>
#include <QSettings>
#include "common/file_util.h"
#include "configure_input_simple.h"
@@ -9,7 +11,6 @@
#include "core/hle/service/hid/controllers/npad.h"
#include "input_common/main.h"
#include "yuzu/configuration/config.h"
-#include "yuzu/ui_settings.h"
Config::Config() {
// TODO: Don't hardcode the path; let the frontend decide where to put the config files.
@@ -17,7 +18,6 @@ Config::Config() {
FileUtil::CreateFullPath(qt_config_loc);
qt_config =
std::make_unique<QSettings>(QString::fromStdString(qt_config_loc), QSettings::IniFormat);
-
Reload();
}
@@ -205,6 +205,27 @@ const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> Config::default
Qt::Key_Control, Qt::Key_Shift, Qt::Key_AltGr, Qt::Key_ApplicationRight,
};
+// This shouldn't have anything except static initializers (no functions). So
+// QKeySequnce(...).toString() is NOT ALLOWED HERE.
+// This must be in alphabetical order according to action name as it must have the same order as
+// UISetting::values.shortcuts, which is alphabetically ordered.
+const std::array<UISettings::Shortcut, 15> Config::default_hotkeys{
+ {{"Capture Screenshot", "Main Window", {"Ctrl+P", Qt::ApplicationShortcut}},
+ {"Continue/Pause Emulation", "Main Window", {"F4", Qt::WindowShortcut}},
+ {"Decrease Speed Limit", "Main Window", {"-", Qt::ApplicationShortcut}},
+ {"Exit yuzu", "Main Window", {"Ctrl+Q", Qt::WindowShortcut}},
+ {"Exit Fullscreen", "Main Window", {"Esc", Qt::WindowShortcut}},
+ {"Fullscreen", "Main Window", {"F11", Qt::WindowShortcut}},
+ {"Increase Speed Limit", "Main Window", {"+", Qt::ApplicationShortcut}},
+ {"Load Amiibo", "Main Window", {"F2", Qt::ApplicationShortcut}},
+ {"Load File", "Main Window", {"Ctrl+O", Qt::WindowShortcut}},
+ {"Restart Emulation", "Main Window", {"F6", Qt::WindowShortcut}},
+ {"Stop Emulation", "Main Window", {"F5", Qt::WindowShortcut}},
+ {"Toggle Filter Bar", "Main Window", {"Ctrl+F", Qt::WindowShortcut}},
+ {"Toggle Speed Limit", "Main Window", {"Ctrl+Z", Qt::ApplicationShortcut}},
+ {"Toggle Status Bar", "Main Window", {"Ctrl+S", Qt::WindowShortcut}},
+ {"Change Docked Mode", "Main Window", {"F10", Qt::ApplicationShortcut}}}};
+
void Config::ReadPlayerValues() {
for (std::size_t p = 0; p < Settings::values.players.size(); ++p) {
auto& player = Settings::values.players[p];
@@ -509,20 +530,15 @@ void Config::ReadValues() {
qt_config->endGroup();
qt_config->beginGroup("Shortcuts");
- QStringList groups = qt_config->childGroups();
- for (auto group : groups) {
+ for (auto [name, group, shortcut] : default_hotkeys) {
+ auto [keyseq, context] = shortcut;
qt_config->beginGroup(group);
-
- QStringList hotkeys = qt_config->childGroups();
- for (auto hotkey : hotkeys) {
- qt_config->beginGroup(hotkey);
- UISettings::values.shortcuts.emplace_back(UISettings::Shortcut(
- group + "/" + hotkey,
- UISettings::ContextualShortcut(ReadSetting("KeySeq").toString(),
- ReadSetting("Context").toInt())));
- qt_config->endGroup();
- }
-
+ qt_config->beginGroup(name);
+ UISettings::values.shortcuts.push_back(
+ {name,
+ group,
+ {ReadSetting("KeySeq", keyseq).toString(), ReadSetting("Context", context).toInt()}});
+ qt_config->endGroup();
qt_config->endGroup();
}
qt_config->endGroup();
@@ -760,9 +776,16 @@ void Config::SaveValues() {
qt_config->endGroup();
qt_config->beginGroup("Shortcuts");
- for (auto shortcut : UISettings::values.shortcuts) {
- WriteSetting(shortcut.first + "/KeySeq", shortcut.second.first);
- WriteSetting(shortcut.first + "/Context", shortcut.second.second);
+ // Lengths of UISettings::values.shortcuts & default_hotkeys are same.
+ // However, their ordering must also be the same.
+ for (std::size_t i = 0; i < default_hotkeys.size(); i++) {
+ auto [name, group, shortcut] = UISettings::values.shortcuts[i];
+ qt_config->beginGroup(group);
+ qt_config->beginGroup(name);
+ WriteSetting("KeySeq", shortcut.first, default_hotkeys[i].shortcut.first);
+ WriteSetting("Context", shortcut.second, default_hotkeys[i].shortcut.second);
+ qt_config->endGroup();
+ qt_config->endGroup();
}
qt_config->endGroup();