From 107b396902be52f8ae305f58d4e7d85a86779051 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Sat, 20 Jul 2019 11:12:28 -0400
Subject: moved tabs to SettingsDialog removed Settings::query(), main window
now deals with SettingsDialog directly
---
src/settingsdialog.cpp | 105 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 103 insertions(+), 2 deletions(-)
(limited to 'src/settingsdialog.cpp')
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 76b0a146..8c5b2678 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -29,6 +29,14 @@ along with Mod Organizer. If not, see .
#include "nexusinterface.h"
#include "plugincontainer.h"
+#include "settingsdialogdiagnostics.h"
+#include "settingsdialoggeneral.h"
+#include "settingsdialognexus.h"
+#include "settingsdialogpaths.h"
+#include "settingsdialogplugins.h"
+#include "settingsdialogsteam.h"
+#include "settingsdialogworkarounds.h"
+
#include
#include
@@ -47,7 +55,6 @@ along with Mod Organizer. If not, see .
using namespace MOBase;
-
SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, Settings* settings, QWidget *parent)
: TutorableDialog("SettingsDialog", parent)
, ui(new Ui::SettingsDialog)
@@ -57,7 +64,84 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, Settings* setti
, m_keyChanged(false)
{
ui->setupUi(this);
- ui->pluginSettingsList->setStyleSheet("QTreeWidget::item {padding-right: 10px;}");
+
+ m_tabs.push_back(std::unique_ptr(new GeneralSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr(new PathsSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr(new DiagnosticsSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr(new NexusSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr(new SteamSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr(new PluginsSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr(new WorkaroundsSettingsTab(settings, *this)));
+
+ auto& qsettings = settings->directInterface();
+
+ QString key = QString("geometry/%1").arg(objectName());
+ if (qsettings.contains(key)) {
+ restoreGeometry(qsettings.value(key).toByteArray());
+ }
+}
+
+int SettingsDialog::exec()
+{
+ auto& qsettings = m_settings->directInterface();
+ auto ret = TutorableDialog::exec();
+
+ if (ret == QDialog::Accepted) {
+
+ for (auto&& tab : m_tabs) {
+ tab->closing();
+ }
+
+ // remember settings before change
+ QMap before;
+ qsettings.beginGroup("Settings");
+ for (auto k : qsettings.allKeys())
+ before[k] = qsettings.value(k).toString();
+ qsettings.endGroup();
+
+ // transfer modified settings to configuration file
+ for (std::unique_ptr const &tab: m_tabs) {
+ tab->update();
+ }
+
+ // print "changed" settings
+ qsettings.beginGroup("Settings");
+ bool first_update = true;
+ for (auto k : qsettings.allKeys())
+ if (qsettings.value(k).toString() != before[k] && !k.contains("username") && !k.contains("password"))
+ {
+ if (first_update) {
+ qDebug("Changed settings:");
+ first_update = false;
+ }
+ qDebug(" %s=%s", k.toUtf8().data(), qsettings.value(k).toString().toUtf8().data());
+ }
+ qsettings.endGroup();
+ }
+
+ QString key = QString("geometry/%1").arg(objectName());
+ qsettings.setValue(key, saveGeometry());
+
+ // These changes happen regardless of accepted or rejected
+ bool restartNeeded = false;
+ if (getApiKeyChanged()) {
+ restartNeeded = true;
+ }
+ if (getResetGeometries()) {
+ restartNeeded = true;
+ qsettings.setValue("reset_geometry", true);
+ }
+ if (restartNeeded) {
+ if (QMessageBox::question(nullptr,
+ tr("Restart Mod Organizer?"),
+ tr("In order to finish configuration changes, MO must be restarted.\n"
+ "Restart it now?"),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ qApp->exit(INT_MAX);
+ }
+ }
+
+ return ret;
}
SettingsDialog::~SettingsDialog()
@@ -107,3 +191,20 @@ bool SettingsDialog::getApiKeyChanged()
{
return m_keyChanged;
}
+
+
+SettingsTab::SettingsTab(Settings *m_parent, SettingsDialog &m_dialog)
+ : m_parent(m_parent)
+ , m_Settings(m_parent->settingsRef())
+ , m_dialog(m_dialog)
+ , ui(m_dialog.ui)
+{
+}
+
+SettingsTab::~SettingsTab()
+{}
+
+QWidget* SettingsTab::parentWidget()
+{
+ return &m_dialog;
+}
--
cgit v1.3.1