From 3a4a60f937373f48324328f3f5580b8ffcf2aeed Mon Sep 17 00:00:00 2001 From: spxtr Date: Sun, 20 Dec 2015 15:36:39 -0800 Subject: [PATCH] Use a separate INI file for UI settings. --- Source/Core/DolphinQt2/CMakeLists.txt | 1 + Source/Core/DolphinQt2/GameList/GameFile.cpp | 16 ++-- Source/Core/DolphinQt2/GameList/GameList.cpp | 1 - .../Core/DolphinQt2/GameList/GameTracker.cpp | 34 ++++----- Source/Core/DolphinQt2/GameList/GameTracker.h | 2 - Source/Core/DolphinQt2/MainWindow.cpp | 31 ++++---- Source/Core/DolphinQt2/MenuBar.cpp | 3 +- Source/Core/DolphinQt2/Resources.cpp | 1 - Source/Core/DolphinQt2/Settings.cpp | 75 +++++++++++++++++++ Source/Core/DolphinQt2/Settings.h | 36 +++++++++ Source/Core/DolphinQt2/ToolBar.cpp | 5 +- 11 files changed, 154 insertions(+), 51 deletions(-) create mode 100644 Source/Core/DolphinQt2/Settings.cpp create mode 100644 Source/Core/DolphinQt2/Settings.h diff --git a/Source/Core/DolphinQt2/CMakeLists.txt b/Source/Core/DolphinQt2/CMakeLists.txt index a69add9298..25d7d107e4 100644 --- a/Source/Core/DolphinQt2/CMakeLists.txt +++ b/Source/Core/DolphinQt2/CMakeLists.txt @@ -10,6 +10,7 @@ set(SRCS MenuBar.cpp RenderWidget.cpp Resources.cpp + Settings.cpp ToolBar.cpp GameList/GameFile.cpp GameList/GameList.cpp diff --git a/Source/Core/DolphinQt2/GameList/GameFile.cpp b/Source/Core/DolphinQt2/GameList/GameFile.cpp index 6a0920e17e..e5419ae7d7 100644 --- a/Source/Core/DolphinQt2/GameList/GameFile.cpp +++ b/Source/Core/DolphinQt2/GameList/GameFile.cpp @@ -14,6 +14,7 @@ #include "Core/ConfigManager.h" #include "DiscIO/VolumeCreator.h" #include "DolphinQt2/Resources.h" +#include "DolphinQt2/Settings.h" #include "DolphinQt2/GameList/GameFile.h" static const int CACHE_VERSION = 13; // Last changed in PR #3261 @@ -50,12 +51,6 @@ GameFile::GameFile(QString path) : m_path(path) m_valid = true; } -DiscIO::IVolume::ELanguage GameFile::GetDefaultLanguage() const -{ - bool wii = m_platform != DiscIO::IVolume::GAMECUBE_DISC; - return SConfig::GetInstance().GetCurrentLanguage(wii); -} - QString GameFile::GetCacheFileName() const { QString folder = QString::fromStdString(File::GetUserPath(D_CACHE_IDX)); @@ -194,7 +189,14 @@ QString GameFile::GetLanguageString(QMap m) // Try the settings language, then English, then just pick one. if (m.isEmpty()) return QString(); - DiscIO::IVolume::ELanguage current_lang = GetDefaultLanguage(); + + bool wii = m_platform != DiscIO::IVolume::GAMECUBE_DISC; + DiscIO::IVolume::ELanguage current_lang; + if (wii) + current_lang = Settings().GetWiiSystemLanguage(); + else + current_lang = Settings().GetGCSystemLanguage(); + if (m.contains(current_lang)) return m[current_lang]; if (m.contains(DiscIO::IVolume::LANGUAGE_ENGLISH)) diff --git a/Source/Core/DolphinQt2/GameList/GameList.cpp b/Source/Core/DolphinQt2/GameList/GameList.cpp index 8552d3c901..75d6b541d4 100644 --- a/Source/Core/DolphinQt2/GameList/GameList.cpp +++ b/Source/Core/DolphinQt2/GameList/GameList.cpp @@ -4,7 +4,6 @@ #include -#include "Core/ConfigManager.h" #include "DolphinQt2/GameList/GameList.h" #include "DolphinQt2/GameList/ListProxyModel.h" #include "DolphinQt2/GameList/TableProxyModel.h" diff --git a/Source/Core/DolphinQt2/GameList/GameTracker.cpp b/Source/Core/DolphinQt2/GameList/GameTracker.cpp index 5f56ad642d..3c1fa4dfea 100644 --- a/Source/Core/DolphinQt2/GameList/GameTracker.cpp +++ b/Source/Core/DolphinQt2/GameList/GameTracker.cpp @@ -6,9 +6,20 @@ #include #include -#include "Core/ConfigManager.h" +#include "DolphinQt2/Settings.h" #include "DolphinQt2/GameList/GameTracker.h" +static const QStringList game_filters{ + QStringLiteral("*.gcm"), + QStringLiteral("*.iso"), + QStringLiteral("*.ciso"), + QStringLiteral("*.gcz"), + QStringLiteral("*.wbfs"), + QStringLiteral("*.wad"), + QStringLiteral("*.elf"), + QStringLiteral("*.dol") +}; + GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent) { @@ -22,12 +33,10 @@ GameTracker::GameTracker(QObject* parent) connect(this, &GameTracker::PathChanged, m_loader, &GameLoader::LoadGame); connect(m_loader, &GameLoader::GameLoaded, this, &GameTracker::GameLoaded); - GenerateFilters(); - m_loader_thread.start(); - for (const std::string& dir : SConfig::GetInstance().m_ISOFolder) - AddDirectory(QString::fromStdString(dir)); + for (QString dir : Settings().GetPaths()) + AddDirectory(dir); } GameTracker::~GameTracker() @@ -44,7 +53,7 @@ void GameTracker::AddDirectory(QString dir) void GameTracker::UpdateDirectory(QString dir) { - QDirIterator it(dir, m_filters); + QDirIterator it(dir, game_filters); while (it.hasNext()) { QString path = QFileInfo(it.next()).canonicalFilePath(); @@ -69,16 +78,3 @@ void GameTracker::UpdateFile(QString file) emit GameRemoved(file); } } - -void GameTracker::GenerateFilters() -{ - m_filters.clear(); - if (SConfig::GetInstance().m_ListGC) - m_filters << tr("*.gcm"); - if (SConfig::GetInstance().m_ListWii || SConfig::GetInstance().m_ListGC) - m_filters << tr("*.iso") << tr("*.ciso") << tr("*.gcz") << tr("*.wbfs"); - if (SConfig::GetInstance().m_ListWad) - m_filters << tr("*.wad"); - if (SConfig::GetInstance().m_ListElfDol) - m_filters << tr("*.elf") << tr("*.dol"); -} diff --git a/Source/Core/DolphinQt2/GameList/GameTracker.h b/Source/Core/DolphinQt2/GameList/GameTracker.h index f4f33be815..4902783bd8 100644 --- a/Source/Core/DolphinQt2/GameList/GameTracker.h +++ b/Source/Core/DolphinQt2/GameList/GameTracker.h @@ -39,10 +39,8 @@ signals: private: void UpdateDirectory(QString dir); void UpdateFile(QString path); - void GenerateFilters(); QSet m_tracked_files; - QStringList m_filters; QThread m_loader_thread; GameLoader* m_loader; }; diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp index 865253c131..9431d02218 100644 --- a/Source/Core/DolphinQt2/MainWindow.cpp +++ b/Source/Core/DolphinQt2/MainWindow.cpp @@ -11,13 +11,12 @@ #include #include -#include "Common/FileUtil.h" #include "Core/BootManager.h" -#include "Core/ConfigManager.h" #include "Core/Core.h" #include "DolphinQt2/Host.h" #include "DolphinQt2/MainWindow.h" #include "DolphinQt2/Resources.h" +#include "DolphinQt2/Settings.h" #include "DolphinQt2/GameList/GameListModel.h" MainWindow::MainWindow() : QMainWindow(nullptr) @@ -107,12 +106,12 @@ void MainWindow::Browse() QDir::currentPath()); if (!dir.isEmpty()) { - std::vector& iso_folders = SConfig::GetInstance().m_ISOFolder; - auto found = std::find(iso_folders.begin(), iso_folders.end(), dir.toStdString()); - if (found == iso_folders.end()) + Settings settings; + QStringList iso_folders = settings.GetPaths(); + if (!iso_folders.contains(dir)) { - iso_folders.push_back(dir.toStdString()); - SConfig::GetInstance().SaveSettings(); + iso_folders << dir; + settings.SetPaths(iso_folders); emit m_game_list->DirectoryAdded(dir); } } @@ -138,8 +137,8 @@ void MainWindow::Play() } else { - QString path = QString::fromStdString(SConfig::GetInstance().m_LastFilename); - if (QFile::exists(path)) + QString path = Settings().GetLastGame(); + if (!path.isEmpty() && QFile::exists(path)) StartGame(path); else Open(); @@ -156,7 +155,7 @@ void MainWindow::Pause() bool MainWindow::Stop() { bool stop = true; - if (SConfig::GetInstance().bConfirmStop) + if (Settings().GetConfirmStop()) { // We could pause the game here and resume it if they say no. QMessageBox::StandardButton confirm; @@ -180,7 +179,7 @@ void MainWindow::ForceStop() void MainWindow::FullScreen() { // If the render widget is fullscreen we want to reset it to whatever is in - // SConfig. If it's set to be fullscreen then it just remakes the window, + // settings. If it's set to be fullscreen then it just remakes the window, // which probably isn't ideal. bool was_fullscreen = m_render_widget->isFullScreen(); HideRenderWidget(); @@ -209,13 +208,15 @@ void MainWindow::StartGame(QString path) QMessageBox::critical(this, tr("Error"), tr("Failed to init core"), QMessageBox::Ok); return; } + Settings().SetLastGame(path); ShowRenderWidget(); emit EmulationStarted(); } void MainWindow::ShowRenderWidget() { - if (SConfig::GetInstance().bRenderToMain) + Settings settings; + if (settings.GetRenderToMain()) { // If we're rendering to main, add it to the stack and update our title when necessary. m_rendering_to_main = true; @@ -226,15 +227,13 @@ void MainWindow::ShowRenderWidget() { // Otherwise, just show it. m_rendering_to_main = false; - if (SConfig::GetInstance().bFullscreen) + if (settings.GetFullScreen()) { m_render_widget->showFullScreen(); } else { - m_render_widget->setFixedSize( - SConfig::GetInstance().iRenderWindowWidth, - SConfig::GetInstance().iRenderWindowHeight); + m_render_widget->setFixedSize(settings.GetRenderWindowSize()); m_render_widget->showNormal(); } } diff --git a/Source/Core/DolphinQt2/MenuBar.cpp b/Source/Core/DolphinQt2/MenuBar.cpp index 522997f0ac..b2d23424b6 100644 --- a/Source/Core/DolphinQt2/MenuBar.cpp +++ b/Source/Core/DolphinQt2/MenuBar.cpp @@ -5,7 +5,6 @@ #include #include -#include "Core/ConfigManager.h" #include "DolphinQt2/MenuBar.h" MenuBar::MenuBar(QWidget* parent) @@ -54,7 +53,7 @@ void MenuBar::AddGameListTypeSection(QMenu* view_menu) connect(list_view, &QAction::triggered, this, &MenuBar::ShowList); } -// TODO implement this after we stop using SConfig. +// TODO implement this void MenuBar::AddTableColumnsMenu(QMenu* view_menu) { QActionGroup* column_group = new QActionGroup(this); diff --git a/Source/Core/DolphinQt2/Resources.cpp b/Source/Core/DolphinQt2/Resources.cpp index 70666d4b25..44dd2f9ef3 100644 --- a/Source/Core/DolphinQt2/Resources.cpp +++ b/Source/Core/DolphinQt2/Resources.cpp @@ -6,7 +6,6 @@ #include "Common/CommonPaths.h" #include "Common/FileUtil.h" -#include "Core/ConfigManager.h" #include "DolphinQt2/Resources.h" QList Resources::m_platforms; diff --git a/Source/Core/DolphinQt2/Settings.cpp b/Source/Core/DolphinQt2/Settings.cpp new file mode 100644 index 0000000000..094672c709 --- /dev/null +++ b/Source/Core/DolphinQt2/Settings.cpp @@ -0,0 +1,75 @@ +// Copyright 2015 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include + +#include "Common/FileUtil.h" +#include "Core/ConfigManager.h" +#include "DolphinQt2/Settings.h" + +static QString GetSettingsPath() +{ + return QString::fromStdString(File::GetUserPath(D_CONFIG_IDX)) + QStringLiteral("/UI.ini"); +} + +Settings::Settings(QObject* parent) + : QSettings(GetSettingsPath(), QSettings::IniFormat, parent) +{ +} + +QString Settings::GetThemeDir() const +{ + QString theme_name = value(QStringLiteral("Theme"), QStringLiteral("Clean")).toString(); + return QString::fromStdString(File::GetThemeDir(theme_name.toStdString())); +} + +QString Settings::GetLastGame() const +{ + return value(QStringLiteral("GameList/LastGame")).toString(); +} + +void Settings::SetLastGame(QString path) +{ + setValue(QStringLiteral("GameList/LastGame"), path); +} + +QStringList Settings::GetPaths() const +{ + return value(QStringLiteral("GameList/Paths")).toStringList(); +} + +void Settings::SetPaths(QStringList paths) +{ + setValue(QStringLiteral("GameList/Paths"), paths); +} + +DiscIO::IVolume::ELanguage Settings::GetWiiSystemLanguage() const +{ + return SConfig::GetInstance().GetCurrentLanguage(true); +} + +DiscIO::IVolume::ELanguage Settings::GetGCSystemLanguage() const +{ + return SConfig::GetInstance().GetCurrentLanguage(false); +} + +bool Settings::GetConfirmStop() const +{ + return value(QStringLiteral("Emulation/ConfirmStop"), true).toBool(); +} + +bool Settings::GetRenderToMain() const +{ + return value(QStringLiteral("Graphics/RenderToMain"), false).toBool(); +} + +bool Settings::GetFullScreen() const +{ + return value(QStringLiteral("Graphics/FullScreen"), false).toBool(); +} + +QSize Settings::GetRenderWindowSize() const +{ + return value(QStringLiteral("Graphics/RenderWindowSize"), QSize(640, 480)).toSize(); +} diff --git a/Source/Core/DolphinQt2/Settings.h b/Source/Core/DolphinQt2/Settings.h new file mode 100644 index 0000000000..9d38afdb73 --- /dev/null +++ b/Source/Core/DolphinQt2/Settings.h @@ -0,0 +1,36 @@ +// Copyright 2015 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include + +#include "DiscIO/Volume.h" + +class Settings final : public QSettings +{ + Q_OBJECT + +public: + Settings(QObject* parent = nullptr); + + // UI + QString GetThemeDir() const; + + // GameList + QString GetLastGame() const; + void SetLastGame(QString path); + QStringList GetPaths() const; + void SetPaths(QStringList paths); + DiscIO::IVolume::ELanguage GetWiiSystemLanguage() const; + DiscIO::IVolume::ELanguage GetGCSystemLanguage() const; + + // Emulation + bool GetConfirmStop() const; + + // Graphics + bool GetRenderToMain() const; + bool GetFullScreen() const; + QSize GetRenderWindowSize() const; +}; diff --git a/Source/Core/DolphinQt2/ToolBar.cpp b/Source/Core/DolphinQt2/ToolBar.cpp index 649c1c2bd3..a720634325 100644 --- a/Source/Core/DolphinQt2/ToolBar.cpp +++ b/Source/Core/DolphinQt2/ToolBar.cpp @@ -4,8 +4,7 @@ #include -#include "Common/FileUtil.h" -#include "Core/ConfigManager.h" +#include "DolphinQt2/Settings.h" #include "DolphinQt2/ToolBar.h" static constexpr QSize ICON_SIZE(32, 32); @@ -82,7 +81,7 @@ void ToolBar::MakeActions() void ToolBar::UpdateIcons() { - QString dir = QString::fromStdString(File::GetThemeDir(SConfig::GetInstance().theme_name)); + QString dir = Settings().GetThemeDir(); m_open_action->setIcon(QIcon(QStringLiteral("open.png").prepend(dir))); m_paths_action->setIcon(QIcon(QStringLiteral("browse.png").prepend(dir)));