/* Copyright 2013-2018 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. */ #include "MultiMC.h" #include "NewInstanceDialog.h" #include "ui_NewInstanceDialog.h" #include #include #include #include #include "VersionSelectDialog.h" #include "ProgressDialog.h" #include "IconPickerDialog.h" #include #include #include #include #include #include "widgets/PageContainer.h" #include #include #include #include #include NewInstanceDialog::NewInstanceDialog(const QString & initialGroup, const QString & url, QWidget *parent) : QDialog(parent), ui(new Ui::NewInstanceDialog) { ui->setupUi(this); setWindowIcon(MMC->getThemedIcon("new")); InstIconKey = "default"; ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey)); auto groups = MMC->instances()->getGroups().toSet(); auto groupList = QStringList(groups.toList()); groupList.sort(Qt::CaseInsensitive); groupList.removeOne(""); groupList.push_front(initialGroup); groupList.push_front(""); ui->groupBox->addItems(groupList); int index = groupList.indexOf(initialGroup); if(index == -1) { index = 0; } ui->groupBox->setCurrentIndex(index); ui->groupBox->lineEdit()->setPlaceholderText(tr("No group")); m_buttons = new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Ok); m_buttons->button(QDialogButtonBox::Ok)->setDefault(true); m_container = new PageContainer(this); m_container->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Expanding); ui->verticalLayout->insertWidget(2, m_container); m_container->addButtons(m_buttons); m_buttons->setFocus(); if(!url.isEmpty()) { m_container->selectPage("import"); importPage->setUrl(url); } connect(m_buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &NewInstanceDialog::accept); connect(m_buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help); updateDialogState(); restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("NewInstanceGeometry").toByteArray())); } void NewInstanceDialog::reject() { MMC->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); QDialog::reject(); } void NewInstanceDialog::accept() { MMC->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); QDialog::accept(); } QList NewInstanceDialog::getPages() { importPage = new ImportPage(this); return { new VanillaPage(this), new FTBPage(this), importPage, new TwitchPage(this), new TechnicPage(this) }; } QString NewInstanceDialog::dialogTitle() { return tr("New Instance"); } NewInstanceDialog::~NewInstanceDialog() { delete ui; } void NewInstanceDialog::setSuggestedPack(const QString& name, InstanceTask* task) { creationTask.reset(task); ui->instNameTextBox->setPlaceholderText(name); auto allowOK = task && !instName().isEmpty(); m_buttons->button(QDialogButtonBox::Ok)->setEnabled(allowOK); } InstanceTask * NewInstanceDialog::extractTask() { InstanceTask * extracted = creationTask.get(); creationTask.release(); extracted->setName(instName()); extracted->setGroup(instGroup()); extracted->setIcon(iconKey()); return extracted; } void NewInstanceDialog::updateDialogState() { auto allowOK = creationTask && !instName().isEmpty(); m_buttons->button(QDialogButtonBox::Ok)->setEnabled(allowOK); } QString NewInstanceDialog::instName() const { auto result = ui->instNameTextBox->text(); if(result.size()) { return result.trimmed(); } result = ui->instNameTextBox->placeholderText(); if(result.size()) { return result.trimmed(); } return QString(); } QString NewInstanceDialog::instGroup() const { return ui->groupBox->currentText(); } QString NewInstanceDialog::iconKey() const { return InstIconKey; } void NewInstanceDialog::on_iconButton_clicked() { IconPickerDialog dlg(this); dlg.execWithSelection(InstIconKey); if (dlg.result() == QDialog::Accepted) { InstIconKey = dlg.selectedIconKey; ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey)); } } void NewInstanceDialog::on_instNameTextBox_textChanged(const QString &arg1) { updateDialogState(); }