Instance settings moved to a page.

This commit is contained in:
Petr Mrázek 2014-06-09 01:29:18 +02:00
parent be73eb3322
commit 171325d427
13 changed files with 502 additions and 487 deletions

View File

@ -305,6 +305,8 @@ SET(MULTIMC_SOURCES
gui/pages/LegacyUpgradePage.h gui/pages/LegacyUpgradePage.h
gui/pages/LegacyJarModPage.cpp gui/pages/LegacyJarModPage.cpp
gui/pages/LegacyJarModPage.h gui/pages/LegacyJarModPage.h
gui/pages/InstanceSettingsPage.cpp
gui/pages/InstanceSettingsPage.h
# GUI - dialogs # GUI - dialogs
gui/dialogs/AboutDialog.cpp gui/dialogs/AboutDialog.cpp
@ -323,8 +325,6 @@ SET(MULTIMC_SOURCES
gui/dialogs/EditNotesDialog.h gui/dialogs/EditNotesDialog.h
gui/dialogs/IconPickerDialog.cpp gui/dialogs/IconPickerDialog.cpp
gui/dialogs/IconPickerDialog.h gui/dialogs/IconPickerDialog.h
gui/dialogs/InstanceSettings.cpp
gui/dialogs/InstanceSettings.h
gui/dialogs/LoginDialog.cpp gui/dialogs/LoginDialog.cpp
gui/dialogs/LoginDialog.h gui/dialogs/LoginDialog.h
gui/dialogs/LwjglSelectDialog.cpp gui/dialogs/LwjglSelectDialog.cpp
@ -614,6 +614,7 @@ SET(MULTIMC_UIS
gui/pages/ModFolderPage.ui gui/pages/ModFolderPage.ui
gui/pages/LegacyUpgradePage.ui gui/pages/LegacyUpgradePage.ui
gui/pages/LegacyJarModPage.ui gui/pages/LegacyJarModPage.ui
gui/pages/InstanceSettingsPage.ui
# Dialogs # Dialogs
gui/dialogs/SettingsDialog.ui gui/dialogs/SettingsDialog.ui
@ -622,7 +623,6 @@ SET(MULTIMC_UIS
gui/dialogs/AboutDialog.ui gui/dialogs/AboutDialog.ui
gui/dialogs/VersionSelectDialog.ui gui/dialogs/VersionSelectDialog.ui
gui/dialogs/LwjglSelectDialog.ui gui/dialogs/LwjglSelectDialog.ui
gui/dialogs/InstanceSettings.ui
gui/dialogs/ProgressDialog.ui gui/dialogs/ProgressDialog.ui
gui/dialogs/IconPickerDialog.ui gui/dialogs/IconPickerDialog.ui
gui/dialogs/EditNotesDialog.ui gui/dialogs/EditNotesDialog.ui

View File

@ -56,7 +56,6 @@
#include "gui/dialogs/VersionSelectDialog.h" #include "gui/dialogs/VersionSelectDialog.h"
#include "gui/dialogs/CustomMessageBox.h" #include "gui/dialogs/CustomMessageBox.h"
#include "gui/dialogs/LwjglSelectDialog.h" #include "gui/dialogs/LwjglSelectDialog.h"
#include "gui/dialogs/InstanceSettings.h"
#include "gui/dialogs/IconPickerDialog.h" #include "gui/dialogs/IconPickerDialog.h"
#include "gui/dialogs/EditNotesDialog.h" #include "gui/dialogs/EditNotesDialog.h"
#include "gui/dialogs/CopyInstanceDialog.h" #include "gui/dialogs/CopyInstanceDialog.h"
@ -944,12 +943,13 @@ void MainWindow::on_actionSettings_triggered()
void MainWindow::on_actionInstanceSettings_triggered() void MainWindow::on_actionInstanceSettings_triggered()
{ {
if (m_selectedInstance) if (!m_selectedInstance)
{ return;
InstanceSettings settings(&m_selectedInstance->settings(), this); auto provider = std::dynamic_pointer_cast<BasePageProvider>(m_selectedInstance);
settings.setWindowTitle(tr("Instance settings")); if(!provider)
settings.exec(); return;
} PageDialog dlg(provider, "settings" , this);
dlg.exec();
} }
void MainWindow::on_actionManageAccounts_triggered() void MainWindow::on_actionManageAccounts_triggered()
@ -1042,19 +1042,13 @@ void MainWindow::on_actionViewSelectedInstFolder_triggered()
void MainWindow::on_actionEditInstance_triggered() void MainWindow::on_actionEditInstance_triggered()
{ {
if (m_selectedInstance) if (!m_selectedInstance)
{ return;
auto provider = std::dynamic_pointer_cast<BasePageProvider>(m_selectedInstance); auto provider = std::dynamic_pointer_cast<BasePageProvider>(m_selectedInstance);
if(!provider) if(!provider)
{
QLOG_ERROR() << "Instance can't be converted to BasePageProvider (NYI)";
return; return;
} PageDialog dlg(provider, "" , this);
auto dialog = new PageDialog(provider, this); dlg.exec();
if (dialog)
dialog->exec();
dialog->deleteLater();
}
} }
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)

View File

@ -1,244 +0,0 @@
/* Copyright 2013 MultiMC Contributors
*
* Authors: Andrew Okin
* Peterix
* Orochimarufan <orochimarufan.x3@gmail.com>
*
* 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.
*/
#include "MultiMC.h"
#include "InstanceSettings.h"
#include "ui_InstanceSettings.h"
#include "gui/Platform.h"
#include "gui/dialogs/VersionSelectDialog.h"
#include "logic/NagUtils.h"
#include "logic/java/JavaUtils.h"
#include "logic/java/JavaVersionList.h"
#include "logic/java/JavaChecker.h"
#include <QFileDialog>
#include <QMessageBox>
InstanceSettings::InstanceSettings(SettingsObject *obj, QWidget *parent)
: QDialog(parent), ui(new Ui::InstanceSettings), m_obj(obj)
{
MultiMCPlatform::fixWM_CLASS(this);
ui->setupUi(this);
restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("SettingsGeometry").toByteArray()));
loadSettings();
}
InstanceSettings::~InstanceSettings()
{
delete ui;
}
void InstanceSettings::showEvent(QShowEvent *ev)
{
QDialog::showEvent(ev);
}
void InstanceSettings::closeEvent(QCloseEvent *ev)
{
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
QDialog::closeEvent(ev);
}
void InstanceSettings::on_customCommandsGroupBox_toggled(bool state)
{
ui->labelCustomCmdsDescription->setEnabled(state);
}
void InstanceSettings::on_buttonBox_accepted()
{
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
applySettings();
accept();
}
void InstanceSettings::on_buttonBox_rejected()
{
MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
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("LaunchMaximized", ui->maximizedCheckBox->isChecked());
m_obj->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
m_obj->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
}
else
{
m_obj->reset("LaunchMaximized");
m_obj->reset("MinecraftWinWidth");
m_obj->reset("MinecraftWinHeight");
}
// 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());
m_obj->set("PermGen", ui->permGenSpinBox->value());
}
else
{
m_obj->reset("MinMemAlloc");
m_obj->reset("MaxMemAlloc");
m_obj->reset("PermGen");
}
// 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());
NagUtils::checkJVMArgs(m_obj->get("JvmArgs").toString(), this->parentWidget());
}
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->consoleSettingsBox->setChecked(m_obj->get("OverrideConsole").toBool());
ui->showConsoleCheck->setChecked(m_obj->get("ShowConsole").toBool());
ui->autoCloseConsoleCheck->setChecked(m_obj->get("AutoCloseConsole").toBool());
// Window Size
ui->windowSizeGroupBox->setChecked(m_obj->get("OverrideWindow").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());
// Memory
ui->memoryGroupBox->setChecked(m_obj->get("OverrideMemory").toBool());
ui->minMemSpinBox->setValue(m_obj->get("MinMemAlloc").toInt());
ui->maxMemSpinBox->setValue(m_obj->get("MaxMemAlloc").toInt());
ui->permGenSpinBox->setValue(m_obj->get("PermGen").toInt());
// Java Settings
ui->javaSettingsGroupBox->setChecked(m_obj->get("OverrideJava").toBool());
ui->javaPathTextBox->setText(m_obj->get("JavaPath").toString());
ui->jvmArgsTextBox->setText(m_obj->get("JvmArgs").toString());
// Custom Commands
ui->customCommandsGroupBox->setChecked(m_obj->get("OverrideCommands").toBool());
ui->preLaunchCmdTextBox->setText(m_obj->get("PreLaunchCommand").toString());
ui->postExitCmdTextBox->setText(m_obj->get("PostExitCommand").toString());
}
void InstanceSettings::on_javaDetectBtn_clicked()
{
JavaVersionPtr java;
VersionSelectDialog vselect(MMC->javalist().get(), tr("Select a Java version"), this, true);
vselect.setResizeOn(2);
vselect.exec();
if (vselect.result() == QDialog::Accepted && vselect.selectedVersion())
{
java = std::dynamic_pointer_cast<JavaVersion>(vselect.selectedVersion());
ui->javaPathTextBox->setText(java->path);
}
}
void InstanceSettings::on_javaBrowseBtn_clicked()
{
QString dir = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
if (!dir.isNull())
{
ui->javaPathTextBox->setText(dir);
}
}
void InstanceSettings::on_javaTestBtn_clicked()
{
checker.reset(new JavaChecker());
connect(checker.get(), SIGNAL(checkFinished(JavaCheckResult)), this,
SLOT(checkFinished(JavaCheckResult)));
checker->path = ui->javaPathTextBox->text();
checker->performCheck();
}
void InstanceSettings::checkFinished(JavaCheckResult result)
{
if (result.valid)
{
QString text;
text += "Java test succeeded!\n";
if (result.is_64bit)
text += "Using 64bit java.\n";
text += "\n";
text += "Platform reported: " + result.realPlatform;
QMessageBox::information(this, tr("Java test success"), text);
}
else
{
QMessageBox::warning(
this, tr("Java test failure"),
tr("The specified java binary didn't work. You should use the auto-detect feature, "
"or set the path to the java executable."));
}
}

