From 8e44ab2338f4ca63d58de4b3329c384df9d6c053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 19 Mar 2018 02:36:12 +0100 Subject: NOISSUE redo new instance dialog --- application/dialogs/ChooseFtbPackDialog.cpp | 88 ------- application/dialogs/ChooseFtbPackDialog.h | 34 --- application/dialogs/ChooseFtbPackDialog.ui | 119 ---------- application/dialogs/NewInstanceDialog.cpp | 263 +++++---------------- application/dialogs/NewInstanceDialog.h | 43 ++-- application/dialogs/NewInstanceDialog.ui | 346 +++------------------------- application/dialogs/VersionSelectDialog.cpp | 4 +- 7 files changed, 110 insertions(+), 787 deletions(-) delete mode 100644 application/dialogs/ChooseFtbPackDialog.cpp delete mode 100644 application/dialogs/ChooseFtbPackDialog.h delete mode 100644 application/dialogs/ChooseFtbPackDialog.ui (limited to 'application/dialogs') diff --git a/application/dialogs/ChooseFtbPackDialog.cpp b/application/dialogs/ChooseFtbPackDialog.cpp deleted file mode 100644 index b1deae6e..00000000 --- a/application/dialogs/ChooseFtbPackDialog.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "ChooseFtbPackDialog.h" -#include - -ChooseFtbPackDialog::ChooseFtbPackDialog(FtbModpackList modpacks) : ui(new Ui::ChooseFtbPackDialog) -{ - ui->setupUi(this); - - filterModel = new FtbFilterModel(this); - listModel = new FtbListModel(this); - filterModel->setSourceModel(listModel); - listModel->fill(modpacks); - - ui->packList->setModel(filterModel); - ui->packList->setSortingEnabled(true); - ui->packList->header()->hide(); - ui->packList->setIndentation(0); - - filterModel->setSorting(FtbFilterModel::Sorting::ByName); - - for(int i = 0; i < filterModel->getAvailableSortings().size(); i++){ - ui->sortByBox->addItem(filterModel->getAvailableSortings().keys().at(i)); - } - - ui->sortByBox->setCurrentText(filterModel->getAvailableSortings().key(filterModel->getCurrentSorting())); - - connect(ui->sortByBox, &QComboBox::currentTextChanged, this, &ChooseFtbPackDialog::onSortingSelectionChanged); - connect(ui->packVersionSelection, &QComboBox::currentTextChanged, this, &ChooseFtbPackDialog::onVersionSelectionItemChanged); - connect(ui->packList->selectionModel(), &QItemSelectionModel::currentChanged, this, &ChooseFtbPackDialog::onPackSelectionChanged); - - ui->modpackInfo->setOpenExternalLinks(true); - - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); -} - -ChooseFtbPackDialog::~ChooseFtbPackDialog() -{ - delete ui; -} - -void ChooseFtbPackDialog::onPackSelectionChanged(QModelIndex now, QModelIndex prev) -{ - ui->packVersionSelection->clear(); - FtbModpack selectedPack = filterModel->data(now, Qt::UserRole).value(); - - ui->modpackInfo->setHtml("Pack by " + selectedPack.author + "" + "
Minecraft " + selectedPack.mcVersion + "
" - "
" + selectedPack.description + "
  • " + selectedPack.mods.replace(";", "
  • ") + "
