Added FTB pack selection ad download, WIP

This commit is contained in:
Janrupf
2018-02-28 19:42:30 +01:00
parent 1a43f28297
commit ab3fe74c97
21 changed files with 914 additions and 40 deletions

View File

@ -0,0 +1,64 @@
#include "ChooseFtbPackDialog.h"
#include "widgets/FtbModpackListItem.h"
ChooseFtbPackDialog::ChooseFtbPackDialog(FtbModpackList modpacks) : ui(new Ui::ChooseFtbPackDialog) {
ui->setupUi(this);
for(int i = 0; i < modpacks.size(); i++) {
FtbModpackListItem *item = new FtbModpackListItem(ui->packList, modpacks.at(i));
item->setText(modpacks.at(i).name);
}
//TODO: Use a model/view instead of a widget
connect(ui->packList, &QListWidget::itemClicked, this, &ChooseFtbPackDialog::onListItemClicked);
connect(ui->packVersionSelection, &QComboBox::currentTextChanged, this, &ChooseFtbPackDialog::onVersionSelectionItemChanged);
ui->modpackInfo->setOpenExternalLinks(true);
}
ChooseFtbPackDialog::~ChooseFtbPackDialog(){
delete ui;
}
void ChooseFtbPackDialog::onListItemClicked(QListWidgetItem *item){
ui->packVersionSelection->clear();
FtbModpack selectedPack = static_cast<FtbModpackListItem*>(item)->getModpack();
ui->modpackInfo->setHtml("Pack by <b>" + selectedPack.author + "</b>" + "<br>Minecraft " + selectedPack.mcVersion + "<br>"
"<br>" + selectedPack.description + "<ul><li>" + selectedPack.mods.replace(";", "</li><li>") + "</li></ul>");
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;
}
void ChooseFtbPackDialog::onVersionSelectionItemChanged(QString data) {
if(data.isNull() || data.isEmpty()) {
selectedVersion = "";
return;
}
selectedVersion = data;
}
FtbModpack ChooseFtbPackDialog::getSelectedModpack() {
return selected;
}
QString ChooseFtbPackDialog::getSelectedVersion() {
return selectedVersion;
}

View File

@ -0,0 +1,32 @@
#pragma once
#include <QDialog>
#include <net/NetJob.h>
#include <modplatform/PackHelpers.h>
#include "ui_ChooseFtbPackDialog.h"
#include <modplatform/PackHelpers.h>
namespace Ui {
class ChooseFtbPackDialog;
}
class ChooseFtbPackDialog : public QDialog {
Q_OBJECT
private:
Ui::ChooseFtbPackDialog *ui;
FtbModpack selected;
QString selectedVersion;
private slots:
void onListItemClicked(QListWidgetItem *item);
void onVersionSelectionItemChanged(QString data);
public:
ChooseFtbPackDialog(FtbModpackList packs);
~ChooseFtbPackDialog();
FtbModpack getSelectedModpack();
QString getSelectedVersion();
};

View File

@ -0,0 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ChooseFtbPackDialog</class>
<widget class="QDialog" name="ChooseFtbPackDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>730</width>
<height>437</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="sizeGripEnabled">
<bool>false</bool>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>540</x>
<y>400</y>
<width>176</width>
<height>25</height>
</rect>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QScrollArea" name="scrollArea">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>261</width>
<height>381</height>
</rect>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>259</width>
<height>379</height>
</rect>
</property>
<widget class="QListWidget" name="packList">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>261</width>
<height>381</height>
</rect>
</property>
</widget>
</widget>
</widget>
<widget class="QScrollArea" name="scrollArea_2">
<property name="geometry">
<rect>
<x>280</x>
<y>10</y>
<width>441</width>
<height>381</height>
</rect>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>439</width>
<height>379</height>
</rect>
</property>
<widget class="QTextBrowser" name="modpackInfo">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>441</width>
<height>381</height>
</rect>
</property>
</widget>
</widget>
</widget>
<widget class="QComboBox" name="packVersionSelection">
<property name="geometry">
<rect>
<x>450</x>
<y>400</y>
<width>72</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="selectedVersionLabel">
<property name="geometry">
<rect>
<x>340</x>
<y>400</y>
<width>101</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Version selected:</string>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ChooseFtbPackDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>666</x>
<y>422</y>
</hint>
<hint type="destinationlabel">
<x>889</x>
<y>501</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ChooseFtbPackDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>680</x>
<y>411</y>
</hint>
<hint type="destinationlabel">
<x>524</x>
<y>458</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -25,6 +25,7 @@
#include "VersionSelectDialog.h"
#include "ProgressDialog.h"
#include "IconPickerDialog.h"
#include "ChooseFtbPackDialog.h"
#include <QLayout>
#include <QPushButton>
@ -92,9 +93,12 @@ NewInstanceDialog::NewInstanceDialog(const QString & initialGroup, const QString
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);
@ -117,6 +121,14 @@ NewInstanceDialog::NewInstanceDialog(const QString & initialGroup, const QString
ui->modpackBox->setChecked(true);
ui->modpackEdit->setText(url);
}
ftbPackDownloader = new FtbPackDownloader();
connect(ftbPackDownloader, &FtbPackDownloader::ready, this, &NewInstanceDialog::ftbPackDataDownloadSuccessfully);
connect(ftbPackDownloader, &FtbPackDownloader::packFetchFailed, this, &NewInstanceDialog::ftbPackDataDownloadFailed);
ftbPackDownloader->fetchModpacks(false);
updateDialogState();
}
@ -147,6 +159,17 @@ void NewInstanceDialog::updateDialogState()
QFileInfo fi(url.fileName());
suggestedName = fi.completeBaseName();
}
else if (ui->ftbBox->isChecked())
{
if(ftbPackDownloader->isValidPackSelected()) {
suggestedName = ftbPackDownloader->getSuggestedInstanceName();
ui->labelFtbPack->setText(selectedPack.name);
}
}
ftbModpackRequested = ui->ftbBox->isChecked();
if(suggestedName.isEmpty())
{
ui->instNameTextBox->setPlaceholderText(originalPlaceholderText);
@ -156,9 +179,10 @@ void NewInstanceDialog::updateDialogState()
ui->instNameTextBox->setPlaceholderText(suggestedName);
}
bool allowOK = !instName().isEmpty() && (
(ui->versionBox->isChecked() && m_selectedVersion) ||
(ui->modpackBox->isChecked() && ui->modpackEdit->hasAcceptableInput())
);
(ui->versionBox->isChecked() && m_selectedVersion) ||
(ui->modpackBox->isChecked() && ui->modpackEdit->hasAcceptableInput()) ||
(ui->ftbBox->isChecked() && ftbPackDownloader && ftbPackDownloader->isValidPackSelected() )
);
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(allowOK);
}
@ -271,3 +295,34 @@ void NewInstanceDialog::on_modpackBtn_clicked()
}
}
}
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());
}
updateDialogState();
}
void NewInstanceDialog::ftbPackDataDownloadSuccessfully() {
ui->packDataDownloadStatus->setText(tr("(Pack data download complete)"));
// ui->labelFtbPack->setText(tr("Disabled for now... not completed!"));
// Disable for PR
ui->ftbBox->setEnabled(true);
}
void NewInstanceDialog::ftbPackDataDownloadFailed() {
ui->packDataDownloadStatus->setText(tr("(Pack data download failed)"));
}