View File

@ -50,7 +50,7 @@ protected:
} }
}; };
PageDialog::PageDialog(BasePageProviderPtr pageProvider, QWidget *parent) : QDialog(parent) PageDialog::PageDialog(BasePageProviderPtr pageProvider, QString defaultId, QWidget *parent) : QDialog(parent)
{ {
MultiMCPlatform::fixWM_CLASS(this); MultiMCPlatform::fixWM_CLASS(this);
createUI(); createUI();
@ -60,13 +60,16 @@ PageDialog::PageDialog(BasePageProviderPtr pageProvider, QWidget *parent) : QDia
m_model = new PageModel(this); m_model = new PageModel(this);
m_proxyModel = new PageEntryFilterModel(this); m_proxyModel = new PageEntryFilterModel(this);
int firstIndex = -1; int firstIndex = -1;
int counter = 0;
auto pages = pageProvider->getPages(); auto pages = pageProvider->getPages();
for(auto page: pages) for(auto page: pages)
{ {
page->index = m_pageStack->addWidget(dynamic_cast<QWidget *>(page)); page->stackIndex = m_pageStack->addWidget(dynamic_cast<QWidget *>(page));
page->listIndex = counter;
counter++;
if(firstIndex == -1) if(firstIndex == -1)
{ {
firstIndex = page->index; firstIndex = page->stackIndex;
} }
} }
m_model->setPages(pages); m_model->setPages(pages);
@ -80,9 +83,21 @@ PageDialog::PageDialog(BasePageProviderPtr pageProvider, QWidget *parent) : QDia
m_pageList->setModel(m_proxyModel); m_pageList->setModel(m_proxyModel);
connect(m_pageList->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), connect(m_pageList->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
this, SLOT(currentChanged(QModelIndex))); this, SLOT(currentChanged(QModelIndex)));
m_pageStack->setStackingMode(QStackedLayout::StackOne); m_pageStack->setStackingMode(QStackedLayout::StackOne);
m_pageList->setFocus(); m_pageList->setFocus();
// now find what we want to have selected...
auto page = m_model->findPageEntryById(defaultId);
QModelIndex index;
if(page)
{
index = m_proxyModel->mapFromSource(m_model->index(page->listIndex));
}
else
{
index = m_proxyModel->index(0,0);
}
if(index.isValid())
m_pageList->setCurrentIndex(index);
} }
void PageDialog::createUI() void PageDialog::createUI()
@ -112,6 +127,7 @@ void PageDialog::createUI()
m_pageStack->setMargin(0); m_pageStack->setMargin(0);
m_pageStack->addWidget(new QWidget(this)); m_pageStack->addWidget(new QWidget(this));
/*
QDialogButtonBox *buttons = QDialogButtonBox *buttons =
new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Ok | new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Ok |
QDialogButtonBox::Apply | QDialogButtonBox::Cancel); QDialogButtonBox::Apply | QDialogButtonBox::Cancel);
@ -119,6 +135,7 @@ void PageDialog::createUI()
connect(buttons->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply())); connect(buttons->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply()));
connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); connect(buttons, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); connect(buttons, SIGNAL(rejected()), this, SLOT(reject()));
*/
QGridLayout *mainGridLayout = new QGridLayout; QGridLayout *mainGridLayout = new QGridLayout;
mainGridLayout->addLayout(headerHLayout, 0, 1, 1, 1); mainGridLayout->addLayout(headerHLayout, 0, 1, 1, 1);
@ -132,7 +149,7 @@ void PageDialog::createUI()
void PageDialog::showPage(int row) void PageDialog::showPage(int row)
{ {
auto page = m_model->pages().at(row); auto page = m_model->pages().at(row);
m_pageStack->setCurrentIndex(page->index); m_pageStack->setCurrentIndex(page->stackIndex);
m_header->setText(page->displayName()); m_header->setText(page->displayName());
m_iconHeader->setIcon(page->icon()); m_iconHeader->setIcon(page->icon());
} }

