diff --git a/gui/instancesettings.cpp b/gui/instancesettings.cpp
index d0e02b8e..eea61ce8 100644
--- a/gui/instancesettings.cpp
+++ b/gui/instancesettings.cpp
@@ -20,90 +20,161 @@
#include "instancesettings.h"
#include "ui_instancesettings.h"
-InstanceSettings::InstanceSettings(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::InstanceSettings)
+InstanceSettings::InstanceSettings( SettingsObject * obj, QWidget *parent) :
+ m_obj(obj),
+ QDialog(parent),
+ ui(new Ui::InstanceSettings)
{
- ui->setupUi(this);
+ ui->setupUi(this);
+ loadSettings();
}
InstanceSettings::~InstanceSettings()
{
- delete ui;
+ delete ui;
}
void InstanceSettings::on_customCommandsGroupBox_toggled(bool state)
{
- ui->labelCustomCmdsDescription->setEnabled(state);
+ ui->labelCustomCmdsDescription->setEnabled(state);
}
-
-void InstanceSettings::applySettings(SettingsObject *s)
+void InstanceSettings::on_buttonBox_accepted()
{
-
- // Console
- s->set("ShowConsole", ui->showConsoleCheck->isChecked());
- s->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked());
- s->set("OverrideConsole", ui->consoleSettingsBox->isChecked());
-
- // Window Size
- s->set("LaunchCompatMode", ui->compatModeCheckBox->isChecked());
- s->set("LaunchMaximized", ui->maximizedCheckBox->isChecked());
- s->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
- s->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
- s->set("OverrideWindow", ui->windowSizeGroupBox->isChecked());
-
- // Auto Login
- s->set("AutoLogin", ui->autoLoginChecBox->isChecked());
- s->set("OverrideLogin", ui->accountSettingsGroupBox->isChecked());
-
- // Memory
- s->set("MinMemAlloc", ui->minMemSpinBox->value());
- s->set("MaxMemAlloc", ui->maxMemSpinBox->value());
- s->set("OverrideMemory", ui->memoryGroupBox->isChecked());
-
- // Java Settings
- s->set("JavaPath", ui->javaPathTextBox->text());
- s->set("JvmArgs", ui->jvmArgsTextBox->text());
- s->set("OverrideJava", ui->javaSettingsGroupBox->isChecked());
-
- // Custom Commands
- s->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text());
- s->set("PostExitCommand", ui->postExitCmdTextBox->text());
- s->set("OverrideCommands", ui->customCommandsGroupBox->isChecked());
+ applySettings();
+ accept();
}
-void InstanceSettings::loadSettings(SettingsObject *s)
+void InstanceSettings::on_buttonBox_rejected()
{
-
- // Console
- ui->showConsoleCheck->setChecked(s->get("ShowConsole").toBool());
- ui->autoCloseConsoleCheck->setChecked(s->get("AutoCloseConsole").toBool());
- ui->consoleSettingsBox->setChecked(s->get("OverrideConsole").toBool());
-
- // Window Size
- ui->compatModeCheckBox->setChecked(s->get("LaunchCompatMode").toBool());
- ui->maximizedCheckBox->setChecked(s->get("LaunchMaximized").toBool());
- ui->windowWidthSpinBox->setValue(s->get("MinecraftWinWidth").toInt());
- ui->windowHeightSpinBox->setValue(s->get("MinecraftWinHeight").toInt());
- ui->windowSizeGroupBox->setChecked(s->get("OverrideWindow").toBool());
-
- // Auto Login
- ui->autoLoginChecBox->setChecked(s->get("AutoLogin").toBool());
- ui->accountSettingsGroupBox->setChecked(s->get("OverrideLogin").toBool());
-
- // Memory
- ui->minMemSpinBox->setValue(s->get("MinMemAlloc").toInt());
- ui->maxMemSpinBox->setValue(s->get("MaxMemAlloc").toInt());
- ui->memoryGroupBox->setChecked(s->get("OverrideMemory").toBool());
-
- // Java Settings
- ui->javaPathTextBox->setText(s->get("JavaPath").toString());
- ui->jvmArgsTextBox->setText(s->get("JvmArgs").toString());
- ui->javaSettingsGroupBox->setChecked(s->get("OverrideJava").toBool());
-
- // Custom Commands
- ui->preLaunchCmdTextBox->setText(s->get("PreLaunchCommand").toString());
- ui->postExitCmdTextBox->setText(s->get("PostExitCommand").toString());
- ui->customCommandsGroupBox->setChecked(s->get("OverrideCommands").toBool());
+ reject();
+}
+
+
+void InstanceSettings::applySettings()
+{
+ // Console
+ bool console = ui->consoleSettingsBox->isChecked();
+ m_obj->set("OverrideConsole", console);
+ if(console)
+ {
+ m_obj->set("ShowConsole", ui->showConsoleCheck->isChecked());
+ m_obj->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked());
+ }
+ else
+ {
+ m_obj->reset("ShowConsole");
+ m_obj->reset("AutoCloseConsole");
+ }
+
+ // Window Size
+ bool window = ui->windowSizeGroupBox->isChecked();
+ m_obj->set("OverrideWindow", window);
+ if(window)
+ {
+ m_obj->set("LaunchCompatMode", ui->compatModeCheckBox->isChecked());
+ m_obj->set("LaunchMaximized", ui->maximizedCheckBox->isChecked());
+ m_obj->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
+ m_obj->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
+ }
+ else
+ {
+ m_obj->reset("LaunchCompatMode");
+ m_obj->reset("LaunchMaximized");
+ m_obj->reset("MinecraftWinWidth");
+ m_obj->reset("MinecraftWinHeight");
+ }
+
+
+ // Auto Login
+ bool login = ui->accountSettingsGroupBox->isChecked();
+ m_obj->set("OverrideLogin", login);
+ if(login)
+ {
+ m_obj->set("AutoLogin", ui->autoLoginChecBox->isChecked());
+ }
+ else
+ {
+ m_obj->reset("AutoLogin");
+ }
+
+
+ // Memory
+ bool memory = ui->memoryGroupBox->isChecked();
+ m_obj->set("OverrideMemory", memory);
+ if(memory)
+ {
+ m_obj->set("MinMemAlloc", ui->minMemSpinBox->value());
+ m_obj->set("MaxMemAlloc", ui->maxMemSpinBox->value());
+ }
+ else
+ {
+ m_obj->reset("MinMemAlloc");
+ m_obj->reset("MaxMemAlloc");
+ }
+
+
+ // Java Settings
+ bool java = ui->javaSettingsGroupBox->isChecked();
+ m_obj->set("OverrideJava", java);
+ if(java)
+ {
+ m_obj->set("JavaPath", ui->javaPathTextBox->text());
+ m_obj->set("JvmArgs", ui->jvmArgsTextBox->text());
+ }
+ else
+ {
+ m_obj->reset("JavaPath");
+ m_obj->reset("JvmArgs");
+ }
+
+
+ // Custom Commands
+ bool custcmd = ui->customCommandsGroupBox->isChecked();
+ m_obj->set("OverrideCommands", custcmd);
+ if(custcmd)
+ {
+ m_obj->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text());
+ m_obj->set("PostExitCommand", ui->postExitCmdTextBox->text());
+ }
+ else
+ {
+ m_obj->reset("PreLaunchCommand");
+ m_obj->reset("PostExitCommand");
+ }
+
+}
+
+void InstanceSettings::loadSettings()
+{
+ // Console
+ ui->showConsoleCheck->setChecked(m_obj->get("ShowConsole").toBool());
+ ui->autoCloseConsoleCheck->setChecked(m_obj->get("AutoCloseConsole").toBool());
+ ui->consoleSettingsBox->setChecked(m_obj->get("OverrideConsole").toBool());
+
+ // Window Size
+ ui->compatModeCheckBox->setChecked(m_obj->get("LaunchCompatMode").toBool());
+ ui->maximizedCheckBox->setChecked(m_obj->get("LaunchMaximized").toBool());
+ ui->windowWidthSpinBox->setValue(m_obj->get("MinecraftWinWidth").toInt());
+ ui->windowHeightSpinBox->setValue(m_obj->get("MinecraftWinHeight").toInt());
+ ui->windowSizeGroupBox->setChecked(m_obj->get("OverrideWindow").toBool());
+
+ // Auto Login
+ ui->autoLoginChecBox->setChecked(m_obj->get("AutoLogin").toBool());
+ ui->accountSettingsGroupBox->setChecked(m_obj->get("OverrideLogin").toBool());
+
+ // Memory
+ ui->minMemSpinBox->setValue(m_obj->get("MinMemAlloc").toInt());
+ ui->maxMemSpinBox->setValue(m_obj->get("MaxMemAlloc").toInt());
+ ui->memoryGroupBox->setChecked(m_obj->get("OverrideMemory").toBool());
+
+ // Java Settings
+ ui->javaPathTextBox->setText(m_obj->get("JavaPath").toString());
+ ui->jvmArgsTextBox->setText(m_obj->get("JvmArgs").toString());
+ ui->javaSettingsGroupBox->setChecked(m_obj->get("OverrideJava").toBool());
+
+ // Custom Commands
+ ui->preLaunchCmdTextBox->setText(m_obj->get("PreLaunchCommand").toString());
+ ui->postExitCmdTextBox->setText(m_obj->get("PostExitCommand").toString());
+ ui->customCommandsGroupBox->setChecked(m_obj->get("OverrideCommands").toBool());
}
diff --git a/gui/instancesettings.h b/gui/instancesettings.h
index abd63199..afbd0c16 100644
--- a/gui/instancesettings.h
+++ b/gui/instancesettings.h
@@ -10,22 +10,25 @@ class InstanceSettings;
class InstanceSettings : public QDialog
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit InstanceSettings(QWidget *parent = 0);
- ~InstanceSettings();
+ explicit InstanceSettings(SettingsObject *s, QWidget *parent = 0);
+ ~InstanceSettings();
- void updateCheckboxStuff();
+ void updateCheckboxStuff();
- void applySettings(SettingsObject *s);
- void loadSettings(SettingsObject* s);
+ void applySettings();
+ void loadSettings();
private slots:
- void on_customCommandsGroupBox_toggled(bool arg1);
+ void on_customCommandsGroupBox_toggled(bool arg1);
+ void on_buttonBox_accepted();
+ void on_buttonBox_rejected();
private:
- Ui::InstanceSettings *ui;
+ Ui::InstanceSettings *ui;
+ SettingsObject * m_obj;
};
#endif // INSTANCESETTINGS_H
diff --git a/gui/instancesettings.ui b/gui/instancesettings.ui
index 187275de..16e64100 100644
--- a/gui/instancesettings.ui
+++ b/gui/instancesettings.ui
@@ -162,7 +162,7 @@
-
- true
+ false
Login automatically when an instance icon is double clicked?
@@ -319,6 +319,9 @@
false
+
-
+
+
-
@@ -333,9 +336,6 @@
- -
-
-
-
@@ -362,6 +362,9 @@
true
+
+ Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+
@@ -384,6 +387,30 @@
+
+ settingsTabs
+ windowSizeGroupBox
+ compatModeCheckBox
+ maximizedCheckBox
+ windowWidthSpinBox
+ windowHeightSpinBox
+ consoleSettingsBox
+ showConsoleCheck
+ autoCloseConsoleCheck
+ accountSettingsGroupBox
+ autoLoginChecBox
+ memoryGroupBox
+ minMemSpinBox
+ maxMemSpinBox
+ javaSettingsGroupBox
+ javaPathTextBox
+ pushButton
+ jvmArgsTextBox
+ customCommandsGroupBox
+ preLaunchCmdTextBox
+ postExitCmdTextBox
+ buttonBox
+
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 4326431e..4bf38424 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -560,19 +560,15 @@ void MainWindow::on_actionChangeInstLWJGLVersion_triggered()
void MainWindow::on_actionInstanceSettings_triggered()
{
- if (view->selectionModel()->selectedIndexes().count() < 1)
- return;
+ if (view->selectionModel()->selectedIndexes().count() < 1)
+ return;
- Instance *inst = selectedInstance();
- SettingsObject *s;
- s = &inst->settings();
- InstanceSettings *settings = new InstanceSettings (this);
- settings->setWindowTitle(QString("Instance settings"));
- settings->loadSettings(s);
- if (settings->exec()) {
- settings->applySettings(s);
- }
- delete settings;
+ Instance *inst = selectedInstance();
+ SettingsObject *s;
+ s = &inst->settings();
+ InstanceSettings settings(s, this);
+ settings.setWindowTitle(QString("Instance settings"));
+ settings.exec();
}
void MainWindow::instanceChanged(QModelIndex idx) {
diff --git a/libmultimc/src/instance.cpp b/libmultimc/src/instance.cpp
index fde31cf3..c1506a02 100644
--- a/libmultimc/src/instance.cpp
+++ b/libmultimc/src/instance.cpp
@@ -62,6 +62,18 @@ Instance::Instance(const QString &rootDir, QObject *parent) :
// Auto login
settings().registerSetting(new OverrideSetting("AutoLogin", globalSettings->getSetting("AutoLogin")));
+
+ // Console
+ settings().registerSetting(new OverrideSetting("ShowConsole", globalSettings->getSetting("ShowConsole")));
+ settings().registerSetting(new OverrideSetting("AutoCloseConsole", globalSettings->getSetting("AutoCloseConsole")));
+
+ // Overrides
+ settings().registerSetting(new Setting("OverrideConsole", false));
+ settings().registerSetting(new Setting("OverrideWindow", false));
+ settings().registerSetting(new Setting("OverrideLogin", false));
+ settings().registerSetting(new Setting("OverrideMemory", false));
+ settings().registerSetting(new Setting("OverrideJava", false));
+ settings().registerSetting(new Setting("OverrideCommands", false));
}
QString Instance::id() const
diff --git a/libsettings/include/inisettingsobject.h b/libsettings/include/inisettingsobject.h
index 36c8e4bd..03d6fe05 100644
--- a/libsettings/include/inisettingsobject.h
+++ b/libsettings/include/inisettingsobject.h
@@ -47,6 +47,7 @@ public:
protected slots:
virtual void changeSetting(const Setting &setting, QVariant value);
+ virtual void resetSetting ( const Setting& setting );
protected:
virtual QVariant retrieveValue(const Setting &setting);
diff --git a/libsettings/include/setting.h b/libsettings/include/setting.h
index 36709729..a161ab50 100644
--- a/libsettings/include/setting.h
+++ b/libsettings/include/setting.h
@@ -84,6 +84,12 @@ signals:
*/
void settingChanged(const Setting &setting, QVariant value);
+ /*!
+ * \brief Signal emitted when this Setting object's value resets to default.
+ * \param setting A reference to the Setting that changed.
+ */
+ void settingReset(const Setting &setting);
+
public slots:
/*!
* \brief Changes the setting's value.
@@ -93,6 +99,13 @@ public slots:
*/
virtual void set(QVariant value);
+ /*!
+ * \brief Reset the setting to default
+ * This is done by emitting the settingReset() signal which will then be
+ * handled by the SettingsObject object and cause the setting to change.
+ * \param value The new value.
+ */
+ virtual void reset();
protected:
QString m_id;
QVariant m_defVal;
diff --git a/libsettings/include/settingsobject.h b/libsettings/include/settingsobject.h
index 23f0d644..a2f03699 100644
--- a/libsettings/include/settingsobject.h
+++ b/libsettings/include/settingsobject.h
@@ -100,6 +100,11 @@ public:
*/
virtual bool set(const QString &id, QVariant value);
+ /*!
+ * \brief Reverts the setting with the given ID to default.
+ * \param id The ID of the setting to reset.
+ */
+ virtual void reset(const QString &id) const;
/*!
* \brief Gets a QList with pointers to all of the registered settings.
@@ -125,6 +130,14 @@ signals:
*/
void settingChanged(const Setting &setting, QVariant value);
+ /*!
+ * \brief Signal emitted when one of this SettingsObject object's settings resets.
+ * This is usually just connected directly to each Setting object's
+ * settingReset() signals.
+ * \param setting A reference to the Setting object that changed.
+ */
+ void settingReset(const Setting &setting);
+
protected slots:
/*!
* \brief Changes a setting.
@@ -136,6 +149,15 @@ protected slots:
*/
virtual void changeSetting(const Setting &setting, QVariant value) = 0;
+ /*!
+ * \brief Resets a setting.
+ * This slot is usually connected to each Setting object's
+ * settingReset() signal. The signal is emitted, causing this slot
+ * to update the setting's value in the config file.
+ * \param setting A reference to the Setting object that changed.
+ */
+ virtual void resetSetting(const Setting &setting) = 0;
+
protected:
/*!
* \brief Connects the necessary signals to the given Setting.
diff --git a/libsettings/src/inisettingsobject.cpp b/libsettings/src/inisettingsobject.cpp
index 17b132a3..854421b6 100644
--- a/libsettings/src/inisettingsobject.cpp
+++ b/libsettings/src/inisettingsobject.cpp
@@ -40,6 +40,15 @@ void INISettingsObject::changeSetting(const Setting &setting, QVariant value)
}
}
+void INISettingsObject::resetSetting ( const Setting& setting )
+{
+ if (contains(setting.id()))
+ {
+ m_ini.remove(setting.configKey());
+ m_ini.saveFile(m_filePath);
+ }
+}
+
QVariant INISettingsObject::retrieveValue(const Setting &setting)
{
if (contains(setting.id()))
diff --git a/libsettings/src/setting.cpp b/libsettings/src/setting.cpp
index 1a4f9e13..8e60af06 100644
--- a/libsettings/src/setting.cpp
+++ b/libsettings/src/setting.cpp
@@ -47,3 +47,8 @@ void Setting::set(QVariant value)
{
emit settingChanged(*this, value);
}
+
+void Setting::reset()
+{
+ emit settingReset(*this);
+}
diff --git a/libsettings/src/settingsobject.cpp b/libsettings/src/settingsobject.cpp
index f94a6552..bf7b8825 100644
--- a/libsettings/src/settingsobject.cpp
+++ b/libsettings/src/settingsobject.cpp
@@ -98,6 +98,14 @@ bool SettingsObject::set(const QString &id, QVariant value)
}
}
+void SettingsObject::reset(const QString &id) const
+{
+ Setting *setting = getSetting(id);
+ if(setting)
+ setting->reset();
+}
+
+
QList SettingsObject::getSettings()
{
return m_settings.values();
@@ -115,6 +123,11 @@ void SettingsObject::connectSignals(const Setting &setting)
SLOT(changeSetting(const Setting &, QVariant)));
connect(&setting, SIGNAL(settingChanged(const Setting &, QVariant)),
SIGNAL(settingChanged(const Setting &, QVariant)));
+
+ connect(&setting, SIGNAL(settingReset(Setting)),
+ SLOT(resetSetting(const Setting &)));
+ connect(&setting, SIGNAL(settingReset(Setting)),
+ SIGNAL(settingReset(const Setting &)));
}
void SettingsObject::disconnectSignals(const Setting &setting)
@@ -123,4 +136,9 @@ void SettingsObject::disconnectSignals(const Setting &setting)
this, SLOT(changeSetting(const Setting &, QVariant)));
setting.disconnect(SIGNAL(settingChanged(const Setting &, QVariant)),
this, SIGNAL(settingChanged(const Setting &, QVariant)));
+
+ setting.disconnect(SIGNAL(settingReset(const Setting &, QVariant)),
+ this, SLOT(resetSetting(const Setting &, QVariant)));
+ setting.disconnect(SIGNAL(settingReset(const Setting &, QVariant)),
+ this, SIGNAL(settingReset(const Setting &, QVariant)));
}