diff --git a/application/InstancePageProvider.h b/application/InstancePageProvider.h index dde36aef..9c60870a 100644 --- a/application/InstancePageProvider.h +++ b/application/InstancePageProvider.h @@ -5,6 +5,7 @@ #include "pages/BasePage.h" #include "pages/BasePageProvider.h" #include "pages/instance/LogPage.h" +#include "pages/instance/ModpackPage.h" #include "pages/instance/VersionPage.h" #include "pages/instance/ModFolderPage.h" #include "pages/instance/ResourcePackPage.h" @@ -50,6 +51,7 @@ public: // values.append(new GameOptionsPage(onesix.get())); values.append(new ScreenshotsPage(FS::PathCombine(onesix->gameRoot(), "screenshots"))); values.append(new InstanceSettingsPage(onesix.get())); + values.append(new ModpackPage(onesix.get())); } std::shared_ptr legacy = std::dynamic_pointer_cast(inst); if(legacy) diff --git a/application/pages/instance/ModpackPage.cpp b/application/pages/instance/ModpackPage.cpp index e4ca2fe4..d9b8b6ef 100644 --- a/application/pages/instance/ModpackPage.cpp +++ b/application/pages/instance/ModpackPage.cpp @@ -18,7 +18,42 @@ ModpackPage::ModpackPage(BaseInstance *inst, QWidget *parent) { ui->setupUi(this); connect(ui->activateUIButton, &QCommandLinkButton::clicked, this, &ModpackPage::activateUIClicked); + + connect(ui->modpackCheck, &QCheckBox::stateChanged, this, &ModpackPage::updateState); + connect(ui->javaArgumentsGroupBox, &QGroupBox::toggled, this, &ModpackPage::updateState); + connect(ui->repositoryCheck, &QCheckBox::stateChanged, this, &ModpackPage::updateState); + connect(ui->coordinateCheck, &QCheckBox::stateChanged, this, &ModpackPage::updateState); + connect(ui->maxMemCheck, &QCheckBox::stateChanged, this, &ModpackPage::updateState); + connect(ui->minMemCheck, &QCheckBox::stateChanged, this, &ModpackPage::updateState); + connect(ui->optMemCheck, &QCheckBox::stateChanged, this, &ModpackPage::updateState); + loadSettings(); + updateState(); +} + +void ModpackPage::updateState() +{ + bool enabled = uiActivated && ui->modpackCheck->isChecked(); + ui->modpackCheck->setEnabled(uiActivated); + ui->platformComboBox->setEnabled(enabled); + + ui->javaArgumentsGroupBox->setEnabled(enabled); + ui->jvmArgsTextBox->setEnabled(enabled && ui->javaArgumentsGroupBox->isChecked()); + + ui->repositoryCheck->setEnabled(enabled); + ui->repositoryEdit->setEnabled(enabled && ui->repositoryCheck->isChecked()); + + ui->coordinateCheck->setEnabled(enabled); + ui->coordinateEdit->setEnabled(enabled && ui->coordinateCheck->isChecked()); + + ui->maxMemCheck->setEnabled(enabled); + ui->maxMemSpinBox->setEnabled(enabled && ui->maxMemCheck->isChecked()); + + ui->minMemCheck->setEnabled(enabled); + ui->minMemSpinBox->setEnabled(enabled && ui->minMemCheck->isChecked()); + + ui->optMemCheck->setEnabled(enabled); + ui->optMemSpinBox->setEnabled(enabled && ui->optMemCheck->isChecked()); } bool ModpackPage::shouldDisplay() const @@ -33,7 +68,9 @@ ModpackPage::~ModpackPage() void ModpackPage::activateUIClicked(bool) { - + uiActivated = true; + ui->activateUIButton->setHidden(true); + updateState(); } bool ModpackPage::apply() @@ -46,103 +83,50 @@ void ModpackPage::applySettings() { PackProfileModpackInfo out; out.hasValue = ui->modpackCheck->isChecked(); - // FIXME: add a layer of indirection here - if(out.hasValue) { - out.platform = ui->platformComboBox->currentText(); - if(ui->javaArgumentsGroupBox->isChecked()) { - out.recommendedArgs = ui->jvmArgsTextBox->toPlainText(); - } - if(ui->repositoryCheck->isChecked()) { - out.repository = ui->repositoryEdit->text(); - } - if(ui->coordinateCheck->isChecked()) { - out.coordinate = ui->coordinateEdit->text(); - } - if(ui->maxMemCheck->isChecked()) { - out.maxHeap = ui->maxMemSpinBox->value(); - } - if(ui->mimMemCheck->isChecked()) { - out.minHeap = ui->minMemSpinBox->value(); - } - if(ui->optMemCheck->isChecked()) { - out.optimalHeap = ui->optMemSpinBox->value(); - } + out.platform = ui->platformComboBox->currentText(); + if(ui->javaArgumentsGroupBox->isChecked()) { + out.recommendedArgs = ui->jvmArgsTextBox->toPlainText(); } - -/* -struct PackProfileModpackInfo -{ - operator bool() const { - return hasValue; + if(ui->repositoryCheck->isChecked()) { + out.repository = ui->repositoryEdit->text(); + } + if(ui->coordinateCheck->isChecked()) { + out.coordinate = ui->coordinateEdit->text(); + } + if(ui->maxMemCheck->isChecked()) { + out.maxHeap = ui->maxMemSpinBox->value(); + } + if(ui->minMemCheck->isChecked()) { + out.minHeap = ui->minMemSpinBox->value(); + } + if(ui->optMemCheck->isChecked()) { + out.optimalHeap = ui->optMemSpinBox->value(); } - bool hasValue = false; - - QString platform; - QString repository; - QString coordinate; - - MaybeInt minHeap; - MaybeInt optimalHeap; - MaybeInt maxHeap; - QString recommendedArgs; -}; -*/ } void ModpackPage::loadSettings() { PackProfileModpackInfo in; - // 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()); - ui->showConsoleErrorCheck->setChecked(m_settings->get("ShowConsoleOnError").toBool()); + ui->modpackCheck->setChecked(in.hasValue); + // FIXME: validate? + ui->platformComboBox->setCurrentText(in.platform); - // 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()); + ui->javaArgumentsGroupBox->setChecked(!in.recommendedArgs.isNull()); + ui->jvmArgsTextBox->setPlainText(in.recommendedArgs); - // Memory - ui->memoryGroupBox->setChecked(m_settings->get("OverrideMemory").toBool()); - int min = m_settings->get("MinMemAlloc").toInt(); - int max = m_settings->get("MaxMemAlloc").toInt(); - if(min < max) - { - ui->minMemSpinBox->setValue(min); - ui->maxMemSpinBox->setValue(max); - } - else - { - ui->minMemSpinBox->setValue(max); - ui->maxMemSpinBox->setValue(min); - } - ui->permGenSpinBox->setValue(m_settings->get("PermGen").toInt()); - bool permGenVisible = m_settings->get("PermGenVisible").toBool(); - ui->permGenSpinBox->setVisible(permGenVisible); - ui->labelPermGen->setVisible(permGenVisible); - ui->labelPermgenNote->setVisible(permGenVisible); + ui->repositoryCheck->setChecked(!in.repository.isNull()); + ui->repositoryEdit->setText(in.repository); + ui->coordinateCheck->setChecked(!in.coordinate.isNull()); + ui->coordinateEdit->setText(in.coordinate); - // 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->maxMemCheck->setChecked(in.maxHeap); + ui->maxMemSpinBox->setValue(in.maxHeap.get()); - ui->javaSettingsGroupBox->setChecked(overrideLocation); - ui->javaPathTextBox->setText(m_settings->get("JavaPath").toString()); + ui->minMemCheck->setChecked(in.minHeap); + ui->minMemSpinBox->setValue(in.minHeap.get()); - ui->javaArgumentsGroupBox->setChecked(overrideArgs); - ui->jvmArgsTextBox->setPlainText(m_settings->get("JvmArgs").toString()); - - // Custom commands - ui->customCommands->initialize( - true, - m_settings->get("OverrideCommands").toBool(), - m_settings->get("PreLaunchCommand").toString(), - m_settings->get("WrapperCommand").toString(), - m_settings->get("PostExitCommand").toString() - ); + ui->optMemCheck->setChecked(in.optimalHeap); + ui->optMemSpinBox->setValue(in.optimalHeap.get()); } diff --git a/application/pages/instance/ModpackPage.h b/application/pages/instance/ModpackPage.h index e50316fd..285b85fd 100644 --- a/application/pages/instance/ModpackPage.h +++ b/application/pages/instance/ModpackPage.h @@ -55,16 +55,14 @@ public: virtual bool shouldDisplay() const override; private slots: - void on_javaDetectBtn_clicked(); - void on_javaTestBtn_clicked(); - void on_javaBrowseBtn_clicked(); - void applySettings(); void loadSettings(); void activateUIClicked(bool checked); + void updateState(); private: Ui::ModpackPage *ui; BaseInstance *m_instance; + bool uiActivated = false; }; diff --git a/application/pages/instance/ModpackPage.ui b/application/pages/instance/ModpackPage.ui index 216db22b..c21db7f9 100644 --- a/application/pages/instance/ModpackPage.ui +++ b/application/pages/instance/ModpackPage.ui @@ -104,7 +104,7 @@ - + Minimum memory allocation: @@ -239,7 +239,7 @@ repositoryEdit coordinateCheck coordinateEdit - mimMemCheck + minMemCheck minMemSpinBox maxMemCheck maxMemSpinBox