From 07dc2e17f34db4733717d49482310f36c097e237 Mon Sep 17 00:00:00 2001 From: Corwin McKnight Date: Fri, 5 May 2017 03:38:59 -0700 Subject: [PATCH] Qt: Update General, Interface pane --- .../Core/DolphinQt2/Settings/GeneralPane.cpp | 138 ++++++++++-------- Source/Core/DolphinQt2/Settings/GeneralPane.h | 10 +- .../DolphinQt2/Settings/InterfacePane.cpp | 15 +- .../Core/DolphinQt2/Settings/InterfacePane.h | 2 + 4 files changed, 102 insertions(+), 63 deletions(-) diff --git a/Source/Core/DolphinQt2/Settings/GeneralPane.cpp b/Source/Core/DolphinQt2/Settings/GeneralPane.cpp index 356c6acda3..f8e5d793ea 100644 --- a/Source/Core/DolphinQt2/Settings/GeneralPane.cpp +++ b/Source/Core/DolphinQt2/Settings/GeneralPane.cpp @@ -11,12 +11,14 @@ #include #include #include +#include #include #include #include #include "Core/Analytics.h" #include "Core/ConfigManager.h" +#include "Core/PowerPC/PowerPC.h" #include "DolphinQt2/Settings.h" GeneralPane::GeneralPane(QWidget* parent) : QWidget(parent) @@ -32,26 +34,26 @@ void GeneralPane::CreateLayout() m_main_layout = new QVBoxLayout; // Create layout here CreateBasic(); - #if defined(USE_ANALYTICS) && USE_ANALYTICS CreateAnalytics(); #endif - CreateAdvanced(); - m_main_layout->addStretch(1); setLayout(m_main_layout); } void GeneralPane::ConnectLayout() { - connect(m_combobox_language, static_cast(&QComboBox::activated), - [this](int index) { OnSaveConfig(); }); - + connect(m_checkbox_dualcore, &QCheckBox::clicked, this, &GeneralPane::OnSaveConfig); + connect(m_checkbox_cheats, &QCheckBox::clicked, this, &GeneralPane::OnSaveConfig); // Advanced connect(m_checkbox_force_ntsc, &QCheckBox::clicked, this, &GeneralPane::OnSaveConfig); - connect(m_slider_speedlimit, static_cast(&QSlider::valueChanged), - [this](int index) { OnSaveConfig(); }); + connect(m_combobox_speedlimit, + static_cast(&QComboBox::activated), + [this](const QString& text) { OnSaveConfig(); }); + connect(m_radio_interpreter, &QRadioButton::clicked, this, &GeneralPane::OnSaveConfig); + connect(m_radio_cached_interpreter, &QRadioButton::clicked, this, &GeneralPane::OnSaveConfig); + connect(m_radio_jit, &QRadioButton::clicked, this, &GeneralPane::OnSaveConfig); #if defined(USE_ANALYTICS) && USE_ANALYTICS connect(m_checkbox_enable_analytics, &QCheckBox::clicked, this, &GeneralPane::OnSaveConfig); @@ -67,13 +69,31 @@ void GeneralPane::CreateBasic() basic_group->setLayout(basic_group_layout); m_main_layout->addWidget(basic_group); - auto* language_layout = new QFormLayout; - basic_group_layout->addLayout(language_layout); + m_checkbox_dualcore = new QCheckBox(tr("Enable Dual Core (speedup)")); + basic_group_layout->addWidget(m_checkbox_dualcore); - m_combobox_language = new QComboBox; - // TODO: Support more languages other then English - m_combobox_language->addItem(tr("English")); - language_layout->addRow(tr("&Language:"), m_combobox_language); + m_checkbox_cheats = new QCheckBox(tr("Enable Cheats")); + basic_group_layout->addWidget(m_checkbox_cheats); + + auto* speed_limit_layout = new QFormLayout; + basic_group_layout->addLayout(speed_limit_layout); + + m_combobox_speedlimit = new QComboBox(); + m_combobox_speedlimit->setMaximumWidth(300); + + m_combobox_speedlimit->addItem(tr("Unlimited")); + for (int i = 10; i <= 200; i += 10) // from 10% to 200% + { + QString str; + if (i != 100) + str.sprintf("%i%%", i); + else + str.sprintf("%i%% (Normal Speed)", i); + + m_combobox_speedlimit->addItem(str); + } + + speed_limit_layout->addRow(tr("&Speed Limit:"), m_combobox_speedlimit); } #if defined(USE_ANALYTICS) && USE_ANALYTICS @@ -86,6 +106,7 @@ void GeneralPane::CreateAnalytics() m_checkbox_enable_analytics = new QCheckBox(tr("Enable Usage Statistics Reporting")); m_button_generate_new_identity = new QPushButton(tr("Generate a New Statistics Identity")); + m_button_generate_new_identity->setMaximumWidth(300); analytics_group_layout->addWidget(m_checkbox_enable_analytics); analytics_group_layout->addWidget(m_button_generate_new_identity); } @@ -99,23 +120,18 @@ void GeneralPane::CreateAdvanced() m_main_layout->addWidget(advanced_group); // Speed Limit - auto* speed_limit_layout = new QFormLayout; - auto* speed_limit_container = new QHBoxLayout; - speed_limit_container->addLayout(speed_limit_layout); - advanced_group_layout->addLayout(speed_limit_container); + auto* engine_group = new QGroupBox(tr("CPU Emulation Engine")); + auto* engine_group_layout = new QVBoxLayout; + engine_group->setLayout(engine_group_layout); + advanced_group_layout->addWidget(engine_group); - m_slider_speedlimit = new QSlider(Qt::Orientation::Horizontal); - m_slider_speedlimit->setTickInterval(1); - m_slider_speedlimit->setMinimum(1); - m_slider_speedlimit->setMaximum(21); - m_slider_speedlimit->setTickPosition(QSlider::TicksBelow); - m_slider_speedlimit->setSingleStep(1); - speed_limit_layout->addRow(tr("&Speed Limit:"), m_slider_speedlimit); + m_radio_interpreter = new QRadioButton(tr("Interpreter (slowest)")); + m_radio_cached_interpreter = new QRadioButton(tr("Cached Interpreter (slower)")); + m_radio_jit = new QRadioButton(tr("JIT Recompiler (recommended)")); - m_label_speedlimit = new QLabel(tr("Unlimited")); - m_label_speedlimit->setMinimumWidth(48); - m_label_speedlimit->setAlignment(Qt::AlignRight | Qt::AlignCenter); - speed_limit_container->addWidget(m_label_speedlimit); + engine_group_layout->addWidget(m_radio_interpreter); + engine_group_layout->addWidget(m_radio_cached_interpreter); + engine_group_layout->addWidget(m_radio_jit); // NTSC-J m_checkbox_force_ntsc = new QCheckBox(tr("Force Console as NTSC-J")); @@ -126,25 +142,29 @@ void GeneralPane::LoadConfig() { m_checkbox_force_ntsc->setChecked(Settings().GetForceNTSCJ()); m_checkbox_enable_analytics->setChecked(Settings().GetAnalyticsEnabled()); - + m_checkbox_dualcore->setChecked(SConfig::GetInstance().bCPUThread); + m_checkbox_cheats->setChecked(SConfig::GetInstance().bEnableCheats); int selection = qRound(Settings().GetEmulationSpeed() * 10); - if (selection < m_slider_speedlimit->maximum()) - { - if (selection == 0) - { - m_slider_speedlimit->setValue(21); - m_slider_speedlimit->setToolTip(tr("Unlimited")); - m_label_speedlimit->setText(tr("Unlimited")); - } - else - { - m_slider_speedlimit->setValue(selection); + if (selection < m_combobox_speedlimit->count()) + m_combobox_speedlimit->setCurrentIndex(selection); + m_checkbox_dualcore->setChecked(SConfig::GetInstance().bCPUThread); - QString val = QString::fromStdString(std::to_string(m_slider_speedlimit->value() * 10)) + - QStringLiteral("%"); - m_slider_speedlimit->setToolTip(val); - m_label_speedlimit->setText(val); - } + switch (SConfig::GetInstance().iCPUCore) + { + case PowerPC::CPUCore::CORE_INTERPRETER: + m_radio_interpreter->setChecked(true); + break; + case PowerPC::CPUCore::CORE_CACHEDINTERPRETER: + m_radio_cached_interpreter->setChecked(true); + break; + case PowerPC::CPUCore::CORE_JIT64: + m_radio_jit->setChecked(true); + break; + case PowerPC::CPUCore::CORE_JITARM64: + // TODO: Implement JITARM + break; + default: + break; } } @@ -152,20 +172,20 @@ void GeneralPane::OnSaveConfig() { Settings().SetForceNTSCJ(m_checkbox_force_ntsc->isChecked()); Settings().SetAnalyticsEnabled(m_checkbox_enable_analytics->isChecked()); - if (m_slider_speedlimit->value() < 21) - { - Settings().SetEmulationSpeed(m_slider_speedlimit->value() * 0.1f); - QString val = QString::fromStdString(std::to_string(m_slider_speedlimit->value() * 10)) + - QStringLiteral("%"); - m_slider_speedlimit->setToolTip(val); - m_label_speedlimit->setText(val); - } + SConfig::GetInstance().bCPUThread = m_checkbox_dualcore->isChecked(); + SConfig::GetInstance().bEnableCheats = m_checkbox_cheats->isChecked(); + SConfig::GetInstance().m_EmulationSpeed = m_combobox_speedlimit->currentIndex() * 0.1f; + int engine_value = 0; + if (m_radio_interpreter->isChecked()) + engine_value = PowerPC::CPUCore::CORE_INTERPRETER; + else if (m_radio_cached_interpreter->isChecked()) + engine_value = PowerPC::CPUCore::CORE_CACHEDINTERPRETER; + else if (m_radio_jit->isChecked()) + engine_value = PowerPC::CPUCore::CORE_JIT64; else - { - Settings().SetEmulationSpeed(0); - m_slider_speedlimit->setToolTip(tr("Unlimited")); - m_label_speedlimit->setText(tr("Unlimited")); - } + engine_value = PowerPC::CPUCore::CORE_JIT64; + + SConfig::GetInstance().iCPUCore = engine_value; } #if defined(USE_ANALYTICS) && USE_ANALYTICS diff --git a/Source/Core/DolphinQt2/Settings/GeneralPane.h b/Source/Core/DolphinQt2/Settings/GeneralPane.h index 30b13a20cc..a4e5ec1d6f 100644 --- a/Source/Core/DolphinQt2/Settings/GeneralPane.h +++ b/Source/Core/DolphinQt2/Settings/GeneralPane.h @@ -10,6 +10,7 @@ class QCheckBox; class QComboBox; class QLabel; class QPushButton; +class QRadioButton; class QSlider; class QVBoxLayout; @@ -30,11 +31,16 @@ private: // Widgets QVBoxLayout* m_main_layout; - QComboBox* m_combobox_language; - QSlider* m_slider_speedlimit; + QComboBox* m_combobox_speedlimit; QCheckBox* m_checkbox_force_ntsc; + QCheckBox* m_checkbox_dualcore; + QCheckBox* m_checkbox_cheats; QLabel* m_label_speedlimit; + QRadioButton* m_radio_interpreter; + QRadioButton* m_radio_cached_interpreter; + QRadioButton* m_radio_jit; + // Analytics related #if defined(USE_ANALYTICS) && USE_ANALYTICS void CreateAnalytics(); diff --git a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp index 70a6637f1c..50061cd28c 100644 --- a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp +++ b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp @@ -42,11 +42,20 @@ void InterfacePane::CreateUI() groupbox->setLayout(groupbox_layout); m_main_layout->addWidget(groupbox); + auto* combobox_layout = new QFormLayout; + groupbox_layout->addLayout(combobox_layout); + + m_combobox_language = new QComboBox; + m_combobox_language->setMaximumWidth(300); + // TODO: Support more languages other then English + m_combobox_language->addItem(tr("English")); + combobox_layout->addRow(tr("&Language:"), m_combobox_language); + // Theme Combobox auto* theme_layout = new QFormLayout; m_combobox_theme = new QComboBox; - theme_layout->addRow(tr("&Theme:"), m_combobox_theme); - groupbox_layout->addLayout(theme_layout); + m_combobox_theme->setMaximumWidth(300); + combobox_layout->addRow(tr("&Theme:"), m_combobox_theme); // List avalable themes auto file_search_results = Common::DoFileSearch( @@ -99,6 +108,8 @@ void InterfacePane::ConnectLayout() connect(m_checkbox_render_to_window, &QCheckBox::clicked, this, &InterfacePane::OnSaveConfig); connect(m_combobox_theme, static_cast(&QComboBox::activated), [this](const QString& text) { OnSaveConfig(); }); + connect(m_combobox_language, static_cast(&QComboBox::activated), + [this](int index) { OnSaveConfig(); }); connect(m_checkbox_confirm_on_stop, &QCheckBox::clicked, this, &InterfacePane::OnSaveConfig); connect(m_checkbox_use_panic_handlers, &QCheckBox::clicked, this, &InterfacePane::OnSaveConfig); connect(m_checkbox_enable_osd, &QCheckBox::clicked, this, &InterfacePane::OnSaveConfig); diff --git a/Source/Core/DolphinQt2/Settings/InterfacePane.h b/Source/Core/DolphinQt2/Settings/InterfacePane.h index c0ccb84485..1cb3bebc27 100644 --- a/Source/Core/DolphinQt2/Settings/InterfacePane.h +++ b/Source/Core/DolphinQt2/Settings/InterfacePane.h @@ -25,6 +25,8 @@ private: void OnSaveConfig(); QVBoxLayout* m_main_layout; + QComboBox* m_combobox_language; + QComboBox* m_combobox_theme; QCheckBox* m_checkbox_auto_window; QCheckBox* m_checkbox_top_window;