From 8c0e8a319bc0e43b15ad4492f04998765c302adb Mon Sep 17 00:00:00 2001 From: Dylan Schooner Date: Fri, 7 Nov 2025 00:53:41 -0500 Subject: [PATCH 1/3] Overwrite Ctrl+C functionality for ReviewMessageBox items Signed-off-by: Dylan Schooner --- launcher/ui/dialogs/ReviewMessageBox.cpp | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/launcher/ui/dialogs/ReviewMessageBox.cpp b/launcher/ui/dialogs/ReviewMessageBox.cpp index c5f7b5fbe..b26227389 100644 --- a/launcher/ui/dialogs/ReviewMessageBox.cpp +++ b/launcher/ui/dialogs/ReviewMessageBox.cpp @@ -1,7 +1,9 @@ #include "ReviewMessageBox.h" #include "ui_ReviewMessageBox.h" +#include #include +#include ReviewMessageBox::ReviewMessageBox(QWidget* parent, [[maybe_unused]] QString const& title, [[maybe_unused]] QString const& icon) : QDialog(parent), ui(new Ui::ReviewMessageBox) @@ -44,6 +46,7 @@ void ReviewMessageBox::appendResource(ResourceInformation&& info) 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 }); @@ -62,6 +65,7 @@ void ReviewMessageBox::appendResource(ResourceInformation&& info) 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 }); @@ -86,9 +90,31 @@ void ReviewMessageBox::appendResource(ResourceInformation&& info) 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); + + // 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); + }); } auto ReviewMessageBox::deselectedResources() -> QStringList From 6f4460b6044e6a877a7958ca8dabb7c636a2ccd7 Mon Sep 17 00:00:00 2001 From: Dylan Schooner Date: Fri, 7 Nov 2025 02:30:45 -0500 Subject: [PATCH 2/3] Apply override to ResourceUpdateDialog::appendResource Signed-off-by: Dylan Schooner --- launcher/ui/dialogs/ResourceUpdateDialog.cpp | 33 ++++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/launcher/ui/dialogs/ResourceUpdateDialog.cpp b/launcher/ui/dialogs/ResourceUpdateDialog.cpp index eb69a6c6b..207049fde 100644 --- a/launcher/ui/dialogs/ResourceUpdateDialog.cpp +++ b/launcher/ui/dialogs/ResourceUpdateDialog.cpp @@ -22,6 +22,8 @@ #include "modplatform/flame/FlameCheckUpdate.h" #include "modplatform/modrinth/ModrinthCheckUpdate.h" +#include +#include #include #include @@ -437,17 +439,22 @@ void ResourceUpdateDialog::appendResource(CheckUpdateTask::Update const& info, Q item_top->setExpanded(true); auto provider_item = new QTreeWidgetItem(item_top); - provider_item->setText(0, tr("Provider: %1").arg(ModPlatform::ProviderCapabilities::readableName(info.provider))); + QString provider_name = ModPlatform::ProviderCapabilities::readableName(info.provider); + provider_item->setText(0, tr("Provider: %1").arg(provider_name)); + provider_item->setData(0, Qt::UserRole, provider_name); auto old_version_item = new QTreeWidgetItem(item_top); old_version_item->setText(0, tr("Old version: %1").arg(info.old_version)); + old_version_item->setData(0, Qt::UserRole, info.old_version); auto new_version_item = new QTreeWidgetItem(item_top); new_version_item->setText(0, tr("New version: %1").arg(info.new_version)); + new_version_item->setData(0, Qt::UserRole, info.new_version); if (info.new_version_type.has_value()) { - auto new_version_type_itme = new QTreeWidgetItem(item_top); - new_version_type_itme->setText(0, tr("New Version Type: %1").arg(info.new_version_type.value().toString())); + auto new_version_type_item = new QTreeWidgetItem(item_top); + new_version_type_item->setText(0, tr("New Version Type: %1").arg(info.new_version_type.value().toString())); + new_version_type_item->setData(0, Qt::UserRole, info.new_version_type.value().toString()); } if (!requiredBy.isEmpty()) { @@ -487,6 +494,26 @@ void ResourceUpdateDialog::appendResource(CheckUpdateTask::Update const& info, Q ui->modTreeWidget->setItemWidget(changelog, 0, changelog_area); ui->modTreeWidget->addTopLevelItem(item_top); + + // 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); + }); } auto ResourceUpdateDialog::getTasks() -> const QList From a16026828ed75ea346cfefc671a9b74cc3590434 Mon Sep 17 00:00:00 2001 From: Dylan Schooner Date: Fri, 7 Nov 2025 13:40:54 -0500 Subject: [PATCH 3/3] Move shortcut connection to constructor Add copy functionality for changelog on ResourceUpdateDialog Signed-off-by: Dylan Schooner --- launcher/ui/dialogs/ResourceUpdateDialog.cpp | 21 +--------- launcher/ui/dialogs/ReviewMessageBox.cpp | 40 ++++++++++---------- 2 files changed, 21 insertions(+), 40 deletions(-) diff --git a/launcher/ui/dialogs/ResourceUpdateDialog.cpp b/launcher/ui/dialogs/ResourceUpdateDialog.cpp index 207049fde..eeaf6b3d0 100644 --- a/launcher/ui/dialogs/ResourceUpdateDialog.cpp +++ b/launcher/ui/dialogs/ResourceUpdateDialog.cpp @@ -482,6 +482,7 @@ void ResourceUpdateDialog::appendResource(CheckUpdateTask::Update const& info, Q auto changelog_area = new QTextBrowser(); QString text = info.changelog; + changelog->setData(0, Qt::UserRole, text); if (info.provider == ModPlatform::ResourceProvider::MODRINTH) { text = markdownToHTML(info.changelog.toUtf8()); } @@ -494,26 +495,6 @@ void ResourceUpdateDialog::appendResource(CheckUpdateTask::Update const& info, Q ui->modTreeWidget->setItemWidget(changelog, 0, changelog_area); ui->modTreeWidget->addTopLevelItem(item_top); - - // 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); - }); } auto ResourceUpdateDialog::getTasks() -> const QList diff --git a/launcher/ui/dialogs/ReviewMessageBox.cpp b/launcher/ui/dialogs/ReviewMessageBox.cpp index b26227389..904686664 100644 --- a/launcher/ui/dialogs/ReviewMessageBox.cpp +++ b/launcher/ui/dialogs/ReviewMessageBox.cpp @@ -23,6 +23,26 @@ ReviewMessageBox::ReviewMessageBox(QWidget* parent, [[maybe_unused]] QString con 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() @@ -95,26 +115,6 @@ void ReviewMessageBox::appendResource(ResourceInformation&& info) itemTop->insertChildren(childIndx++, { versionTypeItem }); ui->modTreeWidget->addTopLevelItem(itemTop); - - // 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); - }); } auto ReviewMessageBox::deselectedResources() -> QStringList