summaryrefslogtreecommitdiff
path: root/src/citron/configuration/configure_cpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/citron/configuration/configure_cpu.cpp')
-rw-r--r--src/citron/configuration/configure_cpu.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/citron/configuration/configure_cpu.cpp b/src/citron/configuration/configure_cpu.cpp
new file mode 100644
index 000000000..7e16cf17d
--- /dev/null
+++ b/src/citron/configuration/configure_cpu.cpp
@@ -0,0 +1,114 @@
+// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <memory>
+#include <typeinfo>
+#include <vector>
+#include <QComboBox>
+#include "common/common_types.h"
+#include "common/settings.h"
+#include "common/settings_enums.h"
+#include "configuration/shared_widget.h"
+#include "core/core.h"
+#include "ui_configure_cpu.h"
+#include "yuzu/configuration/configuration_shared.h"
+#include "yuzu/configuration/configure_cpu.h"
+
+ConfigureCpu::ConfigureCpu(const Core::System& system_,
+ std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group_,
+ const ConfigurationShared::Builder& builder, QWidget* parent)
+ : Tab(group_, parent), ui{std::make_unique<Ui::ConfigureCpu>()}, system{system_},
+ combobox_translations(builder.ComboboxTranslations()) {
+ ui->setupUi(this);
+
+ Setup(builder);
+
+ SetConfiguration();
+
+ connect(accuracy_combobox, qOverload<int>(&QComboBox::currentIndexChanged), this,
+ &ConfigureCpu::UpdateGroup);
+
+ connect(backend_combobox, qOverload<int>(&QComboBox::currentIndexChanged), this,
+ &ConfigureCpu::UpdateGroup);
+
+#ifdef HAS_NCE
+ ui->backend_group->setVisible(true);
+#endif
+}
+
+ConfigureCpu::~ConfigureCpu() = default;
+
+void ConfigureCpu::SetConfiguration() {}
+void ConfigureCpu::Setup(const ConfigurationShared::Builder& builder) {
+ auto* accuracy_layout = ui->widget_accuracy->layout();
+ auto* backend_layout = ui->widget_backend->layout();
+ auto* unsafe_layout = ui->unsafe_widget->layout();
+ std::map<u32, QWidget*> unsafe_hold{};
+
+ std::vector<Settings::BasicSetting*> settings;
+ const auto push = [&](Settings::Category category) {
+ for (const auto setting : Settings::values.linkage.by_category[category]) {
+ settings.push_back(setting);
+ }
+ };
+
+ push(Settings::Category::Cpu);
+ push(Settings::Category::CpuUnsafe);
+
+ for (const auto setting : settings) {
+ auto* widget = builder.BuildWidget(setting, apply_funcs);
+
+ if (widget == nullptr) {
+ continue;
+ }
+ if (!widget->Valid()) {
+ widget->deleteLater();
+ continue;
+ }
+
+ if (setting->Id() == Settings::values.cpu_accuracy.Id()) {
+ // Keep track of cpu_accuracy combobox to display/hide the unsafe settings
+ accuracy_layout->addWidget(widget);
+ accuracy_combobox = widget->combobox;
+ } else if (setting->Id() == Settings::values.cpu_backend.Id()) {
+ backend_layout->addWidget(widget);
+ backend_combobox = widget->combobox;
+ } else {
+ // Presently, all other settings here are unsafe checkboxes
+ unsafe_hold.insert({setting->Id(), widget});
+ }
+ }
+
+ for (const auto& [label, widget] : unsafe_hold) {
+ unsafe_layout->addWidget(widget);
+ }
+
+ UpdateGroup(accuracy_combobox->currentIndex());
+ UpdateGroup(backend_combobox->currentIndex());
+}
+
+void ConfigureCpu::UpdateGroup(int index) {
+ const auto accuracy = static_cast<Settings::CpuAccuracy>(
+ combobox_translations.at(Settings::EnumMetadata<Settings::CpuAccuracy>::Index())[index]
+ .first);
+ ui->unsafe_group->setVisible(accuracy == Settings::CpuAccuracy::Unsafe);
+}
+
+void ConfigureCpu::ApplyConfiguration() {
+ const bool is_powered_on = system.IsPoweredOn();
+ for (const auto& apply_func : apply_funcs) {
+ apply_func(is_powered_on);
+ }
+}
+
+void ConfigureCpu::changeEvent(QEvent* event) {
+ if (event->type() == QEvent::LanguageChange) {
+ RetranslateUI();
+ }
+
+ QWidget::changeEvent(event);
+}
+
+void ConfigureCpu::RetranslateUI() {
+ ui->retranslateUi(this);
+}