// Copyright (c) 2011-2015 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "AddressBookModel.h" #include "CurrencyAdapter.h" #include "MainWindow.h" #include "NodeAdapter.h" #include "SendFrame.h" #include "TransferFrame.h" #include "WalletAdapter.h" #include "WalletEvents.h" #include "ui_sendframe.h" namespace WalletGui { SendFrame::SendFrame(QWidget* _parent) : QFrame(_parent), m_ui(new Ui::SendFrame) { m_ui->setupUi(this); clearAllClicked(); mixinValueChanged(m_ui->m_mixinSlider->value()); connect(&WalletAdapter::instance(), &WalletAdapter::walletSendTransactionCompletedSignal, this, &SendFrame::sendTransactionCompleted, Qt::QueuedConnection); connect(&WalletAdapter::instance(), &WalletAdapter::walletActualBalanceUpdatedSignal, this, &SendFrame::walletActualBalanceUpdated, Qt::QueuedConnection); m_ui->m_tickerLabel->setText(CurrencyAdapter::instance().getCurrencyTicker().toUpper()); } SendFrame::~SendFrame() { } void SendFrame::addRecipientClicked() { TransferFrame* newTransfer = new TransferFrame(m_ui->m_transfersScrollarea); m_ui->m_send_frame_layout->insertWidget(m_transfers.size(), newTransfer); m_transfers.append(newTransfer); if (m_transfers.size() == 1) { newTransfer->disableRemoveButton(true); } else { m_transfers[0]->disableRemoveButton(false); } connect(newTransfer, &TransferFrame::destroyed, [this](QObject* _obj) { m_transfers.removeOne(static_cast(_obj)); if (m_transfers.size() == 1) { m_transfers[0]->disableRemoveButton(true); } }); } void SendFrame::clearAllClicked() { Q_FOREACH (TransferFrame* transfer, m_transfers) { transfer->close(); } m_transfers.clear(); addRecipientClicked(); m_ui->m_paymentIdEdit->clear(); m_ui->m_mixinSlider->setValue(2); } void SendFrame::sendClicked() { QVector walletTransfers; Q_FOREACH (TransferFrame * transfer, m_transfers) { QString address = transfer->getAddress(); if (!CurrencyAdapter::instance().validateAddress(address)) { QCoreApplication::postEvent( &MainWindow::instance(), new ShowMessageEvent(tr("Invalid recipient address"), QtCriticalMsg)); return; } CryptoNote::WalletLegacyTransfer walletTransfer; walletTransfer.address = address.toStdString(); uint64_t amount = CurrencyAdapter::instance().parseAmount(transfer->getAmountString()); walletTransfer.amount = amount; walletTransfers.push_back(walletTransfer); QString label = transfer->getLabel(); if (!label.isEmpty()) { AddressBookModel::instance().addAddress(label, address); } } quint64 fee = CurrencyAdapter::instance().getMinimumFee(); if (WalletAdapter::instance().isOpen()) { WalletAdapter::instance().sendTransaction(walletTransfers, fee, m_ui->m_paymentIdEdit->text(), m_ui->m_mixinSlider->value()); } } void SendFrame::mixinValueChanged(int _value) { m_ui->m_mixinEdit->setText(QString::number(_value)); } void SendFrame::sendTransactionCompleted(CryptoNote::TransactionId _id, bool _error, const QString& _errorText) { Q_UNUSED(_id); if (_error) { QCoreApplication::postEvent( &MainWindow::instance(), new ShowMessageEvent(_errorText, QtCriticalMsg)); } else { clearAllClicked(); } } void SendFrame::walletActualBalanceUpdated(quint64 _balance) { m_ui->m_balanceLabel->setText(CurrencyAdapter::instance().formatAmount(_balance)); } }