View File

@ -30,11 +30,14 @@ class PageDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit PageDialog(BasePageProviderPtr pageProvider, QWidget *parent = 0); explicit PageDialog(BasePageProviderPtr pageProvider, QString defaultId = QString(),
QWidget *parent = 0);
virtual ~PageDialog() {}; virtual ~PageDialog() {};
private: private:
void createUI(); void createUI();
private slots: private
slots:
void apply(); void apply();
virtual void reject(); virtual void reject();
virtual void accept(); virtual void accept();

View File

@ -4,6 +4,7 @@
#include <QEvent> #include <QEvent>
#include <QScrollBar> #include <QScrollBar>
class BasePage;
const int pageIconSize = 24; const int pageIconSize = 24;
class PageViewDelegate : public QStyledItemDelegate class PageViewDelegate : public QStyledItemDelegate
@ -63,7 +64,6 @@ public:
return m_pages; return m_pages;
} }
private:
BasePage * findPageEntryById(QString id) BasePage * findPageEntryById(QString id)
{ {
for(auto page: m_pages) for(auto page: m_pages)

View File

@ -41,7 +41,8 @@ public:
{ {
return true; return true;
} }
int index = -1; int stackIndex = -1;
int listIndex = -1;
}; };
typedef std::shared_ptr<BasePage> BasePagePtr; typedef std::shared_ptr<BasePage> BasePagePtr;