"); - - bool currentAdded = false; - - for(int i = 0; i < selectedPack.oldVersions.size(); i++) { - if(selectedPack.currentVersion == selectedPack.oldVersions.at(i)) { - currentAdded = true; - } - ui->packVersionSelection->addItem(selectedPack.oldVersions.at(i)); - } - - if(!currentAdded) { - ui->packVersionSelection->addItem(selectedPack.currentVersion); - } - - selected = selectedPack; - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!selected.broken); -} - -void ChooseFtbPackDialog::onVersionSelectionItemChanged(QString data) -{ - if(data.isNull() || data.isEmpty()) { - selectedVersion = ""; - return; - } - - selectedVersion = data; -} - -FtbModpack ChooseFtbPackDialog::getSelectedModpack() -{ - return selected; -} - -QString ChooseFtbPackDialog::getSelectedVersion() -{ - return selectedVersion; -} - -void ChooseFtbPackDialog::onSortingSelectionChanged(QString data) -{ - filterModel->setSorting(filterModel->getAvailableSortings().value(data)); -} diff --git a/application/dialogs/ChooseFtbPackDialog.h b/application/dialogs/ChooseFtbPackDialog.h deleted file mode 100644 index f9f3dd08..00000000 --- a/application/dialogs/ChooseFtbPackDialog.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include -#include -#include -#include "ui_ChooseFtbPackDialog.h" -#include "FtbListModel.h" - -namespace Ui { - class ChooseFtbPackDialog; -} - -class ChooseFtbPackDialog : public QDialog { - - Q_OBJECT - -private: - Ui::ChooseFtbPackDialog *ui; - FtbModpack selected; - QString selectedVersion; - FtbListModel* listModel; - FtbFilterModel* filterModel; - -private slots: - void onSortingSelectionChanged(QString data); - void onVersionSelectionItemChanged(QString data); - void onPackSelectionChanged(QModelIndex first, QModelIndex second); -public: - ChooseFtbPackDialog(FtbModpackList packs); - ~ChooseFtbPackDialog(); - - FtbModpack getSelectedModpack(); - QString getSelectedVersion(); -}; diff --git a/application/dialogs/ChooseFtbPackDialog.ui b/application/dialogs/ChooseFtbPackDialog.ui deleted file mode 100644 index f590a4cd..00000000 --- a/application/dialogs/ChooseFtbPackDialog.ui +++ /dev/null @@ -1,119 +0,0 @@ - - - ChooseFtbPackDialog - - - - 0 - 0 - 700 - 437 - - - - - 0 - 0 - - - - false - - - - - - Version selected: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - 0 - 0 - - - - - - - - true - - - false - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - false - - - - - - - - 0 - 0 - - - - - - - - - - - - - buttonBox - accepted() - ChooseFtbPackDialog - accept() - - - 211 - 173 - - - 889 - 501 - - - - - buttonBox - rejected() - ChooseFtbPackDialog - reject() - - - 225 - 162 - - - 524 - 458 - - - - - diff --git a/application/dialogs/NewInstanceDialog.cpp b/application/dialogs/NewInstanceDialog.cpp index eee3991c..f0783603 100644 --- a/application/dialogs/NewInstanceDialog.cpp +++ b/application/dialogs/NewInstanceDialog.cpp @@ -25,80 +25,30 @@ #include "VersionSelectDialog.h" #include "ProgressDialog.h" #include "IconPickerDialog.h" -#include "ChooseFtbPackDialog.h" #include #include #include #include +#include -#include -#include - -class UrlValidator : public QValidator -{ -public: - using QValidator::QValidator; - - State validate(QString &in, int &pos) const - { - const QUrl url(in); - if (url.isValid() && !url.isRelative() && !url.isEmpty()) - { - return Acceptable; - } - else if (QFile::exists(in)) - { - return Acceptable; - } - else - { - return Intermediate; - } - } -}; +#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); - resize(minimumSizeHint()); - layout()->setSizeConstraint(QLayout::SetFixedSize); - auto vlist = ENV.metadataIndex()->get("net.minecraft"); - if(vlist->isLoaded()) - { - setSelectedVersion(vlist->getRecommended()); - } - else - { - vlist->load(Net::Mode::Online); - auto task = vlist->getLoadTask(); - if(vlist->isLoaded()) - { - setSelectedVersion(vlist->getRecommended()); - } - if(task) - { - connect(task.get(), &Task::succeeded, this, &NewInstanceDialog::versionListUpdated); - } - } + setWindowIcon(MMC->getThemedIcon("new")); InstIconKey = "default"; ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey)); - ui->modpackEdit->setValidator(new UrlValidator(ui->modpackEdit)); - - ui->instNameTextBox->setAlignment(Qt::AlignHCenter); - - connect(ui->modpackEdit, &QLineEdit::textChanged, this, &NewInstanceDialog::updateDialogState); - connect(ui->modpackBox, &QRadioButton::clicked, this, &NewInstanceDialog::updateDialogState); - - connect(ui->versionBox, &QRadioButton::clicked, this, &NewInstanceDialog::updateDialogState); - connect(ui->versionTextBox, &QLineEdit::textChanged, this, &NewInstanceDialog::updateDialogState); - - connect(ui->ftbBox, &QRadioButton::clicked, this, &NewInstanceDialog::updateDialogState); - auto groups = MMC->instances()->getGroups().toSet(); auto groupList = QStringList(groups.toList()); groupList.sort(Qt::CaseInsensitive); @@ -113,32 +63,47 @@ NewInstanceDialog::NewInstanceDialog(const QString & initialGroup, const QString } ui->groupBox->setCurrentIndex(index); ui->groupBox->lineEdit()->setPlaceholderText(tr("No group")); - ui->buttonBox->setFocus(); - originalPlaceholderText = ui->instNameTextBox->placeholderText(); - if(!url.isEmpty()) - { - ui->modpackBox->setChecked(true); - ui->modpackEdit->setText(url); - } + m_buttons = new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Ok); + m_buttons->button(QDialogButtonBox::Ok)->setDefault(true); - ftbPackDownloader = new FtbPackDownloader(); + connect(m_buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &QDialog::accept); + connect(m_buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help); - connect(ftbPackDownloader, &FtbPackDownloader::ready, this, &NewInstanceDialog::ftbPackDataDownloadSuccessfully); - connect(ftbPackDownloader, &FtbPackDownloader::packFetchFailed, this, &NewInstanceDialog::ftbPackDataDownloadFailed); + m_container = new PageContainer(this); + m_container->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Expanding); + ui->verticalLayout->insertWidget(2, m_container); - ftbPackDownloader->fetchModpacks(false); + m_container->addButtons(m_buttons); + m_buttons->setFocus(); + + if(!url.isEmpty()) + { + m_container->selectPage("import"); + importPage->setUrl(url); + } updateDialogState(); + + restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("NewInstanceGeometry").toByteArray())); } -void NewInstanceDialog::versionListUpdated() +QList NewInstanceDialog::getPages() { - if(!m_versionSetByUser) + importPage = new ImportPage(this); + return { - auto vlist = ENV.metadataIndex()->get("net.minecraft"); - setSelectedVersion(vlist->getRecommended()); - } + new VanillaPage(this), + new FTBPage(this), + importPage, + new TwitchPage(this), + new TechnicPage(this) + }; +} + +QString NewInstanceDialog::dialogTitle() +{ + return tr("New Instance"); } NewInstanceDialog::~NewInstanceDialog() @@ -146,58 +111,29 @@ NewInstanceDialog::~NewInstanceDialog() delete ui; } -void NewInstanceDialog::updateDialogState() +void NewInstanceDialog::setSuggestedPack(const QString& name, InstanceTask* task) { - QString suggestedName; - if(ui->versionBox->isChecked()) - { - suggestedName = ui->versionTextBox->text(); - } - else if (ui->modpackBox->isChecked()) - { - auto url = QUrl::fromUserInput(ui->modpackEdit->text()); - QFileInfo fi(url.fileName()); - suggestedName = fi.completeBaseName(); - } - else if (ui->ftbBox->isChecked()) - { - if(ftbPackDownloader->isValidPackSelected()) { - suggestedName = ftbPackDownloader->getSuggestedInstanceName(); - ui->labelFtbPack->setText(selectedPack.name); - } + creationTask.reset(task); + ui->instNameTextBox->setPlaceholderText(name); - } - - ftbModpackRequested = ui->ftbBox->isChecked(); - - if(suggestedName.isEmpty()) - { - ui->instNameTextBox->setPlaceholderText(originalPlaceholderText); - } - else - { - ui->instNameTextBox->setPlaceholderText(suggestedName); - } - bool allowOK = !instName().isEmpty() && ( - (ui->versionBox->isChecked() && m_selectedVersion) || - (ui->modpackBox->isChecked() && ui->modpackEdit->hasAcceptableInput()) || - (ui->ftbBox->isChecked() && ftbPackDownloader && ftbPackDownloader->isValidPackSelected() ) - ); - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(allowOK); + auto allowOK = task && !instName().isEmpty(); + m_buttons->button(QDialogButtonBox::Ok)->setEnabled(allowOK); } -void NewInstanceDialog::setSelectedVersion(BaseVersionPtr version) +InstanceTask * NewInstanceDialog::extractTask() { - m_selectedVersion = version; + InstanceTask * extracted = creationTask.get(); + creationTask.release(); + extracted->setName(instName()); + extracted->setGroup(instGroup()); + extracted->setIcon(iconKey()); + return extracted; +} - if (m_selectedVersion) - { - ui->versionTextBox->setText(version->descriptor()); - } - else - { - ui->versionTextBox->setText(""); - } +void NewInstanceDialog::updateDialogState() +{ + auto allowOK = creationTask && !instName().isEmpty(); + m_buttons->button(QDialogButtonBox::Ok)->setEnabled(allowOK); } QString NewInstanceDialog::instName() const @@ -208,7 +144,7 @@ QString NewInstanceDialog::instName() const return result.trimmed(); } result = ui->instNameTextBox->placeholderText(); - if(result.size() && result != originalPlaceholderText) + if(result.size()) { return result.trimmed(); } @@ -223,45 +159,6 @@ QString NewInstanceDialog::iconKey() const { return InstIconKey; } -QUrl NewInstanceDialog::modpackUrl() const -{ - if (ui->modpackBox->isChecked()) - { - const QUrl url(ui->modpackEdit->text()); - if (url.isValid() && !url.isRelative() && !url.host().isEmpty()) - { - return url; - } - else - { - return QUrl::fromLocalFile(ui->modpackEdit->text()); - } - } - else - { - return QUrl(); - } -} - -BaseVersionPtr NewInstanceDialog::selectedVersion() const -{ - return m_selectedVersion; -} - -void NewInstanceDialog::on_btnChangeVersion_clicked() -{ - VersionSelectDialog vselect(ENV.metadataIndex()->get("net.minecraft").get(), tr("Change Minecraft version"), this); - vselect.exec(); - if (vselect.result() == QDialog::Accepted) - { - BaseVersionPtr version = vselect.selectedVersion(); - if (version) - { - m_versionSetByUser = true; - setSelectedVersion(version); - } - } -} void NewInstanceDialog::on_iconButton_clicked() { @@ -280,46 +177,14 @@ void NewInstanceDialog::on_instNameTextBox_textChanged(const QString &arg1) updateDialogState(); } -void NewInstanceDialog::on_modpackBtn_clicked() +void NewInstanceDialog::closeEvent(QCloseEvent* event) { - const QUrl url = QFileDialog::getOpenFileUrl(this, tr("Choose modpack"), modpackUrl(), tr("Zip (*.zip)")); - if (url.isValid()) + qDebug() << "New instance dialog close requested"; + if (m_container->prepareToClose()) { - if (url.isLocalFile()) - { - ui->modpackEdit->setText(url.toLocalFile()); - } - else - { - ui->modpackEdit->setText(url.toString()); - } - } -} - -bool NewInstanceDialog::isFtbModpackRequested() { - return ftbModpackRequested; -} - -FtbPackDownloader *NewInstanceDialog::getFtbPackDownloader() { - return ftbPackDownloader; -} - -void NewInstanceDialog::on_btnChooseFtbPack_clicked() { - ChooseFtbPackDialog dl(ftbPackDownloader->getModpacks()); - dl.exec(); - if(dl.result() == QDialog::Accepted) { - selectedPack = dl.getSelectedModpack(); - ftbPackDownloader->selectPack(selectedPack, dl.getSelectedVersion()); + qDebug() << "New instance dialog close approved"; + MMC->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); + qDebug() << "New instance dialog geometry saved"; + QDialog::closeEvent(event); } - updateDialogState(); } - -void NewInstanceDialog::ftbPackDataDownloadSuccessfully() { - ui->packDataDownloadStatus->setText(tr("(Data download complete)")); - ui->ftbBox->setEnabled(true); -} - -void NewInstanceDialog::ftbPackDataDownloadFailed() { - ui->packDataDownloadStatus->setText(tr("(Data download failed)")); -} - diff --git a/application/dialogs/NewInstanceDialog.h b/application/dialogs/NewInstanceDialog.h index f1fe26f4..ca134d32 100644 --- a/application/dialogs/NewInstanceDialog.h +++ b/application/dialogs/NewInstanceDialog.h @@ -18,15 +18,19 @@ #include #include "BaseVersion.h" -#include "modplatform/ftb/FtbPackDownloader.h" -#include "modplatform/ftb/PackHelpers.h" +#include "pages/BasePageProvider.h" +#include "InstanceTask.h" namespace Ui { class NewInstanceDialog; } -class NewInstanceDialog : public QDialog +class PageContainer; +class QDialogButtonBox; +class ImportPage; + +class NewInstanceDialog : public QDialog, public BasePageProvider { Q_OBJECT @@ -36,39 +40,28 @@ public: void updateDialogState(); - void setSelectedVersion(BaseVersionPtr version); + void setSuggestedPack(const QString & name = QString(), InstanceTask * task = nullptr); + InstanceTask * extractTask(); + + QString dialogTitle() override; + QList getPages() override; QString instName() const; QString instGroup() const; QString iconKey() const; - QUrl modpackUrl() const; - BaseVersionPtr selectedVersion() const; - - bool isFtbModpackRequested(); - FtbPackDownloader* getFtbPackDownloader(); private slots: - void on_btnChangeVersion_clicked(); void on_iconButton_clicked(); - void on_modpackBtn_clicked(); - void on_btnChooseFtbPack_clicked(); void on_instNameTextBox_textChanged(const QString &arg1); - void versionListUpdated(); - - void ftbPackDataDownloadSuccessfully(); - void ftbPackDataDownloadFailed(); + virtual void closeEvent(QCloseEvent *event); private: - Ui::NewInstanceDialog *ui; - - bool m_versionSetByUser = false; - bool ftbModpackRequested = false; + Ui::NewInstanceDialog *ui = nullptr; + PageContainer * m_container = nullptr; + QDialogButtonBox * m_buttons = nullptr; - BaseVersionPtr m_selectedVersion; QString InstIconKey; - QString originalPlaceholderText; - - FtbPackDownloader* ftbPackDownloader; - FtbModpack selectedPack; + ImportPage *importPage = nullptr; + std::unique_ptr creationTask; }; diff --git a/application/dialogs/NewInstanceDialog.ui b/application/dialogs/NewInstanceDialog.ui index 428b9c57..7fb19ff5 100644 --- a/application/dialogs/NewInstanceDialog.ui +++ b/application/dialogs/NewInstanceDialog.ui @@ -9,8 +9,8 @@ 0 0 - 281 - 407 + 730 + 127 @@ -25,357 +25,63 @@ - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 80 - 80 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Name - - - - - - - Qt::Horizontal - - - - - - - - - &Group: - - - groupBox - - - - + + - - - 0 - 0 - - true - - - - - - - - false - + + - Install FTB Pack - - - - - - - ... - - - - - - - false - - - ... - - - - - - - false - - - ... - - - - - - - false + &Group: - - No Pack choosen + + groupBox - - - - Impor&t Modpack (local file or link): - - + + - - + + - Vani&lla Minecraft (select version): - - - true + &Name: - - - - - - true - - - - - - - false - - - http:// + + instNameTextBox - - - - (Loading Pack data...) + + + + + 80 + 80 + - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - - - + Qt::Horizontal - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - FocusLineEdit - QLineEdit -
widgets/FocusLineEdit.h
-
-
+ iconButton instNameTextBox groupBox - versionBox - versionTextBox - btnChangeVersion - modpackBox - modpackEdit - modpackBtn - iconButton - - - buttonBox - accepted() - NewInstanceDialog - accept() - - - 266 - 378 - - - 157 - 274 - - - - - buttonBox - rejected() - NewInstanceDialog - reject() - - - 271 - 378 - - - 280 - 274 - - - - - modpackBox - toggled(bool) - modpackEdit - setEnabled(bool) - - - 91 - 251 - - - 240 - 278 - - - - - modpackBox - toggled(bool) - modpackBtn - setEnabled(bool) - - - 139 - 251 - - - 270 - 278 - - - - - versionBox - toggled(bool) - versionTextBox - setEnabled(bool) - - - 93 - 195 - - - 223 - 224 - - - - - versionBox - toggled(bool) - btnChangeVersion - setEnabled(bool) - - - 104 - 198 - - - 270 - 224 - - - - - ftbBox - toggled(bool) - btnChooseFtbPack - setEnabled(bool) - - - 67 - 301 - - - 254 - 327 - - - - - ftbBox - toggled(bool) - labelFtbPack - setEnabled(bool) - - - 81 - 310 - - - 73 - 334 - - - - + diff --git a/application/dialogs/VersionSelectDialog.cpp b/application/dialogs/VersionSelectDialog.cpp index a44572cc..1ed81e79 100644 --- a/application/dialogs/VersionSelectDialog.cpp +++ b/application/dialogs/VersionSelectDialog.cpp @@ -40,7 +40,7 @@ VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title, m_verticalLayout = new QVBoxLayout(this); m_verticalLayout->setObjectName(QStringLiteral("verticalLayout")); - m_versionWidget = new VersionSelectWidget(vlist, parent); + m_versionWidget = new VersionSelectWidget(parent); m_verticalLayout->addWidget(m_versionWidget); m_horizontalLayout = new QHBoxLayout(); @@ -107,7 +107,7 @@ void VersionSelectDialog::setResizeOn(int column) int VersionSelectDialog::exec() { QDialog::open(); - m_versionWidget->initialize(); + m_versionWidget->initialize(m_vlist); return QDialog::exec(); } -- cgit v1.2.3