From e5c0d1ade9783096102f05b02ff937cfd0727ca6 Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Sat, 21 Jun 2014 17:34:08 +0400 Subject: [PATCH] CoinControl: add paste from address book and clipboard buttons for custom change address, standard validation of custom change address. --- src/qt/forms/sendcoinsdialog.ui | 64 +++++++++++++++++++++++++-------------- src/qt/sendcoinsdialog.cpp | 61 ++++++++++++++++--------------------- src/qt/sendcoinsdialog.h | 4 ++- 3 files changed, 70 insertions(+), 59 deletions(-) diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui index b1b0293..fd10f0a 100644 --- a/src/qt/forms/sendcoinsdialog.ui +++ b/src/qt/forms/sendcoinsdialog.ui @@ -561,7 +561,7 @@ - + false @@ -573,28 +573,46 @@ - - - - - 0 - 0 - - - - - 0 - 0 - - - - - - - 3 - - - + + + + false + + + Choose address from address book + + + + + + + :/icons/address-book:/icons/address-book + + + Alt+A + + + + + + + false + + + Paste address from clipboard + + + + + + + :/icons/editpaste:/icons/editpaste + + + Alt+P + + + diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 7f7d8bf..ba6bada 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -49,7 +49,6 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) : ui->lineEditCoinControlChange->setFont(GUIUtil::bitcoinAddressFont()); connect(ui->pushButtonCoinControl, SIGNAL(clicked()), this, SLOT(coinControlButtonClicked())); connect(ui->checkBoxCoinControlChange, SIGNAL(stateChanged(int)), this, SLOT(coinControlChangeChecked(int))); - connect(ui->lineEditCoinControlChange, SIGNAL(textEdited(const QString &)), this, SLOT(coinControlChangeEdited(const QString &))); // Coin Control: clipboard actions QAction *clipboardQuantityAction = new QAction(tr("Copy quantity"), this); @@ -120,6 +119,16 @@ void SendCoinsDialog::on_sendButton_clicked() if(!model) return; + if (ui->lineEditCoinControlChange->isEnabled()) + { + if(!ui->lineEditCoinControlChange->hasAcceptableInput() || + (model && !model->validateAddress(ui->lineEditCoinControlChange->text()))) + { + ui->lineEditCoinControlChange->setValid(false); + valid = false; + } + } + for(int i = 0; i < ui->entries->count(); ++i) { SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); @@ -445,44 +454,26 @@ void SendCoinsDialog::coinControlChangeChecked(int state) } ui->lineEditCoinControlChange->setEnabled((state == Qt::Checked)); - ui->labelCoinControlChangeLabel->setEnabled((state == Qt::Checked)); +// ui->labelCoinControlChangeLabel->setEnabled((state == Qt::Checked)); + ui->addressBookButton->setEnabled((state == Qt::Checked)); + ui->pasteButton->setEnabled((state == Qt::Checked)); } -// Coin Control: custom change address changed -void SendCoinsDialog::coinControlChangeEdited(const QString & text) +void SendCoinsDialog::on_pasteButton_clicked() { - if (model) - { - CoinControlDialog::coinControl->destChange = CBitcoinAddress(text.toStdString()).Get(); + // Paste text from clipboard into recipient field + ui->lineEditCoinControlChange->setText(QApplication::clipboard()->text()); +} - // label for the change address - ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}"); - if (text.isEmpty()) - ui->labelCoinControlChangeLabel->setText(""); - else if (!CBitcoinAddress(text.toStdString()).IsValid()) - { - ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}"); - ui->labelCoinControlChangeLabel->setText(tr("WARNING: Invalid NovaCoin address")); - } - else - { - QString associatedLabel = model->getAddressTableModel()->labelForAddress(text); - if (!associatedLabel.isEmpty()) - ui->labelCoinControlChangeLabel->setText(associatedLabel); - else - { - CPubKey pubkey; - CKeyID keyid; - CBitcoinAddress(text.toStdString()).GetKeyID(keyid); - if (model->getPubKey(keyid, pubkey)) - ui->labelCoinControlChangeLabel->setText(tr("(no label)")); - else - { - ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}"); - ui->labelCoinControlChangeLabel->setText(tr("WARNING: unknown change address")); - } - } - } +void SendCoinsDialog::on_addressBookButton_clicked() +{ + if(!model) + return; + AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this); + dlg.setModel(model->getAddressTableModel()); + if(dlg.exec()) + { + ui->lineEditCoinControlChange->setText(dlg.getReturnValue()); } } diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h index 68424bb..f32e7f3 100644 --- a/src/qt/sendcoinsdialog.h +++ b/src/qt/sendcoinsdialog.h @@ -41,6 +41,9 @@ public slots: void updateRemoveEnabled(); void setBalance(qint64 balance, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance); + void on_addressBookButton_clicked(); + void on_pasteButton_clicked(); + private: Ui::SendCoinsDialog *ui; WalletModel *model; @@ -53,7 +56,6 @@ private slots: void coinControlFeatureChanged(bool); void coinControlButtonClicked(); void coinControlChangeChecked(int); - void coinControlChangeEdited(const QString &); void coinControlUpdateLabels(); void coinControlClipboardQuantity(); void coinControlClipboardAmount(); -- 1.7.1