View File

@ -0,0 +1,228 @@
#include "InstanceSettingsPage.h"
#include <gui/dialogs/VersionSelectDialog.h>
#include "logic/NagUtils.h"
#include <logic/java/JavaVersionList.h>
#include "MultiMC.h"
#include <QDialog>
#include <QFileDialog>
#include <QMessageBox>
#include "ui_InstanceSettingsPage.h"
QString InstanceSettingsPage::displayName()
{
return tr("Settings");
}
QIcon InstanceSettingsPage::icon()
{
return QIcon::fromTheme("settings");
}
QString InstanceSettingsPage::id()
{
return "settings";
}
InstanceSettingsPage::InstanceSettingsPage(SettingsObject *s, QWidget *parent)
: QWidget(parent), ui(new Ui::InstanceSettingsPage), m_settings(s)
{
ui->setupUi(this);
loadSettings();
connect(ui->buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked(bool)), this,
SLOT(applySettings()));
connect(ui->buttonBox->button(QDialogButtonBox::Reset), SIGNAL(clicked(bool)), this,
SLOT(loadSettings()));
}
InstanceSettingsPage::~InstanceSettingsPage()
{
delete ui;
}
bool InstanceSettingsPage::apply()
{
applySettings();
loadSettings();
return true;
}
void InstanceSettingsPage::applySettings()
{
// Console
bool console = ui->consoleSettingsBox->isChecked();
m_settings->set("OverrideConsole", console);
if (console)
{
m_settings->set("ShowConsole", ui->showConsoleCheck->isChecked());
m_settings->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked());
}
else
{
m_settings->reset("ShowConsole");
m_settings->reset("AutoCloseConsole");
}
// Window Size
bool window = ui->windowSizeGroupBox->isChecked();
m_settings->set("OverrideWindow", window);
if (window)
{
m_settings->set("LaunchMaximized", ui->maximizedCheckBox->isChecked());
m_settings->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
m_settings->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
}
else
{
m_settings->reset("LaunchMaximized");
m_settings->reset("MinecraftWinWidth");
m_settings->reset("MinecraftWinHeight");
}
// Memory
bool memory = ui->memoryGroupBox->isChecked();
m_settings->set("OverrideMemory", memory);
if (memory)
{
m_settings->set("MinMemAlloc", ui->minMemSpinBox->value());
m_settings->set("MaxMemAlloc", ui->maxMemSpinBox->value());
m_settings->set("PermGen", ui->permGenSpinBox->value());
}
else
{
m_settings->reset("MinMemAlloc");
m_settings->reset("MaxMemAlloc");
m_settings->reset("PermGen");
}
// Java Install Settings
bool javaInstall = ui->javaSettingsGroupBox->isChecked();
m_settings->set("OverrideJavaLocation", javaInstall);
if (javaInstall)
{
m_settings->set("JavaPath", ui->javaPathTextBox->text());
}
else
{
m_settings->reset("JavaPath");
}
// Java arguments
bool javaArgs = ui->javaArgumentsGroupBox->isChecked();
m_settings->set("OverrideJavaArgs", javaArgs);
if(javaArgs)
{
m_settings->set("JvmArgs", ui->jvmArgsTextBox->toPlainText().replace("\n", " "));
NagUtils::checkJVMArgs(m_settings->get("JvmArgs").toString(), this->parentWidget());
}
else
{
m_settings->reset("JvmArgs");
}
// old generic 'override both' is removed.
m_settings->reset("OverrideJava");
// Custom Commands
bool custcmd = ui->customCommandsGroupBox->isChecked();
m_settings->set("OverrideCommands", custcmd);
if (custcmd)
{
m_settings->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text());
m_settings->set("PostExitCommand", ui->postExitCmdTextBox->text());
}
else
{
m_settings->reset("PreLaunchCommand");
m_settings->reset("PostExitCommand");
}
}
void InstanceSettingsPage::loadSettings()
{
// Console
ui->consoleSettingsBox->setChecked(m_settings->get("OverrideConsole").toBool());
ui->showConsoleCheck->setChecked(m_settings->get("ShowConsole").toBool());
ui->autoCloseConsoleCheck->setChecked(m_settings->get("AutoCloseConsole").toBool());
// Window Size
ui->windowSizeGroupBox->setChecked(m_settings->get("OverrideWindow").toBool());
ui->maximizedCheckBox->setChecked(m_settings->get("LaunchMaximized").toBool());
ui->windowWidthSpinBox->setValue(m_settings->get("MinecraftWinWidth").toInt());
ui->windowHeightSpinBox->setValue(m_settings->get("MinecraftWinHeight").toInt());
// Memory
ui->memoryGroupBox->setChecked(m_settings->get("OverrideMemory").toBool());
ui->minMemSpinBox->setValue(m_settings->get("MinMemAlloc").toInt());
ui->maxMemSpinBox->setValue(m_settings->get("MaxMemAlloc").toInt());
ui->permGenSpinBox->setValue(m_settings->get("PermGen").toInt());
// Java Settings
bool overrideJava = m_settings->get("OverrideJava").toBool();
bool overrideLocation = m_settings->get("OverrideJavaLocation").toBool() || overrideJava;
bool overrideArgs = m_settings->get("OverrideJavaArgs").toBool() || overrideJava;
ui->javaSettingsGroupBox->setChecked(overrideLocation);
ui->javaPathTextBox->setText(m_settings->get("JavaPath").toString());
ui->javaArgumentsGroupBox->setChecked(overrideArgs);
ui->jvmArgsTextBox->setPlainText(m_settings->get("JvmArgs").toString());
// Custom Commands
ui->customCommandsGroupBox->setChecked(m_settings->get("OverrideCommands").toBool());
ui->preLaunchCmdTextBox->setText(m_settings->get("PreLaunchCommand").toString());
ui->postExitCmdTextBox->setText(m_settings->get("PostExitCommand").toString());
}
void InstanceSettingsPage::on_javaDetectBtn_clicked()
{
JavaVersionPtr java;
VersionSelectDialog vselect(MMC->javalist().get(), tr("Select a Java version"), this, true);
vselect.setResizeOn(2);
vselect.exec();
if (vselect.result() == QDialog::Accepted && vselect.selectedVersion())
{
java = std::dynamic_pointer_cast<JavaVersion>(vselect.selectedVersion());
ui->javaPathTextBox->setText(java->path);
}
}
void InstanceSettingsPage::on_javaBrowseBtn_clicked()
{
QString dir = QFileDialog::getOpenFileName(this, tr("Find Java executable"));
if (!dir.isNull())
{
ui->javaPathTextBox->setText(dir);
}
}
void InstanceSettingsPage::on_javaTestBtn_clicked()
{
checker.reset(new JavaChecker());
connect(checker.get(), SIGNAL(checkFinished(JavaCheckResult)), this,
SLOT(checkFinished(JavaCheckResult)));
checker->path = ui->javaPathTextBox->text();
checker->performCheck();
}
void InstanceSettingsPage::checkFinished(JavaCheckResult result)
{
if (result.valid)
{
QString text;
text += "Java test succeeded!\n";
if (result.is_64bit)
text += "Using 64bit java.\n";
text += "\n";
text += "Platform reported: " + result.realPlatform;
QMessageBox::information(this, tr("Java test success"), text);
}
else
{
QMessageBox::warning(
this, tr("Java test failure"),
tr("The specified java binary didn't work. You should use the auto-detect feature, "
"or set the path to the java executable."));
}
}

