Allow users to copy the path of a file to the clipboard (#21)

main
Joel Smith 2020-07-06 22:08:44 -07:00 committed by GitHub
parent 5d6cb65752
commit 8c88e529fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 0 deletions

View File

@ -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));
}

View File

@ -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;

View File

@ -27,3 +27,8 @@ QPixmap ClipboardHelper::readImage() {
}
return data;
}
void ClipboardHelper::setText(QString text) {
auto clipboard = QApplication::clipboard();
clipboard->setText(text);
}

View File

@ -15,6 +15,7 @@ class ClipboardHelper : public QObject {
public:
static QString readPlaintext();
static QPixmap readImage();
static void setText(QString text);
signals:
};