]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
TxConfAdv: allow copy context menus
authortobtoht <tob@featherwallet.org>
Wed, 3 Jan 2024 16:22:26 +0000 (17:22 +0100)
committertobtoht <tob@featherwallet.org>
Wed, 3 Jan 2024 16:22:26 +0000 (17:22 +0100)
src/dialog/TxConfAdvDialog.cpp
src/dialog/TxConfAdvDialog.h

index f13f915b1a9eb094f514c2a294ffdc25ab70ccbc..4b8a13ae7134f18394e1bcc267c915c2abc1f98e 100644 (file)
@@ -48,7 +48,16 @@ TxConfAdvDialog::TxConfAdvDialog(Wallet *wallet, const QString &description, QWi
         ui->txid->hide();
         ui->label_txid->hide();
     }
-    
+
+    ui->treeInputs->setContextMenuPolicy(Qt::CustomContextMenu);
+    ui->treeOutputs->setContextMenuPolicy(Qt::CustomContextMenu);
+    connect(ui->treeInputs, &QTreeView::customContextMenuRequested, [this](const QPoint &point){
+        this->setupContextMenu(point, ui->treeInputs);
+    });
+    connect(ui->treeOutputs, &QTreeView::customContextMenuRequested, [this](const QPoint &point){
+        this->setupContextMenu(point, ui->treeOutputs);
+    });
+
     this->adjustSize();
 }
 
@@ -217,4 +226,35 @@ void TxConfAdvDialog::closeDialog() {
     QDialog::reject();
 }
 
+void TxConfAdvDialog::setupContextMenu(const QPoint &point, QTreeWidget *tree) {
+    if (!tree) {
+        return;
+    }
+
+    QTreeWidgetItem *header = tree->headerItem();
+    if (!header) {
+        return;
+    }
+
+    auto* menu = new QMenu(this);
+    for (int column = 0; column < tree->columnCount(); column++)
+    {
+        menu->addAction(QString("Copy %1").arg(header->text(column)), this, [this, column, point, tree]{
+            this->copyFromTree(point, column, tree);
+        });
+    }
+
+    menu->popup(tree->viewport()->mapToGlobal(point));
+}
+
+void TxConfAdvDialog::copyFromTree(const QPoint &point, int column, QTreeWidget *tree) {
+    QModelIndex index = tree->indexAt(point);
+    if (!index.isValid()) {
+        return;
+    }
+
+    QModelIndex dataIndex = index.sibling(index.row(), column);
+    Utils::copyToClipboard(dataIndex.data().toString());
+}
+
 TxConfAdvDialog::~TxConfAdvDialog() = default;
\ No newline at end of file
index 5ea28e1fb673b6c843e2da2f7d71d5ce8636bd4a..e0faba5025f7998700e6ce1c356485c8587f0301 100644 (file)
@@ -8,6 +8,7 @@
 #include <QMenu>
 #include <QStandardItemModel>
 #include <QTextCharFormat>
+#include <QTreeWidget>
 
 #include "components.h"
 #include "libwalletqt/PendingTransaction.h"
@@ -34,6 +35,8 @@ private:
     void broadcastTransaction();
     void closeDialog();
     void setAmounts(quint64 amount, quint64 fee);
+    void setupContextMenu(const QPoint &point, QTreeWidget *tree);
+    void copyFromTree(const QPoint &point, int column, QTreeWidget *tree);
 
     void signedCopy();
     void signedSaveFile();