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 | |
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
-rw-r--r-- | application/pages/InstanceSettingsPage.cpp | 3 | ||||
-rw-r--r-- | application/pages/InstanceSettingsPage.ui | 29 | ||||
-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 |
8 files changed, 88 insertions, 37 deletions
diff --git a/application/pages/InstanceSettingsPage.cpp b/application/pages/InstanceSettingsPage.cpp index 296de379..c651fcbd 100644 --- a/application/pages/InstanceSettingsPage.cpp +++ b/application/pages/InstanceSettingsPage.cpp @@ -119,11 +119,13 @@ void InstanceSettingsPage::applySettings() if (custcmd) { m_settings->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text()); + m_settings->set("WrapperCommand", ui->preLaunchCmdTextBox->text()); m_settings->set("PostExitCommand", ui->postExitCmdTextBox->text()); } else { m_settings->reset("PreLaunchCommand"); + m_settings->reset("WrapperCommand"); m_settings->reset("PostExitCommand"); } } @@ -161,6 +163,7 @@ void InstanceSettingsPage::loadSettings() // Custom Commands ui->customCommandsGroupBox->setChecked(m_settings->get("OverrideCommands").toBool()); ui->preLaunchCmdTextBox->setText(m_settings->get("PreLaunchCommand").toString()); + ui->wrapperCmdTextBox->setText(m_settings->get("WrapperCommand").toString()); ui->postExitCmdTextBox->setText(m_settings->get("PostExitCommand").toString()); } diff --git a/application/pages/InstanceSettingsPage.ui b/application/pages/InstanceSettingsPage.ui index 64109378..c9c16a6c 100644 --- a/application/pages/InstanceSettingsPage.ui +++ b/application/pages/InstanceSettingsPage.ui @@ -45,7 +45,7 @@ <bool>true</bool> </property> <property name="title"> - <string>Java installation</string> + <string>Java ins&tallation</string> </property> <property name="checkable"> <bool>true</bool> @@ -87,7 +87,7 @@ <bool>true</bool> </property> <property name="title"> - <string>Memory</string> + <string>Memor&y</string> </property> <property name="checkable"> <bool>true</bool> @@ -305,7 +305,7 @@ <bool>true</bool> </property> <property name="title"> - <string>Console Settings</string> + <string>Conso&le Settings</string> </property> <property name="checkable"> <bool>true</bool> @@ -357,7 +357,7 @@ <bool>true</bool> </property> <property name="title"> - <string>Custom Commands</string> + <string>Cus&tom Commands</string> </property> <property name="checkable"> <bool>true</bool> @@ -366,16 +366,16 @@ <bool>false</bool> </property> <layout class="QGridLayout" name="gridLayout_4"> - <item row="0" column="1"> - <widget class="QLineEdit" name="preLaunchCmdTextBox"/> - </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="labelPostExitCmd"> <property name="text"> <string>Post-exit command:</string> </property> </widget> </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="preLaunchCmdTextBox"/> + </item> <item row="0" column="0"> <widget class="QLabel" name="labelPreLaunchCmd"> <property name="text"> @@ -383,9 +383,19 @@ </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QLineEdit" name="postExitCmdTextBox"/> </item> + <item row="1" column="0"> + <widget class="QLabel" name="labelWrapperCmd"> + <property name="text"> + <string>Wrapper command:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="wrapperCmdTextBox"/> + </item> </layout> </widget> </item> @@ -446,6 +456,7 @@ <tabstop>autoCloseConsoleCheck</tabstop> <tabstop>customCommandsGroupBox</tabstop> <tabstop>preLaunchCmdTextBox</tabstop> + <tabstop>wrapperCmdTextBox</tabstop> <tabstop>postExitCmdTextBox</tabstop> </tabstops> <resources/> 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 |