diff options
Diffstat (limited to 'src/yuzu')
-rw-r--r-- | src/yuzu/configuration/configure_hotkeys.cpp | 41 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_hotkeys.h | 13 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_ui.cpp | 78 | ||||
-rw-r--r-- | src/yuzu/hotkeys.cpp | 3 |
4 files changed, 46 insertions, 89 deletions
diff --git a/src/yuzu/configuration/configure_hotkeys.cpp b/src/yuzu/configuration/configure_hotkeys.cpp index 3d18670ce..3f68de12d 100644 --- a/src/yuzu/configuration/configure_hotkeys.cpp +++ b/src/yuzu/configuration/configure_hotkeys.cpp @@ -45,15 +45,23 @@ ConfigureHotkeys::ConfigureHotkeys(Core::HID::HIDCore& hid_core, QWidget* parent controller = hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1); - connect(timeout_timer.get(), &QTimer::timeout, [this] { SetPollingResult({}, true); }); + connect(timeout_timer.get(), &QTimer::timeout, [this] { + const bool is_button_pressed = pressed_buttons != Core::HID::NpadButton::None || + pressed_home_button || pressed_capture_button; + SetPollingResult(!is_button_pressed); + }); connect(poll_timer.get(), &QTimer::timeout, [this] { - const auto buttons = controller->GetNpadButtons(); - const auto home_pressed = controller->GetHomeButtons().home != 0; - const auto capture_pressed = controller->GetCaptureButtons().capture != 0; - if (home_pressed || capture_pressed) { - SetPollingResult(buttons.raw, false); - return; + pressed_buttons |= controller->GetNpadButtons().raw; + pressed_home_button |= this->controller->GetHomeButtons().home != 0; + pressed_capture_button |= this->controller->GetCaptureButtons().capture != 0; + if (pressed_buttons != Core::HID::NpadButton::None || pressed_home_button || + pressed_capture_button) { + const QString button_name = + GetButtonCombinationName(pressed_buttons, pressed_home_button, + pressed_capture_button) + + QStringLiteral("..."); + model->setData(button_model_index, button_name); } }); RetranslateUI(); @@ -154,16 +162,14 @@ void ConfigureHotkeys::ConfigureController(QModelIndex index) { const auto previous_key = model->data(index); - input_setter = [this, index, previous_key](const Core::HID::NpadButton button, - const bool cancel) { + input_setter = [this, index, previous_key](const bool cancel) { if (cancel) { model->setData(index, previous_key); return; } - const auto home_pressed = this->controller->GetHomeButtons().home != 0; - const auto capture_pressed = this->controller->GetCaptureButtons().capture != 0; + const QString button_string = - GetButtonCombinationName(button, home_pressed, capture_pressed); + GetButtonCombinationName(pressed_buttons, pressed_home_button, pressed_capture_button); const auto [key_sequence_used, used_action] = IsUsedControllerKey(button_string); @@ -177,17 +183,22 @@ void ConfigureHotkeys::ConfigureController(QModelIndex index) { } }; + button_model_index = index; + pressed_buttons = Core::HID::NpadButton::None; + pressed_home_button = false; + pressed_capture_button = false; + model->setData(index, tr("[waiting]")); timeout_timer->start(2500); // Cancel after 2.5 seconds - poll_timer->start(200); // Check for new inputs every 200ms + poll_timer->start(100); // Check for new inputs every 100ms // We need to disable configuration to be able to read npad buttons controller->DisableConfiguration(); } -void ConfigureHotkeys::SetPollingResult(Core::HID::NpadButton button, const bool cancel) { +void ConfigureHotkeys::SetPollingResult(const bool cancel) { timeout_timer->stop(); poll_timer->stop(); - (*input_setter)(button, cancel); + (*input_setter)(cancel); // Re-Enable configuration controller->EnableConfiguration(); diff --git a/src/yuzu/configuration/configure_hotkeys.h b/src/yuzu/configuration/configure_hotkeys.h index 5fd1bcbfe..20ea3b515 100644 --- a/src/yuzu/configuration/configure_hotkeys.h +++ b/src/yuzu/configuration/configure_hotkeys.h @@ -4,6 +4,7 @@ #pragma once #include <memory> +#include <QStandardItemModel> #include <QWidget> namespace Common { @@ -54,14 +55,20 @@ private: void RestoreControllerHotkey(QModelIndex index); void RestoreHotkey(QModelIndex index); + void SetPollingResult(bool cancel); + QString GetButtonCombinationName(Core::HID::NpadButton button, bool home, bool capture) const; + std::unique_ptr<Ui::ConfigureHotkeys> ui; QStandardItemModel* model; - void SetPollingResult(Core::HID::NpadButton button, bool cancel); - QString GetButtonCombinationName(Core::HID::NpadButton button, bool home, bool capture) const; + bool pressed_home_button; + bool pressed_capture_button; + QModelIndex button_model_index; + Core::HID::NpadButton pressed_buttons; + Core::HID::EmulatedController* controller; std::unique_ptr<QTimer> timeout_timer; std::unique_ptr<QTimer> poll_timer; - std::optional<std::function<void(Core::HID::NpadButton, bool)>> input_setter; + std::optional<std::function<void(bool)>> input_setter; }; diff --git a/src/yuzu/configuration/configure_ui.cpp b/src/yuzu/configuration/configure_ui.cpp index c8e871151..f3c91586c 100644 --- a/src/yuzu/configuration/configure_ui.cpp +++ b/src/yuzu/configuration/configure_ui.cpp @@ -248,82 +248,22 @@ void ConfigureUi::RetranslateUI() { } void ConfigureUi::InitializeLanguageComboBox() { - // This is a list of lexicographically sorted languages, only the available translations are - // shown to the user. - static const struct { - const QString name; - const char* id; - } languages[] = { - // clang-format off - {QStringLiteral(u"Bahasa Indonesia"), "id"}, // Indonesian - {QStringLiteral(u"Bahasa Melayu"), "ms"}, // Malay - {QStringLiteral(u"Catal\u00E0"), "ca"}, // Catalan - {QStringLiteral(u"\u010Ce\u0161tina"), "cs"}, // Czech - {QStringLiteral(u"Dansk"), "da"}, // Danish - {QStringLiteral(u"Deutsch"), "de"}, // German - {QStringLiteral(u"English"), "en"}, // English - {QStringLiteral(u"Espa\u00F1ol"), "es"}, // Spanish - {QStringLiteral(u"Fran\u00E7ais"), "fr"}, // French - {QStringLiteral(u"Hrvatski"), "hr"}, // Croatian - {QStringLiteral(u"Italiano"), "it"}, // Italian - {QStringLiteral(u"Magyar"), "hu"}, // Hungarian - {QStringLiteral(u"Nederlands"), "nl"}, // Dutch - {QStringLiteral(u"Norsk bokm\u00E5l"), "nb"}, // Norwegian - {QStringLiteral(u"Polski"), "pl"}, // Polish - {QStringLiteral(u"Portugu\u00EAs"), "pt_PT"}, // Portuguese - {QStringLiteral(u"Portugu\u00EAs (Brasil)"), "pt_BR"}, // Portuguese (Brazil) - {QStringLiteral(u"Rom\u00E2n\u0103"), "ro"}, // Romanian - {QStringLiteral(u"Srpski"), "sr"}, // Serbian - {QStringLiteral(u"Suomi"), "fi"}, // Finnish - {QStringLiteral(u"Svenska"), "sv"}, // Swedish - {QStringLiteral(u"Ti\u1EBFng Vi\u1EC7t"), "vi"}, // Vietnamese - {QStringLiteral(u"Ti\u1EBFng Vi\u1EC7t (Vi\u1EC7t Nam)"), "vi_VN"}, // Vietnamese - {QStringLiteral(u"T\u00FCrk\u00E7e"), "tr_TR"}, // Turkish - {QStringLiteral(u"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"), "el"}, // Greek - {QStringLiteral(u"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"), "ru_RU"}, // Russian - {QStringLiteral(u"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"), - "uk"}, // Ukrainian - {QStringLiteral(u"\u0627\u0644\u0639\u0631\u0628\u064A\u0629"), "ar"}, // Arabic - {QStringLiteral(u"\u0641\u0627\u0631\u0633\u06CC"), "fa"}, // Farsi - {QStringLiteral(u"\uD55C\uAD6D\uC5B4"), "ko_KR"}, // Korean - {QStringLiteral(u"\u65E5\u672C\u8A9E"), "ja_JP"}, // Japanese - {QStringLiteral(u"\u7B80\u4F53\u4E2D\u6587"), "zh_CN"}, // Simplified Chinese - {QStringLiteral(u"\u7E41\u9AD4\u4E2D\u6587"), "zh_TW"}, // Traditional Chinese - // clang-format on - }; ui->language_combobox->addItem(tr("<System>"), QString{}); - QDir languages_dir{QStringLiteral(":/languages")}; - QStringList language_files = languages_dir.entryList(); - for (const auto& lang : languages) { - if (QString::fromLatin1(lang.id) == QStringLiteral("en")) { - ui->language_combobox->addItem(lang.name, QStringLiteral("en")); - language_files.removeOne(QStringLiteral("en.qm")); - continue; - } - for (int i = 0; i < language_files.size(); ++i) { - QString locale = language_files[i]; - locale.truncate(locale.lastIndexOf(QLatin1Char{'.'})); - if (QString::fromLatin1(lang.id) == locale) { - ui->language_combobox->addItem(lang.name, locale); - language_files.removeAt(i); - break; - } - } - } - // Anything remaining will be at the bottom - for (const QString& file : language_files) { - LOG_CRITICAL(Frontend, "Unexpected Language File: {}", file.toStdString()); - QString locale = file; + ui->language_combobox->addItem(tr("English"), QStringLiteral("en")); + QDirIterator it(QStringLiteral(":/languages"), QDirIterator::NoIteratorFlags); + while (it.hasNext()) { + QString locale = it.next(); locale.truncate(locale.lastIndexOf(QLatin1Char{'.'})); - const QString language_name = QLocale::languageToString(QLocale(locale).language()); - const QString lang = QStringLiteral("%1 [%2]").arg(language_name, locale); - ui->language_combobox->addItem(lang, locale); + locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1); + const QString lang = QLocale::languageToString(QLocale(locale).language()); + const QString country = QLocale::countryToString(QLocale(locale).country()); + ui->language_combobox->addItem(QStringLiteral("%1 (%2)").arg(lang, country), locale); } // Unlike other configuration changes, interface language changes need to be reflected on the // interface immediately. This is done by passing a signal to the main window, and then // retranslating when passing back. - connect(ui->language_combobox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, + connect(ui->language_combobox, qOverload<int>(&QComboBox::currentIndexChanged), this, &ConfigureUi::OnLanguageChanged); } diff --git a/src/yuzu/hotkeys.cpp b/src/yuzu/hotkeys.cpp index b7693ad0d..170f14684 100644 --- a/src/yuzu/hotkeys.cpp +++ b/src/yuzu/hotkeys.cpp @@ -193,8 +193,7 @@ void ControllerShortcut::ControllerUpdateEvent(Core::HID::ControllerTriggerType if (!Settings::values.controller_navigation) { return; } - if (button_sequence.npad.raw == Core::HID::NpadButton::None && - button_sequence.capture.raw == 0 && button_sequence.home.raw == 0) { + if (button_sequence.npad.raw == Core::HID::NpadButton::None) { return; } |