summaryrefslogtreecommitdiff
path: root/src/citron/configuration/configure_dialog.cpp
diff options
context:
space:
mode:
authorZephyron <zephyron@citron-emu.org>2024-12-31 16:19:25 +1000
committerZephyron <zephyron@citron-emu.org>2024-12-31 16:19:25 +1000
commit9427e27e24a7135880ee2881c3c44988e174b41a (patch)
tree83f0062a35be144f6b162eaa823c5b3c7620146e /src/citron/configuration/configure_dialog.cpp
parentb35ae725d20960411e8588b11c12a2d55f86c9d0 (diff)
chore: update project branding to citron
Diffstat (limited to 'src/citron/configuration/configure_dialog.cpp')
-rw-r--r--src/citron/configuration/configure_dialog.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/src/citron/configuration/configure_dialog.cpp b/src/citron/configuration/configure_dialog.cpp
new file mode 100644
index 000000000..37f23388e
--- /dev/null
+++ b/src/citron/configuration/configure_dialog.cpp
@@ -0,0 +1,213 @@
+// SPDX-FileCopyrightText: 2016 Citra Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <memory>
+#include "common/logging/log.h"
+#include "common/settings.h"
+#include "common/settings_enums.h"
+#include "core/core.h"
+#include "ui_configure.h"
+#include "vk_device_info.h"
+#include "yuzu/configuration/configure_applets.h"
+#include "yuzu/configuration/configure_audio.h"
+#include "yuzu/configuration/configure_cpu.h"
+#include "yuzu/configuration/configure_debug_tab.h"
+#include "yuzu/configuration/configure_dialog.h"
+#include "yuzu/configuration/configure_filesystem.h"
+#include "yuzu/configuration/configure_general.h"
+#include "yuzu/configuration/configure_graphics.h"
+#include "yuzu/configuration/configure_graphics_advanced.h"
+#include "yuzu/configuration/configure_hotkeys.h"
+#include "yuzu/configuration/configure_input.h"
+#include "yuzu/configuration/configure_input_player.h"
+#include "yuzu/configuration/configure_network.h"
+#include "yuzu/configuration/configure_profile_manager.h"
+#include "yuzu/configuration/configure_system.h"
+#include "yuzu/configuration/configure_ui.h"
+#include "yuzu/configuration/configure_web.h"
+#include "yuzu/hotkeys.h"
+#include "yuzu/uisettings.h"
+
+ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
+ InputCommon::InputSubsystem* input_subsystem,
+ std::vector<VkDeviceInfo::Record>& vk_device_records,
+ Core::System& system_, bool enable_web_config)
+ : QDialog(parent), ui{std::make_unique<Ui::ConfigureDialog>()},
+ registry(registry_), system{system_}, builder{std::make_unique<ConfigurationShared::Builder>(
+ this, !system_.IsPoweredOn())},
+ applets_tab{std::make_unique<ConfigureApplets>(system_, nullptr, *builder, this)},
+ audio_tab{std::make_unique<ConfigureAudio>(system_, nullptr, *builder, this)},
+ cpu_tab{std::make_unique<ConfigureCpu>(system_, nullptr, *builder, this)},
+ debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, this)},
+ filesystem_tab{std::make_unique<ConfigureFilesystem>(this)},
+ general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, *builder, this)},
+ graphics_advanced_tab{
+ std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *builder, this)},
+ ui_tab{std::make_unique<ConfigureUi>(system_, this)},
+ graphics_tab{std::make_unique<ConfigureGraphics>(
+ system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); },
+ [this](Settings::AspectRatio ratio, Settings::ResolutionSetup setup) {
+ ui_tab->UpdateScreenshotInfo(ratio, setup);
+ },
+ nullptr, *builder, this)},
+ hotkeys_tab{std::make_unique<ConfigureHotkeys>(system_.HIDCore(), this)},
+ input_tab{std::make_unique<ConfigureInput>(system_, this)},
+ network_tab{std::make_unique<ConfigureNetwork>(system_, this)},
+ profile_tab{std::make_unique<ConfigureProfileManager>(system_, this)},
+ system_tab{std::make_unique<ConfigureSystem>(system_, nullptr, *builder, this)},
+ web_tab{std::make_unique<ConfigureWeb>(this)} {
+ Settings::SetConfiguringGlobal(true);
+
+ ui->setupUi(this);
+
+ ui->tabWidget->addTab(applets_tab.get(), tr("Applets"));
+ ui->tabWidget->addTab(audio_tab.get(), tr("Audio"));
+ ui->tabWidget->addTab(cpu_tab.get(), tr("CPU"));
+ ui->tabWidget->addTab(debug_tab_tab.get(), tr("Debug"));
+ ui->tabWidget->addTab(filesystem_tab.get(), tr("Filesystem"));
+ ui->tabWidget->addTab(general_tab.get(), tr("General"));
+ ui->tabWidget->addTab(graphics_tab.get(), tr("Graphics"));
+ ui->tabWidget->addTab(graphics_advanced_tab.get(), tr("GraphicsAdvanced"));
+ ui->tabWidget->addTab(hotkeys_tab.get(), tr("Hotkeys"));
+ ui->tabWidget->addTab(input_tab.get(), tr("Controls"));
+ ui->tabWidget->addTab(profile_tab.get(), tr("Profiles"));
+ ui->tabWidget->addTab(network_tab.get(), tr("Network"));
+ ui->tabWidget->addTab(system_tab.get(), tr("System"));
+ ui->tabWidget->addTab(ui_tab.get(), tr("Game List"));
+ ui->tabWidget->addTab(web_tab.get(), tr("Web"));
+
+ web_tab->SetWebServiceConfigEnabled(enable_web_config);
+ hotkeys_tab->Populate(registry);
+
+ input_tab->Initialize(input_subsystem);
+
+ general_tab->SetResetCallback([&] { this->close(); });
+
+ SetConfiguration();
+ PopulateSelectionList();
+
+ connect(ui->tabWidget, &QTabWidget::currentChanged, this, [this](int index) {
+ if (index != -1) {
+ debug_tab_tab->SetCurrentIndex(0);
+ }
+ });
+ connect(ui_tab.get(), &ConfigureUi::LanguageChanged, this, &ConfigureDialog::OnLanguageChanged);
+ connect(ui->selectorList, &QListWidget::itemSelectionChanged, this,
+ &ConfigureDialog::UpdateVisibleTabs);
+
+ if (system.IsPoweredOn()) {
+ QPushButton* apply_button = ui->buttonBox->addButton(QDialogButtonBox::Apply);
+ connect(apply_button, &QAbstractButton::clicked, this,
+ &ConfigureDialog::HandleApplyButtonClicked);
+ }
+
+ adjustSize();
+ ui->selectorList->setCurrentRow(0);
+
+ // Selects the leftmost button on the bottom bar (Cancel as of writing)
+ ui->buttonBox->setFocus();
+}
+
+ConfigureDialog::~ConfigureDialog() = default;
+
+void ConfigureDialog::SetConfiguration() {}
+
+void ConfigureDialog::ApplyConfiguration() {
+ general_tab->ApplyConfiguration();
+ ui_tab->ApplyConfiguration();
+ system_tab->ApplyConfiguration();
+ profile_tab->ApplyConfiguration();
+ filesystem_tab->ApplyConfiguration();
+ input_tab->ApplyConfiguration();
+ hotkeys_tab->ApplyConfiguration(registry);
+ cpu_tab->ApplyConfiguration();
+ graphics_tab->ApplyConfiguration();
+ graphics_advanced_tab->ApplyConfiguration();
+ audio_tab->ApplyConfiguration();
+ debug_tab_tab->ApplyConfiguration();
+ web_tab->ApplyConfiguration();
+ network_tab->ApplyConfiguration();
+ applets_tab->ApplyConfiguration();
+ system.ApplySettings();
+ Settings::LogSettings();
+}
+
+void ConfigureDialog::changeEvent(QEvent* event) {
+ if (event->type() == QEvent::LanguageChange) {
+ RetranslateUI();
+ }
+
+ QDialog::changeEvent(event);
+}
+
+void ConfigureDialog::RetranslateUI() {
+ const int old_row = ui->selectorList->currentRow();
+ const int old_index = ui->tabWidget->currentIndex();
+
+ ui->retranslateUi(this);
+
+ PopulateSelectionList();
+ ui->selectorList->setCurrentRow(old_row);
+
+ UpdateVisibleTabs();
+ ui->tabWidget->setCurrentIndex(old_index);
+}
+
+void ConfigureDialog::HandleApplyButtonClicked() {
+ UISettings::values.configuration_applied = true;
+ ApplyConfiguration();
+}
+
+Q_DECLARE_METATYPE(QList<QWidget*>);
+
+void ConfigureDialog::PopulateSelectionList() {
+ const std::array<std::pair<QString, QList<QWidget*>>, 6> items{
+ {{tr("General"),
+ {general_tab.get(), hotkeys_tab.get(), ui_tab.get(), web_tab.get(), debug_tab_tab.get()}},
+ {tr("System"),
+ {system_tab.get(), profile_tab.get(), network_tab.get(), filesystem_tab.get(),
+ applets_tab.get()}},
+ {tr("CPU"), {cpu_tab.get()}},
+ {tr("Graphics"), {graphics_tab.get(), graphics_advanced_tab.get()}},
+ {tr("Audio"), {audio_tab.get()}},
+ {tr("Controls"), input_tab->GetSubTabs()}},
+ };
+
+ [[maybe_unused]] const QSignalBlocker blocker(ui->selectorList);
+
+ ui->selectorList->clear();
+ for (const auto& entry : items) {
+ auto* const item = new QListWidgetItem(entry.first);
+ item->setData(Qt::UserRole, QVariant::fromValue(entry.second));
+
+ ui->selectorList->addItem(item);
+ }
+}
+
+void ConfigureDialog::OnLanguageChanged(const QString& locale) {
+ emit LanguageChanged(locale);
+ // Reloading the game list is needed to force retranslation.
+ UISettings::values.is_game_list_reload_pending = true;
+ // first apply the configuration, and then restore the display
+ ApplyConfiguration();
+ RetranslateUI();
+ SetConfiguration();
+}
+
+void ConfigureDialog::UpdateVisibleTabs() {
+ const auto items = ui->selectorList->selectedItems();
+ if (items.isEmpty()) {
+ return;
+ }
+
+ [[maybe_unused]] const QSignalBlocker blocker(ui->tabWidget);
+
+ ui->tabWidget->clear();
+
+ const auto tabs = qvariant_cast<QList<QWidget*>>(items[0]->data(Qt::UserRole));
+
+ for (auto* const tab : tabs) {
+ LOG_DEBUG(Frontend, "{}", tab->accessibleName().toStdString());
+ ui->tabWidget->addTab(tab, tab->accessibleName());
+ }
+}