summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--MultiMC.pro9
-rw-r--r--data/appsettings.cpp22
-rw-r--r--data/appsettings.h89
-rw-r--r--data/settingsbase.h33
-rw-r--r--data/stdinstance.cpp4
-rw-r--r--data/stdinstance.h2
-rw-r--r--gui/settingsdialog.cpp112
-rw-r--r--gui/settingsdialog.h7
-rw-r--r--gui/settingsdialog.ui107
-rw-r--r--main.cpp7
-rw-r--r--util/apputils.h (renamed from data/settingsbase.cpp)11
-rw-r--r--util/osutils.h (renamed from util/settingsmacrosundef.h)19
-rw-r--r--util/settingsmacros.h35
14 files changed, 275 insertions, 185 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3fa89d5b..66e18484 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,7 +104,6 @@ data/appsettings.cpp
data/inifile.cpp
data/instancebase.cpp
data/instancemodel.cpp
-data/settingsbase.cpp
data/stdinstance.cpp
gui/mainwindow.cpp
@@ -126,9 +125,9 @@ data/appsettings.h
data/inifile.h
data/instancebase.h
data/instancemodel.h
-data/settingsbase.h
data/stdinstance.h
+util/apputils.h
util/pathutils.h
multimc_pragma.h
diff --git a/MultiMC.pro b/MultiMC.pro
index 4da6e82f..3f480529 100644
--- a/MultiMC.pro
+++ b/MultiMC.pro
@@ -21,8 +21,7 @@ SOURCES += main.cpp\
data/inifile.cpp \
gui/settingsdialog.cpp \
gui/modeditwindow.cpp \
- data/appsettings.cpp \
- data/settingsbase.cpp
+ util/appsettings.cpp
HEADERS += gui/mainwindow.h \
data/instancebase.h \
@@ -32,10 +31,8 @@ HEADERS += gui/mainwindow.h \
data/inifile.h \
gui/settingsdialog.h \
gui/modeditwindow.h \
- data/appsettings.h \
- data/settingsbase.h \
- util/settingsmacros.h \
- util/settingsmacrosundef.h
+ util/apputils.h \
+ util/appsettings.h
FORMS += gui/mainwindow.ui \
gui/settingsdialog.ui \
diff --git a/data/appsettings.cpp b/data/appsettings.cpp
index 525def6e..1d9c4312 100644
--- a/data/appsettings.cpp
+++ b/data/appsettings.cpp
@@ -15,8 +15,26 @@
#include "appsettings.h"
-AppSettings::AppSettings(QString fileName) :
- SettingsBase(fileName)
+AppSettings* settings;
+
+SettingsBase::SettingsBase(QObject *parent) :
+ QObject(parent)
+{
+
+}
+
+AppSettings::AppSettings(QObject *parent) :
+ SettingsBase(parent)
{
}
+
+QVariant AppSettings::getValue(const QString& name, QVariant defVal) const
+{
+ return config.value(name, defVal);
+}
+
+void AppSettings::setValue(const QString& name, QVariant val)
+{
+ config.setValue(name, val);
+}
diff --git a/data/appsettings.h b/data/appsettings.h
index f8c7ff73..eff22b11 100644
--- a/data/appsettings.h
+++ b/data/appsettings.h
@@ -16,12 +16,97 @@
#ifndef APPSETTINGS_H
#define APPSETTINGS_H
-#include "settingsbase.h"
+#include <QObject>
+#include <QSettings>
+#include <QColor>
+
+#include "util/apputils.h"
+#include "util/osutils.h"
+
+#if WINDOWS
+#define JPATHKEY "JavaPathWindows"
+#elif OSX
+#define JPATHKEY "JavaPathOSX"
+#else
+#define JPATHKEY "JavaPathLinux"
+#endif
+
+#define DEFINE_SETTING_ADVANCED(funcName, name, valType, defVal) \
+ virtual valType get ## funcName() const { return getValue(name, defVal).value<valType>(); } \
+ virtual void set ## funcName(valType value) { setValue(name, value); }
+
+#define DEFINE_SETTING(name, valType, defVal) \
+ DEFINE_SETTING_ADVANCED(name, STR_VAL(name), valType, defVal)
+
+#define DEFINE_OVERRIDE_SETTING(overrideName) \
+
+
+class SettingsBase : public QObject
+{
+ Q_OBJECT
+public:
+ explicit SettingsBase(QObject *parent = 0);
+
+ // Updates
+ DEFINE_SETTING(UseDevBuilds, bool, false)
+ DEFINE_SETTING(AutoUpdate, bool, true)
+
+ // Folders
+ DEFINE_SETTING(InstanceDir, QString, "instances")
+ DEFINE_SETTING(CentralModsDir, QString, "mods")
+ DEFINE_SETTING(LWJGLDir, QString, "lwjgl")
+
+ // Console
+ DEFINE_SETTING(ShowConsole, bool, true)
+ DEFINE_SETTING(AutoCloseConsole, bool, true)
+
+ // Console Colors
+ DEFINE_SETTING(SysMessageColor, QColor, QColor(Qt::blue))
+ DEFINE_SETTING(StdOutColor, QColor, QColor(Qt::black))
+ DEFINE_SETTING(StdErrColor, QColor, QColor(Qt::red))
+
+ // Window Size
+ DEFINE_SETTING(LaunchCompatMode, bool, false)
+ DEFINE_SETTING(LaunchMaximized, bool, false)
+ DEFINE_SETTING(MinecraftWinWidth, int, 854)
+ DEFINE_SETTING(MinecraftWinHeight, int, 480)
+
+ // Auto login
+ DEFINE_SETTING(AutoLogin, bool, false)
+
+ // Memory
+ DEFINE_SETTING(MinMemAlloc, int, 512)
+ DEFINE_SETTING(MaxMemAlloc, int, 1024)
+
+ // Java Settings
+ DEFINE_SETTING_ADVANCED(JavaPath, JPATHKEY, QString, "java")
+ DEFINE_SETTING(JvmArgs, QString, "")
+
+ // Custom Commands
+ DEFINE_SETTING(PreLaunchCommand, QString, "")
+ DEFINE_SETTING(PostExitCommand, QString, "")
+
+protected:
+ virtual QVariant getValue(const QString& name, QVariant defVal = QVariant()) const = 0;
+ virtual void setValue(const QString& name, QVariant val) = 0;
+};
class AppSettings : public SettingsBase
{
+ Q_OBJECT
public:
- AppSettings(QString fileName);
+ explicit AppSettings(QObject *parent = 0);
+
+protected:
+ virtual QVariant getValue(const QString &name, QVariant defVal = QVariant()) const;
+ virtual void setValue(const QString& name, QVariant val);
+
+ QSettings config;
};
+#undef DEFINE_SETTING_ADVANCED
+#undef DEFINE_SETTING
+
+extern AppSettings* settings;
+
#endif // APPSETTINGS_H
diff --git a/data/settingsbase.h b/data/settingsbase.h
deleted file mode 100644
index 71f0e30d..00000000
--- a/data/settingsbase.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2013 MultiMC Contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SETTINGSBASE_H
-#define SETTINGSBASE_H
-
-#include <QSettings>
-
-#include "settingsmacros.h"
-
-class SettingsBase : public QSettings
-{
-public:
- SettingsBase(QString fileName);
-
-
-};
-
-#include "settingsmacrosundef.h"
-
-#endif // SETTINGSBASE_H
diff --git a/data/stdinstance.cpp b/data/stdinstance.cpp
index 1324b510..4618f5ca 100644
--- a/data/stdinstance.cpp
+++ b/data/stdinstance.cpp
@@ -15,8 +15,8 @@
#include "stdinstance.h"
-StdInstance::StdInstance(QString rootDir) :
- InstanceBase(rootDir)
+StdInstance::StdInstance(QString rootDir, QObject* parent) :
+ InstanceBase(rootDir, parent)
{
}
diff --git a/data/stdinstance.h b/data/stdinstance.h
index 59b1c8ab..79b87601 100644
--- a/data/stdinstance.h
+++ b/data/stdinstance.h
@@ -22,7 +22,7 @@
class StdInstance : public InstanceBase
{
public:
- explicit StdInstance(QString rootDir);
+ explicit StdInstance(QString rootDir, QObject *parent = 0);
};
#endif // STDINSTANCE_H
diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp
index 46569340..ab4d18ee 100644
--- a/gui/settingsdialog.cpp
+++ b/gui/settingsdialog.cpp
@@ -16,13 +16,19 @@
#include "settingsdialog.h"
#include "ui_settingsdialog.h"
+#include "data/appsettings.h"
+
#include <QFileDialog>
+#include <QMessageBox>
SettingsDialog::SettingsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
+
+ loadSettings(settings);
+ updateCheckboxStuff();
}
SettingsDialog::~SettingsDialog()
@@ -32,10 +38,10 @@ SettingsDialog::~SettingsDialog()
void SettingsDialog::updateCheckboxStuff()
{
- ui->minMemSpinBox->setEnabled(!(ui->compatModeCheckBox->isChecked() ||
- ui->maximizedCheckBox->isChecked()));
- ui->maxMemSpinBox->setEnabled(!(ui->compatModeCheckBox->isChecked() ||
- ui->maximizedCheckBox->isChecked()));
+ ui->windowWidthSpinBox->setEnabled(!(ui->compatModeCheckBox->isChecked() ||
+ ui->maximizedCheckBox->isChecked()));
+ ui->windowHeightSpinBox->setEnabled(!(ui->compatModeCheckBox->isChecked() ||
+ ui->maximizedCheckBox->isChecked()));
ui->maximizedCheckBox->setEnabled(!ui->compatModeCheckBox->isChecked());
}
@@ -75,3 +81,101 @@ void SettingsDialog::on_maximizedCheckBox_clicked(bool checked)
Q_UNUSED(checked);
updateCheckboxStuff();
}
+
+void SettingsDialog::on_buttonBox_accepted()
+{
+ applySettings(settings);
+}
+
+void SettingsDialog::applySettings(SettingsBase *s)
+{
+ // Special cases
+
+ // Warn about dev builds.
+ if (!ui->devBuildsCheckBox->isChecked())
+ {
+ s->setUseDevBuilds(false);
+ }
+ else if (!s->getUseDevBuilds())
+ {
+ int response = QMessageBox::question(this, "Development builds",
+ "Development builds contain experimental features "
+ "and may be unstable. Are you sure you want to enable them?");
+ if (response == QMessageBox::Yes)
+ {
+ s->setUseDevBuilds(true);
+ }
+ }
+
+
+ // Updates
+ s->setAutoUpdate(ui->autoUpdateCheckBox->isChecked());
+
+ // Folders
+ // TODO: Offer to move instances to new instance folder.
+ s->setInstanceDir(ui->instDirTextBox->text());
+ s->setCentralModsDir(ui->modsDirTextBox->text());
+ s->setLWJGLDir(ui->lwjglDirTextBox->text());
+
+ // Console
+ s->setShowConsole(ui->showConsoleCheck->isChecked());
+ s->setAutoCloseConsole(ui->autoCloseConsoleCheck->isChecked());
+
+ // Window Size
+ s->setLaunchCompatMode(ui->compatModeCheckBox->isChecked());
+ s->setLaunchMaximized(ui->maximizedCheckBox->isChecked());
+ s->setMinecraftWinWidth(ui->windowWidthSpinBox->value());
+ s->setMinecraftWinHeight(ui->windowHeightSpinBox->value());
+
+ // Auto Login
+ s->setAutoLogin(ui->autoLoginCheckBox->isChecked());
+
+ // Memory
+ s->setMinMemAlloc(ui->minMemSpinBox->value());
+ s->setMaxMemAlloc(ui->maxMemSpinBox->value());
+
+ // Java Settings
+ s->setJavaPath(ui->javaPathTextBox->text());
+ s->setJvmArgs(ui->jvmArgsTextBox->text());
+
+ // Custom Commands
+ s->setPreLaunchCommand(ui->preLaunchCmdTextBox->text());
+ s->setPostExitCommand(ui->postExitCmdTextBox->text());
+}
+
+void SettingsDialog::loadSettings(SettingsBase *s)
+{
+ // Updates
+ ui->autoUpdateCheckBox->setChecked(s->getAutoUpdate());
+ ui->devBuildsCheckBox->setChecked(s->getUseDevBuilds());
+
+ // Folders
+ ui->instDirTextBox->setText(s->getInstanceDir());
+ ui->modsDirTextBox->setText(s->getCentralModsDir());
+ ui->lwjglDirTextBox->setText(s->getLWJGLDir());
+
+ // Console
+ ui->showConsoleCheck->setChecked(s->getShowConsole());
+ ui->autoCloseConsoleCheck->setChecked(s->getAutoCloseConsole());
+
+ // Window Size
+ ui->compatModeCheckBox->setChecked(s->getLaunchCompatMode());
+ ui->maximizedCheckBox->setChecked(s->getLaunchMaximized());
+ ui->windowWidthSpinBox->setValue(s->getMinecraftWinWidth());
+ ui->windowHeightSpinBox->setValue(s->getMinecraftWinHeight());
+
+ // Auto Login
+ ui->autoLoginCheckBox->setChecked(s->getAutoLogin());
+
+ // Memory
+ ui->minMemSpinBox->setValue(s->getMinMemAlloc());
+ ui->maxMemSpinBox->setValue(s->getMaxMemAlloc());
+
+ // Java Settings
+ ui->javaPathTextBox->setText(s->getJavaPath());
+ ui->jvmArgsTextBox->setText(s->getJvmArgs());
+
+ // Custom Commands
+ ui->preLaunchCmdTextBox->setText(s->getPreLaunchCommand());
+ ui->postExitCmdTextBox->setText(s->getPostExitCommand());
+}
diff --git a/gui/settingsdialog.h b/gui/settingsdialog.h
index 3e9d9e0f..e223237f 100644
--- a/gui/settingsdialog.h
+++ b/gui/settingsdialog.h
@@ -18,6 +18,8 @@
#include <QDialog>
+class SettingsBase;
+
namespace Ui {
class SettingsDialog;
}
@@ -32,6 +34,9 @@ public:
void updateCheckboxStuff();
+ void applySettings(SettingsBase* s);
+ void loadSettings(SettingsBase* s);
+
private slots:
void on_instDirBrowseBtn_clicked();
@@ -43,6 +48,8 @@ private slots:
void on_maximizedCheckBox_clicked(bool checked);
+ void on_buttonBox_accepted();
+
private:
Ui::SettingsDialog *ui;
};
diff --git a/gui/settingsdialog.ui b/gui/settingsdialog.ui
index 315686ca..d30f56bb 100644
--- a/gui/settingsdialog.ui
+++ b/gui/settingsdialog.ui
@@ -158,88 +158,6 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="consoleTab">
- <attribute name="title">
- <string>Console</string>
- </attribute>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QGroupBox" name="consoleSettingsBox">
- <property name="title">
- <string>Console Settings</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QCheckBox" name="showConsoleCheck">
- <property name="text">
- <string>Show console while the game is running?</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="autoCloseConsoleCheck">
- <property name="text">
- <string>Automatically close console when the game quits?</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="consoleColorsBox">
- <property name="title">
- <string>Instance Console Colors</string>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="labelSysMessageColor">
- <property name="text">
- <string>System message color:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="sysMsgColorTextBox"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="labelOutputMsgColor">
- <property name="text">
- <string>Output message color:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="outMsgColorTextBox"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="labelErrorMessageColor">
- <property name="text">
- <string>Error message color:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="errMsgColorTextBox"/>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="consoleVerticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
<widget class="QWidget" name="minecraftTab">
<attribute name="title">
<string>Minecraft</string>
@@ -316,9 +234,32 @@
</widget>
</item>
<item>
+ <widget class="QGroupBox" name="consoleSettingsBox">
+ <property name="title">
+ <string>Console Settings</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QCheckBox" name="showConsoleCheck">
+ <property name="text">
+ <string>Show console while the game is running?</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="autoCloseConsoleCheck">
+ <property name="text">
+ <string>Automatically close console when the game quits?</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QCheckBox" name="autoLoginCheckBox">
<property name="text">
- <string>Login automatically when an instance launches?</string>
+ <string>Login automatically when an instance icon is double clicked?</string>
</property>
</widget>
</item>
diff --git a/main.cpp b/main.cpp
index 0d429c8d..019a8853 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,3 +1,4 @@
+
/* Copyright 2013 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,10 +17,16 @@
#include "gui/mainwindow.h"
#include <QApplication>
+#include "data/appsettings.h"
+
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
+ app.setOrganizationName("Forkk");
+ app.setApplicationName("MultiMC 5");
+
+ settings = new AppSettings(&app);
MainWindow mainWin;
mainWin.show();
diff --git a/data/settingsbase.cpp b/util/apputils.h
index 66195603..a64adc50 100644
--- a/data/settingsbase.cpp
+++ b/util/apputils.h
@@ -13,10 +13,9 @@
* limitations under the License.
*/
-#include "settingsbase.h"
+#ifndef APPUTILS_H
+#define APPUTILS_H
-SettingsBase::SettingsBase(QString fileName) :
- QSettings(fileName, QSettings::IniFormat)
-{
-
-}
+#define STR_VAL(val) # val
+
+#endif // APPUTILS_H
diff --git a/util/settingsmacrosundef.h b/util/osutils.h
index 85b13bac..263f1f6d 100644
--- a/util/settingsmacrosundef.h
+++ b/util/osutils.h
@@ -13,14 +13,15 @@
* limitations under the License.
*/
-#ifndef SETTINGSMACROSUNDEF_H
-#define SETTINGSMACROSUNDEF_H
+#ifndef OSUTILS_H
+#define OSUTILS_H
-#undef DEFINE_SETTING
-#undef DEFINE_SETTING_STR
-#undef DEFINE_SETTING_BOOL
-#undef DEFINE_SETTING_INT
+#if defined _WIN32 | defined _WIN64
+#define WINDOWS 1
+#elif __APPLE__ & __MACH__
+#define OSX 1
+#elif __linux__
+#define LINUX 1
+#endif
-#undef STR_VAL
-
-#endif // SETTINGSMACROSUNDEF_H
+#endif // OSUTILS_H
diff --git a/util/settingsmacros.h b/util/settingsmacros.h
deleted file mode 100644
index 94e52155..00000000
--- a/util/settingsmacros.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2013 MultiMC Contributors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SETTINGSMACROS_H
-#define SETTINGSMACROS_H
-
-#define STR_VAL(val) # val
-
-#define DEFINE_SETTING(funcName, name, defVal, typeName, toFunc) \
- virtual typeName Get ## funcName() const { return value(name). ## toFunc(); } \
- virtual void Set ## funcName(typeName value) { setValue(name, value); } \
- virtual void Reset ## funcName() {
-
-#define DEFINE_SETTING_STR(name, defVal) \
- DEFINE_SETTING(name, STR_VAL(name), defVal, QString, toString)
-
-#define DEFINE_SETTING_BOOL(name, defVal) \
- DEFINE_SETTING(name, STR_VAL(name), defVal, bool, toBool)
-
-#define DEFINE_SETTING_INT(name, defVal) \
- DEFINE_SETTING(name, STR_VAL(name), defVal, int, toInt)
-
-#endif // SETTINGSMACROS_H