diff options
| author | Al <26797547+Al12rs@users.noreply.github.com> | 2020-06-07 03:45:42 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-07 03:45:42 -0700 |
| commit | 8b667fe69a268c7d183f60dd43ec95dbd976c47b (patch) | |
| tree | d7c9a5675594ad32899332e101c43b5a717fd2c7 /src/settings.cpp | |
| parent | bf055e804879c0a74750c7b60dbeababeafd3a23 (diff) | |
| parent | 093fddda376f2b74e209cc0cedd90e7b04342374 (diff) | |
Merge pull request #1109 from Holt59/set-plugin-setting-signal
Add IOrganizer signal when a plugin setting is changed.
Diffstat (limited to 'src/settings.cpp')
| -rw-r--r-- | src/settings.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/settings.cpp b/src/settings.cpp index 3bf8f2a2..55283486 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1310,9 +1310,14 @@ void PluginSettings::setSetting(const QString &pluginName, const QString &key, c .arg(pluginName)); } + QVariant oldValue = m_PluginSettings[pluginName][key]; + // store the new setting both in memory and in the ini m_PluginSettings[pluginName][key] = value; set(m_Settings, "Plugins", pluginName + "/" + key, value); + + // emit signal: + emit pluginSettingChanged(pluginName, key, oldValue, value); } QVariantMap PluginSettings::settings(const QString &pluginName) const @@ -1322,7 +1327,32 @@ QVariantMap PluginSettings::settings(const QString &pluginName) const void PluginSettings::setSettings(const QString &pluginName, const QVariantMap& map) { + 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)); + } + + QVariantMap oldSettings = m_PluginSettings[pluginName]; m_PluginSettings[pluginName] = map; + + // Emit signals for settings that have been changed or added: + for (auto& k : map.keys()) { + // .value() return a default-constructed QVariant if k is not in oldSettings: + QVariant oldValue = oldSettings.value(k); + if (oldValue != map[k]) { + emit pluginSettingChanged(pluginName, k, oldSettings.value(k), map[k]); + } + } + + // Emit signals for settings that have been removed: + for (auto& k : oldSettings.keys()) { + if (!map.contains(k)) { + emit pluginSettingChanged(pluginName, k, oldSettings[k], QVariant()); + } + } } QVariantMap PluginSettings::descriptions(const QString &pluginName) const |
