aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/dialogs
diff options
context:
space:
mode:
authortimoreo22 <timo.oreo34@gmail.com>2022-02-26 07:33:11 +0100
committerGitHub <noreply@github.com>2022-02-26 07:33:11 +0100
commitae354688c96927e95db8c06c53ada0b5d7e77f26 (patch)
tree5d864de33438ce4d82af03928b3d632f055a0490 /launcher/ui/dialogs
parent27f37315f84536d75d95bc1879e8a4513fcfc831 (diff)
parentc4f4e9e620ee4a7094542190bc18cc167d00a7ff (diff)
downloadPrismLauncher-ae354688c96927e95db8c06c53ada0b5d7e77f26.tar.gz
PrismLauncher-ae354688c96927e95db8c06c53ada0b5d7e77f26.tar.bz2
PrismLauncher-ae354688c96927e95db8c06c53ada0b5d7e77f26.zip
Merge pull request #193 from flowln/develop
Allow for downloading multiple mods at once
Diffstat (limited to 'launcher/ui/dialogs')
-rw-r--r--launcher/ui/dialogs/ModDownloadDialog.cpp64
-rw-r--r--launcher/ui/dialogs/ModDownloadDialog.h9
2 files changed, 64 insertions, 9 deletions
diff --git a/launcher/ui/dialogs/ModDownloadDialog.cpp b/launcher/ui/dialogs/ModDownloadDialog.cpp
index 6b807b8c..23ca8731 100644
--- a/launcher/ui/dialogs/ModDownloadDialog.cpp
+++ b/launcher/ui/dialogs/ModDownloadDialog.cpp
@@ -5,6 +5,7 @@
#include <InstanceList.h>
#include "ProgressDialog.h"
+#include "CustomMessageBox.h"
#include <QLayout>
#include <QPushButton>
@@ -39,9 +40,10 @@ ModDownloadDialog::ModDownloadDialog(const std::shared_ptr<ModFolderModel> &mods
// Bonk Qt over its stupid head and make sure it understands which button is the default one...
// See: https://stackoverflow.com/questions/24556831/qbuttonbox-set-default-button
auto OkButton = m_buttons->button(QDialogButtonBox::Ok);
+ OkButton->setEnabled(false);
OkButton->setDefault(true);
OkButton->setAutoDefault(true);
- connect(OkButton, &QPushButton::clicked, this, &ModDownloadDialog::accept);
+ connect(OkButton, &QPushButton::clicked, this, &ModDownloadDialog::confirm);
auto CancelButton = m_buttons->button(QDialogButtonBox::Cancel);
CancelButton->setDefault(false);
@@ -52,6 +54,7 @@ ModDownloadDialog::ModDownloadDialog(const std::shared_ptr<ModFolderModel> &mods
HelpButton->setDefault(false);
HelpButton->setAutoDefault(false);
connect(HelpButton, &QPushButton::clicked, m_container, &PageContainer::help);
+
QMetaObject::connectSlotsByName(this);
setWindowModality(Qt::WindowModal);
setWindowTitle("Download mods");
@@ -67,6 +70,36 @@ void ModDownloadDialog::reject()
QDialog::reject();
}
+void ModDownloadDialog::confirm()
+{
+ auto keys = modTask.keys();
+ keys.sort(Qt::CaseInsensitive);
+
+ auto info = QString(tr("You're about to download the following mods:"));
+ info.append("\n\n");
+ for(auto task : keys){
+ info.append(task);
+ info.append("\n --> ");
+ info.append(tr("File name: "));
+ info.append(modTask.find(task).value()->getFilename());
+ info.append('\n');
+ }
+
+ auto confirm_dialog = CustomMessageBox::selectable(
+ this,
+ tr("Confirm mods to download"),
+ info,
+ QMessageBox::NoIcon,
+ QMessageBox::Cancel | QMessageBox::Ok,
+ QMessageBox::Ok
+ );
+
+ auto AcceptButton = confirm_dialog->button(QMessageBox::Ok);
+ connect(AcceptButton, &QPushButton::clicked, this, &ModDownloadDialog::accept);
+
+ confirm_dialog->open();
+}
+
void ModDownloadDialog::accept()
{
QDialog::accept();
@@ -83,16 +116,35 @@ QList<BasePage *> ModDownloadDialog::getPages()
};
}
-void ModDownloadDialog::setSuggestedMod(const QString& name, ModDownloadTask* task)
+void ModDownloadDialog::addSelectedMod(const QString& name, ModDownloadTask* task)
+{
+ removeSelectedMod(name);
+ modTask.insert(name, task);
+
+ m_buttons->button(QDialogButtonBox::Ok)->setEnabled(!modTask.isEmpty());
+}
+
+void ModDownloadDialog::removeSelectedMod(const QString &name)
+{
+ if(modTask.contains(name))
+ delete modTask.find(name).value();
+ modTask.remove(name);
+
+ m_buttons->button(QDialogButtonBox::Ok)->setEnabled(!modTask.isEmpty());
+}
+
+bool ModDownloadDialog::isModSelected(const QString &name, const QString& filename) const
{
- modTask.reset(task);
- m_buttons->button(QDialogButtonBox::Ok)->setEnabled(task);
+ // FIXME: Is there a way to check for versions without checking the filename
+ // as a heuristic, other than adding such info to ModDownloadTask itself?
+ auto iter = modTask.find(name);
+ return iter != modTask.end() && (iter.value()->getFilename() == filename);
}
ModDownloadDialog::~ModDownloadDialog()
{
}
-ModDownloadTask *ModDownloadDialog::getTask() {
- return modTask.release();
+const QList<ModDownloadTask*> ModDownloadDialog::getTasks() {
+ return modTask.values();
}
diff --git a/launcher/ui/dialogs/ModDownloadDialog.h b/launcher/ui/dialogs/ModDownloadDialog.h
index ece8e328..309d89d0 100644
--- a/launcher/ui/dialogs/ModDownloadDialog.h
+++ b/launcher/ui/dialogs/ModDownloadDialog.h
@@ -29,12 +29,15 @@ public:
QString dialogTitle() override;
QList<BasePage *> getPages() override;
- void setSuggestedMod(const QString & name = QString(), ModDownloadTask * task = nullptr);
+ void addSelectedMod(const QString & name = QString(), ModDownloadTask * task = nullptr);
+ void removeSelectedMod(const QString & name = QString());
+ bool isModSelected(const QString & name, const QString & filename) const;
- ModDownloadTask * getTask();
+ const QList<ModDownloadTask*> getTasks();
const std::shared_ptr<ModFolderModel> &mods;
public slots:
+ void confirm();
void accept() override;
void reject() override;
@@ -49,6 +52,6 @@ private:
ModrinthPage *modrinthPage = nullptr;
FlameModPage *flameModPage = nullptr;
- std::unique_ptr<ModDownloadTask> modTask;
+ QHash<QString, ModDownloadTask*> modTask;
BaseInstance *m_instance;
};