From 51a0f866523af40a04ae1a115776adcd26a87831 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Wed, 21 Oct 2020 16:52:34 +0200 Subject: [PATCH 1/2] Move cdiv to globals.h --- src/appcontext.cpp | 21 +++++++++++---------- src/appcontext.h | 1 - src/dialog/txconfdialog.cpp | 7 ++++--- src/globals.h | 14 ++++++++++++++ src/model/TransactionHistoryModel.cpp | 3 ++- src/utils/xmrtoorder.cpp | 5 +++-- 6 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 src/globals.h diff --git a/src/appcontext.cpp b/src/appcontext.cpp index e2826a3..3870c2d 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -9,12 +9,14 @@ #include #include "appcontext.h" +#include "globals.h" #include "utils/tails.h" #include "utils/whonix.h" #include "utils/utils.h" #include "utils/prices.h" #include "utils/networktype.h" #include "utils/wsclient.h" +#include "utils/config.h" // libwalletqt #include "libwalletqt/WalletManager.h" @@ -28,7 +30,6 @@ #include "model/SubaddressModel.h" #include "utils/keysfiles.h" #include "utils/networktype.h" -#include "utils/config.h" Prices *AppContext::prices = nullptr; @@ -195,7 +196,7 @@ void AppContext::initWS() { void AppContext::onCancelTransaction(PendingTransaction *tx, const QString &address) { // tx cancelled by user - double amount = tx->amount() / AppContext::cdiv; + double amount = tx->amount() / globals::cdiv; emit createTransactionCancelled(address, amount); this->currentWallet->disposeTransaction(tx); } @@ -234,8 +235,8 @@ void AppContext::onCreateTransaction(const QString &address, const double amount return; } - auto balance = this->currentWallet->balance() / AppContext::cdiv; - auto unlocked_balance = this->currentWallet->unlockedBalance() / AppContext::cdiv; + auto balance = this->currentWallet->balance() / globals::cdiv; + auto unlocked_balance = this->currentWallet->unlockedBalance() / globals::cdiv; if(!all && amount > unlocked_balance) { emit createTransactionError("Not enough money to spend"); return; @@ -244,7 +245,7 @@ void AppContext::onCreateTransaction(const QString &address, const double amount return; } - auto amount_num = static_cast(amount * AppContext::cdiv); + auto amount_num = static_cast(amount * globals::cdiv); qDebug() << "creating tx"; if(all || amount == balance) this->currentWallet->createTransactionAllAsync(address, "", this->tx_mixin, this->tx_priority); @@ -691,19 +692,19 @@ AppContext::~AppContext() { // ############################################## LIBWALLET QT ######################################################### void AppContext::onMoneySpent(const QString &txId, quint64 amount) { - auto amount_num = amount / AppContext::cdiv; + auto amount_num = amount / globals::cdiv; qDebug() << Q_FUNC_INFO << txId << " " << QString::number(amount_num); } void AppContext::onMoneyReceived(const QString &txId, quint64 amount) { // Incoming tx included in a block. - auto amount_num = amount / AppContext::cdiv; + auto amount_num = amount / globals::cdiv; qDebug() << Q_FUNC_INFO << txId << " " << QString::number(amount_num); } void AppContext::onUnconfirmedMoneyReceived(const QString &txId, quint64 amount) { // Incoming transaction in pool - auto amount_num = amount / AppContext::cdiv; + auto amount_num = amount / globals::cdiv; qDebug() << Q_FUNC_INFO << txId << " " << QString::number(amount_num); if(this->currentWallet->synchronized()) { @@ -792,10 +793,10 @@ void AppContext::updateBalance() { if(!this->currentWallet) throw std::runtime_error("this should not happen, ever"); - AppContext::balance = this->currentWallet->balance() / AppContext::cdiv; + AppContext::balance = this->currentWallet->balance() / globals::cdiv; auto balance_str = QString::number(balance, 'f'); - double unlocked = this->currentWallet->unlockedBalance() / AppContext::cdiv; + double unlocked = this->currentWallet->unlockedBalance() / globals::cdiv; auto unlocked_str = QString::number(unlocked, 'f'); emit balanceUpdated(balance, unlocked, balance_str, unlocked_str); diff --git a/src/appcontext.h b/src/appcontext.h index dd9057c..cdf7160 100644 --- a/src/appcontext.h +++ b/src/appcontext.h @@ -69,7 +69,6 @@ public: const unsigned int kdfRounds = 1; PendingTransaction::Priority tx_priority = PendingTransaction::Priority::Priority_Low; quint32 tx_mixin = static_cast(10); - static constexpr const double cdiv = 1e12; QString seedLanguage = "English"; // 14 word `monero-seed` only has English QNetworkAccessManager *network; diff --git a/src/dialog/txconfdialog.cpp b/src/dialog/txconfdialog.cpp index 0724a98..7bb9a11 100644 --- a/src/dialog/txconfdialog.cpp +++ b/src/dialog/txconfdialog.cpp @@ -8,6 +8,7 @@ #include "model/ModelUtils.h" #include "libwalletqt/WalletManager.h" #include "txconfadvdialog.h" +#include "globals.h" #include @@ -31,15 +32,15 @@ TxConfDialog::TxConfDialog(AppContext *ctx, PendingTransaction *tx, const QStrin }; QString amount = WalletManager::displayAmount(tx->amount()); - QString amount_fiat = convert(tx->amount() / AppContext::cdiv); + QString amount_fiat = convert(tx->amount() / globals::cdiv); ui->label_amount->setText(QString("%1 (%2 %3)").arg(amount, amount_fiat, preferredCur)); QString fee = WalletManager::displayAmount(tx->fee()); - QString fee_fiat = convert(tx->fee() / AppContext::cdiv); + QString fee_fiat = convert(tx->fee() / globals::cdiv); ui->label_fee->setText(QString("%1 (%2 %3)").arg(fee, fee_fiat, preferredCur)); QString total = WalletManager::displayAmount(tx->amount() + tx->fee()); - QString total_fiat = convert((tx->amount() + tx->fee()) / AppContext::cdiv); + QString total_fiat = convert((tx->amount() + tx->fee()) / globals::cdiv); ui->label_total->setText(QString("%1 (%2 %3)").arg(total, total_fiat, preferredCur)); ui->label_address->setText(ModelUtils::displayAddress(address, 2)); diff --git a/src/globals.h b/src/globals.h new file mode 100644 index 0000000..d3e01cd --- /dev/null +++ b/src/globals.h @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) 2020, The Monero Project. + +#ifndef FEATHER_GLOBALS_H +#define FEATHER_GLOBALS_H + +#include + +namespace globals +{ + const qreal cdiv = 1e12; +} + +#endif //FEATHER_GLOBALS_H diff --git a/src/model/TransactionHistoryModel.cpp b/src/model/TransactionHistoryModel.cpp index 6819e04..969dae7 100644 --- a/src/model/TransactionHistoryModel.cpp +++ b/src/model/TransactionHistoryModel.cpp @@ -4,6 +4,7 @@ #include "TransactionHistoryModel.h" #include "TransactionHistory.h" #include "TransactionInfo.h" +#include "globals.h" #include #include @@ -151,7 +152,7 @@ QVariant TransactionHistoryModel::parseTransactionInfo(const TransactionInfo &tI } case Column::Amount: { - QString amount = QString::number(tInfo.atomicAmount() / 1e12, 'f', 4); + QString amount = QString::number(tInfo.atomicAmount() / globals::cdiv, 'f', 4); amount = (tInfo.direction() == TransactionInfo::Direction_Out && tInfo.amount() > 0) ? "-" + amount : "+" + amount; return amount; } diff --git a/src/utils/xmrtoorder.cpp b/src/utils/xmrtoorder.cpp index b5556d6..6adef58 100644 --- a/src/utils/xmrtoorder.cpp +++ b/src/utils/xmrtoorder.cpp @@ -7,6 +7,7 @@ #include "libwalletqt/Wallet.h" #include "appcontext.h" +#include "globals.h" #include "utils/xmrto.h" XmrToOrder::XmrToOrder(AppContext *ctx, UtilsNetworking *network, QString baseUrl, bool clearnet, XmrToRates *rates, QObject *parent) : @@ -38,7 +39,7 @@ void XmrToOrder::onTransactionCancelled(const QString &address, double amount) { void XmrToOrder::onTransactionCommitted(bool status, PendingTransaction *tx, const QStringList& txid) { // listener for all outgoing transactions - will try to match the exact amount to this order. if(this->state == OrderState::Status_OrderUnpaid){ - if(tx->amount() / AppContext::cdiv == this->incoming_amount_total) { + if(tx->amount() / globals::cdiv == this->incoming_amount_total) { if(!status) { this->errorMsg = "TX failed to commit"; this->changeState(OrderState::Status_OrderFailed); @@ -221,7 +222,7 @@ void XmrToOrder::changeState(OrderState _state) { case OrderState::Status_OrderUnpaid: // need to send Monero if(!m_paymentRequested) { - auto unlocked_balance = m_ctx->currentWallet->unlockedBalance() / AppContext::cdiv; + auto unlocked_balance = m_ctx->currentWallet->unlockedBalance() / globals::cdiv; if (this->incoming_amount_total >= unlocked_balance) { this->state = OrderState::Status_OrderFailed; emit orderFailed(this); From 9b7849c5be87002f63ed055d86ad96ea5a2eb525 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Wed, 21 Oct 2020 16:53:17 +0200 Subject: [PATCH 2/2] Coins: numerical sort for amount column --- src/coinswidget.cpp | 15 ++++++++------- src/model/CoinsModel.cpp | 9 +++++++-- src/model/CoinsProxyModel.cpp | 1 + 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/coinswidget.cpp b/src/coinswidget.cpp index 21b5719..a9a81c9 100644 --- a/src/coinswidget.cpp +++ b/src/coinswidget.cpp @@ -42,14 +42,14 @@ CoinsWidget::CoinsWidget(QWidget *parent) // context menu ui->coins->setContextMenuPolicy(Qt::CustomContextMenu); - m_thawOutputAction = new QAction("Thaw output"); - m_freezeOutputAction = new QAction("Freeze output"); + m_thawOutputAction = new QAction("Thaw output", this); + m_freezeOutputAction = new QAction("Freeze output", this); - m_freezeAllSelectedAction = new QAction("Freeze selected"); - m_thawAllSelectedAction = new QAction("Thaw selected"); + m_freezeAllSelectedAction = new QAction("Freeze selected", this); + m_thawAllSelectedAction = new QAction("Thaw selected", this); - m_viewOutputAction = new QAction(QIcon(":/assets/images/info.png"), "Details"); - m_sweepOutputAction = new QAction("Sweep output"); + m_viewOutputAction = new QAction(QIcon(":/assets/images/info.png"), "Details", this); + m_sweepOutputAction = new QAction("Sweep output", this); connect(m_freezeOutputAction, &QAction::triggered, this, &CoinsWidget::freezeOutput); connect(m_thawOutputAction, &QAction::triggered, this, &CoinsWidget::thawOutput); connect(m_viewOutputAction, &QAction::triggered, this, &CoinsWidget::viewOutput); @@ -65,7 +65,7 @@ CoinsWidget::CoinsWidget(QWidget *parent) void CoinsWidget::setModel(CoinsModel * model, Coins * coins) { m_coins = coins; m_model = model; - m_proxyModel = new CoinsProxyModel; + m_proxyModel = new CoinsProxyModel(this); m_proxyModel->setSourceModel(m_model); ui->coins->setModel(m_proxyModel); ui->coins->setColumnHidden(CoinsModel::Spent, true); @@ -202,6 +202,7 @@ void CoinsWidget::onSweepOutput() { qCritical() << "key image: " << keyImage; emit sweepOutput(keyImage, dialog->address(), dialog->churn(), dialog->outputs()); + dialog->deleteLater(); } void CoinsWidget::copy(copyField field) { diff --git a/src/model/CoinsModel.cpp b/src/model/CoinsModel.cpp index 04b6046..dba92e2 100644 --- a/src/model/CoinsModel.cpp +++ b/src/model/CoinsModel.cpp @@ -6,6 +6,7 @@ #include "Coins.h" #include #include "ModelUtils.h" +#include "globals.h" #include #include @@ -190,10 +191,14 @@ QVariant CoinsModel::parseTransactionInfo(const CoinsInfo &cInfo, int column, in case SpentHeight: return cInfo.spentHeight(); case Amount: - return QString::number(cInfo.amount() / 1e12, 'f', 12); + { + if (role == Qt::UserRole) { + return cInfo.amount() / globals::cdiv; + } + return QString::number(cInfo.amount() / globals::cdiv, 'f', 12); + } case Frozen: return cInfo.frozen(); - default: { qCritical() << "Unimplemented role"; diff --git a/src/model/CoinsProxyModel.cpp b/src/model/CoinsProxyModel.cpp index b9ffd8f..5bf65b9 100644 --- a/src/model/CoinsProxyModel.cpp +++ b/src/model/CoinsProxyModel.cpp @@ -7,6 +7,7 @@ CoinsProxyModel::CoinsProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { + setSortRole(Qt::UserRole); } bool CoinsProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const