Qt: Add "Copy URI" to payment request context menu

This commit is contained in:
Luke Dashjr 2016-10-13 23:27:26 +00:00
parent 3cd836c1d8
commit 21f5a6364d
2 changed files with 35 additions and 10 deletions

View File

@ -43,18 +43,21 @@ ReceiveCoinsDialog::ReceiveCoinsDialog(const PlatformStyle *platformStyle, QWidg
} }
// context menu actions // context menu actions
QAction *copyURIAction = new QAction(tr("Copy URI"), this);
QAction *copyLabelAction = new QAction(tr("Copy label"), this); QAction *copyLabelAction = new QAction(tr("Copy label"), this);
QAction *copyMessageAction = new QAction(tr("Copy message"), this); QAction *copyMessageAction = new QAction(tr("Copy message"), this);
QAction *copyAmountAction = new QAction(tr("Copy amount"), this); QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
// context menu // context menu
contextMenu = new QMenu(); contextMenu = new QMenu();
contextMenu->addAction(copyURIAction);
contextMenu->addAction(copyLabelAction); contextMenu->addAction(copyLabelAction);
contextMenu->addAction(copyMessageAction); contextMenu->addAction(copyMessageAction);
contextMenu->addAction(copyAmountAction); contextMenu->addAction(copyAmountAction);
// context menu signals // context menu signals
connect(ui->recentRequestsView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenu(QPoint))); connect(ui->recentRequestsView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenu(QPoint)));
connect(copyURIAction, SIGNAL(triggered()), this, SLOT(copyURI()));
connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel()));
connect(copyMessageAction, SIGNAL(triggered()), this, SLOT(copyMessage())); connect(copyMessageAction, SIGNAL(triggered()), this, SLOT(copyMessage()));
connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount()));
@ -227,30 +230,50 @@ void ReceiveCoinsDialog::keyPressEvent(QKeyEvent *event)
this->QDialog::keyPressEvent(event); this->QDialog::keyPressEvent(event);
} }
QModelIndex ReceiveCoinsDialog::selectedRow()
{
if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel())
return QModelIndex();
QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows();
if(selection.empty())
return QModelIndex();
// correct for selection mode ContiguousSelection
QModelIndex firstIndex = selection.at(0);
return firstIndex;
}
// copy column of selected row to clipboard // copy column of selected row to clipboard
void ReceiveCoinsDialog::copyColumnToClipboard(int column) void ReceiveCoinsDialog::copyColumnToClipboard(int column)
{ {
if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) QModelIndex firstIndex = selectedRow();
if (!firstIndex.isValid()) {
return; return;
QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows(); }
if(selection.empty())
return;
// correct for selection mode ContiguousSelection
QModelIndex firstIndex = selection.at(0);
GUIUtil::setClipboard(model->getRecentRequestsTableModel()->data(firstIndex.child(firstIndex.row(), column), Qt::EditRole).toString()); GUIUtil::setClipboard(model->getRecentRequestsTableModel()->data(firstIndex.child(firstIndex.row(), column), Qt::EditRole).toString());
} }
// context menu // context menu
void ReceiveCoinsDialog::showMenu(const QPoint &point) void ReceiveCoinsDialog::showMenu(const QPoint &point)
{ {
if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) if (!selectedRow().isValid()) {
return;
QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows();
if(selection.empty())
return; return;
}
contextMenu->exec(QCursor::pos()); contextMenu->exec(QCursor::pos());
} }
// context menu action: copy URI
void ReceiveCoinsDialog::copyURI()
{
QModelIndex sel = selectedRow();
if (!sel.isValid()) {
return;
}
const RecentRequestsTableModel * const submodel = model->getRecentRequestsTableModel();
const QString uri = GUIUtil::formatBitcoinURI(submodel->entry(sel.row()).recipient);
GUIUtil::setClipboard(uri);
}
// context menu action: copy label // context menu action: copy label
void ReceiveCoinsDialog::copyLabel() void ReceiveCoinsDialog::copyLabel()
{ {

View File

@ -60,6 +60,7 @@ private:
QMenu *contextMenu; QMenu *contextMenu;
const PlatformStyle *platformStyle; const PlatformStyle *platformStyle;
QModelIndex selectedRow();
void copyColumnToClipboard(int column); void copyColumnToClipboard(int column);
virtual void resizeEvent(QResizeEvent *event); virtual void resizeEvent(QResizeEvent *event);
@ -71,6 +72,7 @@ private Q_SLOTS:
void recentRequestsView_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void recentRequestsView_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
void updateDisplayUnit(); void updateDisplayUnit();
void showMenu(const QPoint &point); void showMenu(const QPoint &point);
void copyURI();
void copyLabel(); void copyLabel();
void copyMessage(); void copyMessage();
void copyAmount(); void copyAmount();