diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-05 13:10:21 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-05 13:10:21 -0400 |
| commit | 4d4f25d1774659e0dfae8e60e13c494cab0f0a44 (patch) | |
| tree | b79b89375b843e39152660ed16138fb5ee24f0ad /src | |
| parent | ab14a8bac3368fc2c1005bcc33009b65a0c728f2 (diff) | |
moved getting and setting executables to Settings
Diffstat (limited to 'src')
| -rw-r--r-- | src/executableslist.cpp | 54 | ||||
| -rw-r--r-- | src/settings.cpp | 44 | ||||
| -rw-r--r-- | src/settings.h | 3 |
3 files changed, 70 insertions, 31 deletions
diff --git a/src/executableslist.cpp b/src/executableslist.cpp index 2b3219df..f2df2d6d 100644 --- a/src/executableslist.cpp +++ b/src/executableslist.cpp @@ -75,34 +75,29 @@ void ExecutablesList::load(const MOBase::IPluginGame* game, const Settings& s) // executables from 2.2.0, see upgradeFromCustom()
bool needsUpgrade = false;
- auto& settings = const_cast<QSettings&>(s.directInterface());
-
- int numCustomExecutables = settings.beginReadArray("customExecutables");
- for (int i = 0; i < numCustomExecutables; ++i) {
- settings.setArrayIndex(i);
-
+ for (auto& map : s.getExecutables()) {
Executable::Flags flags;
- if (settings.value("toolbar", false).toBool())
+
+ if (map["toolbar"].toBool())
flags |= Executable::ShowInToolbar;
- if (settings.value("ownicon", false).toBool())
+
+ if (map["ownicon"].toBool())
flags |= Executable::UseApplicationIcon;
- if (settings.contains("custom")) {
+ if (map.contains("custom")) {
// the "custom" setting only exists in older versions
needsUpgrade = true;
}
setExecutable(Executable()
- .title(settings.value("title").toString())
- .binaryInfo(settings.value("binary").toString())
- .arguments(settings.value("arguments").toString())
- .steamAppID(settings.value("steamAppID", "").toString())
- .workingDirectory(settings.value("workingDirectory", "").toString())
+ .title(map["title"].toString())
+ .binaryInfo(map["binary"].toString())
+ .arguments(map["arguments"].toString())
+ .steamAppID(map["steamAppID"].toString())
+ .workingDirectory(map["workingDirectory"].toString())
.flags(flags));
}
- settings.endArray();
-
addFromPlugin(game, IgnoreExisting);
if (needsUpgrade)
@@ -113,26 +108,23 @@ void ExecutablesList::load(const MOBase::IPluginGame* game, const Settings& s) void ExecutablesList::store(Settings& s)
{
- auto& settings = s.directInterface();
-
- settings.remove("customExecutables");
- settings.beginWriteArray("customExecutables");
-
- int count = 0;
+ std::vector<std::map<QString, QVariant>> v;
for (const auto& item : *this) {
- settings.setArrayIndex(count++);
+ std::map<QString, QVariant> map;
+
+ map["title"] = item.title();
+ map["toolbar"] = item.isShownOnToolbar();
+ map["ownicon"] = item.usesOwnIcon();
+ map["binary"] = item.binaryInfo().absoluteFilePath();
+ map["arguments"] = item.arguments();
+ map["workingDirectory"] = item.workingDirectory();
+ map["steamAppID"] = item.steamAppID();
- settings.setValue("title", item.title());
- settings.setValue("toolbar", item.isShownOnToolbar());
- settings.setValue("ownicon", item.usesOwnIcon());
- settings.setValue("binary", item.binaryInfo().absoluteFilePath());
- settings.setValue("arguments", item.arguments());
- settings.setValue("workingDirectory", item.workingDirectory());
- settings.setValue("steamAppID", item.steamAppID());
+ v.push_back(std::move(map));
}
- settings.endArray();
+ s.setExecutables(v);
}
std::vector<Executable> ExecutablesList::getPluginExecutables(
diff --git a/src/settings.cpp b/src/settings.cpp index cfc5c1d7..a8dcfa39 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -19,6 +19,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "settings.h" #include "serverinfo.h" +#include "executableslist.h" #include "appconfig.h" #include <utility.h> #include <iplugingame.h> @@ -803,6 +804,49 @@ void Settings::setRecentDirectories(const std::map<QString, QString>& map) m_Settings.endArray(); } +std::vector<std::map<QString, QVariant>> Settings::getExecutables() const +{ + const int count = m_Settings.beginReadArray("customExecutables"); + std::vector<std::map<QString, QVariant>> v; + + for (int i=0; i<count; ++i) { + m_Settings.setArrayIndex(i); + + std::map<QString, QVariant> map; + + const auto keys = m_Settings.childKeys(); + for (auto&& key : keys) { + map[key] = m_Settings.value(key); + } + + v.push_back(map); + } + + m_Settings.endArray(); + + return v; +} + +void Settings::setExecutables(const std::vector<std::map<QString, QVariant>>& v) +{ + m_Settings.remove("customExecutables"); + m_Settings.beginWriteArray("customExecutables"); + + int i = 0; + + for (const auto& map : v) { + m_Settings.setArrayIndex(i); + + for (auto&& p : map) { + m_Settings.setValue(p.first, p.second); + } + + ++i; + } + + m_Settings.endArray(); +} + GeometrySettings& Settings::geometry() { return m_Geometry; diff --git a/src/settings.h b/src/settings.h index 5b02ca67..2c4c7ca6 100644 --- a/src/settings.h +++ b/src/settings.h @@ -221,6 +221,9 @@ public: std::map<QString, QString> getRecentDirectories() const; void setRecentDirectories(const std::map<QString, QString>& map); + std::vector<std::map<QString, QVariant>> getExecutables() const; + void setExecutables(const std::vector<std::map<QString, QVariant>>& v); + GeometrySettings& geometry(); const GeometrySettings& geometry() const; |
