From 2ffad7edf2946e66585a67c4ab58c0522cd8e412 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sat, 17 Aug 2019 13:20:53 -0400 Subject: made member variables in SettingsTab private, added accessors SettingsDialog now uses GeometrySaver --- src/settingsdialogplugins.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/settingsdialogplugins.cpp') diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp index 53b28fcc..329ba301 100644 --- a/src/settingsdialogplugins.cpp +++ b/src/settingsdialogplugins.cpp @@ -5,26 +5,26 @@ using MOBase::IPlugin; -PluginsSettingsTab::PluginsSettingsTab(Settings *m_parent, SettingsDialog &m_dialog) - : SettingsTab(m_parent, m_dialog) +PluginsSettingsTab::PluginsSettingsTab(Settings& s, SettingsDialog& d) + : SettingsTab(s, d) { ui->pluginSettingsList->setStyleSheet("QTreeWidget::item {padding-right: 10px;}"); // display plugin settings QSet handledNames; - for (IPlugin *plugin : m_parent->plugins()) { + for (IPlugin *plugin : settings().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()]); + listItem->setData(Qt::UserRole + 1, settings().m_PluginSettings[plugin->name()]); + listItem->setData(Qt::UserRole + 2, settings().m_PluginDescriptions[plugin->name()]); ui->pluginsList->addItem(listItem); handledNames.insert(plugin->name()); } // display plugin blacklist - for (const QString &pluginName : m_parent->m_PluginBlacklist) { + for (const QString &pluginName : settings().m_PluginBlacklist) { ui->pluginBlacklist->addItem(pluginName); } @@ -34,7 +34,7 @@ PluginsSettingsTab::PluginsSettingsTab(Settings *m_parent, SettingsDialog &m_dia QShortcut *delShortcut = new QShortcut( QKeySequence(Qt::Key_Delete), ui->pluginBlacklist); - QObject::connect(delShortcut, &QShortcut::activated, parentWidget(), [&]{ deleteBlacklistItem(); }); + QObject::connect(delShortcut, &QShortcut::activated, &dialog(), [&]{ deleteBlacklistItem(); }); } void PluginsSettingsTab::update() @@ -42,21 +42,21 @@ 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(); + settings().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 iterPlugins = settings().m_PluginSettings.begin(); iterPlugins != settings().m_PluginSettings.end(); ++iterPlugins) { for (auto iterSettings = iterPlugins->begin(); iterSettings != iterPlugins->end(); ++iterSettings) { - m_Settings.setValue("Plugins/" + iterPlugins.key() + "/" + iterSettings.key(), iterSettings.value()); + qsettings().setValue("Plugins/" + iterPlugins.key() + "/" + iterSettings.key(), iterSettings.value()); } } // store plugin blacklist - m_parent->m_PluginBlacklist.clear(); + settings().m_PluginBlacklist.clear(); for (QListWidgetItem *item : ui->pluginBlacklist->findItems("*", Qt::MatchWildcard)) { - m_parent->m_PluginBlacklist.insert(item->text()); + settings().m_PluginBlacklist.insert(item->text()); } - m_parent->writePluginBlacklist(); + settings().writePluginBlacklist(); } void PluginsSettingsTab::closing() -- cgit v1.3.1 From a174d4a2aa3d07c6a3c4bedfdf77471f71ec1dba Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Mon, 2 Sep 2019 09:22:45 -0400 Subject: moved plugins to settings --- src/organizercore.cpp | 10 +- src/plugincontainer.cpp | 6 +- src/settings.cpp | 264 ++++++++++++++++++++++++++---------------- src/settings.h | 123 +++++++------------- src/settingsdialogplugins.cpp | 28 +++-- 5 files changed, 228 insertions(+), 203 deletions(-) (limited to 'src/settingsdialogplugins.cpp') diff --git a/src/organizercore.cpp b/src/organizercore.cpp index ec13ca9c..af0cf969 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -512,7 +512,7 @@ void OrganizerCore::disconnectPlugins() m_DownloadManager.setPluginContainer(nullptr); m_ModList.setPluginContainer(nullptr); - m_Settings.clearPlugins(); + m_Settings.plugins().clearPlugins(); m_GamePlugin = nullptr; m_PluginContainer = nullptr; } @@ -864,26 +864,26 @@ void OrganizerCore::modDataChanged(MOBase::IModInterface *) QVariant OrganizerCore::pluginSetting(const QString &pluginName, const QString &key) const { - return m_Settings.pluginSetting(pluginName, key); + return m_Settings.plugins().pluginSetting(pluginName, key); } void OrganizerCore::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) { - m_Settings.setPluginSetting(pluginName, key, value); + m_Settings.plugins().setPluginSetting(pluginName, key, value); } QVariant OrganizerCore::persistent(const QString &pluginName, const QString &key, const QVariant &def) const { - return m_Settings.pluginPersistent(pluginName, key, def); + return m_Settings.plugins().pluginPersistent(pluginName, key, def); } void OrganizerCore::setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync) { - m_Settings.setPluginPersistent(pluginName, key, value, sync); + m_Settings.plugins().setPluginPersistent(pluginName, key, value, sync); } QString OrganizerCore::pluginDataPath() const diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 62cdff1e..16a77387 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -95,7 +95,7 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) return false; } plugin->setProperty("filename", fileName); - m_Organizer->settings().registerPlugin(pluginObj); + m_Organizer->settings().plugins().registerPlugin(pluginObj); } { // diagnosis plugin @@ -266,7 +266,7 @@ void PluginContainer::loadPlugins() "(Please note: If this is the first time you see this message for this plugin you may want to give it another try. " "The plugin may be able to recover from the problem)").arg(fileName), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { - m_Organizer->settings().addBlacklistPlugin(fileName); + m_Organizer->settings().plugins().addBlacklistPlugin(fileName); } loadCheck.close(); } @@ -279,7 +279,7 @@ void PluginContainer::loadPlugins() while (iter.hasNext()) { iter.next(); - if (m_Organizer->settings().pluginBlacklisted(iter.fileName())) { + if (m_Organizer->settings().plugins().pluginBlacklisted(iter.fileName())) { log::debug("plugin \"{}\" blacklisted", iter.fileName()); continue; } diff --git a/src/settings.cpp b/src/settings.cpp index 34b1b4ac..072318a2 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -242,7 +242,7 @@ Settings *Settings::s_Instance = nullptr; Settings::Settings(const QString& path) : m_Settings(path, QSettings::IniFormat), - m_Geometry(m_Settings), m_Colors(m_Settings) + m_Geometry(m_Settings), m_Colors(m_Settings), m_Plugins(m_Settings) { if (s_Instance != nullptr) { throw std::runtime_error("second instance of \"Settings\" created"); @@ -319,25 +319,6 @@ QString Settings::getFilename() const return m_Settings.fileName(); } -void Settings::clearPlugins() -{ - m_Plugins.clear(); - m_PluginSettings.clear(); - - m_PluginBlacklist.clear(); - - ScopedReadArray sra(m_Settings, "pluginBlacklist"); - for (int i = 0; i < sra.count(); ++i) { - m_Settings.setArrayIndex(i); - m_PluginBlacklist.insert(m_Settings.value("name").toString()); - } -} - -bool Settings::pluginBlacklisted(const QString &fileName) const -{ - return m_PluginBlacklist.contains(fileName); -} - void Settings::registerAsNXMHandler(bool force) { const auto nxmPath = QCoreApplication::applicationDirPath() + "/nxmhandler.exe"; @@ -371,24 +352,6 @@ void Settings::managedGameChanged(IPluginGame const *gamePlugin) m_GamePlugin = gamePlugin; } -void Settings::registerPlugin(IPlugin *plugin) -{ - m_Plugins.push_back(plugin); - m_PluginSettings.insert(plugin->name(), QVariantMap()); - m_PluginDescriptions.insert(plugin->name(), QVariantMap()); - for (const PluginSetting &setting : plugin->settings()) { - QVariant temp = m_Settings.value("Plugins/" + plugin->name() + "/" + setting.key, setting.defaultValue); - if (!temp.convert(setting.defaultValue.type())) { - log::warn( - "failed to interpret \"{}\" as correct type for \"{}\" in plugin \"{}\", using default", - temp.toString(), setting.key, plugin->name()); - temp = setting.defaultValue; - } - m_PluginSettings[plugin->name()][setting.key] = temp; - m_PluginDescriptions[plugin->name()][setting.key] = QString("%1 (default: %2)").arg(setting.description).arg(setting.defaultValue.toString()); - } -} - bool Settings::obfuscate(const QString key, const QString data) { QString finalKey("ModOrganizer2_" + key); @@ -921,51 +884,6 @@ bool Settings::archiveParsing() const return m_Settings.value("Settings/archive_parsing_experimental", false).toBool(); } -QVariant Settings::pluginSetting(const QString &pluginName, const QString &key) const -{ - auto iterPlugin = m_PluginSettings.find(pluginName); - if (iterPlugin == m_PluginSettings.end()) { - return QVariant(); - } - auto iterSetting = iterPlugin->find(key); - if (iterSetting == iterPlugin->end()) { - return QVariant(); - } - - return *iterSetting; -} - -void Settings::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) -{ - auto iterPlugin = m_PluginSettings.find(pluginName); - if (iterPlugin == m_PluginSettings.end()) { - throw MyException(tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName)); - } - - // store the new setting both in memory and in the ini - m_PluginSettings[pluginName][key] = value; - m_Settings.setValue("Plugins/" + pluginName + "/" + key, value); -} - -QVariant Settings::pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const -{ - if (!m_PluginSettings.contains(pluginName)) { - return def; - } - return m_Settings.value("PluginPersistance/" + pluginName + "/" + key, def); -} - -void Settings::setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync) -{ - if (!m_PluginSettings.contains(pluginName)) { - throw MyException(tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName)); - } - m_Settings.setValue("PluginPersistance/" + pluginName + "/" + key, value); - if (sync) { - m_Settings.sync(); - } -} - QString Settings::language() { QString result = m_Settings.value("Settings/language", "").toString(); @@ -1122,24 +1040,6 @@ void Settings::updateServers(ServerList servers) } } -void Settings::addBlacklistPlugin(const QString &fileName) -{ - m_PluginBlacklist.insert(fileName); - writePluginBlacklist(); -} - -void Settings::writePluginBlacklist() -{ - m_Settings.remove("pluginBlacklist"); - - ScopedWriteArray swa(m_Settings, "pluginBlacklist"); - int idx = 0; - for (const QString &plugin : m_PluginBlacklist) { - m_Settings.setArrayIndex(idx++); - m_Settings.setValue("name", plugin); - } -} - std::map Settings::getRecentDirectories() const { std::map map; @@ -1365,6 +1265,16 @@ const ColorSettings& Settings::colors() const return m_Colors; } +PluginSettings& Settings::plugins() +{ + return m_Plugins; +} + +const PluginSettings& Settings::plugins() const +{ + return m_Plugins; +} + QSettings::Status Settings::sync() const { m_Settings.sync(); @@ -1772,6 +1682,158 @@ void ColorSettings::setPluginListContained(const QColor& c) } +PluginSettings::PluginSettings(QSettings& settings) + : m_Settings(settings) +{ +} + +void PluginSettings::clearPlugins() +{ + m_Plugins.clear(); + m_PluginSettings.clear(); + + m_PluginBlacklist.clear(); + + ScopedReadArray sra(m_Settings, "pluginBlacklist"); + for (int i = 0; i < sra.count(); ++i) { + m_Settings.setArrayIndex(i); + m_PluginBlacklist.insert(m_Settings.value("name").toString()); + } +} + +void PluginSettings::registerPlugin(IPlugin *plugin) +{ + m_Plugins.push_back(plugin); + m_PluginSettings.insert(plugin->name(), QVariantMap()); + m_PluginDescriptions.insert(plugin->name(), QVariantMap()); + for (const PluginSetting &setting : plugin->settings()) { + QVariant temp = m_Settings.value("Plugins/" + plugin->name() + "/" + setting.key, setting.defaultValue); + if (!temp.convert(setting.defaultValue.type())) { + log::warn( + "failed to interpret \"{}\" as correct type for \"{}\" in plugin \"{}\", using default", + temp.toString(), setting.key, plugin->name()); + temp = setting.defaultValue; + } + m_PluginSettings[plugin->name()][setting.key] = temp; + m_PluginDescriptions[plugin->name()][setting.key] = QString("%1 (default: %2)").arg(setting.description).arg(setting.defaultValue.toString()); + } +} + +bool PluginSettings::pluginBlacklisted(const QString &fileName) const +{ + return m_PluginBlacklist.contains(fileName); +} + +QVariant PluginSettings::pluginSetting(const QString &pluginName, const QString &key) const +{ + auto iterPlugin = m_PluginSettings.find(pluginName); + if (iterPlugin == m_PluginSettings.end()) { + return QVariant(); + } + auto iterSetting = iterPlugin->find(key); + if (iterSetting == iterPlugin->end()) { + return QVariant(); + } + + return *iterSetting; +} + +void PluginSettings::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) +{ + auto iterPlugin = m_PluginSettings.find(pluginName); + if (iterPlugin == m_PluginSettings.end()) { + throw MyException(QObject::tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName)); + } + + // store the new setting both in memory and in the ini + m_PluginSettings[pluginName][key] = value; + m_Settings.setValue("Plugins/" + pluginName + "/" + key, value); +} + +QVariant PluginSettings::pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const +{ + if (!m_PluginSettings.contains(pluginName)) { + return def; + } + return m_Settings.value("PluginPersistance/" + pluginName + "/" + key, def); +} + +void PluginSettings::setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync) +{ + if (!m_PluginSettings.contains(pluginName)) { + throw MyException(QObject::tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName)); + } + m_Settings.setValue("PluginPersistance/" + pluginName + "/" + key, value); + if (sync) { + m_Settings.sync(); + } +} + +void PluginSettings::addBlacklistPlugin(const QString &fileName) +{ + m_PluginBlacklist.insert(fileName); + writePluginBlacklist(); +} + +void PluginSettings::writePluginBlacklist() +{ + m_Settings.remove("pluginBlacklist"); + + ScopedWriteArray swa(m_Settings, "pluginBlacklist"); + int idx = 0; + for (const QString &plugin : m_PluginBlacklist) { + m_Settings.setArrayIndex(idx++); + m_Settings.setValue("name", plugin); + } +} + +QVariantMap PluginSettings::pluginSettings(const QString &pluginName) const +{ + return m_PluginSettings[pluginName]; +} + +void PluginSettings::setPluginSettings(const QString &pluginName, const QVariantMap& map) +{ + m_PluginSettings[pluginName] = map; +} + +QVariantMap PluginSettings::pluginDescriptions(const QString &pluginName) const +{ + return m_PluginDescriptions[pluginName]; +} + +void PluginSettings::pluginDescriptions(const QString &pluginName, const QVariantMap& map) +{ + m_PluginDescriptions[pluginName] = map; +} + +const QSet& PluginSettings::pluginBlacklist() const +{ + return m_PluginBlacklist; +} + +void PluginSettings::setPluginBlacklist(const QStringList& pluginNames) +{ + m_PluginBlacklist.clear(); + + for (const auto& name : pluginNames) { + m_PluginBlacklist.insert(name); + } +} + +void PluginSettings::save() +{ + for (auto iterPlugins=m_PluginSettings.begin(); iterPlugins!=m_PluginSettings.end(); ++iterPlugins) { + for (auto iterSettings=iterPlugins->begin(); iterSettings!=iterPlugins->end(); ++iterSettings) { + const auto key = "Plugins/" + iterPlugins.key() + "/" + iterSettings.key(); + m_Settings.setValue(key, iterSettings.value()); + } + } + + writePluginBlacklist(); +} + + GeometrySaver::GeometrySaver(Settings& s, QDialog* dialog) : m_settings(s), m_dialog(dialog) { diff --git a/src/settings.h b/src/settings.h index 698cfe21..fc33e0de 100644 --- a/src/settings.h +++ b/src/settings.h @@ -128,6 +128,46 @@ private: }; +class PluginSettings +{ +public: + PluginSettings(QSettings& settings); + + void clearPlugins(); + void registerPlugin(MOBase::IPlugin *plugin); + void addPluginSettings(const std::vector &plugins); + + QVariant pluginSetting(const QString &pluginName, const QString &key) const; + void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value); + QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const; + void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync); + void addBlacklistPlugin(const QString &fileName); + bool pluginBlacklisted(const QString &fileName) const; + void setPluginBlacklist(const QStringList& pluginNames); + std::vector plugins() const { return m_Plugins; } + + QVariantMap pluginSettings(const QString &pluginName) const; + void setPluginSettings(const QString &pluginName, const QVariantMap& map); + + QVariantMap pluginDescriptions(const QString &pluginName) const; + void pluginDescriptions(const QString &pluginName, const QVariantMap& map); + + const QSet& pluginBlacklist() const; + + void save(); + +private: + QSettings& m_Settings; + std::vector m_Plugins; + QMap m_PluginSettings; + QMap m_PluginDescriptions; + QSet m_PluginBlacklist; + + void readPluginBlacklist(); + void writePluginBlacklist(); +}; + + enum class EndorsementState { Accepted = 1, @@ -158,23 +198,6 @@ public: QString getFilename() const; - /** - * unregister all plugins from settings - */ - void clearPlugins(); - - /** - * @brief register plugin to be configurable - * @param plugin the plugin to register - * @return true if the plugin may be registered, false if it is blacklisted - */ - void registerPlugin(MOBase::IPlugin *plugin); - - /** - * set up the settings for the specified plugins - **/ - void addPluginSettings(const std::vector &plugins); - /** * @return true if the user wants unchecked plugins (esp, esm) should be hidden from * the virtual dat adirectory @@ -284,6 +307,9 @@ public: ColorSettings& colors(); const ColorSettings& colors() const; + PluginSettings& plugins(); + const PluginSettings& plugins() const; + /** * @return true if the user has set up automatic login to nexus @@ -422,42 +448,6 @@ public: QSettings &directInterface() { return m_Settings; } const QSettings &directInterface() const { return m_Settings; } - /** - * @brief retrieve a setting for one of the installed plugins - * @param pluginName name of the plugin - * @param key name of the setting to retrieve - * @return the requested value as a QVariant - * @note an invalid QVariant is returned if the the plugin/setting is not declared - */ - QVariant pluginSetting(const QString &pluginName, const QString &key) const; - - /** - * @brief set a setting for one of the installed mods - * @param pluginName name of the plugin - * @param key name of the setting to change - * @param value the new value to set - * @throw an exception is thrown if pluginName is invalid - */ - void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value); - - /** - * @brief retrieve a persistent value for a plugin - * @param pluginName name of the plugin to store data for - * @param key id of the value to retrieve - * @param def default value to return if the value is not set - * @return the requested value - */ - QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const; - - /** - * @brief set a persistent value for a plugin - * @param pluginName name of the plugin to store data for - * @param key id of the value to retrieve - * @param value value to set - * @throw an exception is thrown if pluginName is invalid - */ - void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync); - /** * @return short code of the configured language (corresponding to the translation files) */ @@ -469,24 +459,6 @@ public: ServerList getServersFromOldMap() const; void updateServers(ServerList servers); - /** - * @brief add a plugin that is to be blacklisted - * @param fileName name of the plugin to blacklist - */ - void addBlacklistPlugin(const QString &fileName); - - /** - * @brief test if a plugin is blacklisted and shouldn't be loaded - * @param fileName name of the plugin - * @return true if the file is blacklisted - */ - bool pluginBlacklisted(const QString &fileName) const; - - /** - * @return all loaded MO plugins - */ - std::vector plugins() const { return m_Plugins; } - bool usePrereleases() const; void setUsePrereleases(bool b); @@ -513,12 +485,6 @@ public: void dump() const; - // temp - QMap m_PluginSettings; - QMap m_PluginDescriptions; - QSet m_PluginBlacklist; - void writePluginBlacklist(); - public slots: void managedGameChanged(MOBase::IPluginGame const *gamePlugin); @@ -532,13 +498,12 @@ private: mutable QSettings m_Settings; GeometrySettings m_Geometry; ColorSettings m_Colors; + PluginSettings m_Plugins; LoadMechanism m_LoadMechanism; - std::vector m_Plugins; static bool obfuscate(const QString key, const QString data); static QString deObfuscate(const QString key); - void readPluginBlacklist(); QString getConfigurablePath(const QString &key, const QString &def, bool resolve) const; void setConfigurablePath(const QString &key, const QString& path); }; diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp index 329ba301..956971fe 100644 --- a/src/settingsdialogplugins.cpp +++ b/src/settingsdialogplugins.cpp @@ -12,19 +12,19 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, SettingsDialog& d) // display plugin settings QSet handledNames; - for (IPlugin *plugin : settings().plugins()) { + for (IPlugin *plugin : settings().plugins().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, settings().m_PluginSettings[plugin->name()]); - listItem->setData(Qt::UserRole + 2, settings().m_PluginDescriptions[plugin->name()]); + listItem->setData(Qt::UserRole + 1, settings().plugins().pluginSettings(plugin->name())); + listItem->setData(Qt::UserRole + 2, settings().plugins().pluginDescriptions(plugin->name())); ui->pluginsList->addItem(listItem); handledNames.insert(plugin->name()); } // display plugin blacklist - for (const QString &pluginName : settings().m_PluginBlacklist) { + for (const QString &pluginName : settings().plugins().pluginBlacklist()) { ui->pluginBlacklist->addItem(pluginName); } @@ -42,21 +42,19 @@ 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); - settings().m_PluginSettings[item->text()] = item->data(Qt::UserRole + 1).toMap(); - } - // store plugin settings on disc - for (auto iterPlugins = settings().m_PluginSettings.begin(); iterPlugins != settings().m_PluginSettings.end(); ++iterPlugins) { - for (auto iterSettings = iterPlugins->begin(); iterSettings != iterPlugins->end(); ++iterSettings) { - qsettings().setValue("Plugins/" + iterPlugins.key() + "/" + iterSettings.key(), iterSettings.value()); - } + settings().plugins().setPluginSettings( + item->text(), item->data(Qt::UserRole + 1).toMap()); } - // store plugin blacklist - settings().m_PluginBlacklist.clear(); + // set plugin blacklist + QStringList names; for (QListWidgetItem *item : ui->pluginBlacklist->findItems("*", Qt::MatchWildcard)) { - settings().m_PluginBlacklist.insert(item->text()); + names.push_back(item->text()); } - settings().writePluginBlacklist(); + + settings().plugins().setPluginBlacklist(names); + + settings().plugins().save(); } void PluginsSettingsTab::closing() -- cgit v1.3.1 From 2a2af36a380c83043ff57ea312e7705bb77e6971 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sun, 8 Sep 2019 00:27:45 -0400 Subject: documentation for settings renamed some PluginSettings members and moved them around --- src/organizercore.cpp | 10 +-- src/plugincontainer.cpp | 4 +- src/settings.cpp | 130 +++++++++++++++--------------- src/settings.h | 181 +++++++++++++++++++++++++++++++++--------- src/settingsdialogplugins.cpp | 10 +-- 5 files changed, 222 insertions(+), 113 deletions(-) (limited to 'src/settingsdialogplugins.cpp') diff --git a/src/organizercore.cpp b/src/organizercore.cpp index 1a89641d..91e16716 100644 --- a/src/organizercore.cpp +++ b/src/organizercore.cpp @@ -866,26 +866,26 @@ void OrganizerCore::modDataChanged(MOBase::IModInterface *) QVariant OrganizerCore::pluginSetting(const QString &pluginName, const QString &key) const { - return m_Settings.plugins().pluginSetting(pluginName, key); + return m_Settings.plugins().setting(pluginName, key); } void OrganizerCore::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) { - m_Settings.plugins().setPluginSetting(pluginName, key, value); + m_Settings.plugins().setSetting(pluginName, key, value); } QVariant OrganizerCore::persistent(const QString &pluginName, const QString &key, const QVariant &def) const { - return m_Settings.plugins().pluginPersistent(pluginName, key, def); + return m_Settings.plugins().persistent(pluginName, key, def); } void OrganizerCore::setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync) { - m_Settings.plugins().setPluginPersistent(pluginName, key, value, sync); + m_Settings.plugins().setPersistent(pluginName, key, value, sync); } QString OrganizerCore::pluginDataPath() const @@ -2580,7 +2580,7 @@ void OrganizerCore::prepareStart() m_CurrentProfile->writeModlist(); m_CurrentProfile->createTweakedIniFile(); saveCurrentLists(); - m_Settings.game().setupLoadMechanism(); + m_Settings.game().loadMechanism().activate(m_Settings.game().loadMechanismType()); storeSettings(); } diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 16a77387..c0706ba8 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -266,7 +266,7 @@ void PluginContainer::loadPlugins() "(Please note: If this is the first time you see this message for this plugin you may want to give it another try. " "The plugin may be able to recover from the problem)").arg(fileName), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { - m_Organizer->settings().plugins().addBlacklistPlugin(fileName); + m_Organizer->settings().plugins().addBlacklist(fileName); } loadCheck.close(); } @@ -279,7 +279,7 @@ void PluginContainer::loadPlugins() while (iter.hasNext()) { iter.next(); - if (m_Organizer->settings().plugins().pluginBlacklisted(iter.fileName())) { + if (m_Organizer->settings().plugins().blacklisted(iter.fileName())) { log::debug("plugin \"{}\" blacklisted", iter.fileName()); continue; } diff --git a/src/settings.cpp b/src/settings.cpp index a33005b6..ce9676ea 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -512,9 +512,9 @@ const LoadMechanism& GameSettings::loadMechanism() const return m_LoadMechanism; } -void GameSettings::setupLoadMechanism() +LoadMechanism& GameSettings::loadMechanism() { - m_LoadMechanism.activate(loadMechanismType()); + return m_LoadMechanism; } bool GameSettings::hideUncheckedPlugins() const @@ -1063,19 +1063,7 @@ void PluginSettings::clearPlugins() m_PluginSettings.clear(); m_PluginBlacklist.clear(); - m_PluginBlacklist = readPluginBlacklist(); -} - -QSet PluginSettings::readPluginBlacklist() const -{ - QSet set; - - ScopedReadArray sra(m_Settings, "pluginBlacklist"); - sra.for_each([&]{ - set.insert(sra.get("name")); - }); - - return set; + m_PluginBlacklist = readBlacklist(); } void PluginSettings::registerPlugin(IPlugin *plugin) @@ -1106,12 +1094,12 @@ void PluginSettings::registerPlugin(IPlugin *plugin) } } -bool PluginSettings::pluginBlacklisted(const QString &fileName) const +std::vector PluginSettings::plugins() const { - return m_PluginBlacklist.contains(fileName); + return m_Plugins; } -QVariant PluginSettings::pluginSetting(const QString &pluginName, const QString &key) const +QVariant PluginSettings::setting(const QString &pluginName, const QString &key) const { auto iterPlugin = m_PluginSettings.find(pluginName); if (iterPlugin == m_PluginSettings.end()) { @@ -1126,7 +1114,7 @@ QVariant PluginSettings::pluginSetting(const QString &pluginName, const QString return *iterSetting; } -void PluginSettings::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value) +void PluginSettings::setSetting(const QString &pluginName, const QString &key, const QVariant &value) { auto iterPlugin = m_PluginSettings.find(pluginName); @@ -1141,7 +1129,27 @@ void PluginSettings::setPluginSetting(const QString &pluginName, const QString & set(m_Settings, "Plugins", pluginName + "/" + key, value); } -QVariant PluginSettings::pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const +QVariantMap PluginSettings::settings(const QString &pluginName) const +{ + return m_PluginSettings[pluginName]; +} + +void PluginSettings::setSettings(const QString &pluginName, const QVariantMap& map) +{ + m_PluginSettings[pluginName] = map; +} + +QVariantMap PluginSettings::descriptions(const QString &pluginName) const +{ + return m_PluginDescriptions[pluginName]; +} + +void PluginSettings::setDescriptions(const QString &pluginName, const QVariantMap& map) +{ + m_PluginDescriptions[pluginName] = map; +} + +QVariant PluginSettings::persistent(const QString &pluginName, const QString &key, const QVariant &def) const { if (!m_PluginSettings.contains(pluginName)) { return def; @@ -1150,7 +1158,7 @@ QVariant PluginSettings::pluginPersistent(const QString &pluginName, const QStri return get(m_Settings, "PluginPersistance", pluginName + "/" + key, def); } -void PluginSettings::setPluginPersistent( +void PluginSettings::setPersistent( const QString &pluginName, const QString &key, const QVariant &value, bool sync) { if (!m_PluginSettings.contains(pluginName)) { @@ -1165,74 +1173,70 @@ void PluginSettings::setPluginPersistent( m_Settings.sync(); } } - -void PluginSettings::addBlacklistPlugin(const QString &fileName) +void PluginSettings::addBlacklist(const QString &fileName) { m_PluginBlacklist.insert(fileName); - writePluginBlacklist(); + writeBlacklist(); } -void PluginSettings::writePluginBlacklist() +bool PluginSettings::blacklisted(const QString &fileName) const { - const auto current = readPluginBlacklist(); - - if (current.size() > m_PluginBlacklist.size()) { - // Qt can't remove array elements, the section must be cleared - removeSection(m_Settings, "pluginBlacklist"); - } + return m_PluginBlacklist.contains(fileName); +} - ScopedWriteArray swa(m_Settings, "pluginBlacklist", m_PluginBlacklist.size()); +void PluginSettings::setBlacklist(const QStringList& pluginNames) +{ + m_PluginBlacklist.clear(); - for (const QString &plugin : m_PluginBlacklist) { - swa.next(); - swa.set("name", plugin); + for (const auto& name : pluginNames) { + m_PluginBlacklist.insert(name); } } -QVariantMap PluginSettings::pluginSettings(const QString &pluginName) const +const QSet& PluginSettings::blacklist() const { - return m_PluginSettings[pluginName]; + return m_PluginBlacklist; } -void PluginSettings::setPluginSettings(const QString &pluginName, const QVariantMap& map) +void PluginSettings::save() { - m_PluginSettings[pluginName] = map; -} + for (auto iterPlugins=m_PluginSettings.begin(); iterPlugins!=m_PluginSettings.end(); ++iterPlugins) { + for (auto iterSettings=iterPlugins->begin(); iterSettings!=iterPlugins->end(); ++iterSettings) { + const auto key = iterPlugins.key() + "/" + iterSettings.key(); + set(m_Settings, "Plugins", key, iterSettings.value()); + } + } -QVariantMap PluginSettings::pluginDescriptions(const QString &pluginName) const -{ - return m_PluginDescriptions[pluginName]; + writeBlacklist(); } -void PluginSettings::pluginDescriptions(const QString &pluginName, const QVariantMap& map) +void PluginSettings::writeBlacklist() { - m_PluginDescriptions[pluginName] = map; -} + const auto current = readBlacklist(); -const QSet& PluginSettings::pluginBlacklist() const -{ - return m_PluginBlacklist; -} + if (current.size() > m_PluginBlacklist.size()) { + // Qt can't remove array elements, the section must be cleared + removeSection(m_Settings, "pluginBlacklist"); + } -void PluginSettings::setPluginBlacklist(const QStringList& pluginNames) -{ - m_PluginBlacklist.clear(); + ScopedWriteArray swa(m_Settings, "pluginBlacklist", m_PluginBlacklist.size()); - for (const auto& name : pluginNames) { - m_PluginBlacklist.insert(name); + for (const QString &plugin : m_PluginBlacklist) { + swa.next(); + swa.set("name", plugin); } } -void PluginSettings::save() +QSet PluginSettings::readBlacklist() const { - for (auto iterPlugins=m_PluginSettings.begin(); iterPlugins!=m_PluginSettings.end(); ++iterPlugins) { - for (auto iterSettings=iterPlugins->begin(); iterSettings!=iterPlugins->end(); ++iterSettings) { - const auto key = iterPlugins.key() + "/" + iterSettings.key(); - set(m_Settings, "Plugins", key, iterSettings.value()); - } - } + QSet set; - writePluginBlacklist(); + ScopedReadArray sra(m_Settings, "pluginBlacklist"); + sra.for_each([&]{ + set.insert(sra.get("name")); + }); + + return set; } diff --git a/src/settings.h b/src/settings.h index 2ff8da1c..d3926d72 100644 --- a/src/settings.h +++ b/src/settings.h @@ -40,6 +40,10 @@ class ServerList; class Settings; class ExpanderWidget; + +// helper class that calls restoreGeometry() in the constructor and +// saveGeometry() in the destructor +// class GeometrySaver { public: @@ -52,48 +56,57 @@ private: }; +// setting for the currently managed game +// class GameSettings { public: GameSettings(QSettings& setting); + // game plugin + // const MOBase::IPluginGame* plugin(); void setPlugin(const MOBase::IPluginGame* gamePlugin); - /** - * whether files of the core game are forced-enabled so the user can't - * accidentally disable them - */ + // whether files of the core game are forced-enabled so the user can't + // accidentally disable them + // bool forceEnableCoreFiles() const; void setForceEnableCoreFiles(bool b); - /** - * the directory where the managed game is stored (with native separators) - **/ + // the directory where the managed game is stored + // std::optional directory() const; void setDirectory(const QString& path); + // the name of the managed game + // std::optional name() const; void setName(const QString& name); + // the edition of the managed game + // std::optional edition() const; void setEdition(const QString& name); + // the current profile name + // std::optional selectedProfileName() const; void setSelectedProfileName(const QString& name); - /** - * @return the load mechanism to be used - **/ + // load mechanism type + // LoadMechanism::EMechanism loadMechanismType() const; void setLoadMechanism(LoadMechanism::EMechanism m); + + // load mechanism object + // const LoadMechanism& loadMechanism() const; - void setupLoadMechanism(); + LoadMechanism& loadMechanism(); - /** - * @return true if the user wants unchecked plugins (esp, esm) should be hidden from - * the virtual data directory - **/ + // whether the user wants unchecked plugins (esp, esm) to be hidden from + // the virtual data directory + // bool hideUncheckedPlugins() const; void setHideUncheckedPlugins(bool b); @@ -104,11 +117,26 @@ private: }; +// geometry settings for various widgets; this should contain any setting that +// can get invalid through UI changes or when users change display settings +// (resolution, monitors, etc.); see WidgetSettings for the counterpart +// +// all these settings are stored under [Geometry] and get wiped when the +// "reset geometry settings" button is clicked in the settings +// +// saveGeometry(), restoreGeometry(), saveState() and restoreState() call the +// same functions on the given widget +// class GeometrySettings { public: GeometrySettings(QSettings& s); + // asks the settings to get reset + // + // this gets called from the settings dialog and gets picked up in + // resetIfNeeded(), called from runApplication() just before exiting + // void requestReset(); void resetIfNeeded(); @@ -137,10 +165,18 @@ public: void saveDocks(const QMainWindow* w); void restoreDocks(QMainWindow* w) const; + // this should be a generic "tab order" setting, but it only happens for the + // mod info dialog right now + // QStringList modInfoTabOrder() const; void setModInfoTabOrder(const QString& names); + // assumes the given widget is a top-level + // void centerOnMainWindowMonitor(QWidget* w); + + // saves the monitor number of the given window + // void saveMainWindowMonitor(const QMainWindow* w); private: @@ -149,33 +185,52 @@ private: }; +// widget settings that should stay valid regardless of UI changes or when users +// change display settings (resolution, monitors, etc.); see GeometrySettings +// for the counterpart +// class WidgetSettings { public: WidgetSettings(QSettings& s); + // selected index for a combobox + // std::optional index(const QComboBox* cb) const; void saveIndex(const QComboBox* cb); void restoreIndex(QComboBox* cb, std::optional def={}) const; + // selected tab index for a tab widget + // std::optional index(const QTabWidget* w) const; void saveIndex(const QTabWidget* w); void restoreIndex(QTabWidget* w, std::optional def={}) const; + // check state for a checkable button + // std::optional checked(const QAbstractButton* w) const; void saveChecked(const QAbstractButton* w); void restoreChecked(QAbstractButton* w, std::optional def={}) const; + // returns the remembered button for a question dialog, or NoButton if the + // user hasn't saved the choice + // MOBase::QuestionBoxMemory::Button questionButton( const QString& windowName, const QString& filename) const; + // sets the button to be remembered for the given window + // void setQuestionWindowButton( const QString& windowName, MOBase::QuestionBoxMemory::Button button); + // sets the button to be remembered for the given file + // void setQuestionFileButton( const QString& windowName, const QString& filename, MOBase::QuestionBoxMemory::Button choice); + // wipes all the remembered buttons + // void resetQuestionButtons(); private: @@ -183,13 +238,13 @@ private: }; +// various color settings +// class ColorSettings { public: ColorSettings(QSettings& s); - void setCrashDumpsMax(int i) const; - QColor modlistOverwrittenLoose() const; void setModlistOverwrittenLoose(const QColor& c); @@ -212,46 +267,91 @@ public: void setPreviousSeparatorColor(const QColor& c) const; void removePreviousSeparatorColor(); - /** - * @brief color the scrollbar of the mod list for custom separator colors? - * @return the state of the setting - */ + // whether the scrollbar of the mod list should have colors for custom + // separator colors + // bool colorSeparatorScrollbar() const; void setColorSeparatorScrollbar(bool b); - static QColor idealTextColor(const QColor& rBackgroundColor); + // returns a color with a good contrast for the given background + // + static QColor idealTextColor(const QColor& rBackgroundColor); private: QSettings& m_Settings; }; +// settings about plugins +// class PluginSettings { public: PluginSettings(QSettings& settings); + + // forgets all the plugins + // void clearPlugins(); + + // adds the given plugin to the list and loads all of its settings + // void registerPlugin(MOBase::IPlugin *plugin); - void addPluginSettings(const std::vector &plugins); - QVariant pluginSetting(const QString &pluginName, const QString &key) const; - void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value); - QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const; - void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync); - void addBlacklistPlugin(const QString &fileName); - bool pluginBlacklisted(const QString &fileName) const; - void setPluginBlacklist(const QStringList& pluginNames); - std::vector plugins() const { return m_Plugins; } + // returns all the registered plugins + // + std::vector plugins() const; + + + // returns the plugin setting for the given key + // + QVariant setting(const QString &pluginName, const QString &key) const; + + // sets the plugin setting for the given key + // + void setSetting(const QString &pluginName, const QString &key, const QVariant &value); + + // returns all settings + // + QVariantMap settings(const QString &pluginName) const; + + // overwrites all settings + // + void setSettings(const QString &pluginName, const QVariantMap& map); + + // returns all descriptions + // + QVariantMap descriptions(const QString &pluginName) const; - QVariantMap pluginSettings(const QString &pluginName) const; - void setPluginSettings(const QString &pluginName, const QVariantMap& map); + // overwrites all descriptions + // + void setDescriptions(const QString &pluginName, const QVariantMap& map); - QVariantMap pluginDescriptions(const QString &pluginName) const; - void pluginDescriptions(const QString &pluginName, const QVariantMap& map); - const QSet& pluginBlacklist() const; + // ? + QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def) const; + void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync); + + // adds the given plugin to the blacklist + // + void addBlacklist(const QString &fileName); + + // returns whether the given plugin is blacklisted + // + bool blacklisted(const QString &fileName) const; + + // overwrites the whole blacklist + // + void setBlacklist(const QStringList& pluginNames); + + // returns the blacklist + // + const QSet& blacklist() const; + + + // commits all the settings to the ini + // void save(); private: @@ -261,8 +361,13 @@ private: QMap m_PluginDescriptions; QSet m_PluginBlacklist; - void writePluginBlacklist(); - QSet readPluginBlacklist() const; + // commits the blacklist to the ini + // + void writeBlacklist(); + + // reads the blacklist from the ini + // + QSet readBlacklist() const; }; diff --git a/src/settingsdialogplugins.cpp b/src/settingsdialogplugins.cpp index 956971fe..c84d0556 100644 --- a/src/settingsdialogplugins.cpp +++ b/src/settingsdialogplugins.cpp @@ -17,14 +17,14 @@ PluginsSettingsTab::PluginsSettingsTab(Settings& s, SettingsDialog& d) continue; QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), ui->pluginsList); listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin)); - listItem->setData(Qt::UserRole + 1, settings().plugins().pluginSettings(plugin->name())); - listItem->setData(Qt::UserRole + 2, settings().plugins().pluginDescriptions(plugin->name())); + listItem->setData(Qt::UserRole + 1, settings().plugins().settings(plugin->name())); + listItem->setData(Qt::UserRole + 2, settings().plugins().descriptions(plugin->name())); ui->pluginsList->addItem(listItem); handledNames.insert(plugin->name()); } // display plugin blacklist - for (const QString &pluginName : settings().plugins().pluginBlacklist()) { + for (const QString &pluginName : settings().plugins().blacklist()) { ui->pluginBlacklist->addItem(pluginName); } @@ -42,7 +42,7 @@ 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); - settings().plugins().setPluginSettings( + settings().plugins().setSettings( item->text(), item->data(Qt::UserRole + 1).toMap()); } @@ -52,7 +52,7 @@ void PluginsSettingsTab::update() names.push_back(item->text()); } - settings().plugins().setPluginBlacklist(names); + settings().plugins().setBlacklist(names); settings().plugins().save(); } -- cgit v1.3.1