summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/settings.cpp54
-rw-r--r--src/settings.h25
-rw-r--r--src/settingsdialog.cpp52
-rw-r--r--src/settingsdialog.h4
-rw-r--r--src/settingsdialogplugins.cpp110
-rw-r--r--src/settingsdialogplugins.h20
7 files changed, 146 insertions, 122 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a1adf2db..a8ded510 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -40,6 +40,7 @@ SET(organizer_SRCS
settingsdialoggeneral.cpp
settingsdialognexus.cpp
settingsdialogpaths.cpp
+ settingsdialogplugins.cpp
settingsdialogsteam.cpp
settings.cpp
selfupdater.cpp
@@ -158,6 +159,7 @@ SET(organizer_HDRS
settingsdialoggeneral.h
settingsdialognexus.h
settingsdialogpaths.h
+ settingsdialogplugins.h
settingsdialogsteam.h
settings.h
selfupdater.h
@@ -442,6 +444,7 @@ set(settings
settingsdialoggeneral
settingsdialognexus
settingsdialogpaths
+ settingsdialogplugins
settingsdialogsteam
)
diff --git a/src/settings.cpp b/src/settings.cpp
index 26c9720a..bc45b720 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -25,6 +25,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "settingsdialoggeneral.h"
#include "settingsdialognexus.h"
#include "settingsdialogpaths.h"
+#include "settingsdialogplugins.h"
#include "settingsdialogsteam.h"
#include "versioninfo.h"
#include "appconfig.h"
@@ -677,7 +678,7 @@ void Settings::query(PluginContainer *pluginContainer, QWidget *parent)
tabs.push_back(std::unique_ptr<SettingsTab>(new DiagnosticsTab(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 PluginsTab(this, dialog)));
+ tabs.push_back(std::unique_ptr<SettingsTab>(new PluginsSettingsTab(this, dialog)));
tabs.push_back(std::unique_ptr<SettingsTab>(new WorkaroundsTab(this, dialog)));
@@ -687,6 +688,11 @@ void Settings::query(PluginContainer *pluginContainer, QWidget *parent)
}
if (dialog.exec() == QDialog::Accepted) {
+
+ for (auto&& tab : tabs) {
+ tab->closing();
+ }
+
// remember settings before change
QMap<QString, QString> before;
m_Settings.beginGroup("Settings");
@@ -766,52 +772,6 @@ void Settings::DiagnosticsTab::update()
}
-Settings::PluginsTab::PluginsTab(Settings *m_parent, SettingsDialog &m_dialog)
- : SettingsTab(m_parent, m_dialog)
- , m_pluginsList(m_dialog.findChild<QListWidget *>("pluginsList"))
- , m_pluginBlacklistList(m_dialog.findChild<QListWidget *>("pluginBlacklist"))
-{
- // display plugin settings
- QSet<QString> handledNames;
- for (IPlugin *plugin : m_parent->m_Plugins) {
- if (handledNames.contains(plugin->name()))
- continue;
- QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), m_pluginsList);
- listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin));
- listItem->setData(Qt::UserRole + 1, m_parent->m_PluginSettings[plugin->name()]);
- listItem->setData(Qt::UserRole + 2, m_parent->m_PluginDescriptions[plugin->name()]);
- m_pluginsList->addItem(listItem);
- handledNames.insert(plugin->name());
- }
-
- // display plugin blacklist
- for (const QString &pluginName : m_parent->m_PluginBlacklist) {
- m_pluginBlacklistList->addItem(pluginName);
- }
-}
-
-void Settings::PluginsTab::update()
-{
- // transfer plugin settings to in-memory structure
- for (int i = 0; i < m_pluginsList->count(); ++i) {
- QListWidgetItem *item = m_pluginsList->item(i);
- m_parent->m_PluginSettings[item->text()] = item->data(Qt::UserRole + 1).toMap();
- }
- // store plugin settings on disc
- for (auto iterPlugins = m_parent->m_PluginSettings.begin(); iterPlugins != m_parent->m_PluginSettings.end(); ++iterPlugins) {
- for (auto iterSettings = iterPlugins->begin(); iterSettings != iterPlugins->end(); ++iterSettings) {
- m_Settings.setValue("Plugins/" + iterPlugins.key() + "/" + iterSettings.key(), iterSettings.value());
- }
- }
-
- // store plugin blacklist
- m_parent->m_PluginBlacklist.clear();
- for (QListWidgetItem *item : m_pluginBlacklistList->findItems("*", Qt::MatchWildcard)) {
- m_parent->m_PluginBlacklist.insert(item->text());
- }
- m_parent->writePluginBlacklist();
-}
-
Settings::WorkaroundsTab::WorkaroundsTab(Settings *m_parent,
SettingsDialog &m_dialog)
: SettingsTab(m_parent, m_dialog)
diff --git a/src/settings.h b/src/settings.h
index 5bf705d1..5298103a 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -70,6 +70,7 @@ public:
virtual ~SettingsTab();
virtual void update() = 0;
+ virtual void closing() {}
protected:
Settings *m_parent;
@@ -426,8 +427,13 @@ public:
*/
bool colorSeparatorScrollbar() const;
+ // temp
QSettings& settingsRef() { return m_Settings; }
MOBase::IPluginGame const *gamePlugin() { return m_GamePlugin; }
+ QMap<QString, QVariantMap> m_PluginSettings;
+ QMap<QString, QVariantMap> m_PluginDescriptions;
+ QSet<QString> m_PluginBlacklist;
+ void writePluginBlacklist();
public slots:
@@ -440,7 +446,6 @@ private:
static QString deObfuscate(const QString key);
void readPluginBlacklist();
- void writePluginBlacklist();
QString getConfigurablePath(const QString &key, const QString &def, bool resolve) const;
@@ -461,19 +466,6 @@ private:
void setLevelsBox();
};
- /** Display/store the configuration in the 'plugins' tab of the settings dialogue */
- class PluginsTab : public SettingsTab
- {
- public:
- PluginsTab(Settings *m_parent, SettingsDialog &m_dialog);
-
- void update();
-
- private:
- QListWidget *m_pluginsList;
- QListWidget *m_pluginBlacklistList;
- };
-
/** Display/store the configuration in the 'workarounds' tab of the settings dialogue */
class WorkaroundsTab : public SettingsTab
{
@@ -512,11 +504,6 @@ private:
std::vector<MOBase::IPlugin*> m_Plugins;
- QMap<QString, QVariantMap> m_PluginSettings;
- QMap<QString, QVariantMap> m_PluginDescriptions;
-
- QSet<QString> m_PluginBlacklist;
-
};
#endif // SETTINGS_H
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 6d5a8cc0..f43f7ae8 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -99,7 +99,6 @@ void SettingsDialog::accept()
return;
}
- storeSettings(ui->pluginsList->currentItem());
TutorableDialog::accept();
}
@@ -149,57 +148,6 @@ void SettingsDialog::on_bsaDateBtn_clicked()
dir.absolutePath().toStdWString());
}
-void SettingsDialog::storeSettings(QListWidgetItem *pluginItem)
-{
- if (pluginItem != nullptr) {
- QVariantMap settings = pluginItem->data(Qt::UserRole + 1).toMap();
-
- for (int i = 0; i < ui->pluginSettingsList->topLevelItemCount(); ++i) {
- const QTreeWidgetItem *item = ui->pluginSettingsList->topLevelItem(i);
- settings[item->text(0)] = item->data(1, Qt::DisplayRole);
- }
-
- pluginItem->setData(Qt::UserRole + 1, settings);
- }
-}
-
-void SettingsDialog::on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
-{
- storeSettings(previous);
-
- ui->pluginSettingsList->clear();
- IPlugin *plugin = static_cast<IPlugin*>(current->data(Qt::UserRole).value<void*>());
- ui->authorLabel->setText(plugin->author());
- ui->versionLabel->setText(plugin->version().canonicalString());
- ui->descriptionLabel->setText(plugin->description());
-
- QVariantMap settings = current->data(Qt::UserRole + 1).toMap();
- QVariantMap descriptions = current->data(Qt::UserRole + 2).toMap();
- ui->pluginSettingsList->setEnabled(settings.count() != 0);
- for (auto iter = settings.begin(); iter != settings.end(); ++iter) {
- QTreeWidgetItem *newItem = new QTreeWidgetItem(QStringList(iter.key()));
- QVariant value = *iter;
- QString description;
- {
- auto descriptionIter = descriptions.find(iter.key());
- if (descriptionIter != descriptions.end()) {
- description = descriptionIter->toString();
- }
- }
-
- ui->pluginSettingsList->setItemDelegateForColumn(0, new NoEditDelegate());
- newItem->setData(1, Qt::DisplayRole, value);
- newItem->setData(1, Qt::EditRole, value);
- newItem->setToolTip(1, description);
-
- newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
- ui->pluginSettingsList->addTopLevelItem(newItem);
- }
-
- ui->pluginSettingsList->resizeColumnToContents(0);
- ui->pluginSettingsList->resizeColumnToContents(1);
-}
-
void SettingsDialog::deleteBlacklistItem()
{
ui->pluginBlacklist->takeItem(ui->pluginBlacklist->currentIndex().row());
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index df5d0ad8..319e6ed8 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -62,9 +62,6 @@ public:
public slots:
virtual void accept();
-private:
- void storeSettings(QListWidgetItem *pluginItem);
-
public:
QString getExecutableBlacklist() { return m_ExecutableBlacklist; }
void setExecutableBlacklist(QString blacklist) { m_ExecutableBlacklist = blacklist; }
@@ -74,7 +71,6 @@ public:
private slots:
void on_bsaDateBtn_clicked();
void on_execBlacklistBtn_clicked();
- void on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
void on_resetGeometryBtn_clicked();
void deleteBlacklistItem();
diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp
new file mode 100644
index 00000000..32269344
--- /dev/null
+++ b/src/settingsdialogplugins.cpp
@@ -0,0 +1,110 @@
+#include "settingsdialogplugins.h"
+#include "ui_settingsdialog.h"
+#include "noeditdelegate.h"
+#include <iplugin.h>
+
+using MOBase::IPlugin;
+
+PluginsSettingsTab::PluginsSettingsTab(Settings *m_parent, SettingsDialog &m_dialog)
+ : SettingsTab(m_parent, m_dialog)
+{
+ // display plugin settings
+ QSet<QString> handledNames;
+ for (IPlugin *plugin : m_parent->plugins()) {
+ if (handledNames.contains(plugin->name()))
+ continue;
+ QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), ui->pluginsList);
+ listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin));
+ listItem->setData(Qt::UserRole + 1, m_parent->m_PluginSettings[plugin->name()]);
+ listItem->setData(Qt::UserRole + 2, m_parent->m_PluginDescriptions[plugin->name()]);
+ ui->pluginsList->addItem(listItem);
+ handledNames.insert(plugin->name());
+ }
+
+ // display plugin blacklist
+ for (const QString &pluginName : m_parent->m_PluginBlacklist) {
+ ui->pluginBlacklist->addItem(pluginName);
+ }
+
+ QObject::connect(
+ ui->pluginsList, &QListWidget::currentItemChanged,
+ [&](auto* current, auto* previous) { on_pluginsList_currentItemChanged(current, previous); });
+}
+
+void PluginsSettingsTab::update()
+{
+ // transfer plugin settings to in-memory structure
+ for (int i = 0; i < ui->pluginsList->count(); ++i) {
+ QListWidgetItem *item = ui->pluginsList->item(i);
+ m_parent->m_PluginSettings[item->text()] = item->data(Qt::UserRole + 1).toMap();
+ }
+ // store plugin settings on disc
+ for (auto iterPlugins = m_parent->m_PluginSettings.begin(); iterPlugins != m_parent->m_PluginSettings.end(); ++iterPlugins) {
+ for (auto iterSettings = iterPlugins->begin(); iterSettings != iterPlugins->end(); ++iterSettings) {
+ m_Settings.setValue("Plugins/" + iterPlugins.key() + "/" + iterSettings.key(), iterSettings.value());
+ }
+ }
+
+ // store plugin blacklist
+ m_parent->m_PluginBlacklist.clear();
+ for (QListWidgetItem *item : ui->pluginBlacklist->findItems("*", Qt::MatchWildcard)) {
+ m_parent->m_PluginBlacklist.insert(item->text());
+ }
+ m_parent->writePluginBlacklist();
+}
+
+void PluginsSettingsTab::closing()
+{
+ storeSettings(ui->pluginsList->currentItem());
+}
+
+void PluginsSettingsTab::on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
+{
+ storeSettings(previous);
+
+ ui->pluginSettingsList->clear();
+ IPlugin *plugin = static_cast<IPlugin*>(current->data(Qt::UserRole).value<void*>());
+ ui->authorLabel->setText(plugin->author());
+ ui->versionLabel->setText(plugin->version().canonicalString());
+ ui->descriptionLabel->setText(plugin->description());
+
+ QVariantMap settings = current->data(Qt::UserRole + 1).toMap();
+ QVariantMap descriptions = current->data(Qt::UserRole + 2).toMap();
+ ui->pluginSettingsList->setEnabled(settings.count() != 0);
+ for (auto iter = settings.begin(); iter != settings.end(); ++iter) {
+ QTreeWidgetItem *newItem = new QTreeWidgetItem(QStringList(iter.key()));
+ QVariant value = *iter;
+ QString description;
+ {
+ auto descriptionIter = descriptions.find(iter.key());
+ if (descriptionIter != descriptions.end()) {
+ description = descriptionIter->toString();
+ }
+ }
+
+ ui->pluginSettingsList->setItemDelegateForColumn(0, new NoEditDelegate());
+ newItem->setData(1, Qt::DisplayRole, value);
+ newItem->setData(1, Qt::EditRole, value);
+ newItem->setToolTip(1, description);
+
+ newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
+ ui->pluginSettingsList->addTopLevelItem(newItem);
+ }
+
+ ui->pluginSettingsList->resizeColumnToContents(0);
+ ui->pluginSettingsList->resizeColumnToContents(1);
+}
+
+void PluginsSettingsTab::storeSettings(QListWidgetItem *pluginItem)
+{
+ if (pluginItem != nullptr) {
+ QVariantMap settings = pluginItem->data(Qt::UserRole + 1).toMap();
+
+ for (int i = 0; i < ui->pluginSettingsList->topLevelItemCount(); ++i) {
+ const QTreeWidgetItem *item = ui->pluginSettingsList->topLevelItem(i);
+ settings[item->text(0)] = item->data(1, Qt::DisplayRole);
+ }
+
+ pluginItem->setData(Qt::UserRole + 1, settings);
+ }
+}
diff --git a/src/settingsdialogplugins.h b/src/settingsdialogplugins.h
new file mode 100644
index 00000000..48d61858
--- /dev/null
+++ b/src/settingsdialogplugins.h
@@ -0,0 +1,20 @@
+#ifndef SETTINGSDIALOGPLUGINS_H
+#define SETTINGSDIALOGPLUGINS_H
+
+#include "settings.h"
+#include "settingsdialog.h"
+
+class PluginsSettingsTab : public SettingsTab
+{
+public:
+ PluginsSettingsTab(Settings *m_parent, SettingsDialog &m_dialog);
+
+ void update();
+ void closing() override;
+
+private:
+ void on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
+ void storeSettings(QListWidgetItem *pluginItem);
+};
+
+#endif // SETTINGSDIALOGPLUGINS_H