aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-12-04 14:14:10 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2011-12-23 12:07:23 +0100
commitc58e7d4e013f21e38fb1501d896d32e8407a9c3c (patch)
tree8e24786b335c0316bb9929864407b9fa7303c98a /src
parentc4a4a4b886b3bd8933cf96c0d66d647a2b32a68b (diff)
downloadbitcoin-c58e7d4e013f21e38fb1501d896d32e8407a9c3c.tar.xz
Copy amount to clipboard (implements #657)
- Also, unify similar code related to copying transaction fields to clipboard
Diffstat (limited to 'src')
-rw-r--r--src/qt/guiutil.cpp16
-rw-r--r--src/qt/guiutil.h10
-rw-r--r--src/qt/transactionview.cpp31
-rw-r--r--src/qt/transactionview.h9
4 files changed, 43 insertions, 23 deletions
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
index f72fe1ef4b..22d9cc7384 100644
--- a/src/qt/guiutil.cpp
+++ b/src/qt/guiutil.cpp
@@ -12,6 +12,9 @@
#include <QLineEdit>
#include <QUrl>
#include <QTextDocument> // For Qt::escape
+#include <QAbstractItemView>
+#include <QApplication>
+#include <QClipboard>
QString GUIUtil::dateTimeStr(qint64 nTime)
{
@@ -88,3 +91,16 @@ QString GUIUtil::HtmlEscape(const std::string& str, bool fMultiLine)
{
return HtmlEscape(QString::fromStdString(str), fMultiLine);
}
+
+void GUIUtil::copyEntryData(QAbstractItemView *view, int column, int role)
+{
+ if(!view || !view->selectionModel())
+ return;
+ QModelIndexList selection = view->selectionModel()->selectedRows(column);
+
+ if(!selection.isEmpty())
+ {
+ // Copy first item
+ QApplication::clipboard()->setText(selection.at(0).data(role).toString());
+ }
+}
diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
index acd327728d..3a81bd2f00 100644
--- a/src/qt/guiutil.h
+++ b/src/qt/guiutil.h
@@ -9,6 +9,7 @@ class QLineEdit;
class QWidget;
class QDateTime;
class QUrl;
+class QAbstractItemView;
QT_END_NAMESPACE
class SendCoinsRecipient;
@@ -35,6 +36,15 @@ public:
// HTML escaping for rich text controls
static QString HtmlEscape(const QString& str, bool fMultiLine=false);
static QString HtmlEscape(const std::string& str, bool fMultiLine=false);
+
+ /** Copy a field of the currently selected entry of a view to the clipboard. Does nothing if nothing
+ is selected.
+ @param[in] column Data column to extract from the model
+ @param[in] role Data role to extract from the model
+ @see TransactionView::copyLabel, TransactionView::copyAmount, TransactionView::copyAddress
+ */
+ static void copyEntryData(QAbstractItemView *view, int column, int role=Qt::EditRole);
+
};
#endif // GUIUTIL_H
diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp
index 0e1b22e01b..cba06298d4 100644
--- a/src/qt/transactionview.cpp
+++ b/src/qt/transactionview.cpp
@@ -10,6 +10,7 @@
#include "transactiondescdialog.h"
#include "editaddressdialog.h"
#include "optionsmodel.h"
+#include "guiutil.h"
#include <QScrollBar>
#include <QComboBox>
@@ -123,12 +124,14 @@ TransactionView::TransactionView(QWidget *parent) :
// Actions
QAction *copyAddressAction = new QAction(tr("Copy address"), this);
QAction *copyLabelAction = new QAction(tr("Copy label"), this);
+ QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
QAction *editLabelAction = new QAction(tr("Edit label"), this);
QAction *showDetailsAction = new QAction(tr("Show details..."), this);
contextMenu = new QMenu();
contextMenu->addAction(copyAddressAction);
contextMenu->addAction(copyLabelAction);
+ contextMenu->addAction(copyAmountAction);
contextMenu->addAction(editLabelAction);
contextMenu->addAction(showDetailsAction);
@@ -139,14 +142,11 @@ TransactionView::TransactionView(QWidget *parent) :
connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString)));
connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex)));
-
- connect(view,
- SIGNAL(customContextMenuRequested(QPoint)),
- this,
- SLOT(contextualMenu(QPoint)));
+ connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint)));
connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress()));
connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel()));
+ connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount()));
connect(editLabelAction, SIGNAL(triggered()), this, SLOT(editLabel()));
connect(showDetailsAction, SIGNAL(triggered()), this, SLOT(showDetails()));
}
@@ -302,24 +302,17 @@ void TransactionView::contextualMenu(const QPoint &point)
void TransactionView::copyAddress()
{
- if(!transactionView->selectionModel())
- return;
- QModelIndexList selection = transactionView->selectionModel()->selectedRows();
- if(!selection.isEmpty())
- {
- QApplication::clipboard()->setText(selection.at(0).data(TransactionTableModel::AddressRole).toString());
- }
+ GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::AddressRole);
}
void TransactionView::copyLabel()
{
- if(!transactionView->selectionModel())
- return;
- QModelIndexList selection = transactionView->selectionModel()->selectedRows();
- if(!selection.isEmpty())
- {
- QApplication::clipboard()->setText(selection.at(0).data(TransactionTableModel::LabelRole).toString());
- }
+ GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::LabelRole);
+}
+
+void TransactionView::copyAmount()
+{
+ GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::FormattedAmountRole);
}
void TransactionView::editLabel()
diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h
index 67d0b46f30..bc6e1e4e05 100644
--- a/src/qt/transactionview.h
+++ b/src/qt/transactionview.h
@@ -60,6 +60,11 @@ private:
private slots:
void contextualMenu(const QPoint &);
void dateRangeChanged();
+ void showDetails();
+ void copyAddress();
+ void editLabel();
+ void copyLabel();
+ void copyAmount();
signals:
void doubleClicked(const QModelIndex&);
@@ -70,10 +75,6 @@ public slots:
void changedPrefix(const QString &prefix);
void changedAmount(const QString &amount);
void exportClicked();
- void showDetails();
- void copyAddress();
- void editLabel();
- void copyLabel();
};