summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-07-20 11:12:28 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-02 03:06:59 -0400
commit107b396902be52f8ae305f58d4e7d85a86779051 (patch)
treed3295342db3707e355affe315f39bc478ec89a86 /src
parente8d7930edacdc04a4607ecd59fc402f2f04ea39d (diff)
moved tabs to SettingsDialog
removed Settings::query(), main window now deals with SettingsDialog directly
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp5
-rw-r--r--src/settings.cpp100
-rw-r--r--src/settings.h55
-rw-r--r--src/settingsdialog.cpp105
-rw-r--r--src/settingsdialog.h26
-rw-r--r--src/settingsdialogplugins.cpp2
6 files changed, 133 insertions, 160 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 7c73bc8a..28405819 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -72,6 +72,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "previewdialog.h"
#include "browserdialog.h"
#include "aboutdialog.h"
+#include "settingsdialog.h"
#include <safewritefile.h>
#include "nxmaccessmanager.h"
#include "appconfig.h"
@@ -5217,7 +5218,9 @@ void MainWindow::on_actionSettings_triggered()
bool proxy = settings.useProxy();
DownloadManager *dlManager = m_OrganizerCore.downloadManager();
- settings.query(&m_PluginContainer, this);
+
+ SettingsDialog dialog(&m_PluginContainer, &settings, this);
+ dialog.exec();
if (oldManagedGameDirectory != settings.getManagedGameDirectory()) {
QMessageBox::about(this, tr("Restarting MO"),
diff --git a/src/settings.cpp b/src/settings.cpp
index 725b7e06..dc07e107 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -21,14 +21,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "pluginsetting.h"
#include "serverinfo.h"
-#include "settingsdialog.h"
-#include "settingsdialogdiagnostics.h"
-#include "settingsdialoggeneral.h"
-#include "settingsdialognexus.h"
-#include "settingsdialogpaths.h"
-#include "settingsdialogplugins.h"
-#include "settingsdialogsteam.h"
-#include "settingsdialogworkarounds.h"
#include "versioninfo.h"
#include "appconfig.h"
#include "organizercore.h"
@@ -75,23 +67,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
using namespace MOBase;
-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;
-}
-
-
Settings *Settings::s_Instance = nullptr;
@@ -668,78 +643,3 @@ void Settings::writePluginBlacklist()
m_Settings.endArray();
}
-
-void Settings::query(PluginContainer *pluginContainer, QWidget *parent)
-{
- SettingsDialog dialog(pluginContainer, this, parent);
-
- std::vector<std::unique_ptr<SettingsTab>> tabs;
-
- tabs.push_back(std::unique_ptr<SettingsTab>(new GeneralSettingsTab(this, dialog)));
- tabs.push_back(std::unique_ptr<SettingsTab>(new PathsSettingsTab(this, dialog)));
- tabs.push_back(std::unique_ptr<SettingsTab>(new DiagnosticsSettingsTab(this, dialog)));
- tabs.push_back(std::unique_ptr<SettingsTab>(new NexusSettingsTab(this, dialog)));
- tabs.push_back(std::unique_ptr<SettingsTab>(new SteamSettingsTab(this, dialog)));
- tabs.push_back(std::unique_ptr<SettingsTab>(new PluginsSettingsTab(this, dialog)));
- tabs.push_back(std::unique_ptr<SettingsTab>(new WorkaroundsSettingsTab(this, dialog)));
-
-
- QString key = QString("geometry/%1").arg(dialog.objectName());
- if (m_Settings.contains(key)) {
- dialog.restoreGeometry(m_Settings.value(key).toByteArray());
- }
-
- if (dialog.exec() == QDialog::Accepted) {
-
- for (auto&& tab : tabs) {
- tab->closing();
- }
-
- // remember settings before change
- QMap<QString, QString> before;
- m_Settings.beginGroup("Settings");
- for (auto k : m_Settings.allKeys())
- before[k] = m_Settings.value(k).toString();
- m_Settings.endGroup();
-
- // transfer modified settings to configuration file
- for (std::unique_ptr<SettingsTab> const &tab: tabs) {
- tab->update();
- }
-
- // print "changed" settings
- m_Settings.beginGroup("Settings");
- bool first_update = true;
- for (auto k : m_Settings.allKeys())
- if (m_Settings.value(k).toString() != before[k] && !k.contains("username") && !k.contains("password"))
- {
- if (first_update) {
- log::debug("Changed settings:");
- first_update = false;
- }
- log::debug(" {}={}", k, m_Settings.value(k).toString());
- }
- m_Settings.endGroup();
- }
- m_Settings.setValue(key, dialog.saveGeometry());
-
- // These changes happen regardless of accepted or rejected
- bool restartNeeded = false;
- if (dialog.getApiKeyChanged()) {
- restartNeeded = true;
- }
- if (dialog.getResetGeometries()) {
- restartNeeded = true;
- m_Settings.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);
- }
- }
-
-}
diff --git a/src/settings.h b/src/settings.h
index 71fbcbc1..899baaa3 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -26,60 +26,21 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QList>
#include <QMap>
#include <QObject>
-#include <QPushButton>
#include <QSet>
#include <QSettings>
#include <QString>
#include <QVariant>
#include <QColor>
-#include <QMetaType>
-
-#include <QtGlobal> //for uint
-
#include <map>
#include <vector>
-class QCheckBox;
-class QComboBox;
-class QLineEdit;
-class QSpinBox;
-class QListWidget;
-class QWidget;
-class QLabel;
-class QPushButton;
-
-struct ServerInfo;
-
namespace MOBase {
class IPlugin;
class IPluginGame;
}
-namespace Ui {
- class SettingsDialog;
-}
-
-class SettingsDialog;
class PluginContainer;
-class Settings;
-
-class SettingsTab
-{
-public:
- SettingsTab(Settings *m_parent, SettingsDialog &m_dialog);
- virtual ~SettingsTab();
-
- virtual void update() = 0;
- virtual void closing() {}
-
-protected:
- Settings *m_parent;
- QSettings &m_Settings;
- SettingsDialog &m_dialog;
- Ui::SettingsDialog* ui;
-
- QWidget* parentWidget();
-};
+struct ServerInfo;
/**
* manages the settings for Mod Organizer. The settings are not cached
@@ -87,17 +48,11 @@ protected:
**/
class Settings : public QObject
{
-
Q_OBJECT
public:
-
- /**
- * @brief constructor
- **/
Settings(const QSettings &settingsSource);
-
- virtual ~Settings();
+ ~Settings();
static Settings &instance();
@@ -114,12 +69,6 @@ public:
void registerPlugin(MOBase::IPlugin *plugin);
/**
- * displays a SettingsDialog that allows the user to change settings. If the
- * user accepts the changes, the settings are immediately written
- **/
- void query(PluginContainer *pluginContainer, QWidget *parent);
-
- /**
* set up the settings for the specified plugins
**/
void addPluginSettings(const std::vector<MOBase::IPlugin*> &plugins);
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 <http://www.gnu.org/licenses/>.
#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 <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
@@ -47,7 +55,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
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<SettingsTab>(new GeneralSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(new PathsSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(new DiagnosticsSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(new NexusSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(new SteamSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(new PluginsSettingsTab(settings, *this)));
+ m_tabs.push_back(std::unique_ptr<SettingsTab>(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<QString, QString> 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<SettingsTab> 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;
+}
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index 81c17f44..f2367315 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -27,10 +27,26 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
class PluginContainer;
class Settings;
+class SettingsDialog;
+namespace Ui { class SettingsDialog; }
-namespace Ui {
- class SettingsDialog;
-}
+class SettingsTab
+{
+public:
+ SettingsTab(Settings *m_parent, SettingsDialog &m_dialog);
+ virtual ~SettingsTab();
+
+ virtual void update() = 0;
+ virtual void closing() {}
+
+protected:
+ Settings *m_parent;
+ QSettings &m_Settings;
+ SettingsDialog &m_dialog;
+ Ui::SettingsDialog* ui;
+
+ QWidget* parentWidget();
+};
/**
@@ -60,6 +76,8 @@ public:
bool m_GeometriesReset;
PluginContainer *m_PluginContainer;
+ int exec() override;
+
public slots:
virtual void accept();
@@ -69,7 +87,7 @@ public:
private:
Settings* m_settings;
-
+ std::vector<std::unique_ptr<SettingsTab>> m_tabs;
};
diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp
index 33bc1563..53b28fcc 100644
--- a/src/settingsdialogplugins.cpp
+++ b/src/settingsdialogplugins.cpp
@@ -8,6 +8,8 @@ using MOBase::IPlugin;
PluginsSettingsTab::PluginsSettingsTab(Settings *m_parent, SettingsDialog &m_dialog)
: SettingsTab(m_parent, m_dialog)
{
+ ui->pluginSettingsList->setStyleSheet("QTreeWidget::item {padding-right: 10px;}");
+
// display plugin settings
QSet<QString> handledNames;
for (IPlugin *plugin : m_parent->plugins()) {