diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:51:45 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:51:45 +0300 |
| commit | d3261e64152397db2dca4d691a990c6bc2a6f4dd (patch) | |
| tree | fac2f7be638651181a72453d714f0f96675c2b8b /archived/projt-launcher/launcher/ui/dialogs/ReviewMessageBox.cpp | |
| parent | 31b9a8949ed0a288143e23bf739f2eb64fdc63be (diff) | |
| download | Project-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.cpp | 188 |
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 |
