Merge pull request #2215 from Diapolo/Qt_sendfrom_addrbook
Bitcoin-Qt: add "send coins" to context menu in addressbook
This commit is contained in:
commit
f42720d0f6
8 changed files with 56 additions and 4 deletions
|
@ -65,6 +65,7 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
|
||||||
QAction *copyAddressAction = new QAction(ui->copyToClipboard->text(), this);
|
QAction *copyAddressAction = new QAction(ui->copyToClipboard->text(), this);
|
||||||
QAction *copyLabelAction = new QAction(tr("Copy &Label"), this);
|
QAction *copyLabelAction = new QAction(tr("Copy &Label"), this);
|
||||||
QAction *editAction = new QAction(tr("&Edit"), this);
|
QAction *editAction = new QAction(tr("&Edit"), this);
|
||||||
|
QAction *sendCoinsAction = new QAction(tr("Send &Coins"), this);
|
||||||
QAction *showQRCodeAction = new QAction(ui->showQRCode->text(), this);
|
QAction *showQRCodeAction = new QAction(ui->showQRCode->text(), this);
|
||||||
QAction *signMessageAction = new QAction(ui->signMessage->text(), this);
|
QAction *signMessageAction = new QAction(ui->signMessage->text(), this);
|
||||||
QAction *verifyMessageAction = new QAction(ui->verifyMessage->text(), this);
|
QAction *verifyMessageAction = new QAction(ui->verifyMessage->text(), this);
|
||||||
|
@ -78,6 +79,8 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
|
||||||
if(tab == SendingTab)
|
if(tab == SendingTab)
|
||||||
contextMenu->addAction(deleteAction);
|
contextMenu->addAction(deleteAction);
|
||||||
contextMenu->addSeparator();
|
contextMenu->addSeparator();
|
||||||
|
if(tab == SendingTab)
|
||||||
|
contextMenu->addAction(sendCoinsAction);
|
||||||
#ifdef USE_QRCODE
|
#ifdef USE_QRCODE
|
||||||
contextMenu->addAction(showQRCodeAction);
|
contextMenu->addAction(showQRCodeAction);
|
||||||
#endif
|
#endif
|
||||||
|
@ -91,6 +94,7 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
|
||||||
connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(onCopyLabelAction()));
|
connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(onCopyLabelAction()));
|
||||||
connect(editAction, SIGNAL(triggered()), this, SLOT(onEditAction()));
|
connect(editAction, SIGNAL(triggered()), this, SLOT(onEditAction()));
|
||||||
connect(deleteAction, SIGNAL(triggered()), this, SLOT(on_deleteButton_clicked()));
|
connect(deleteAction, SIGNAL(triggered()), this, SLOT(on_deleteButton_clicked()));
|
||||||
|
connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(onSendCoins_clicked()));
|
||||||
connect(showQRCodeAction, SIGNAL(triggered()), this, SLOT(on_showQRCode_clicked()));
|
connect(showQRCodeAction, SIGNAL(triggered()), this, SLOT(on_showQRCode_clicked()));
|
||||||
connect(signMessageAction, SIGNAL(triggered()), this, SLOT(on_signMessage_clicked()));
|
connect(signMessageAction, SIGNAL(triggered()), this, SLOT(on_signMessage_clicked()));
|
||||||
connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(on_verifyMessage_clicked()));
|
connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(on_verifyMessage_clicked()));
|
||||||
|
@ -206,6 +210,18 @@ void AddressBookPage::on_verifyMessage_clicked()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddressBookPage::onSendCoins_clicked()
|
||||||
|
{
|
||||||
|
QTableView *table = ui->tableView;
|
||||||
|
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
|
||||||
|
|
||||||
|
foreach (QModelIndex index, indexes)
|
||||||
|
{
|
||||||
|
QString address = index.data().toString();
|
||||||
|
emit sendCoins(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AddressBookPage::on_newAddressButton_clicked()
|
void AddressBookPage::on_newAddressButton_clicked()
|
||||||
{
|
{
|
||||||
if(!model)
|
if(!model)
|
||||||
|
|
|
@ -68,6 +68,8 @@ private slots:
|
||||||
void on_signMessage_clicked();
|
void on_signMessage_clicked();
|
||||||
/** Open the verify message tab in the Sign/Verify Message dialog with currently selected address */
|
/** Open the verify message tab in the Sign/Verify Message dialog with currently selected address */
|
||||||
void on_verifyMessage_clicked();
|
void on_verifyMessage_clicked();
|
||||||
|
/** Open send coins dialog for currently selected address (no button) */
|
||||||
|
void onSendCoins_clicked();
|
||||||
/** Generate a QR Code from the currently selected address */
|
/** Generate a QR Code from the currently selected address */
|
||||||
void on_showQRCode_clicked();
|
void on_showQRCode_clicked();
|
||||||
/** Copy label of currently selected address entry to clipboard (no button) */
|
/** Copy label of currently selected address entry to clipboard (no button) */
|
||||||
|
@ -85,6 +87,7 @@ private slots:
|
||||||
signals:
|
signals:
|
||||||
void signMessage(QString addr);
|
void signMessage(QString addr);
|
||||||
void verifyMessage(QString addr);
|
void verifyMessage(QString addr);
|
||||||
|
void sendCoins(QString addr);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ADDRESSBOOKPAGE_H
|
#endif // ADDRESSBOOKPAGE_H
|
||||||
|
|
|
@ -172,9 +172,11 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
|
||||||
rpcConsole = new RPCConsole(this);
|
rpcConsole = new RPCConsole(this);
|
||||||
connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show()));
|
connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show()));
|
||||||
|
|
||||||
// Clicking on "Verify Message" in the address book sends you to the verify message tab
|
// Clicking on "Send Coins" in the address book sends you to the send coins tab
|
||||||
|
connect(addressBookPage, SIGNAL(sendCoins(QString)), this, SLOT(gotoSendCoinsPage(QString)));
|
||||||
|
// Clicking on "Verify Message" in the address book opens the verify message tab in the Sign/Verify Message dialog
|
||||||
connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString)));
|
connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString)));
|
||||||
// Clicking on "Sign Message" in the receive coins page sends you to the sign message tab
|
// Clicking on "Sign Message" in the receive coins page opens the sign message tab in the Sign/Verify Message dialog
|
||||||
connect(receiveCoinsPage, SIGNAL(signMessage(QString)), this, SLOT(gotoSignMessageTab(QString)));
|
connect(receiveCoinsPage, SIGNAL(signMessage(QString)), this, SLOT(gotoSignMessageTab(QString)));
|
||||||
|
|
||||||
// Install event filter to be able to catch status tip events (QEvent::StatusTip)
|
// Install event filter to be able to catch status tip events (QEvent::StatusTip)
|
||||||
|
@ -758,13 +760,16 @@ void BitcoinGUI::gotoReceiveCoinsPage()
|
||||||
connect(exportAction, SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
|
connect(exportAction, SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::gotoSendCoinsPage()
|
void BitcoinGUI::gotoSendCoinsPage(QString addr)
|
||||||
{
|
{
|
||||||
sendCoinsAction->setChecked(true);
|
sendCoinsAction->setChecked(true);
|
||||||
centralWidget->setCurrentWidget(sendCoinsPage);
|
centralWidget->setCurrentWidget(sendCoinsPage);
|
||||||
|
|
||||||
exportAction->setEnabled(false);
|
exportAction->setEnabled(false);
|
||||||
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
||||||
|
|
||||||
|
if(!addr.isEmpty())
|
||||||
|
sendCoinsPage->setAddress(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::gotoSignMessageTab(QString addr)
|
void BitcoinGUI::gotoSignMessageTab(QString addr)
|
||||||
|
|
|
@ -149,7 +149,7 @@ private slots:
|
||||||
/** Switch to receive coins page */
|
/** Switch to receive coins page */
|
||||||
void gotoReceiveCoinsPage();
|
void gotoReceiveCoinsPage();
|
||||||
/** Switch to send coins page */
|
/** Switch to send coins page */
|
||||||
void gotoSendCoinsPage();
|
void gotoSendCoinsPage(QString addr = "");
|
||||||
|
|
||||||
/** Show Sign/Verify Message dialog and switch to sign message tab */
|
/** Show Sign/Verify Message dialog and switch to sign message tab */
|
||||||
void gotoSignMessageTab(QString addr = "");
|
void gotoSignMessageTab(QString addr = "");
|
||||||
|
|
|
@ -245,6 +245,26 @@ QWidget *SendCoinsDialog::setupTabChain(QWidget *prev)
|
||||||
return ui->sendButton;
|
return ui->sendButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SendCoinsDialog::setAddress(const QString &address)
|
||||||
|
{
|
||||||
|
SendCoinsEntry *entry = 0;
|
||||||
|
// Replace the first entry if it is still unused
|
||||||
|
if(ui->entries->count() == 1)
|
||||||
|
{
|
||||||
|
SendCoinsEntry *first = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(0)->widget());
|
||||||
|
if(first->isClear())
|
||||||
|
{
|
||||||
|
entry = first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!entry)
|
||||||
|
{
|
||||||
|
entry = addEntry();
|
||||||
|
}
|
||||||
|
|
||||||
|
entry->setAddress(address);
|
||||||
|
}
|
||||||
|
|
||||||
void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv)
|
void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv)
|
||||||
{
|
{
|
||||||
if(!fNewRecipientAllowed)
|
if(!fNewRecipientAllowed)
|
||||||
|
|
|
@ -29,6 +29,7 @@ public:
|
||||||
*/
|
*/
|
||||||
QWidget *setupTabChain(QWidget *prev);
|
QWidget *setupTabChain(QWidget *prev);
|
||||||
|
|
||||||
|
void setAddress(const QString &address);
|
||||||
void pasteEntry(const SendCoinsRecipient &rv);
|
void pasteEntry(const SendCoinsRecipient &rv);
|
||||||
bool handleURI(const QString &uri);
|
bool handleURI(const QString &uri);
|
||||||
|
|
||||||
|
|
|
@ -153,6 +153,12 @@ void SendCoinsEntry::setValue(const SendCoinsRecipient &value)
|
||||||
ui->payAmount->setValue(value.amount);
|
ui->payAmount->setValue(value.amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SendCoinsEntry::setAddress(const QString &address)
|
||||||
|
{
|
||||||
|
ui->payTo->setText(address);
|
||||||
|
ui->payAmount->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
bool SendCoinsEntry::isClear()
|
bool SendCoinsEntry::isClear()
|
||||||
{
|
{
|
||||||
return ui->payTo->text().isEmpty();
|
return ui->payTo->text().isEmpty();
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
bool isClear();
|
bool isClear();
|
||||||
|
|
||||||
void setValue(const SendCoinsRecipient &value);
|
void setValue(const SendCoinsRecipient &value);
|
||||||
|
void setAddress(const QString &address);
|
||||||
|
|
||||||
/** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907).
|
/** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907).
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue