summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorLeo Lam <leolino.lam@gmail.com>2017-05-13 00:37:31 +0200
committerGitHub <noreply@github.com>2017-05-13 00:37:31 +0200
commita44fa16601541d41823d8ce200aa36fdcf3e7322 (patch)
tree19ba7772c7c40b4012170cb0a64d559d3bc94eff /Source
parentf4e115b32226bf1e4b1410c63ca962a55cac1ac3 (diff)
parente8a214ad14cc73f51e6e523b3b113eb537c269b7 (diff)
Merge pull request #5370 from Ryanel/qt-settings-general
Qt: Add General Pane to Settings
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/DolphinQt2/CMakeLists.txt1
-rw-r--r--Source/Core/DolphinQt2/Config/SettingsWindow.cpp13
-rw-r--r--Source/Core/DolphinQt2/DolphinQt2.vcxproj8
-rw-r--r--Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters16
-rw-r--r--Source/Core/DolphinQt2/Settings.cpp30
-rw-r--r--Source/Core/DolphinQt2/Settings.h8
-rw-r--r--Source/Core/DolphinQt2/Settings/GeneralPane.cpp181
-rw-r--r--Source/Core/DolphinQt2/Settings/GeneralPane.h46
8 files changed, 295 insertions, 8 deletions
diff --git a/Source/Core/DolphinQt2/CMakeLists.txt b/Source/Core/DolphinQt2/CMakeLists.txt
index 966d05c458..8e5329b841 100644
--- a/Source/Core/DolphinQt2/CMakeLists.txt
+++ b/Source/Core/DolphinQt2/CMakeLists.txt
@@ -29,6 +29,7 @@ set(SRCS
GameList/GameTracker.cpp
GameList/ListProxyModel.cpp
GameList/TableDelegate.cpp
+ Settings/GeneralPane.cpp
Settings/InterfacePane.cpp
)
diff --git a/Source/Core/DolphinQt2/Config/SettingsWindow.cpp b/Source/Core/DolphinQt2/Config/SettingsWindow.cpp
index 5f02ce1eee..63d29e4255 100644
--- a/Source/Core/DolphinQt2/Config/SettingsWindow.cpp
+++ b/Source/Core/DolphinQt2/Config/SettingsWindow.cpp
@@ -4,8 +4,10 @@
#include "DolphinQt2/Config/SettingsWindow.h"
#include "DolphinQt2/Settings.h"
+#include "DolphinQt2/Settings/GeneralPane.h"
#include "DolphinQt2/Settings/InterfacePane.h"
+
SettingsWindow::SettingsWindow(QWidget* parent) : QDialog(parent)
{
// Set Window Properties
@@ -49,6 +51,8 @@ void SettingsWindow::SetupSettingsWidget()
m_settings_outer = new QStackedWidget;
m_settings_outer->setCurrentIndex(0);
+ // Panes initalised here
+ m_settings_outer->addWidget(new GeneralPane);
m_settings_outer->addWidget(new InterfacePane);
}
@@ -64,8 +68,9 @@ void SettingsWindow::MakeUnfinishedWarning()
void SettingsWindow::AddCategoryToList(const QString& title, const QString& icon)
{
+ QString dir = Settings().GetThemeDir();
QListWidgetItem* button = new QListWidgetItem();
- button->setIcon(QIcon(icon));
+ button->setIcon(QIcon(dir.append(icon)));
button->setText(title);
button->setTextAlignment(Qt::AlignVCenter);
button->setSizeHint(QSize(28, 28));
@@ -75,16 +80,14 @@ void SettingsWindow::AddCategoryToList(const QString& title, const QString& icon
void SettingsWindow::MakeCategoryList()
{
- QString dir = Settings().GetThemeDir();
-
m_categories = new QListWidget;
m_categories->setMaximumWidth(175);
m_categories->setIconSize(QSize(32, 32));
m_categories->setMovement(QListView::Static);
m_categories->setSpacing(0);
- AddCategoryToList(tr("Interface"), dir.append(QStringLiteral("config.png")));
-
+ AddCategoryToList(tr("General"), QStringLiteral("config.png"));
+ AddCategoryToList(tr("Interface"), QStringLiteral("browse.png"));
connect(m_categories, &QListWidget::currentItemChanged, this, &SettingsWindow::changePage);
}
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
index 68b757cce6..a0f7cc3842 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
@@ -100,6 +100,7 @@
<QtMoc Include="MenuBar.h" />
<QtMoc Include="RenderWidget.h" />
<QtMoc Include="Settings.h" />
+ <QtMoc Include="Settings\GeneralPane.h" />
<QtMoc Include="ToolBar.h" />
</ItemGroup>
@@ -112,9 +113,11 @@
<ClCompile Include="$(QtMocOutPrefix)GameList.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameListModel.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameTracker.cpp" />
+ <ClCompile Include="$(QtMocOutPrefix)GeneralPane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)Host.cpp" />
<ClCompile Include="$(QtMocOutPrefix)InDevelopmentWarning.cpp" />
<ClCompile Include="$(QtMocOutPrefix)InfoWidget.cpp" />
+ <ClCompile Include="$(QtMocOutPrefix)InterfacePane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ListProxyModel.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MainWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MenuBar.cpp" />
@@ -125,7 +128,7 @@
<ClCompile Include="$(QtMocOutPrefix)SettingsWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)TableDelegate.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ToolBar.cpp" />
- <ClCompile Include="$(QtMocOutPrefix)InterfacePane.cpp" />
+
<ClCompile Include="AboutDialog.cpp" />
<ClCompile Include="Config\ControllersWindow.cpp" />
<ClCompile Include="Config\FilesystemWidget.cpp" />
@@ -147,8 +150,9 @@
<ClCompile Include="RenderWidget.cpp" />
<ClCompile Include="Resources.cpp" />
<ClCompile Include="Settings.cpp" />
+ <ClCompile Include="Settings\GeneralPane.cpp" />
+ <ClCompile Include="Settings\InterfacePane.cpp" />
<ClCompile Include="ToolBar.cpp" />
- <ClCompile Include="Settings/InterfacePane.cpp" />
</ItemGroup>
<!--Put standard C/C++ headers here-->
<!--
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters b/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
index f654c9ce31..2b4fd61650 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
@@ -91,12 +91,22 @@
<ClCompile Include="$(QtMocOutPrefix)InDevelopmentWarning.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
- <ClCompile Include="Settings/InterfacePane.cpp">
+ <ClCompile Include="Settings\GeneralPane.cpp">
<Filter>Settings</Filter>
</ClCompile>
+ <ClCompile Include="$(QtMocOutPrefix)GeneralPane.cpp">
+ <Filter>Generated Files</Filter>
+ </ClCompile>
<ClCompile Include="$(QtMocOutPrefix)InterfacePane.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
+ <ClCompile Include="Config\ControllersWindow.cpp" />
+ <ClCompile Include="$(QtMocOutPrefix)ControllersWindow.cpp">
+ <Filter>Generated Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Settings\InterfacePane.cpp">
+ <Filter>Settings</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="MainWindow.h" />
@@ -130,9 +140,13 @@
<QtMoc Include="Config\FilesystemWidget.h" />
<QtMoc Include="Config\InfoWidget.h" />
<QtMoc Include="InDevelopmentWarning.h" />
+ <QtMoc Include="Config\ControllersWindow.h" />
<QtMoc Include="Settings\InterfacePane.h">
<Filter>Settings</Filter>
</QtMoc>
+ <QtMoc Include="Settings\GeneralPane.h">
+ <Filter>Settings</Filter>
+ </QtMoc>
</ItemGroup>
<ItemGroup>
<QtUi Include="*.ui" />
diff --git a/Source/Core/DolphinQt2/Settings.cpp b/Source/Core/DolphinQt2/Settings.cpp
index 5cf5ba7623..d4d43f1bb0 100644
--- a/Source/Core/DolphinQt2/Settings.cpp
+++ b/Source/Core/DolphinQt2/Settings.cpp
@@ -108,6 +108,36 @@ void Settings::SetWiiNAND(const QString& path)
SConfig::GetInstance().SaveSettings();
}
+float Settings::GetEmulationSpeed() const
+{
+ return SConfig::GetInstance().m_EmulationSpeed;
+}
+
+void Settings::SetEmulationSpeed(float val)
+{
+ SConfig::GetInstance().m_EmulationSpeed = val;
+}
+
+bool Settings::GetForceNTSCJ() const
+{
+ return SConfig::GetInstance().bForceNTSCJ;
+}
+
+void Settings::SetForceNTSCJ(bool val)
+{
+ SConfig::GetInstance().bForceNTSCJ = val;
+}
+
+bool Settings::GetAnalyticsEnabled() const
+{
+ return SConfig::GetInstance().m_analytics_enabled;
+}
+
+void Settings::SetAnalyticsEnabled(bool val)
+{
+ SConfig::GetInstance().m_analytics_enabled = val;
+}
+
DiscIO::Language Settings::GetWiiSystemLanguage() const
{
return SConfig::GetInstance().GetCurrentLanguage(true);
diff --git a/Source/Core/DolphinQt2/Settings.h b/Source/Core/DolphinQt2/Settings.h
index a4f17724cb..6ca6853eac 100644
--- a/Source/Core/DolphinQt2/Settings.h
+++ b/Source/Core/DolphinQt2/Settings.h
@@ -50,6 +50,14 @@ public:
bool IsWiiGameRunning() const;
int GetStateSlot() const;
void SetStateSlot(int);
+ float GetEmulationSpeed() const;
+ void SetEmulationSpeed(float val);
+ bool GetForceNTSCJ() const;
+ void SetForceNTSCJ(bool val);
+
+ // Analytics
+ bool GetAnalyticsEnabled() const;
+ void SetAnalyticsEnabled(bool val);
// Graphics
bool GetRenderToMain() const;
diff --git a/Source/Core/DolphinQt2/Settings/GeneralPane.cpp b/Source/Core/DolphinQt2/Settings/GeneralPane.cpp
new file mode 100644
index 0000000000..356c6acda3
--- /dev/null
+++ b/Source/Core/DolphinQt2/Settings/GeneralPane.cpp
@@ -0,0 +1,181 @@
+// Copyright 2017 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#include "DolphinQt2/Settings/GeneralPane.h"
+
+#include <QCheckBox>
+#include <QComboBox>
+#include <QFormLayout>
+#include <QGroupBox>
+#include <QLabel>
+#include <QMessageBox>
+#include <QPushButton>
+#include <QSlider>
+#include <QVBoxLayout>
+#include <QWidget>
+
+#include "Core/Analytics.h"
+#include "Core/ConfigManager.h"
+#include "DolphinQt2/Settings.h"
+
+GeneralPane::GeneralPane(QWidget* parent) : QWidget(parent)
+{
+ CreateLayout();
+ ConnectLayout();
+
+ LoadConfig();
+}
+
+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<void (QComboBox::*)(int)>(&QComboBox::activated),
+ [this](int index) { OnSaveConfig(); });
+
+ // Advanced
+ connect(m_checkbox_force_ntsc, &QCheckBox::clicked, this, &GeneralPane::OnSaveConfig);
+ connect(m_slider_speedlimit, static_cast<void (QSlider::*)(int)>(&QSlider::valueChanged),
+ [this](int index) { OnSaveConfig(); });
+
+#if defined(USE_ANALYTICS) && USE_ANALYTICS
+ connect(m_checkbox_enable_analytics, &QCheckBox::clicked, this, &GeneralPane::OnSaveConfig);
+ connect(m_button_generate_new_identity, &QPushButton::clicked, this,
+ &GeneralPane::GenerateNewIdentity);
+#endif
+}
+
+void GeneralPane::CreateBasic()
+{
+ auto* basic_group = new QGroupBox(tr("Basic Settings"));
+ auto* basic_group_layout = new QVBoxLayout;
+ basic_group->setLayout(basic_group_layout);
+ m_main_layout->addWidget(basic_group);
+
+ auto* language_layout = new QFormLayout;
+ basic_group_layout->addLayout(language_layout);
+
+ 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);
+}
+
+#if defined(USE_ANALYTICS) && USE_ANALYTICS
+void GeneralPane::CreateAnalytics()
+{
+ auto* analytics_group = new QGroupBox(tr("Usage Statistics Reporting"));
+ auto* analytics_group_layout = new QVBoxLayout;
+ analytics_group->setLayout(analytics_group_layout);
+ m_main_layout->addWidget(analytics_group);
+
+ m_checkbox_enable_analytics = new QCheckBox(tr("Enable Usage Statistics Reporting"));
+ m_button_generate_new_identity = new QPushButton(tr("Generate a New Statistics Identity"));
+ analytics_group_layout->addWidget(m_checkbox_enable_analytics);
+ analytics_group_layout->addWidget(m_button_generate_new_identity);
+}
+#endif
+
+void GeneralPane::CreateAdvanced()
+{
+ auto* advanced_group = new QGroupBox(tr("Advanced Settings"));
+ auto* advanced_group_layout = new QVBoxLayout;
+ advanced_group->setLayout(advanced_group_layout);
+ 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);
+
+ 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_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);
+
+ // NTSC-J
+ m_checkbox_force_ntsc = new QCheckBox(tr("Force Console as NTSC-J"));
+ advanced_group_layout->addWidget(m_checkbox_force_ntsc);
+}
+
+void GeneralPane::LoadConfig()
+{
+ m_checkbox_force_ntsc->setChecked(Settings().GetForceNTSCJ());
+ m_checkbox_enable_analytics->setChecked(Settings().GetAnalyticsEnabled());
+
+ 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);
+
+ QString val = QString::fromStdString(std::to_string(m_slider_speedlimit->value() * 10)) +
+ QStringLiteral("%");
+ m_slider_speedlimit->setToolTip(val);
+ m_label_speedlimit->setText(val);
+ }
+ }
+}
+
+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);
+ }
+ else
+ {
+ Settings().SetEmulationSpeed(0);
+ m_slider_speedlimit->setToolTip(tr("Unlimited"));
+ m_label_speedlimit->setText(tr("Unlimited"));
+ }
+}
+
+#if defined(USE_ANALYTICS) && USE_ANALYTICS
+void GeneralPane::GenerateNewIdentity()
+{
+ DolphinAnalytics::Instance()->GenerateNewIdentity();
+ QMessageBox message_box;
+ message_box.setIcon(QMessageBox::Information);
+ message_box.setWindowTitle(tr("Identity Generation"));
+ message_box.setText(tr("New identity generated."));
+ message_box.exec();
+}
+#endif
diff --git a/Source/Core/DolphinQt2/Settings/GeneralPane.h b/Source/Core/DolphinQt2/Settings/GeneralPane.h
new file mode 100644
index 0000000000..30b13a20cc
--- /dev/null
+++ b/Source/Core/DolphinQt2/Settings/GeneralPane.h
@@ -0,0 +1,46 @@
+// Copyright 2017 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <QWidget>
+
+class QCheckBox;
+class QComboBox;
+class QLabel;
+class QPushButton;
+class QSlider;
+class QVBoxLayout;
+
+class GeneralPane final : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit GeneralPane(QWidget* parent = nullptr);
+
+private:
+ void CreateLayout();
+ void ConnectLayout();
+ void CreateBasic();
+ void CreateAdvanced();
+
+ void LoadConfig();
+ void OnSaveConfig();
+
+ // Widgets
+ QVBoxLayout* m_main_layout;
+ QComboBox* m_combobox_language;
+ QSlider* m_slider_speedlimit;
+ QCheckBox* m_checkbox_force_ntsc;
+ QLabel* m_label_speedlimit;
+
+// Analytics related
+#if defined(USE_ANALYTICS) && USE_ANALYTICS
+ void CreateAnalytics();
+ void GenerateNewIdentity();
+
+ QPushButton* m_button_generate_new_identity;
+ QCheckBox* m_checkbox_enable_analytics;
+#endif
+};