View File

@ -1,4 +1,4 @@
/* Copyright 2013 MultiMC Contributors /* Copyright 2014 MultiMC Contributors
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -14,38 +14,34 @@
*/ */
#pragma once #pragma once
#include <QWidget>
#include <QDialog> #include <logic/OneSixInstance.h>
#include "settingsobject.h" #include <logic/net/NetJob.h>
#include "logic/java/JavaChecker.h" #include <logic/java/JavaChecker.h>
#include "BasePage.h"
class JavaChecker;
namespace Ui namespace Ui
{ {
class InstanceSettings; class InstanceSettingsPage;
} }
class InstanceSettings : public QDialog class InstanceSettingsPage : public QWidget, public BasePage
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit InstanceSettings(SettingsObject *s, QWidget *parent = 0); explicit InstanceSettingsPage(SettingsObject *s, QWidget *parent = 0);
~InstanceSettings(); virtual ~InstanceSettingsPage();
virtual QString displayName() override;
virtual QIcon icon() override;
virtual QString id() override;
virtual bool apply();
private:
void updateCheckboxStuff(); void updateCheckboxStuff();
private slots:
void applySettings();
void loadSettings();
protected:
virtual void showEvent(QShowEvent *);
virtual void closeEvent(QCloseEvent *);
private
slots:
void on_customCommandsGroupBox_toggled(bool arg1);
void on_buttonBox_accepted();
void on_buttonBox_rejected();
void on_javaDetectBtn_clicked(); void on_javaDetectBtn_clicked();
void on_javaTestBtn_clicked(); void on_javaTestBtn_clicked();
@ -53,8 +49,11 @@ slots:
void on_javaBrowseBtn_clicked(); void on_javaBrowseBtn_clicked();
void checkFinished(JavaCheckResult result); void checkFinished(JavaCheckResult result);
void applySettings();
void loadSettings();
private: private:
Ui::InstanceSettings *ui; Ui::InstanceSettingsPage *ui;
SettingsObject *m_obj; SettingsObject *m_settings;
std::shared_ptr<JavaChecker> checker; std::shared_ptr<JavaChecker> checker;
}; };

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>InstanceSettings</class> <class>InstanceSettingsPage</class>
<widget class="QDialog" name="InstanceSettings"> <widget class="QWidget" name="InstanceSettingsPage">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>526</width> <width>458</width>
<height>637</height> <height>476</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Instance Settings</string> <string>Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
@ -24,16 +24,16 @@
</property> </property>
<widget class="QWidget" name="minecraftTab"> <widget class="QWidget" name="minecraftTab">
<attribute name="title"> <attribute name="title">
<string>Minecraft</string> <string>Java</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_3"> <layout class="QVBoxLayout" name="verticalLayout_5">
<item> <item>
<widget class="QGroupBox" name="windowSizeGroupBox"> <widget class="QGroupBox" name="javaSettingsGroupBox">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Window Size</string> <string>Java installation</string>
</property> </property>
<property name="checkable"> <property name="checkable">
<bool>true</bool> <bool>true</bool>
@ -41,116 +41,34 @@
<property name="checked"> <property name="checked">
<bool>false</bool> <bool>false</bool>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QGridLayout" name="gridLayout">
<item> <item row="0" column="0" colspan="3">
<widget class="QCheckBox" name="maximizedCheckBox"> <widget class="QLineEdit" name="javaPathTextBox"/>
<property name="text">
<string>Start Minecraft maximized?</string>
</property>
</widget>
</item> </item>
<item>
<layout class="QGridLayout" name="gridLayoutWindowSize">
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="labelWindowHeight"> <widget class="QPushButton" name="javaDetectBtn">
<property name="text"> <property name="text">
<string>Window height:</string> <string>Auto-detect...</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelWindowWidth">
<property name="text">
<string>Window width:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="windowWidthSpinBox">
<property name="minimum">
<number>854</number>
</property>
<property name="maximum">
<number>65536</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>854</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSpinBox" name="windowHeightSpinBox"> <widget class="QPushButton" name="javaBrowseBtn">
<property name="minimum">
<number>480</number>
</property>
<property name="maximum">
<number>65536</number>
</property>
<property name="value">
<number>480</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="consoleSettingsBox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="title">
<string>Console Settings</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="showConsoleCheck">
<property name="text"> <property name="text">
<string>Show console while the game is running?</string> <string>Browse...</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="1" column="2">
<widget class="QCheckBox" name="autoCloseConsoleCheck"> <widget class="QPushButton" name="javaTestBtn">
<property name="text"> <property name="text">
<string>Automatically close console when the game quits?</string> <string>Test</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<spacer name="verticalSpacerMinecraft">
<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="javaTab">
<attribute name="title">
<string>Java</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item> <item>
<widget class="QGroupBox" name="memoryGroupBox"> <widget class="QGroupBox" name="memoryGroupBox">
<property name="enabled"> <property name="enabled">
@ -257,12 +175,12 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="javaSettingsGroupBox"> <widget class="QGroupBox" name="javaArgumentsGroupBox">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="title"> <property name="title">
<string>Java Settings</string> <string>Java arguments</string>
</property> </property>
<property name="checkable"> <property name="checkable">
<bool>true</bool> <bool>true</bool>
@ -270,51 +188,157 @@
<property name="checked"> <property name="checked">
<bool>false</bool> <bool>false</bool>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_5">
<item row="2" column="4"> <item row="1" column="1">
<widget class="QPushButton" name="javaTestBtn"> <widget class="QPlainTextEdit" name="jvmArgsTextBox"/>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacerMinecraft">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="javaTab">
<attribute name="title">
<string>Game windows</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="windowSizeGroupBox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="title">
<string>Game Window</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="maximizedCheckBox">
<property name="text"> <property name="text">
<string>Test</string> <string>Start Minecraft maximized?</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayoutWindowSize">
<item row="1" column="0">
<widget class="QLabel" name="labelWindowHeight">
<property name="text">
<string>Window height:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="labelJavaPath"> <widget class="QLabel" name="labelWindowWidth">
<property name="text"> <property name="text">
<string>Java path:</string> <string>Window width:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="0" column="1">
<widget class="QLabel" name="labelJVMArgs"> <widget class="QSpinBox" name="windowWidthSpinBox">
<property name="text"> <property name="minimum">
<string>JVM arguments:</string> <number>854</number>
</property>
<property name="maximum">
<number>65536</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>854</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="2" colspan="3"> <item row="1" column="1">
<widget class="QLineEdit" name="jvmArgsTextBox"/> <widget class="QSpinBox" name="windowHeightSpinBox">
</item> <property name="minimum">
<item row="0" column="2" colspan="3"> <number>480</number>
<widget class="QLineEdit" name="javaPathTextBox"/> </property>
</item> <property name="maximum">
<item row="2" column="3"> <number>65536</number>
<widget class="QPushButton" name="javaBrowseBtn"> </property>
<property name="text"> <property name="value">
<string>Browse...</string> <number>480</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="2"> </layout>
<widget class="QPushButton" name="javaDetectBtn"> </item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="consoleSettingsBox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="title">
<string>Console Settings</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="showConsoleCheck">
<property name="text"> <property name="text">
<string>Auto-detect...</string> <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> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<spacer name="verticalSpacerMinecraft_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>88</width>
<height>125</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Custom commands</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item> <item>
<widget class="QGroupBox" name="customCommandsGroupBox"> <widget class="QGroupBox" name="customCommandsGroupBox">
<property name="enabled"> <property name="enabled">
@ -358,12 +382,6 @@
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Pre-launch command runs before the instance launches and post-exit command runs after it exits. Both will be run in MultiMC's working directory with INST_ID, INST_DIR, and INST_NAME as environment variables.</string> <string>Pre-launch command runs before the instance launches and post-exit command runs after it exits. Both will be run in MultiMC's working directory with INST_ID, INST_DIR, and INST_NAME as environment variables.</string>
</property> </property>
@ -378,6 +396,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="verticalSpacerMinecraft_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>88</width>
<height>186</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
@ -388,32 +419,12 @@
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Apply|QDialogButtonBox::Reset</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<tabstops>
<tabstop>settingsTabs</tabstop>
<tabstop>buttonBox</tabstop>
<tabstop>windowSizeGroupBox</tabstop>
<tabstop>maximizedCheckBox</tabstop>
<tabstop>windowWidthSpinBox</tabstop>
<tabstop>windowHeightSpinBox</tabstop>
<tabstop>consoleSettingsBox</tabstop>
<tabstop>showConsoleCheck</tabstop>
<tabstop>autoCloseConsoleCheck</tabstop>
<tabstop>memoryGroupBox</tabstop>
<tabstop>minMemSpinBox</tabstop>
<tabstop>maxMemSpinBox</tabstop>
<tabstop>permGenSpinBox</tabstop>
<tabstop>javaSettingsGroupBox</tabstop>
<tabstop>jvmArgsTextBox</tabstop>
<tabstop>customCommandsGroupBox</tabstop>
<tabstop>preLaunchCmdTextBox</tabstop>
<tabstop>postExitCmdTextBox</tabstop>
</tabstops>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>

