4a3d57e469
Builds on german77's work to reset all settings back to their defaults. This include UISettings and Settings values structs, but does not affect save profiles, input profiles, and game directories. This works from a button input in configure_general. When activated, it calls a callback to close the whole configure dialog, then GMainWindow deletes the old configuration, both on disk and in memory, and reinitalizes a new one. It also resets a portion of the UI and calls the telemetry window prompt.
149 lines
4.7 KiB
C++
149 lines
4.7 KiB
C++
// Copyright 2016 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include <QAbstractButton>
|
|
#include <QDialogButtonBox>
|
|
#include <QHash>
|
|
#include <QListWidgetItem>
|
|
#include <QPushButton>
|
|
#include <QSignalBlocker>
|
|
#include "common/settings.h"
|
|
#include "core/core.h"
|
|
#include "ui_configure.h"
|
|
#include "yuzu/configuration/config.h"
|
|
#include "yuzu/configuration/configure_dialog.h"
|
|
#include "yuzu/configuration/configure_input_player.h"
|
|
#include "yuzu/hotkeys.h"
|
|
|
|
static void CloseDialog(ConfigureDialog *dialog) {
|
|
dialog->close();
|
|
}
|
|
|
|
ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry,
|
|
InputCommon::InputSubsystem* input_subsystem)
|
|
: QDialog(parent), ui(new Ui::ConfigureDialog), registry(registry) {
|
|
Settings::SetConfiguringGlobal(true);
|
|
|
|
ui->setupUi(this);
|
|
ui->hotkeysTab->Populate(registry);
|
|
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
|
|
|
ui->inputTab->Initialize(input_subsystem);
|
|
|
|
ui->generalTab->SetResetCallback(&CloseDialog, this);
|
|
|
|
SetConfiguration();
|
|
PopulateSelectionList();
|
|
|
|
connect(ui->uiTab, &ConfigureUi::LanguageChanged, this, &ConfigureDialog::OnLanguageChanged);
|
|
connect(ui->selectorList, &QListWidget::itemSelectionChanged, this,
|
|
&ConfigureDialog::UpdateVisibleTabs);
|
|
|
|
if (Core::System::GetInstance().IsPoweredOn()) {
|
|
QPushButton* apply_button = ui->buttonBox->addButton(QDialogButtonBox::Apply);
|
|
connect(apply_button, &QAbstractButton::clicked, this,
|
|
&ConfigureDialog::HandleApplyButtonClicked);
|
|
}
|
|
|
|
adjustSize();
|
|
ui->selectorList->setCurrentRow(0);
|
|
}
|
|
|
|
ConfigureDialog::~ConfigureDialog() = default;
|
|
|
|
void ConfigureDialog::SetConfiguration() {}
|
|
|
|
void ConfigureDialog::ApplyConfiguration() {
|
|
ui->generalTab->ApplyConfiguration();
|
|
ui->uiTab->ApplyConfiguration();
|
|
ui->systemTab->ApplyConfiguration();
|
|
ui->profileManagerTab->ApplyConfiguration();
|
|
ui->filesystemTab->applyConfiguration();
|
|
ui->inputTab->ApplyConfiguration();
|
|
ui->hotkeysTab->ApplyConfiguration(registry);
|
|
ui->cpuTab->ApplyConfiguration();
|
|
ui->cpuDebugTab->ApplyConfiguration();
|
|
ui->graphicsTab->ApplyConfiguration();
|
|
ui->graphicsAdvancedTab->ApplyConfiguration();
|
|
ui->audioTab->ApplyConfiguration();
|
|
ui->debugTab->ApplyConfiguration();
|
|
ui->webTab->ApplyConfiguration();
|
|
ui->serviceTab->ApplyConfiguration();
|
|
Core::System::GetInstance().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"), {ui->generalTab, ui->hotkeysTab, ui->uiTab, ui->webTab, ui->debugTab}},
|
|
{tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}},
|
|
{tr("CPU"), {ui->cpuTab, ui->cpuDebugTab}},
|
|
{tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}},
|
|
{tr("Audio"), {ui->audioTab}},
|
|
{tr("Controls"), ui->inputTab->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);
|
|
// 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) {
|
|
ui->tabWidget->addTab(tab, tab->accessibleName());
|
|
}
|
|
}
|