From f4d5552f6c4cc284fc85037648daad5475ad7d6b Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Tue, 8 Jan 2019 13:59:53 +0000 Subject: [PATCH] GUI: Clone SendCoinsRecipient to SendAssetsRecipient --- src/qt/paymentserver.cpp | 2 +- src/qt/paymentserver.h | 2 +- src/qt/sendcoinsdialog.cpp | 8 ++++---- src/qt/sendcoinsentry.cpp | 4 ++-- src/qt/sendcoinsentry.h | 6 +++--- src/qt/walletmodel.cpp | 18 ++++++++++++++---- src/qt/walletmodel.h | 19 ++++++++++++++++++- src/qt/walletmodeltransaction.cpp | 10 +++++----- src/qt/walletmodeltransaction.h | 8 ++++---- 9 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp index 43fc614871..87f0fa527b 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -605,7 +605,7 @@ void PaymentServer::fetchRequest(const QUrl& url) netManager->get(netRequest); } -void PaymentServer::fetchPaymentACK(WalletModel* walletModel, const SendCoinsRecipient& recipient, QByteArray transaction) +void PaymentServer::fetchPaymentACK(WalletModel* walletModel, const SendAssetsRecipient& recipient, QByteArray transaction) { const payments::PaymentDetails& details = recipient.paymentRequest.getDetails(); if (!details.has_payment_url()) diff --git a/src/qt/paymentserver.h b/src/qt/paymentserver.h index d335db9c85..464f02364f 100644 --- a/src/qt/paymentserver.h +++ b/src/qt/paymentserver.h @@ -111,7 +111,7 @@ public Q_SLOTS: void uiReady(); // Submit Payment message to a merchant, get back PaymentACK: - void fetchPaymentACK(WalletModel* walletModel, const SendCoinsRecipient& recipient, QByteArray transaction); + void fetchPaymentACK(WalletModel* walletModel, const SendAssetsRecipient& recipient, QByteArray transaction); // Handle an incoming URI, URI with local file scheme or file void handleURIOrFile(const QString& s); diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 0a268f7898..cbecd4cbfb 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -217,7 +217,7 @@ void SendCoinsDialog::on_sendButton_clicked() if(!model || !model->getOptionsModel()) return; - QList recipients; + QList recipients; bool valid = true; for(int i = 0; i < ui->entries->count(); ++i) @@ -276,7 +276,7 @@ void SendCoinsDialog::on_sendButton_clicked() // Format confirmation message QStringList formatted; - for (const SendCoinsRecipient &rcp : currentTransaction.getRecipients()) + for (const SendAssetsRecipient &rcp : currentTransaction.getRecipients()) { // generate bold amount string with wallet name in case of multiwallet QString amount = "" + BitcoinUnits::formatHtmlWithUnit(model->getOptionsModel()->getDisplayUnit(), rcp.amount); @@ -511,7 +511,7 @@ void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv) entry = addEntry(); } - entry->setValue(rv); + entry->setValue(SendAssetsRecipient(rv)); updateTabsAndLabels(); } @@ -871,7 +871,7 @@ void SendCoinsDialog::coinControlUpdateLabels() SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); if(entry && !entry->isHidden()) { - SendCoinsRecipient rcp = entry->getValue(); + auto rcp = entry->getValue(); CoinControlDialog::payAmounts.append(rcp.amount); if (rcp.fSubtractFeeFromAmount) CoinControlDialog::fSubtractFeeFromAmount = true; diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index 4d0df9e1a2..ed3436b68e 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -167,7 +167,7 @@ bool SendCoinsEntry::validate(interfaces::Node& node) return retval; } -SendCoinsRecipient SendCoinsEntry::getValue() +SendAssetsRecipient SendCoinsEntry::getValue() { // Payment request if (recipient.paymentRequest.IsInitialized()) @@ -195,7 +195,7 @@ QWidget *SendCoinsEntry::setupTabChain(QWidget *prev) return ui->deleteButton; } -void SendCoinsEntry::setValue(const SendCoinsRecipient &value) +void SendCoinsEntry::setValue(const SendAssetsRecipient &value) { recipient = value; diff --git a/src/qt/sendcoinsentry.h b/src/qt/sendcoinsentry.h index 935f1622b0..2588685bd8 100644 --- a/src/qt/sendcoinsentry.h +++ b/src/qt/sendcoinsentry.h @@ -31,12 +31,12 @@ public: void setModel(WalletModel *model); bool validate(interfaces::Node& node); - SendCoinsRecipient getValue(); + SendAssetsRecipient getValue(); /** Return whether the entry is still empty and unedited */ bool isClear(); - void setValue(const SendCoinsRecipient &value); + void setValue(const SendAssetsRecipient &value); void setAddress(const QString &address); void setAmount(const CAmount &amount); @@ -67,7 +67,7 @@ private Q_SLOTS: void updateAssetTypes(); private: - SendCoinsRecipient recipient; + SendAssetsRecipient recipient; Ui::SendCoinsEntry *ui; WalletModel *model; const PlatformStyle *platformStyle; diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 50015163a1..98a7555c97 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -28,6 +28,16 @@ #include #include +SendAssetsRecipient::SendAssetsRecipient(SendCoinsRecipient r) : + address(r.address), + label(r.label), + amount(r.amount), + message(r.message), + paymentRequest(r.paymentRequest), + authenticatedMerchant(r.authenticatedMerchant), + fSubtractFeeFromAmount(r.fSubtractFeeFromAmount) +{ +} WalletModel::WalletModel(std::unique_ptr wallet, interfaces::Node& node, const PlatformStyle *platformStyle, OptionsModel *_optionsModel, QObject *parent) : QObject(parent), m_wallet(std::move(wallet)), m_node(node), optionsModel(_optionsModel), addressTableModel(0), @@ -141,7 +151,7 @@ WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransact { CAmount total = 0; bool fSubtractFeeFromAmount = false; - QList recipients = transaction.getRecipients(); + auto recipients = transaction.getRecipients(); std::vector vecSend; if(recipients.empty()) @@ -153,7 +163,7 @@ WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransact int nAddresses = 0; // Pre-check input data for validity - for (const SendCoinsRecipient &rcp : recipients) + for (const SendAssetsRecipient &rcp : recipients) { if (rcp.fSubtractFeeFromAmount) fSubtractFeeFromAmount = true; @@ -249,7 +259,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &tran { std::vector> vOrderForm; - for (const SendCoinsRecipient &rcp : transaction.getRecipients()) + for (const SendAssetsRecipient &rcp : transaction.getRecipients()) { if (rcp.paymentRequest.IsInitialized()) { @@ -279,7 +289,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &tran // Add addresses / update labels that we've sent to the address book, // and emit coinsSent signal for each recipient - for (const SendCoinsRecipient &rcp : transaction.getRecipients()) + for (const SendAssetsRecipient &rcp : transaction.getRecipients()) { // Don't touch the address book when we have a payment request if (!rcp.paymentRequest.IsInitialized()) diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index 815e6df3d1..fdc2d04ea2 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -105,6 +105,23 @@ public: } }; +class SendAssetsRecipient +{ +public: + explicit SendAssetsRecipient() : fSubtractFeeFromAmount(false) { } + explicit SendAssetsRecipient(SendCoinsRecipient r); +public: + QString address; + QString label; + CAmount amount; + QString message; + + PaymentRequestPlus paymentRequest; + QString authenticatedMerchant; + + bool fSubtractFeeFromAmount; // memory only +}; + /** Interface to Bitcoin wallet from Qt view code. */ class WalletModel : public QObject { @@ -260,7 +277,7 @@ Q_SIGNALS: void message(const QString &title, const QString &message, unsigned int style); // Coins sent: from wallet, to recipient, in (serialized) transaction: - void coinsSent(WalletModel* wallet, SendCoinsRecipient recipient, QByteArray transaction); + void coinsSent(WalletModel* wallet, SendAssetsRecipient recipient, QByteArray transaction); // Show progress dialog e.g. for rescan void showProgress(const QString &title, int nProgress); diff --git a/src/qt/walletmodeltransaction.cpp b/src/qt/walletmodeltransaction.cpp index 821b158a4f..50b9980af4 100644 --- a/src/qt/walletmodeltransaction.cpp +++ b/src/qt/walletmodeltransaction.cpp @@ -7,13 +7,13 @@ #include #include -WalletModelTransaction::WalletModelTransaction(const QList &_recipients) : +WalletModelTransaction::WalletModelTransaction(const QList &_recipients) : recipients(_recipients), fee(0) { } -QList WalletModelTransaction::getRecipients() const +QList WalletModelTransaction::getRecipients() const { return recipients; } @@ -42,9 +42,9 @@ void WalletModelTransaction::reassignAmounts(int nChangePosRet) { const CTransaction* walletTransaction = &wtx->get(); int i = 0; - for (QList::iterator it = recipients.begin(); it != recipients.end(); ++it) + for (auto it = recipients.begin(); it != recipients.end(); ++it) { - SendCoinsRecipient& rcp = (*it); + auto& rcp = (*it); if (rcp.paymentRequest.IsInitialized()) { @@ -74,7 +74,7 @@ void WalletModelTransaction::reassignAmounts(int nChangePosRet) CAmount WalletModelTransaction::getTotalTransactionAmount() const { CAmount totalTransactionAmount = 0; - for (const SendCoinsRecipient &rcp : recipients) + for (const SendAssetsRecipient &rcp : recipients) { totalTransactionAmount += rcp.amount; } diff --git a/src/qt/walletmodeltransaction.h b/src/qt/walletmodeltransaction.h index 75ede2e2a1..87d1915ab8 100644 --- a/src/qt/walletmodeltransaction.h +++ b/src/qt/walletmodeltransaction.h @@ -11,7 +11,7 @@ #include -class SendCoinsRecipient; +class SendAssetsRecipient; namespace interfaces { class Node; @@ -22,9 +22,9 @@ class PendingWalletTx; class WalletModelTransaction { public: - explicit WalletModelTransaction(const QList &recipients); + explicit WalletModelTransaction(const QList &recipients); - QList getRecipients() const; + QList getRecipients() const; std::unique_ptr& getWtx(); unsigned int getTransactionSize(); @@ -37,7 +37,7 @@ public: void reassignAmounts(int nChangePosRet); // needed for the subtract-fee-from-amount feature private: - QList recipients; + QList recipients; std::unique_ptr wtx; CAmount fee; };