View File

@ -18,6 +18,8 @@
#include <QDialog>
#include "BaseVersion.h"
#include "modplatform/FtbPackDownloader.h"
#include "modplatform/PackHelpers.h"
namespace Ui
{
@ -42,19 +44,31 @@ public:
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();
private:
Ui::NewInstanceDialog *ui;
bool m_versionSetByUser = false;
bool ftbModpackRequested = false;
BaseVersionPtr m_selectedVersion;
QString InstIconKey;
QString originalPlaceholderText;
FtbPackDownloader* ftbPackDownloader;
FtbModpack selectedPack;
};

View File

@ -10,7 +10,7 @@
<x>0</x>
<y>0</y>
<width>281</width>
<height>404</height>
<height>407</height>
</rect>
</property>
<property name="windowTitle">
@ -107,6 +107,33 @@
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="5" column="0">
<widget class="QRadioButton" name="ftbBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Install FTB Pack</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QToolButton" name="btnChangeVersion">
<property name="text">
<string notr="true">...</string>
</property>
</widget>
</item>
<item row="7" column="2">
<widget class="QToolButton" name="btnChooseFtbPack">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QToolButton" name="modpackBtn">
<property name="enabled">
@ -117,27 +144,13 @@
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="FocusLineEdit" name="modpackEdit">
<item row="7" column="0" colspan="2">
<widget class="QLabel" name="labelFtbPack">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true">http://</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLineEdit" name="versionTextBox">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QToolButton" name="btnChangeVersion">
<property name="text">
<string notr="true">...</string>
<string> No Pack choosen</string>
</property>
</widget>
</item>
@ -158,6 +171,30 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLineEdit" name="versionTextBox">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="FocusLineEdit" name="modpackEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true">http://</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QLabel" name="packDataDownloadStatus">
<property name="text">
<string>(Loading Pack data...)</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -219,8 +256,8 @@
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>257</x>
<y>333</y>
<x>266</x>
<y>378</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
@ -235,11 +272,11 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>325</x>
<y>333</y>
<x>271</x>
<y>378</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<x>280</x>
<y>274</y>
</hint>
</hints>
@ -251,12 +288,12 @@
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>81</x>
<y>229</y>
<x>91</x>
<y>251</y>
</hint>
<hint type="destinationlabel">
<x>236</x>
<y>221</y>
<x>240</x>
<y>278</y>
</hint>
</hints>
</connection>
@ -267,12 +304,12 @@
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>129</x>
<y>225</y>
<x>139</x>
<y>251</y>
</hint>
<hint type="destinationlabel">
<x>328</x>
<y>229</y>
<x>270</x>
<y>278</y>
</hint>
</hints>
</connection>
@ -287,8 +324,8 @@
<y>195</y>
</hint>
<hint type="destinationlabel">
<x>213</x>
<y>191</y>
<x>223</x>
<y>224</y>
</hint>
</hints>
</connection>
@ -303,8 +340,40 @@
<y>198</y>
</hint>
<hint type="destinationlabel">
<x>322</x>
<y>192</y>
<x>270</x>
<y>224</y>
</hint>
</hints>
</connection>
<connection>
<sender>ftbBox</sender>
<signal>toggled(bool)</signal>
<receiver>btnChooseFtbPack</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>67</x>
<y>301</y>
</hint>
<hint type="destinationlabel">
<x>254</x>
<y>327</y>
</hint>
</hints>
</connection>
<connection>
<sender>ftbBox</sender>
<signal>toggled(bool)</signal>
<receiver>labelFtbPack</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>81</x>
<y>310</y>
</hint>
<hint type="destinationlabel">
<x>73</x>
<y>334</y>
</hint>
</hints>
</connection>