View File

@ -58,6 +58,8 @@ BaseInstance::BaseInstance(BaseInstancePrivate *d_in, const QString &rootDir,
// Java Settings // Java Settings
settings().registerSetting("OverrideJava", false); settings().registerSetting("OverrideJava", false);
settings().registerSetting("OverrideJavaLocation", false);
settings().registerSetting("OverrideJavaArgs", false);
settings().registerOverride(globalSettings->getSetting("JavaPath")); settings().registerOverride(globalSettings->getSetting("JavaPath"));
settings().registerOverride(globalSettings->getSetting("JvmArgs")); settings().registerOverride(globalSettings->getSetting("JvmArgs"));

View File

@ -32,6 +32,7 @@
#include "gui/pages/ModFolderPage.h" #include "gui/pages/ModFolderPage.h"
#include "gui/pages/LegacyJarModPage.h" #include "gui/pages/LegacyJarModPage.h"
#include <gui/pages/TexturePackPage.h> #include <gui/pages/TexturePackPage.h>
#include <gui/pages/InstanceSettingsPage.h>
LegacyInstance::LegacyInstance(const QString &rootDir, SettingsObject *settings, LegacyInstance::LegacyInstance(const QString &rootDir, SettingsObject *settings,
QObject *parent) QObject *parent)
@ -52,6 +53,7 @@ QList<BasePage *> LegacyInstance::getPages()
values.append(new ModFolderPage(loaderModList(), "mods", "plugin-blue", tr("Loader Mods"))); values.append(new ModFolderPage(loaderModList(), "mods", "plugin-blue", tr("Loader Mods")));
values.append(new ModFolderPage(coreModList(), "coremods", "plugin-green", tr("Core Mods"))); values.append(new ModFolderPage(coreModList(), "coremods", "plugin-green", tr("Core Mods")));
values.append(new TexturePackPage(this)); values.append(new TexturePackPage(this));
values.append(new InstanceSettingsPage(&settings()));
return values; return values;
} }

View File

@ -34,6 +34,7 @@
#include <gui/pages/ModFolderPage.h> #include <gui/pages/ModFolderPage.h>
#include <gui/pages/ResourcePackPage.h> #include <gui/pages/ResourcePackPage.h>
#include <gui/pages/TexturePackPage.h> #include <gui/pages/TexturePackPage.h>
#include <gui/pages/InstanceSettingsPage.h>
OneSixInstance::OneSixInstance(const QString &rootDir, SettingsObject *settings, OneSixInstance::OneSixInstance(const QString &rootDir, SettingsObject *settings,
QObject *parent) QObject *parent)
@ -64,6 +65,7 @@ QList<BasePage *> OneSixInstance::getPages()
values.append(new ModFolderPage(coreModList(), "coremods", "plugin-green", tr("Core Mods"))); values.append(new ModFolderPage(coreModList(), "coremods", "plugin-green", tr("Core Mods")));
values.append(new ResourcePackPage(this)); values.append(new ResourcePackPage(this));
values.append(new TexturePackPage(this)); values.append(new TexturePackPage(this));
values.append(new InstanceSettingsPage(&settings()));
return values; return values;
} }