mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-12 21:02:38 -03:00
84b695cc9d
- this adds a delete button for insecure and secure payment requests in the sendcoins dialog - it also enables the delete button even for single and empty entries, as this is much easier to handle and doesn't need to special case single entries - big parts of the ui file were changed, because I copied the delete button and had to delete the layout too and created it from scratch (which seems to cleanup the rows and colums in the layout also, which is nice IMHO)
239 lines
6.5 KiB
C++
239 lines
6.5 KiB
C++
// Copyright (c) 2011-2013 The Bitcoin developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include "sendcoinsentry.h"
|
|
#include "ui_sendcoinsentry.h"
|
|
|
|
#include "addressbookpage.h"
|
|
#include "addresstablemodel.h"
|
|
#include "guiutil.h"
|
|
#include "optionsmodel.h"
|
|
#include "walletmodel.h"
|
|
|
|
#include <QApplication>
|
|
#include <QClipboard>
|
|
|
|
SendCoinsEntry::SendCoinsEntry(QWidget *parent) :
|
|
QStackedWidget(parent),
|
|
ui(new Ui::SendCoinsEntry),
|
|
model(0)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
setCurrentWidget(ui->SendCoins);
|
|
|
|
#ifdef Q_OS_MAC
|
|
ui->payToLayout->setSpacing(4);
|
|
#endif
|
|
#if QT_VERSION >= 0x040700
|
|
ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book"));
|
|
ui->payTo->setPlaceholderText(tr("Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"));
|
|
#endif
|
|
setFocusProxy(ui->payTo);
|
|
|
|
// normal bitcoin address field
|
|
GUIUtil::setupAddressWidget(ui->payTo, this);
|
|
// just a label for displaying bitcoin address(es)
|
|
ui->payTo_is->setFont(GUIUtil::bitcoinAddressFont());
|
|
}
|
|
|
|
SendCoinsEntry::~SendCoinsEntry()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void SendCoinsEntry::on_pasteButton_clicked()
|
|
{
|
|
// Paste text from clipboard into recipient field
|
|
ui->payTo->setText(QApplication::clipboard()->text());
|
|
}
|
|
|
|
void SendCoinsEntry::on_addressBookButton_clicked()
|
|
{
|
|
if(!model)
|
|
return;
|
|
AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::SendingTab, this);
|
|
dlg.setModel(model->getAddressTableModel());
|
|
if(dlg.exec())
|
|
{
|
|
ui->payTo->setText(dlg.getReturnValue());
|
|
ui->payAmount->setFocus();
|
|
}
|
|
}
|
|
|
|
void SendCoinsEntry::on_payTo_textChanged(const QString &address)
|
|
{
|
|
updateLabel(address);
|
|
}
|
|
|
|
void SendCoinsEntry::setModel(WalletModel *model)
|
|
{
|
|
this->model = model;
|
|
|
|
if (model && model->getOptionsModel())
|
|
connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit()));
|
|
|
|
connect(ui->payAmount, SIGNAL(textChanged()), this, SIGNAL(payAmountChanged()));
|
|
connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteClicked()));
|
|
connect(ui->deleteButton_is, SIGNAL(clicked()), this, SLOT(deleteClicked()));
|
|
connect(ui->deleteButton_s, SIGNAL(clicked()), this, SLOT(deleteClicked()));
|
|
|
|
clear();
|
|
}
|
|
|
|
void SendCoinsEntry::clear()
|
|
{
|
|
// clear UI elements for normal payment
|
|
ui->payTo->clear();
|
|
ui->addAsLabel->clear();
|
|
ui->payAmount->clear();
|
|
// clear UI elements for insecure payment request
|
|
ui->payTo_is->clear();
|
|
ui->memoTextLabel_is->clear();
|
|
ui->payAmount_is->clear();
|
|
// clear UI elements for secure payment request
|
|
ui->payTo_s->clear();
|
|
ui->memoTextLabel_s->clear();
|
|
ui->payAmount_s->clear();
|
|
|
|
ui->payTo->setFocus();
|
|
|
|
// update the display unit, to not use the default ("BTC")
|
|
updateDisplayUnit();
|
|
}
|
|
|
|
void SendCoinsEntry::deleteClicked()
|
|
{
|
|
emit removeEntry(this);
|
|
}
|
|
|
|
bool SendCoinsEntry::validate()
|
|
{
|
|
if (!model)
|
|
return false;
|
|
|
|
// Check input validity
|
|
bool retval = true;
|
|
|
|
// Skip checks for payment request
|
|
if (recipient.paymentRequest.IsInitialized())
|
|
return retval;
|
|
|
|
if (!ui->payTo->hasAcceptableInput() || !model->validateAddress(ui->payTo->text()))
|
|
{
|
|
ui->payTo->setValid(false);
|
|
retval = false;
|
|
}
|
|
|
|
if (!ui->payAmount->validate())
|
|
{
|
|
retval = false;
|
|
}
|
|
|
|
// Reject dust outputs:
|
|
if (retval && GUIUtil::isDust(ui->payTo->text(), ui->payAmount->value())) {
|
|
ui->payAmount->setValid(false);
|
|
retval = false;
|
|
}
|
|
|
|
return retval;
|
|
}
|
|
|
|
SendCoinsRecipient SendCoinsEntry::getValue()
|
|
{
|
|
// Payment request
|
|
if (recipient.paymentRequest.IsInitialized())
|
|
return recipient;
|
|
|
|
// Normal payment
|
|
recipient.address = ui->payTo->text();
|
|
recipient.label = ui->addAsLabel->text();
|
|
recipient.amount = ui->payAmount->value();
|
|
|
|
return recipient;
|
|
}
|
|
|
|
QWidget *SendCoinsEntry::setupTabChain(QWidget *prev)
|
|
{
|
|
QWidget::setTabOrder(prev, ui->payTo);
|
|
QWidget::setTabOrder(ui->payTo, ui->addressBookButton);
|
|
QWidget::setTabOrder(ui->addressBookButton, ui->pasteButton);
|
|
QWidget::setTabOrder(ui->pasteButton, ui->deleteButton);
|
|
QWidget::setTabOrder(ui->deleteButton, ui->addAsLabel);
|
|
return ui->payAmount->setupTabChain(ui->addAsLabel);
|
|
}
|
|
|
|
void SendCoinsEntry::setValue(const SendCoinsRecipient &value)
|
|
{
|
|
recipient = value;
|
|
|
|
if (recipient.paymentRequest.IsInitialized()) // payment request
|
|
{
|
|
if (recipient.authenticatedMerchant.isEmpty()) // insecure
|
|
{
|
|
ui->payTo_is->setText(recipient.address);
|
|
ui->memoTextLabel_is->setText(recipient.message);
|
|
ui->payAmount_is->setValue(recipient.amount);
|
|
ui->payAmount_is->setReadOnly(true);
|
|
setCurrentWidget(ui->SendCoins_InsecurePaymentRequest);
|
|
}
|
|
else // secure
|
|
{
|
|
ui->payTo_s->setText(recipient.authenticatedMerchant);
|
|
ui->memoTextLabel_s->setText(recipient.message);
|
|
ui->payAmount_s->setValue(recipient.amount);
|
|
ui->payAmount_s->setReadOnly(true);
|
|
setCurrentWidget(ui->SendCoins_SecurePaymentRequest);
|
|
}
|
|
}
|
|
else // normal payment
|
|
{
|
|
ui->payTo->setText(recipient.address);
|
|
ui->addAsLabel->setText(recipient.label);
|
|
ui->payAmount->setValue(recipient.amount);
|
|
}
|
|
}
|
|
|
|
void SendCoinsEntry::setAddress(const QString &address)
|
|
{
|
|
ui->payTo->setText(address);
|
|
ui->payAmount->setFocus();
|
|
}
|
|
|
|
bool SendCoinsEntry::isClear()
|
|
{
|
|
return ui->payTo->text().isEmpty() && ui->payTo_is->text().isEmpty() && ui->payTo_s->text().isEmpty();
|
|
}
|
|
|
|
void SendCoinsEntry::setFocus()
|
|
{
|
|
ui->payTo->setFocus();
|
|
}
|
|
|
|
void SendCoinsEntry::updateDisplayUnit()
|
|
{
|
|
if(model && model->getOptionsModel())
|
|
{
|
|
// Update payAmount with the current unit
|
|
ui->payAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
|
|
ui->payAmount_is->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
|
|
ui->payAmount_s->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
|
|
}
|
|
}
|
|
|
|
bool SendCoinsEntry::updateLabel(const QString &address)
|
|
{
|
|
if(!model)
|
|
return false;
|
|
|
|
// Fill in label from address book, if address has an associated label
|
|
QString associatedLabel = model->getAddressTableModel()->labelForAddress(address);
|
|
if(!associatedLabel.isEmpty())
|
|
{
|
|
ui->addAsLabel->setText(associatedLabel);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|