Mercurial > hg > bitcoin
changeset 1623:8cb011a01ed7 draft
Copy amount to clipboard (implements #657)
- Also, unify similar code related to copying transaction fields to clipboard
author | Wladimir J. van der Laan <laanwj@gmail.com> |
---|---|
date | Sun, 04 Dec 2011 14:14:10 +0100 |
parents | 285c3498a776 |
children | 47c9a5d98658 |
files | src/qt/guiutil.cpp src/qt/guiutil.h src/qt/transactionview.cpp src/qt/transactionview.h |
diffstat | 4 files changed, 43 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ { 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()); + } +}
--- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -9,6 +9,7 @@ class QWidget; class QDateTime; class QUrl; +class QAbstractItemView; QT_END_NAMESPACE class SendCoinsRecipient; @@ -35,6 +36,15 @@ // 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
--- 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 @@ // 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 @@ 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::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()
--- a/src/qt/transactionview.h +++ b/src/qt/transactionview.h @@ -60,6 +60,11 @@ 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 @@ void changedPrefix(const QString &prefix); void changedAmount(const QString &amount); void exportClicked(); - void showDetails(); - void copyAddress(); - void editLabel(); - void copyLabel(); };