aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/dialogs/ExportModsToStringDialog.cpp
diff options
context:
space:
mode:
authorTrial97 <alexandru.tripon97@gmail.com>2023-06-22 16:05:47 +0300
committerTrial97 <alexandru.tripon97@gmail.com>2023-06-22 16:08:04 +0300
commitf7d502c68c530d66b385d530c838a9a6566828d0 (patch)
treec90d07d9ee1e1c9ab5c39d8677230ebf5d6e6859 /launcher/ui/dialogs/ExportModsToStringDialog.cpp
parent9d2516a199ae4c33f773ab00ce59ecb2a6dfd0a5 (diff)
downloadPrismLauncher-f7d502c68c530d66b385d530c838a9a6566828d0.tar.gz
PrismLauncher-f7d502c68c530d66b385d530c838a9a6566828d0.tar.bz2
PrismLauncher-f7d502c68c530d66b385d530c838a9a6566828d0.zip
Added ExportModsToStringDialog
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
Diffstat (limited to 'launcher/ui/dialogs/ExportModsToStringDialog.cpp')
-rw-r--r--launcher/ui/dialogs/ExportModsToStringDialog.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/launcher/ui/dialogs/ExportModsToStringDialog.cpp b/launcher/ui/dialogs/ExportModsToStringDialog.cpp
new file mode 100644
index 00000000..d08a4c70
--- /dev/null
+++ b/launcher/ui/dialogs/ExportModsToStringDialog.cpp
@@ -0,0 +1,119 @@
+// SPDX-License-Identifier: GPL-3.0-only
+/*
+ * Prism Launcher - Minecraft Launcher
+ * Copyright (c) 2023 Trial97 <alexandru.tripon97@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "ExportModsToStringDialog.h"
+#include <QCheckBox>
+#include <QComboBox>
+#include <QTextEdit>
+#include "minecraft/MinecraftInstance.h"
+#include "minecraft/mod/ModFolderModel.h"
+#include "modplatform/helpers/ExportModsToStringTask.h"
+#include "ui_ExportModsToStringDialog.h"
+
+#include <QFileDialog>
+#include <QFileSystemModel>
+#include <QJsonDocument>
+#include <QMessageBox>
+#include <QPushButton>
+
+ExportModsToStringDialog::ExportModsToStringDialog(InstancePtr instance, QWidget* parent)
+ : QDialog(parent), m_template_selected(false), ui(new Ui::ExportModsToStringDialog)
+{
+ ui->setupUi(this);
+ ui->templateGroup->setDisabled(true);
+
+ MinecraftInstance* mcInstance = dynamic_cast<MinecraftInstance*>(instance.get());
+ if (mcInstance) {
+ mcInstance->loaderModList()->update();
+ connect(mcInstance->loaderModList().get(), &ModFolderModel::updateFinished, this, [this, mcInstance]() {
+ m_allMods = mcInstance->loaderModList()->allMods();
+ trigger();
+ });
+ }
+
+ connect(ui->formatComboBox, &QComboBox::currentIndexChanged, this, &ExportModsToStringDialog::formatChanged);
+ connect(ui->authorsCheckBox, &QCheckBox::stateChanged, this, &ExportModsToStringDialog::trigger);
+ connect(ui->versionCheckBox, &QCheckBox::stateChanged, this, &ExportModsToStringDialog::trigger);
+ connect(ui->urlCheckBox, &QCheckBox::stateChanged, this, &ExportModsToStringDialog::trigger);
+ connect(ui->templateText, &QTextEdit::textChanged, this, &ExportModsToStringDialog::trigger);
+ connect(ui->copyButton, &QPushButton::clicked, this, [this]() {
+ this->ui->finalText->selectAll();
+ this->ui->finalText->copy();
+ });
+}
+
+ExportModsToStringDialog::~ExportModsToStringDialog()
+{
+ delete ui;
+}
+
+void ExportModsToStringDialog::formatChanged(int index)
+{
+ switch (index) {
+ case 0: {
+ ui->templateGroup->setDisabled(true);
+ ui->optionsGroup->setDisabled(false);
+ break;
+ }
+ case 1: {
+ ui->templateGroup->setDisabled(true);
+ ui->optionsGroup->setDisabled(false);
+ break;
+ }
+ case 2: {
+ ui->templateGroup->setDisabled(false);
+ ui->optionsGroup->setDisabled(true);
+ break;
+ }
+ }
+ trigger();
+}
+
+void ExportModsToStringDialog::trigger()
+{
+ ExportToString::Formats format;
+ switch (ui->formatComboBox->currentIndex()) {
+ case 2: {
+ m_template_selected = true;
+ ui->finalText->setPlainText(ExportToString::ExportModsToStringTask(m_allMods, ui->templateText->toPlainText()));
+ return;
+ }
+ case 0: {
+ format = ExportToString::HTML;
+ break;
+ }
+ case 1: {
+ format = ExportToString::MARKDOWN;
+ break;
+ }
+ }
+ auto opt = 0;
+ if (ui->authorsCheckBox->isChecked())
+ opt |= ExportToString::Authors;
+ if (ui->versionCheckBox->isChecked())
+ opt |= ExportToString::Version;
+ if (ui->urlCheckBox->isChecked())
+ opt |= ExportToString::Url;
+ ui->finalText->setPlainText(ExportToString::ExportModsToStringTask(m_allMods, format, static_cast<ExportToString::OptionalData>(opt)));
+ if (!m_template_selected) {
+ auto exampleLine = format == ExportToString::HTML ? "<ul><a href=\"{url}\">{name}</a>[{version}] by {authors}</ul>"
+ : "[{name}]({url})[{version}] by {authors}";
+ if (ui->templateText->toPlainText() != exampleLine)
+ ui->templateText->setPlainText(exampleLine);
+ }
+}