summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Config/GameConfigWidget.cpp
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2018-07-13 12:56:58 +0200
committerspycrab <spycrab@users.noreply.github.com>2019-01-26 00:41:22 +0100
commitff5556ce2fb435ef856ad5e7e70417680896fe5c (patch)
tree33f5cfb074382eff435e40e3c142e25de23622d0 /Source/Core/DolphinQt/Config/GameConfigWidget.cpp
parent6962d5bc5217562b0200a47968e013e9c820feeb (diff)
Qt/GameConfigWidget: Complete overhaul
Diffstat (limited to 'Source/Core/DolphinQt/Config/GameConfigWidget.cpp')
-rw-r--r--Source/Core/DolphinQt/Config/GameConfigWidget.cpp118
1 files changed, 72 insertions, 46 deletions
diff --git a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp
index c626515ce0..c11ca30ebd 100644
--- a/Source/Core/DolphinQt/Config/GameConfigWidget.cpp
+++ b/Source/Core/DolphinQt/Config/GameConfigWidget.cpp
@@ -6,16 +6,12 @@
#include <QCheckBox>
#include <QComboBox>
-#include <QDesktopServices>
-#include <QFile>
-#include <QGridLayout>
#include <QGroupBox>
-#include <QHBoxLayout>
#include <QLabel>
-#include <QLineEdit>
#include <QPushButton>
+#include <QSlider>
#include <QSpinBox>
-#include <QUrl>
+#include <QTabWidget>
#include <QVBoxLayout>
#include "Common/CommonPaths.h"
@@ -24,6 +20,7 @@
#include "Core/ConfigLoaders/GameConfigLoader.h"
#include "Core/ConfigManager.h"
+#include "DolphinQt/Config/GameConfigEdit.h"
#include "DolphinQt/Config/Graphics/GraphicsSlider.h"
#include "UICommon/GameFile.h"
@@ -38,22 +35,51 @@ constexpr const char* DETERMINISM_AUTO_STRING = "auto";
constexpr const char* DETERMINISM_NONE_STRING = "none";
constexpr const char* DETERMINISM_FAKE_COMPLETION_STRING = "fake-completion";
+static void PopulateTab(QTabWidget* tab, const std::string& path, std::string game_id,
+ bool read_only)
+{
+ while (!game_id.empty())
+ {
+ const std::string ini_path = path + game_id + ".ini";
+ if (File::Exists(ini_path))
+ {
+ auto* edit =
+ new GameConfigEdit(nullptr, QString::fromStdString(path + game_id + ".ini"), read_only);
+ tab->addTab(edit, QString::fromStdString(game_id));
+ }
+
+ game_id = game_id.substr(0, game_id.size() - 1);
+ }
+}
+
GameConfigWidget::GameConfigWidget(const UICommon::GameFile& game) : m_game(game)
{
m_game_id = m_game.GetGameID();
+
m_gameini_local_path =
QString::fromStdString(File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini");
CreateWidgets();
LoadSettings();
ConnectWidgets();
+
+ PopulateTab(m_default_tab, File::GetSysDirectory() + "GameSettings/", m_game_id, true);
+ PopulateTab(m_local_tab, File::GetUserPath(D_GAMESETTINGS_IDX), m_game_id, false);
+
+ // Always give the user the opportunity to create a new INI
+ if (m_local_tab->count() == 0)
+ {
+ auto* edit = new GameConfigEdit(
+ nullptr, QString::fromStdString(File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini"),
+ false);
+ m_local_tab->addTab(edit, QString::fromStdString(m_game_id));
+ }
}
void GameConfigWidget::CreateWidgets()
{
+ // General
m_refresh_config = new QPushButton(tr("Refresh"));
- m_edit_user_config = new QPushButton(tr("Edit User Config"));
- m_view_default_config = new QPushButton(tr("View Default Config"));
// Core
auto* core_box = new QGroupBox(tr("Core"));
@@ -128,23 +154,51 @@ void GameConfigWidget::CreateWidgets()
settings_layout->addWidget(core_box);
settings_layout->addWidget(stereoscopy_box);
- auto* layout = new QGridLayout;
-
- layout->addWidget(settings_box, 0, 0, 1, -1);
-
- auto* button_layout = new QHBoxLayout;
- button_layout->setMargin(0);
+ auto* general_layout = new QGridLayout;
- layout->addLayout(button_layout, 1, 0, 1, -1);
+ general_layout->addWidget(settings_box, 0, 0, 1, -1);
- button_layout->addWidget(m_refresh_config);
- button_layout->addWidget(m_edit_user_config);
- button_layout->addWidget(m_view_default_config);
+ general_layout->addWidget(m_refresh_config, 1, 0, 1, -1);
for (QCheckBox* item : {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu,
m_enable_fast_disc, m_use_dsp_hle, m_use_monoscopic_shadows})
item->setTristate(true);
+ auto* general_widget = new QWidget;
+ general_widget->setLayout(general_layout);
+
+ // Advanced
+ auto* advanced_layout = new QVBoxLayout;
+
+ auto* default_group = new QGroupBox(tr("Default Config (Read Only)"));
+ auto* default_layout = new QVBoxLayout;
+ m_default_tab = new QTabWidget;
+
+ default_group->setLayout(default_layout);
+ default_layout->addWidget(m_default_tab);
+
+ auto* local_group = new QGroupBox(tr("User Config"));
+ auto* local_layout = new QVBoxLayout;
+ m_local_tab = new QTabWidget;
+
+ local_group->setLayout(local_layout);
+ local_layout->addWidget(m_local_tab);
+
+ advanced_layout->addWidget(default_group);
+ advanced_layout->addWidget(local_group);
+
+ auto* advanced_widget = new QWidget;
+
+ advanced_widget->setLayout(advanced_layout);
+
+ auto* layout = new QVBoxLayout;
+ auto* tab_widget = new QTabWidget;
+
+ tab_widget->addTab(general_widget, tr("General"));
+ tab_widget->addTab(advanced_widget, tr("Editor"));
+
+ layout->addWidget(tab_widget);
+
setLayout(layout);
}
@@ -152,8 +206,6 @@ void GameConfigWidget::ConnectWidgets()
{
// Buttons
connect(m_refresh_config, &QPushButton::pressed, this, &GameConfigWidget::LoadSettings);
- connect(m_edit_user_config, &QPushButton::pressed, this, &GameConfigWidget::EditUserConfig);
- connect(m_view_default_config, &QPushButton::pressed, this, &GameConfigWidget::ViewDefaultConfig);
for (QCheckBox* box : {m_enable_dual_core, m_enable_mmu, m_enable_fprf, m_sync_gpu,
m_enable_fast_disc, m_use_dsp_hle, m_use_monoscopic_shadows})
@@ -347,29 +399,3 @@ void GameConfigWidget::SaveSettings()
if (success && File::GetSize(m_gameini_local_path.toStdString()) == 0)
File::Delete(m_gameini_local_path.toStdString());
}
-
-void GameConfigWidget::EditUserConfig()
-{
- QFile file(m_gameini_local_path);
-
- if (!file.exists())
- {
- file.open(QIODevice::WriteOnly);
- file.close();
- }
-
- QDesktopServices::openUrl(QUrl::fromLocalFile(m_gameini_local_path));
-}
-
-void GameConfigWidget::ViewDefaultConfig()
-{
- for (const std::string& filename :
- ConfigLoaders::GetGameIniFilenames(m_game_id, m_game.GetRevision()))
- {
- QString path =
- QString::fromStdString(File::GetSysDirectory() + GAMESETTINGS_DIR DIR_SEP + filename);
-
- if (QFile(path).exists())
- QDesktopServices::openUrl(QUrl::fromLocalFile(path));
- }
-}