X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fsendcoinsdialog.cpp;h=e40205b2c05afe2d45e2f2a6052bd5f0037741b9;hb=aab109cb39615ef4bc7a108cb7071c7c2f1dae65;hp=35df0fd947086c0fb70ce1028178b0d47c5b4ec1;hpb=9ca8b78544b413ed875ff9bb6ef376e21922e6ac;p=novacoin.git diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 35df0fd..e40205b 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -2,6 +2,7 @@ #include "ui_sendcoinsdialog.h" #include "init.h" +#include "base58.h" #include "walletmodel.h" #include "addresstablemodel.h" #include "addressbookpage.h" @@ -11,6 +12,7 @@ #include "optionsmodel.h" #include "sendcoinsentry.h" #include "guiutil.h" +#include "dialogwindowflags.h" #include "askpassphrasedialog.h" #include "coincontrol.h" @@ -23,9 +25,10 @@ #include SendCoinsDialog::SendCoinsDialog(QWidget *parent) : - QDialog(parent), + QDialog(parent, DIALOGWINDOWHINTS), ui(new Ui::SendCoinsDialog), - model(0) + model(0), + coinControl(0) { ui->setupUi(this); @@ -49,7 +52,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); @@ -78,6 +80,9 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) : ui->labelCoinControlChange->addAction(clipboardChangeAction); fNewRecipientAllowed = true; + + coinControl = new CoinControlDialog(0); + connect(coinControl, SIGNAL(beforeClose()), this, SLOT(coinControlUpdateLabels())); } void SendCoinsDialog::setModel(WalletModel *model) @@ -94,8 +99,8 @@ void SendCoinsDialog::setModel(WalletModel *model) } if(model && model->getOptionsModel()) { - setBalance(model->getBalance(), model->getStake(), model->getUnconfirmedBalance(), model->getImmatureBalance()); - connect(model, SIGNAL(balanceChanged(qint64, qint64, qint64, qint64)), this, SLOT(setBalance(qint64, qint64, qint64, qint64))); + setBalance(model->getBalance(), model->getBalanceWatchOnly(), model->getStake(), model->getUnconfirmedBalance(), model->getImmatureBalance()); + connect(model, SIGNAL(balanceChanged(qint64, qint64, qint64, qint64, qint64)), this, SLOT(setBalance(qint64, qint64, qint64, qint64, qint64))); connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); // Coin Control @@ -109,6 +114,7 @@ void SendCoinsDialog::setModel(WalletModel *model) SendCoinsDialog::~SendCoinsDialog() { + delete coinControl; delete ui; } @@ -120,6 +126,19 @@ void SendCoinsDialog::on_sendButton_clicked() if(!model) return; + if (ui->lineEditCoinControlChange->isEnabled()) + { + if(!ui->lineEditCoinControlChange->hasAcceptableInput() || + (model && !model->validateAddress(ui->lineEditCoinControlChange->text()))) + { + CoinControlDialog::coinControl->destChange = CNoDestination(); + ui->lineEditCoinControlChange->setValid(false); + valid = false; + } + else + CoinControlDialog::coinControl->destChange = CBitcoinAddress(ui->lineEditCoinControlChange->text().toStdString()).Get(); + } + for(int i = 0; i < ui->entries->count(); ++i) { SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); @@ -145,7 +164,11 @@ void SendCoinsDialog::on_sendButton_clicked() QStringList formatted; foreach(const SendCoinsRecipient &rcp, recipients) { +#if QT_VERSION < 0x050000 formatted.append(tr("%1 to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), Qt::escape(rcp.label), rcp.address)); +#else + formatted.append(tr("%1 to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), rcp.label.toHtmlEscaped(), rcp.address)); +#endif } fNewRecipientAllowed = false; @@ -346,7 +369,7 @@ bool SendCoinsDialog::handleURI(const QString &uri) return false; } -void SendCoinsDialog::setBalance(qint64 balance, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance) +void SendCoinsDialog::setBalance(qint64 total, qint64 watchOnly, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance) { Q_UNUSED(stake); Q_UNUSED(unconfirmedBalance); @@ -355,7 +378,7 @@ void SendCoinsDialog::setBalance(qint64 balance, qint64 stake, qint64 unconfirme return; int unit = model->getOptionsModel()->getDisplayUnit(); - ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance)); + ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, total - watchOnly)); } void SendCoinsDialog::updateDisplayUnit() @@ -363,7 +386,7 @@ void SendCoinsDialog::updateDisplayUnit() if(model && model->getOptionsModel()) { // Update labelBalance with the current balance and the current unit - ui->labelBalance->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), model->getBalance())); + ui->labelBalance->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), model->getBalance() - model->getBalanceWatchOnly())); } } @@ -427,10 +450,9 @@ void SendCoinsDialog::coinControlFeatureChanged(bool checked) // Coin Control: button inputs -> show actual coin control dialog void SendCoinsDialog::coinControlButtonClicked() { - CoinControlDialog dlg; - dlg.setModel(model); - dlg.exec(); - coinControlUpdateLabels(); + coinControl->setModel(model); + coinControl->setWindowModality(Qt::ApplicationModal); + coinControl->show(); } // Coin Control: checkbox custom change address @@ -445,44 +467,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 Bitcoin 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::ReceivingTab, this); + dlg.setModel(model->getAddressTableModel()); + if(dlg.exec()) + { + ui->lineEditCoinControlChange->setText(dlg.getReturnValue()); } }