diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-09-04 02:10:29 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-09-04 02:10:29 +0200 |
commit | cd108fd02975eac3a3fed2fde26c58de5cbdaf1c (patch) | |
tree | c19f22573086901238b7feacd9b265d249195700 /logic | |
parent | 151a0ca11ec658525e151b7130543a364c41a3e8 (diff) | |
download | MultiMC-cd108fd02975eac3a3fed2fde26c58de5cbdaf1c.tar MultiMC-cd108fd02975eac3a3fed2fde26c58de5cbdaf1c.tar.gz MultiMC-cd108fd02975eac3a3fed2fde26c58de5cbdaf1c.tar.lz MultiMC-cd108fd02975eac3a3fed2fde26c58de5cbdaf1c.tar.xz MultiMC-cd108fd02975eac3a3fed2fde26c58de5cbdaf1c.zip |
GH-1223 fix override settings
They now work more like passthrough settings, except not passing through set and reset
Diffstat (limited to 'logic')
-rw-r--r-- | logic/BaseInstance.cpp | 16 | ||||
-rw-r--r-- | logic/minecraft/MinecraftInstance.cpp | 26 | ||||
-rw-r--r-- | logic/settings/OverrideSetting.cpp | 34 | ||||
-rw-r--r-- | logic/settings/OverrideSetting.h | 9 | ||||
-rw-r--r-- | logic/settings/SettingsObject.cpp | 5 | ||||
-rw-r--r-- | logic/settings/SettingsObject.h | 3 |
6 files changed, 65 insertions, 28 deletions
diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index 9ed7ce50..3e02235e 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -40,16 +40,16 @@ BaseInstance::BaseInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr s m_settings->registerSetting("lastLaunchTime", 0); // Custom Commands - m_settings->registerSetting({"OverrideCommands","OverrideLaunchCmd"}, false); - m_settings->registerOverride(globalSettings->getSetting("PreLaunchCommand")); - m_settings->registerOverride(globalSettings->getSetting("WrapperCommand")); - m_settings->registerOverride(globalSettings->getSetting("PostExitCommand")); + auto commandSetting = m_settings->registerSetting({"OverrideCommands","OverrideLaunchCmd"}, false); + m_settings->registerOverride(globalSettings->getSetting("PreLaunchCommand"), commandSetting); + m_settings->registerOverride(globalSettings->getSetting("WrapperCommand"), commandSetting); + m_settings->registerOverride(globalSettings->getSetting("PostExitCommand"), commandSetting); // Console - m_settings->registerSetting("OverrideConsole", false); - m_settings->registerOverride(globalSettings->getSetting("ShowConsole")); - m_settings->registerOverride(globalSettings->getSetting("AutoCloseConsole")); - m_settings->registerOverride(globalSettings->getSetting("LogPrePostOutput")); + auto consoleSetting = m_settings->registerSetting("OverrideConsole", false); + m_settings->registerOverride(globalSettings->getSetting("ShowConsole"), consoleSetting); + m_settings->registerOverride(globalSettings->getSetting("AutoCloseConsole"), consoleSetting); + m_settings->registerOverride(globalSettings->getSetting("LogPrePostOutput"), consoleSetting); } QString BaseInstance::getPreLaunchCommand() diff --git a/logic/minecraft/MinecraftInstance.cpp b/logic/minecraft/MinecraftInstance.cpp index d61801c9..e694045b 100644 --- a/logic/minecraft/MinecraftInstance.cpp +++ b/logic/minecraft/MinecraftInstance.cpp @@ -39,26 +39,30 @@ MinecraftInstance::MinecraftInstance(SettingsObjectPtr globalSettings, SettingsO // Java Settings auto javaOverride = m_settings->registerSetting("OverrideJava", false); auto locationOverride = m_settings->registerSetting("OverrideJavaLocation", false); + auto argsOverride = m_settings->registerSetting("OverrideJavaArgs", false); + + // combinations auto javaOrLocation = std::make_shared<OrSetting>("JavaOrLocationOverride", javaOverride, locationOverride); - m_settings->registerSetting("OverrideJavaArgs", false); - m_settings->registerOverride(globalSettings->getSetting("JavaPath")); - m_settings->registerOverride(globalSettings->getSetting("JvmArgs")); + auto javaOrArgs = std::make_shared<OrSetting>("JavaOrArgsOverride", javaOverride, argsOverride); + + m_settings->registerOverride(globalSettings->getSetting("JavaPath"), javaOrLocation); + m_settings->registerOverride(globalSettings->getSetting("JvmArgs"), javaOrArgs); // special! m_settings->registerPassthrough(globalSettings->getSetting("JavaTimestamp"), javaOrLocation); m_settings->registerPassthrough(globalSettings->getSetting("JavaVersion"), javaOrLocation); // Window Size - m_settings->registerSetting("OverrideWindow", false); - m_settings->registerOverride(globalSettings->getSetting("LaunchMaximized")); - m_settings->registerOverride(globalSettings->getSetting("MinecraftWinWidth")); - m_settings->registerOverride(globalSettings->getSetting("MinecraftWinHeight")); + auto windowSetting = m_settings->registerSetting("OverrideWindow", false); + m_settings->registerOverride(globalSettings->getSetting("LaunchMaximized"), windowSetting); + m_settings->registerOverride(globalSettings->getSetting("MinecraftWinWidth"), windowSetting); + m_settings->registerOverride(globalSettings->getSetting("MinecraftWinHeight"), windowSetting); // Memory - m_settings->registerSetting("OverrideMemory", false); - m_settings->registerOverride(globalSettings->getSetting("MinMemAlloc")); - m_settings->registerOverride(globalSettings->getSetting("MaxMemAlloc")); - m_settings->registerOverride(globalSettings->getSetting("PermGen")); + auto memorySetting = m_settings->registerSetting("OverrideMemory", false); + m_settings->registerOverride(globalSettings->getSetting("MinMemAlloc"), memorySetting); + m_settings->registerOverride(globalSettings->getSetting("MaxMemAlloc"), memorySetting); + m_settings->registerOverride(globalSettings->getSetting("PermGen"), memorySetting); } QString MinecraftInstance::minecraftRoot() const diff --git a/logic/settings/OverrideSetting.cpp b/logic/settings/OverrideSetting.cpp index e8a9bfff..25162dff 100644 --- a/logic/settings/OverrideSetting.cpp +++ b/logic/settings/OverrideSetting.cpp @@ -15,16 +15,40 @@ #include "OverrideSetting.h" -OverrideSetting::OverrideSetting(std::shared_ptr<Setting> other) +OverrideSetting::OverrideSetting(std::shared_ptr<Setting> other, std::shared_ptr<Setting> gate) : Setting(other->configKeys(), QVariant()) { + Q_ASSERT(other); + Q_ASSERT(gate); m_other = other; + m_gate = gate; +} + +bool OverrideSetting::isOverriding() const +{ + return m_gate->get().toBool(); } QVariant OverrideSetting::defValue() const { - if (m_other) - return m_other->get(); - else - return QVariant(); + return m_other->get(); +} + +QVariant OverrideSetting::get() const +{ + if(isOverriding()) + { + return Setting::get(); + } + return m_other->get(); +} + +void OverrideSetting::reset() +{ + Setting::reset(); +} + +void OverrideSetting::set(QVariant value) +{ + Setting::set(value); } diff --git a/logic/settings/OverrideSetting.h b/logic/settings/OverrideSetting.h index 7534692f..68595cde 100644 --- a/logic/settings/OverrideSetting.h +++ b/logic/settings/OverrideSetting.h @@ -30,10 +30,17 @@ class OverrideSetting : public Setting { Q_OBJECT public: - explicit OverrideSetting(std::shared_ptr<Setting> other); + explicit OverrideSetting(std::shared_ptr<Setting> overriden, std::shared_ptr<Setting> gate); virtual QVariant defValue() const; + virtual QVariant get() const; + virtual void set (QVariant value); + virtual void reset(); + +private: + bool isOverriding() const; protected: std::shared_ptr<Setting> m_other; + std::shared_ptr<Setting> m_gate; }; diff --git a/logic/settings/SettingsObject.cpp b/logic/settings/SettingsObject.cpp index 5e682cbf..f2ffdf9b 100644 --- a/logic/settings/SettingsObject.cpp +++ b/logic/settings/SettingsObject.cpp @@ -30,7 +30,8 @@ SettingsObject::~SettingsObject() m_settings.clear(); } -std::shared_ptr<Setting> SettingsObject::registerOverride(std::shared_ptr<Setting> original) +std::shared_ptr<Setting> SettingsObject::registerOverride(std::shared_ptr<Setting> original, + std::shared_ptr<Setting> gate) { if (contains(original->id())) { @@ -38,7 +39,7 @@ std::shared_ptr<Setting> SettingsObject::registerOverride(std::shared_ptr<Settin .arg(original->id()); return nullptr; // Fail } - auto override = std::make_shared<OverrideSetting>(original); + auto override = std::make_shared<OverrideSetting>(original, gate); override->m_storage = this; connectSignals(*override); m_settings.insert(override->id(), override); diff --git a/logic/settings/SettingsObject.h b/logic/settings/SettingsObject.h index 6272d24c..0f299c5d 100644 --- a/logic/settings/SettingsObject.h +++ b/logic/settings/SettingsObject.h @@ -62,12 +62,13 @@ public: virtual ~SettingsObject(); /*! * Registers an override setting for the given original setting in this settings object + * gate decides if the passthrough (true) or the original (false) is used for value * * This will fail if there is already a setting with the same ID as * the one that is being registered. * \return A valid Setting shared pointer if successful. */ - std::shared_ptr<Setting> registerOverride(std::shared_ptr<Setting> original); + std::shared_ptr<Setting> registerOverride(std::shared_ptr<Setting> original, std::shared_ptr<Setting> gate); /*! * Registers a passthorugh setting for the given original setting in this settings object |