diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 16 | ||||
| -rw-r--r-- | src/modinfoforeign.h | 5 | ||||
| -rw-r--r-- | src/modinfooverwrite.h | 5 | ||||
| -rw-r--r-- | src/modinforegular.cpp | 68 | ||||
| -rw-r--r-- | src/modinforegular.h | 10 |
5 files changed, 98 insertions, 6 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 15315da1..34805518 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1893,12 +1893,16 @@ QDir MainWindow::currentSavesDir() const iniPath += "/" + iniFiles[0]; wchar_t path[MAX_PATH]; - ::GetPrivateProfileStringW( - L"General", L"SLocalSavePath", L"Saves", - path, MAX_PATH, - iniPath.toStdWString().c_str() - ); - savesDir.setPath(m_OrganizerCore.managedGame()->documentsDirectory().absoluteFilePath(QString::fromWCharArray(path))); + if (::GetPrivateProfileStringW( + L"General", L"SLocalSavePath", L"", + path, MAX_PATH, + iniPath.toStdWString().c_str() + )) { + savesDir.setPath(m_OrganizerCore.managedGame()->documentsDirectory().absoluteFilePath(QString::fromWCharArray(path))); + } + else { + savesDir = m_OrganizerCore.managedGame()->savesDirectory(); + } } return savesDir; diff --git a/src/modinfoforeign.h b/src/modinfoforeign.h index d2ffc597..4f830799 100644 --- a/src/modinfoforeign.h +++ b/src/modinfoforeign.h @@ -70,6 +70,11 @@ public: virtual void addInstalledFile(int, int) override {} virtual std::set<std::pair<int, int>> installedFiles() const override { return {}; } + virtual QVariant pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const override { return defaultValue; } + virtual std::map<QString, QVariant> pluginSettings(const QString& pluginName) const override { return {}; } + virtual bool setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override { return false; } + virtual std::map<QString, QVariant> clearPluginSettings(const QString& pluginName) override { return {}; } + ModInfo::EModType modType() const { return m_ModType; } protected: diff --git a/src/modinfooverwrite.h b/src/modinfooverwrite.h index 0e00d7a1..502581ce 100644 --- a/src/modinfooverwrite.h +++ b/src/modinfooverwrite.h @@ -71,6 +71,11 @@ public: virtual void addInstalledFile(int, int) override {} virtual std::set<std::pair<int, int>> installedFiles() const override { return {}; } + virtual QVariant pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const override { return defaultValue; } + virtual std::map<QString, QVariant> pluginSettings(const QString& pluginName) const override { return {}; } + virtual bool setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override { return false; } + virtual std::map<QString, QVariant> clearPluginSettings(const QString& pluginName) override { return {}; } + private: ModInfoOverwrite(PluginContainer *pluginContainer, const MOBase::IPluginGame* game, MOShared::DirectoryEntry **directoryStructure); diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp index b3eeba7d..78c04f2d 100644 --- a/src/modinforegular.cpp +++ b/src/modinforegular.cpp @@ -206,6 +206,17 @@ void ModInfoRegular::readMeta() } metaFile.endArray(); + // Plugin settings: + metaFile.beginGroup("Plugins"); + for (auto pluginName: metaFile.childGroups()) { + metaFile.beginGroup(pluginName); + for (auto settingKey : metaFile.childKeys()) { + m_PluginSettings[pluginName][settingKey] = metaFile.value(settingKey); + } + metaFile.endGroup(); + } + metaFile.endGroup(); + m_MetaInfoChanged = false; } @@ -252,6 +263,18 @@ void ModInfoRegular::saveMeta() } metaFile.endArray(); + // Plugin settings: + metaFile.remove("Plugins"); + metaFile.beginGroup("Plugins"); + for (const auto& [pluginName, pluginSettings]: m_PluginSettings) { + metaFile.beginGroup(pluginName); + for (const auto& [settingName, settingValue]: pluginSettings) { + metaFile.setValue(settingName, settingValue); + } + metaFile.endGroup(); + } + metaFile.endGroup(); + metaFile.sync(); // sync needs to be called to ensure the file is created if (metaFile.status() == QSettings::NoError) { @@ -851,3 +874,48 @@ std::vector<QString> ModInfoRegular::getIniTweaks() const metaFile.endArray(); return result; } + + +std::map<QString, QVariant> ModInfoRegular::pluginSettings(const QString& pluginName) const +{ + auto itp = m_PluginSettings.find(pluginName); + if (itp == std::end(m_PluginSettings)) { + return {}; + } + return itp->second; +} + +QVariant ModInfoRegular::pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const +{ + auto itp = m_PluginSettings.find(pluginName); + if (itp == std::end(m_PluginSettings)) { + return defaultValue; + } + + auto its = itp->second.find(key); + if (its == std::end(itp->second)) { + return defaultValue; + } + + return its->second; +} + +bool ModInfoRegular::setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) +{ + m_PluginSettings[pluginName][key] = value; + m_MetaInfoChanged = true; + saveMeta(); + return true; +} + +std::map<QString, QVariant> ModInfoRegular::clearPluginSettings(const QString& pluginName) +{ + auto itp = m_PluginSettings.find(pluginName); + if (itp == std::end(m_PluginSettings)) { + return {}; + } + auto settings = itp->second; + m_PluginSettings.erase(itp); + saveMeta(); + return settings; +} diff --git a/src/modinforegular.h b/src/modinforegular.h index 48c871bb..f2e0b82d 100644 --- a/src/modinforegular.h +++ b/src/modinforegular.h @@ -401,6 +401,13 @@ public: virtual bool validated() const override { return m_Validated; } virtual std::set<std::pair<int, int>> installedFiles() const override { return m_InstalledFileIDs; } +public: // Plugin operations: + + virtual QVariant pluginSetting(const QString& pluginName, const QString& key, const QVariant& defaultValue) const override; + virtual std::map<QString, QVariant> pluginSettings(const QString& pluginName) const override; + virtual bool setPluginSetting(const QString& pluginName, const QString& key, const QVariant& value) override; + virtual std::map<QString, QVariant> clearPluginSettings(const QString& pluginName) override; + private: void setEndorsedState(MOBase::EndorsedState endorsedState); @@ -448,6 +455,9 @@ private: int m_NexusID; std::set<std::pair<int, int>> m_InstalledFileIDs; + // List of plugin settings: + std::map<QString, std::map<QString, QVariant>> m_PluginSettings; + bool m_MetaInfoChanged; bool m_IsAlternate; bool m_Converted; |
