From 8c88e529facda932a21d456d8518129c499fabf5 Mon Sep 17 00:00:00 2001 From: Joel Smith Date: Mon, 6 Jul 2020 22:08:44 -0700 Subject: [PATCH] Allow users to copy the path of a file to the clipboard (#21) --- src/forms/evidence/evidencemanager.cpp | 17 +++++++++++++++++ src/forms/evidence/evidencemanager.h | 4 ++++ src/helpers/clipboard/clipboardhelper.cpp | 5 +++++ src/helpers/clipboard/clipboardhelper.h | 1 + 4 files changed, 27 insertions(+) diff --git a/src/forms/evidence/evidencemanager.cpp b/src/forms/evidence/evidencemanager.cpp index 0b7e081..2f1a898 100644 --- a/src/forms/evidence/evidencemanager.cpp +++ b/src/forms/evidence/evidencemanager.cpp @@ -16,6 +16,7 @@ #include "dtos/tag.h" #include "forms/evidence_filter/evidencefilter.h" #include "forms/evidence_filter/evidencefilterform.h" +#include "helpers/clipboard/clipboardhelper.h" #include "helpers/netman.h" #include "helpers/stopreply.h" @@ -56,6 +57,7 @@ EvidenceManager::EvidenceManager(DatabaseConnection* db, QWidget* parent) : QDia EvidenceManager::~EvidenceManager() { delete submitEvidenceAction; delete deleteEvidenceAction; + delete copyPathToClipboardAction; delete closeWindowAction; delete evidenceTableContextMenu; delete filterForm; @@ -95,6 +97,8 @@ void EvidenceManager::buildUi() { evidenceTableContextMenu->addAction(submitEvidenceAction); deleteEvidenceAction = new QAction("Delete Evidence", evidenceTableContextMenu); evidenceTableContextMenu->addAction(deleteEvidenceAction); + copyPathToClipboardAction = new QAction("Copy Path", evidenceTableContextMenu); + evidenceTableContextMenu->addAction(copyPathToClipboardAction); filterTextBox = new QLineEdit(this); editFiltersButton = new QPushButton("Edit Filters", this); @@ -173,6 +177,7 @@ void EvidenceManager::wireUi() { connect(submitEvidenceAction, actionTriggered, this, &EvidenceManager::submitEvidenceTriggered); connect(deleteEvidenceAction, actionTriggered, this, &EvidenceManager::deleteEvidenceTriggered); connect(closeWindowAction, actionTriggered, this, &EvidenceManager::close); + connect(copyPathToClipboardAction, actionTriggered, this, &EvidenceManager::copyPathTriggered); connect(filterForm, &EvidenceFilterForm::evidenceSet, this, &EvidenceManager::applyFilterForm); @@ -233,7 +238,19 @@ void EvidenceManager::deleteEvidenceTriggered() { } } +void EvidenceManager::copyPathTriggered() { + auto evidence = db->getEvidenceDetails(selectedRowEvidenceID()); + ClipboardHelper::setText(evidence.path); +} + void EvidenceManager::openTableContextMenu(QPoint pos) { + int selectedRowCount = evidenceTable->selectionModel()->selectedRows().count(); + if (selectedRowCount == 0) { + return; + } + bool singleItemSelected = selectedRowCount == 1; + copyPathToClipboardAction->setEnabled(singleItemSelected); + evidenceTableContextMenu->popup(evidenceTable->viewport()->mapToGlobal(pos)); } diff --git a/src/forms/evidence/evidencemanager.h b/src/forms/evidence/evidencemanager.h index c58011a..3509916 100644 --- a/src/forms/evidence/evidencemanager.h +++ b/src/forms/evidence/evidencemanager.h @@ -94,6 +94,9 @@ class EvidenceManager : public QDialog { /// onUploadComplete is triggered when the upload response has been received. void onUploadComplete(); + /// copyPathTriggered recives the triggered event from the copyPathToClipboardAction + void copyPathTriggered(); + private: /// db is a (shared) reference to the local database instance. Not to be deleted. DatabaseConnection* db; @@ -108,6 +111,7 @@ class EvidenceManager : public QDialog { QAction* submitEvidenceAction = nullptr; QAction* deleteEvidenceAction = nullptr; QAction* closeWindowAction = nullptr; + QAction* copyPathToClipboardAction = nullptr; // UI Elements QGridLayout* gridLayout = nullptr; diff --git a/src/helpers/clipboard/clipboardhelper.cpp b/src/helpers/clipboard/clipboardhelper.cpp index 5f9db6d..c3c0799 100644 --- a/src/helpers/clipboard/clipboardhelper.cpp +++ b/src/helpers/clipboard/clipboardhelper.cpp @@ -27,3 +27,8 @@ QPixmap ClipboardHelper::readImage() { } return data; } + +void ClipboardHelper::setText(QString text) { + auto clipboard = QApplication::clipboard(); + clipboard->setText(text); +} diff --git a/src/helpers/clipboard/clipboardhelper.h b/src/helpers/clipboard/clipboardhelper.h index b2a57e3..3418b40 100644 --- a/src/helpers/clipboard/clipboardhelper.h +++ b/src/helpers/clipboard/clipboardhelper.h @@ -15,6 +15,7 @@ class ClipboardHelper : public QObject { public: static QString readPlaintext(); static QPixmap readImage(); + static void setText(QString text); signals: };