Browse Source

Copy amount to clipboard (implements #657)

- Also, unify similar code related to copying transaction fields to clipboard
pull/1/head
Wladimir J. van der Laan 11 years ago
parent
commit
c58e7d4e01
  1. 16
      src/qt/guiutil.cpp
  2. 10
      src/qt/guiutil.h
  3. 31
      src/qt/transactionview.cpp
  4. 9
      src/qt/transactionview.h

16
src/qt/guiutil.cpp

@ -12,6 +12,9 @@ @@ -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) @@ -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());
}
}

10
src/qt/guiutil.h

@ -9,6 +9,7 @@ class QLineEdit; @@ -9,6 +9,7 @@ class QLineEdit;
class QWidget;
class QDateTime;
class QUrl;
class QAbstractItemView;
QT_END_NAMESPACE
class SendCoinsRecipient;
@ -35,6 +36,15 @@ public: @@ -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

31
src/qt/transactionview.cpp

@ -10,6 +10,7 @@ @@ -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) : @@ -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) : @@ -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) @@ -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()

9
src/qt/transactionview.h

@ -60,6 +60,11 @@ private: @@ -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: @@ -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();
};

Loading…
Cancel
Save