diff options
author | Janrupf <werbung.janrupf@t-online.de> | 2018-02-28 19:42:30 +0100 |
---|---|---|
committer | Janrupf <werbung.janrupf@t-online.de> | 2018-02-28 19:43:56 +0100 |
commit | ab3fe74c97158fd0f979c15a0d1b0f7eb9976e7d (patch) | |
tree | f37e1c28160f882dd8f224788a985370832d6814 /application/dialogs | |
parent | 1a43f2829743cb88ace3f650d3e060725990c1f1 (diff) | |
download | MultiMC-ab3fe74c97158fd0f979c15a0d1b0f7eb9976e7d.tar MultiMC-ab3fe74c97158fd0f979c15a0d1b0f7eb9976e7d.tar.gz MultiMC-ab3fe74c97158fd0f979c15a0d1b0f7eb9976e7d.tar.lz MultiMC-ab3fe74c97158fd0f979c15a0d1b0f7eb9976e7d.tar.xz MultiMC-ab3fe74c97158fd0f979c15a0d1b0f7eb9976e7d.zip |
Added FTB pack selection ad download, WIP
Diffstat (limited to 'application/dialogs')
-rw-r--r-- | application/dialogs/ChooseFtbPackDialog.cpp | 64 | ||||
-rw-r--r-- | application/dialogs/ChooseFtbPackDialog.h | 32 | ||||
-rw-r--r-- | application/dialogs/ChooseFtbPackDialog.ui | 163 | ||||
-rw-r--r-- | application/dialogs/NewInstanceDialog.cpp | 61 | ||||
-rw-r--r-- | application/dialogs/NewInstanceDialog.h | 14 | ||||
-rw-r--r-- | application/dialogs/NewInstanceDialog.ui | 129 |
6 files changed, 430 insertions, 33 deletions
diff --git a/application/dialogs/ChooseFtbPackDialog.cpp b/application/dialogs/ChooseFtbPackDialog.cpp new file mode 100644 index 00000000..ae7c72e1 --- /dev/null +++ b/application/dialogs/ChooseFtbPackDialog.cpp @@ -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; +} diff --git a/application/dialogs/ChooseFtbPackDialog.h b/application/dialogs/ChooseFtbPackDialog.h new file mode 100644 index 00000000..212aa27b --- /dev/null +++ b/application/dialogs/ChooseFtbPackDialog.h @@ -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(); +}; diff --git a/application/dialogs/ChooseFtbPackDialog.ui b/application/dialogs/ChooseFtbPackDialog.ui new file mode 100644 index 00000000..fdf845a9 --- /dev/null +++ b/application/dialogs/ChooseFtbPackDialog.ui @@ -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> diff --git a/application/dialogs/NewInstanceDialog.cpp b/application/dialogs/NewInstanceDialog.cpp index 5424a119..5faf57ac 100644 --- a/application/dialogs/NewInstanceDialog.cpp +++ b/application/dialogs/NewInstanceDialog.cpp @@ -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)")); +} + diff --git a/application/dialogs/NewInstanceDialog.h b/application/dialogs/NewInstanceDialog.h index 820a8d46..9b0f7f53 100644 --- a/application/dialogs/NewInstanceDialog.h +++ b/application/dialogs/NewInstanceDialog.h @@ -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; }; diff --git a/application/dialogs/NewInstanceDialog.ui b/application/dialogs/NewInstanceDialog.ui index 6b875ff4..428b9c57 100644 --- a/application/dialogs/NewInstanceDialog.ui +++ b/application/dialogs/NewInstanceDialog.ui @@ -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,37 +107,50 @@ </item> <item> <layout class="QGridLayout" name="gridLayout"> - <item row="4" column="2"> - <widget class="QToolButton" name="modpackBtn"> + <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="4" column="0" colspan="2"> - <widget class="FocusLineEdit" name="modpackEdit"> + <item row="7" column="2"> + <widget class="QToolButton" name="btnChooseFtbPack"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> - <string notr="true">http://</string> + <string>...</string> </property> </widget> </item> - <item row="2" column="0" colspan="2"> - <widget class="QLineEdit" name="versionTextBox"> - <property name="readOnly"> - <bool>true</bool> + <item row="4" column="2"> + <widget class="QToolButton" name="modpackBtn"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string notr="true">...</string> </property> </widget> </item> - <item row="2" column="2"> - <widget class="QToolButton" name="btnChangeVersion"> + <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">...</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> |