summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:51:45 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:51:45 +0300
commitd3261e64152397db2dca4d691a990c6bc2a6f4dd (patch)
treefac2f7be638651181a72453d714f0f96675c2b8b /archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp
parent31b9a8949ed0a288143e23bf739f2eb64fdc63be (diff)
downloadProject-Tick-d3261e64152397db2dca4d691a990c6bc2a6f4dd.tar.gz
Project-Tick-d3261e64152397db2dca4d691a990c6bc2a6f4dd.zip
NOISSUE add archived projects
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp')
-rw-r--r--archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp188
1 files changed, 188 insertions, 0 deletions
diff --git a/archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp b/archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp
new file mode 100644
index 0000000000..a3a018fb3a
--- /dev/null
+++ b/archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: GPL-3.0-only
+// SPDX-FileCopyrightText: 2026 Project Tick
+// SPDX-FileContributor: Project Tick Team
+/*
+ * ProjT Launcher - Minecraft Launcher
+ * Copyright (C) 2026 Project Tick
+ *
+ * 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, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "ReviewMessageBox.h"
+#include "ui_ReviewMessageBox.h"
+
+#include <QClipboard>
+#include <QPushButton>
+#include <QShortcut>
+
+ReviewMessageBox::ReviewMessageBox(QWidget* parent,
+ [[maybe_unused]] QString const& title,
+ [[maybe_unused]] QString const& icon)
+ : QDialog(parent),
+ ui(new Ui::ReviewMessageBox)
+{
+ ui->setupUi(this);
+
+ auto back_button = ui->buttonBox->button(QDialogButtonBox::Cancel);
+ back_button->setText(tr("Back"));
+
+ ui->toggleDepsButton->hide();
+ ui->modTreeWidget->header()->setSectionResizeMode(0, QHeaderView::Stretch);
+ ui->modTreeWidget->header()->setStretchLastSection(false);
+ ui->modTreeWidget->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
+
+ connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ReviewMessageBox::accept);
+ connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &ReviewMessageBox::reject);
+
+ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+
+ // Overwrite Ctrl+C functionality to exclude the label when copying text from tree
+ auto shortcut = new QShortcut(QKeySequence::Copy, ui->modTreeWidget);
+ connect(shortcut,
+ &QShortcut::activated,
+ [this]()
+ {
+ auto currentItem = this->ui->modTreeWidget->currentItem();
+ if (!currentItem)
+ return;
+ auto currentColumn = this->ui->modTreeWidget->currentColumn();
+
+ auto data = currentItem->data(currentColumn, Qt::UserRole);
+ QString txt;
+
+ if (data.isValid())
+ {
+ txt = data.toString();
+ }
+ else
+ {
+ txt = currentItem->text(currentColumn);
+ }
+
+ QApplication::clipboard()->setText(txt);
+ });
+}
+
+ReviewMessageBox::~ReviewMessageBox()
+{
+ delete ui;
+}
+
+auto ReviewMessageBox::create(QWidget* parent, QString&& title, QString&& icon) -> ReviewMessageBox*
+{
+ return new ReviewMessageBox(parent, title, icon);
+}
+
+void ReviewMessageBox::appendResource(ResourceInformation&& info)
+{
+ auto itemTop = new QTreeWidgetItem(ui->modTreeWidget);
+ itemTop->setCheckState(0, info.enabled ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
+ itemTop->setText(0, info.name);
+ if (!info.enabled)
+ {
+ itemTop->setToolTip(0, tr("Mod was disabled as it may be already installed."));
+ }
+
+ auto filenameItem = new QTreeWidgetItem(itemTop);
+ filenameItem->setText(0, tr("Filename: %1").arg(info.filename));
+ filenameItem->setData(0, Qt::UserRole, info.filename);
+
+ auto childIndx = 0;
+ itemTop->insertChildren(childIndx++, { filenameItem });
+
+ if (!info.custom_file_path.isEmpty())
+ {
+ auto customPathItem = new QTreeWidgetItem(itemTop);
+ customPathItem->setText(0, tr("This download will be placed in: %1").arg(info.custom_file_path));
+
+ itemTop->insertChildren(1, { customPathItem });
+
+ itemTop->setIcon(1, QIcon(QIcon::fromTheme("status-yellow")));
+ itemTop->setToolTip(childIndx++,
+ tr("This file will be downloaded to a folder location different from the default, possibly "
+ "due to its loader requiring it."));
+ }
+
+ auto providerItem = new QTreeWidgetItem(itemTop);
+ providerItem->setText(0, tr("Provider: %1").arg(info.provider));
+ providerItem->setData(0, Qt::UserRole, info.provider);
+
+ itemTop->insertChildren(childIndx++, { providerItem });
+
+ if (!info.required_by.isEmpty())
+ {
+ auto requiredByItem = new QTreeWidgetItem(itemTop);
+ if (info.required_by.length() == 1)
+ {
+ requiredByItem->setText(0, tr("Required by: %1").arg(info.required_by.back()));
+ }
+ else
+ {
+ requiredByItem->setText(0, tr("Required by:"));
+ auto i = 0;
+ for (auto req : info.required_by)
+ {
+ auto reqItem = new QTreeWidgetItem(requiredByItem);
+ reqItem->setText(0, req);
+ reqItem->insertChildren(i++, { reqItem });
+ }
+ }
+
+ itemTop->insertChildren(childIndx++, { requiredByItem });
+ ui->toggleDepsButton->show();
+ m_deps << itemTop;
+ }
+
+ auto versionTypeItem = new QTreeWidgetItem(itemTop);
+ versionTypeItem->setText(0, tr("Version Type: %1").arg(info.version_type));
+ versionTypeItem->setData(0, Qt::UserRole, info.version_type);
+
+ itemTop->insertChildren(childIndx++, { versionTypeItem });
+
+ ui->modTreeWidget->addTopLevelItem(itemTop);
+}
+
+auto ReviewMessageBox::deselectedResources() -> QStringList
+{
+ QStringList list;
+
+ auto* item = ui->modTreeWidget->topLevelItem(0);
+
+ for (int i = 1; item != nullptr; ++i)
+ {
+ if (item->checkState(0) == Qt::CheckState::Unchecked)
+ {
+ list.append(item->text(0));
+ }
+
+ item = ui->modTreeWidget->topLevelItem(i);
+ }
+
+ return list;
+}
+
+void ReviewMessageBox::retranslateUi(QString resources_name)
+{
+ setWindowTitle(tr("Confirm %1 selection").arg(resources_name));
+
+ ui->explainLabel->setText(tr("You're about to download the following %1:").arg(resources_name));
+ ui->onlyCheckedLabel->setText(tr("Only %1 with a check will be downloaded!").arg(resources_name));
+}
+void ReviewMessageBox::on_toggleDepsButton_clicked()
+{
+ m_deps_checked = !m_deps_checked;
+ auto state = m_deps_checked ? Qt::Checked : Qt::Unchecked;
+ for (auto dep : m_deps)
+ dep->setCheckState(0, state);
+}; \ No newline at end of file