mirror of
https://github.com/feather-wallet/feather.git
synced 2025-01-09 20:39:58 +00:00
BalanceDialog
This commit is contained in:
parent
f5255440e4
commit
a11dc3f4b2
9 changed files with 229 additions and 21 deletions
|
@ -796,13 +796,11 @@ void AppContext::updateBalance() {
|
||||||
if (!this->currentWallet)
|
if (!this->currentWallet)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AppContext::balance = this->currentWallet->balance() / globals::cdiv;
|
quint64 balance_u = this->currentWallet->balance();
|
||||||
auto balance_str = QString::number(balance, 'f');
|
AppContext::balance = balance_u / globals::cdiv;
|
||||||
|
double spendable = this->currentWallet->unlockedBalance();
|
||||||
|
|
||||||
double unlocked = this->currentWallet->unlockedBalance() / globals::cdiv;
|
emit balanceUpdated(balance_u, spendable);
|
||||||
auto unlocked_str = QString::number(unlocked, 'f');
|
|
||||||
|
|
||||||
emit balanceUpdated(balance, unlocked, balance_str, unlocked_str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppContext::syncStatusUpdated(quint64 height, quint64 target) {
|
void AppContext::syncStatusUpdated(quint64 height, quint64 target) {
|
||||||
|
|
|
@ -138,7 +138,7 @@ private slots:
|
||||||
void onConnectionStatusChanged(int status);
|
void onConnectionStatusChanged(int status);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void balanceUpdated(double balance, double unlocked, QString balance_str, QString unlocked_str);
|
void balanceUpdated(quint64 balance, quint64 spendable);
|
||||||
void blockchainSync(int height, int target);
|
void blockchainSync(int height, int target);
|
||||||
void refreshSync(int height, int target);
|
void refreshSync(int height, int target);
|
||||||
void synchronized();
|
void synchronized();
|
||||||
|
|
27
src/dialog/balancedialog.cpp
Normal file
27
src/dialog/balancedialog.cpp
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020, The Monero Project.
|
||||||
|
|
||||||
|
#include "balancedialog.h"
|
||||||
|
#include "ui_balancedialog.h"
|
||||||
|
|
||||||
|
#include "libwalletqt/WalletManager.h"
|
||||||
|
|
||||||
|
BalanceDialog::BalanceDialog(QWidget *parent, Wallet *wallet)
|
||||||
|
: QDialog(parent)
|
||||||
|
, ui(new Ui::BalanceDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
ui->label_unconfirmed_help->setHelpText("Outputs require 10 confirmations before they become spendable. "
|
||||||
|
"This will take 20 minutes on average.");
|
||||||
|
|
||||||
|
ui->label_unconfirmed->setText(WalletManager::displayAmount(wallet->balance() - wallet->unlockedBalance()));
|
||||||
|
ui->label_spendable->setText(WalletManager::displayAmount(wallet->unlockedBalance()));
|
||||||
|
ui->label_total->setText(WalletManager::displayAmount(wallet->balance()));
|
||||||
|
|
||||||
|
this->adjustSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
BalanceDialog::~BalanceDialog() {
|
||||||
|
delete ui;
|
||||||
|
}
|
27
src/dialog/balancedialog.h
Normal file
27
src/dialog/balancedialog.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020, The Monero Project.
|
||||||
|
|
||||||
|
#ifndef FEATHER_BALANCEDIALOG_H
|
||||||
|
#define FEATHER_BALANCEDIALOG_H
|
||||||
|
|
||||||
|
#include "libwalletqt/Wallet.h"
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class BalanceDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class BalanceDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit BalanceDialog(QWidget *parent, Wallet *wallet);
|
||||||
|
~BalanceDialog() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::BalanceDialog *ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //FEATHER_BALANCEDIALOG_H
|
142
src/dialog/balancedialog.ui
Normal file
142
src/dialog/balancedialog.ui
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>BalanceDialog</class>
|
||||||
|
<widget class="QDialog" name="BalanceDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>405</width>
|
||||||
|
<height>162</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Balance</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="HelpLabel" name="label_unconfirmed_help">
|
||||||
|
<property name="text">
|
||||||
|
<string>Unconfirmed</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="label_unconfirmed">
|
||||||
|
<property name="text">
|
||||||
|
<string>0.0</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_spendable_help">
|
||||||
|
<property name="text">
|
||||||
|
<string>Spendable</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="label_spendable">
|
||||||
|
<property name="text">
|
||||||
|
<string>0.0</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>Total</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLabel" name="label_total">
|
||||||
|
<property name="text">
|
||||||
|
<string>0.0</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>HelpLabel</class>
|
||||||
|
<extends>QLabel</extends>
|
||||||
|
<header>components.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>BalanceDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>BalanceDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
|
@ -21,12 +21,14 @@
|
||||||
#include "dialog/broadcasttxdialog.h"
|
#include "dialog/broadcasttxdialog.h"
|
||||||
#include "dialog/tximportdialog.h"
|
#include "dialog/tximportdialog.h"
|
||||||
#include "dialog/passworddialog.h"
|
#include "dialog/passworddialog.h"
|
||||||
|
#include "dialog/balancedialog.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
#include "utils/config.h"
|
#include "utils/config.h"
|
||||||
#include "utils/daemonrpc.h"
|
#include "utils/daemonrpc.h"
|
||||||
#include "components.h"
|
#include "components.h"
|
||||||
#include "calcwindow.h"
|
#include "calcwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
|
#include "globals.h"
|
||||||
|
|
||||||
// libwalletqt
|
// libwalletqt
|
||||||
#include "libwalletqt/WalletManager.h"
|
#include "libwalletqt/WalletManager.h"
|
||||||
|
@ -212,7 +214,6 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
||||||
connect(this, &MainWindow::walletClosed, ui->xmrToWidget, &XMRToWidget::onWalletClosed);
|
connect(this, &MainWindow::walletClosed, ui->xmrToWidget, &XMRToWidget::onWalletClosed);
|
||||||
connect(this, &MainWindow::walletClosed, ui->sendWidget, &SendWidget::onWalletClosed);
|
connect(this, &MainWindow::walletClosed, ui->sendWidget, &SendWidget::onWalletClosed);
|
||||||
connect(m_ctx, &AppContext::balanceUpdated, this, &MainWindow::onBalanceUpdated);
|
connect(m_ctx, &AppContext::balanceUpdated, this, &MainWindow::onBalanceUpdated);
|
||||||
connect(m_ctx, &AppContext::balanceUpdated, ui->xmrToWidget, &XMRToWidget::onBalanceUpdated);
|
|
||||||
connect(m_ctx, &AppContext::walletOpened, this, &MainWindow::onWalletOpened);
|
connect(m_ctx, &AppContext::walletOpened, this, &MainWindow::onWalletOpened);
|
||||||
connect(m_ctx, &AppContext::walletClosed, this, QOverload<>::of(&MainWindow::onWalletClosed));
|
connect(m_ctx, &AppContext::walletClosed, this, QOverload<>::of(&MainWindow::onWalletClosed));
|
||||||
connect(m_ctx, &AppContext::walletOpenedError, this, &MainWindow::onWalletOpenedError);
|
connect(m_ctx, &AppContext::walletOpenedError, this, &MainWindow::onWalletOpenedError);
|
||||||
|
@ -655,18 +656,18 @@ void MainWindow::onWalletOpened() {
|
||||||
m_updateBytes.start(100);
|
m_updateBytes.start(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onBalanceUpdated(double balance, double unlocked, const QString &balance_str, const QString &unlocked_str) {
|
void MainWindow::onBalanceUpdated(quint64 balance, quint64 spendable) {
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
bool hide = config()->get(Config::hideBalance).toBool();
|
bool hide = config()->get(Config::hideBalance).toBool();
|
||||||
|
|
||||||
auto label_str = QString("Balance: %1 XMR").arg(unlocked_str);
|
QString label_str = QString("Balance: %1 XMR").arg(QString::number(spendable / globals::cdiv, 'f'));
|
||||||
if(balance > unlocked)
|
if (balance > spendable)
|
||||||
label_str += QString(" (+%1 XMR unconfirmed)").arg(QString::number(balance - unlocked, 'f'));
|
label_str += QString(" (+%1 XMR unconfirmed)").arg(QString::number((balance - spendable) / globals::cdiv, 'f'));
|
||||||
|
|
||||||
if (hide) {
|
if (hide)
|
||||||
label_str = "Balance: HIDDEN";
|
label_str = "Balance: HIDDEN";
|
||||||
}
|
|
||||||
|
|
||||||
|
m_statusLabelBalance->setToolTip("Click for details");
|
||||||
m_statusLabelBalance->setText(label_str);
|
m_statusLabelBalance->setText(label_str);
|
||||||
m_balanceWidget->setHidden(hide);
|
m_balanceWidget->setHidden(hide);
|
||||||
}
|
}
|
||||||
|
@ -823,9 +824,11 @@ void MainWindow::create_status_bar() {
|
||||||
m_statusLabelNetStats->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
m_statusLabelNetStats->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
this->statusBar()->addWidget(m_statusLabelNetStats);
|
this->statusBar()->addWidget(m_statusLabelNetStats);
|
||||||
|
|
||||||
m_statusLabelBalance = new QLabel("Balance: 0.00 XMR", this);
|
m_statusLabelBalance = new ClickableLabel(this);
|
||||||
|
m_statusLabelBalance->setText("Balance: 0.00 XMR");
|
||||||
m_statusLabelBalance->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
m_statusLabelBalance->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
this->statusBar()->addPermanentWidget(m_statusLabelBalance);
|
this->statusBar()->addPermanentWidget(m_statusLabelBalance);
|
||||||
|
connect(m_statusLabelBalance, &ClickableLabel::clicked, this, &MainWindow::showBalanceDialog);
|
||||||
|
|
||||||
m_statusBtnConnectionStatusIndicator = new StatusBarButton(QIcon(":/assets/images/status_disconnected.svg"), "Connection status");
|
m_statusBtnConnectionStatusIndicator = new StatusBarButton(QIcon(":/assets/images/status_disconnected.svg"), "Connection status");
|
||||||
connect(m_statusBtnConnectionStatusIndicator, &StatusBarButton::clicked, this, &MainWindow::showConnectionStatusDialog);
|
connect(m_statusBtnConnectionStatusIndicator, &StatusBarButton::clicked, this, &MainWindow::showConnectionStatusDialog);
|
||||||
|
@ -1322,6 +1325,15 @@ void MainWindow::rescanSpent() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::showBalanceDialog() {
|
||||||
|
if (!m_ctx->currentWallet) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto *dialog = new BalanceDialog(this, m_ctx->currentWallet);
|
||||||
|
dialog->exec();
|
||||||
|
dialog->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
QString MainWindow::statusDots() {
|
QString MainWindow::statusDots() {
|
||||||
m_statusDots++;
|
m_statusDots++;
|
||||||
m_statusDots = m_statusDots % 4;
|
m_statusDots = m_statusDots % 4;
|
||||||
|
|
|
@ -133,7 +133,7 @@ public slots:
|
||||||
void loadSignedTxFromText();
|
void loadSignedTxFromText();
|
||||||
|
|
||||||
// libwalletqt
|
// libwalletqt
|
||||||
void onBalanceUpdated(double balance, double unlocked, const QString &balance_str, const QString &unlocked_str);
|
void onBalanceUpdated(quint64 balance, quint64 spendable);
|
||||||
void onSynchronized();
|
void onSynchronized();
|
||||||
void onWalletOpened();
|
void onWalletOpened();
|
||||||
void onWalletClosed();
|
void onWalletClosed();
|
||||||
|
@ -169,6 +169,7 @@ private:
|
||||||
void updateNetStats();
|
void updateNetStats();
|
||||||
void rescanSpent();
|
void rescanSpent();
|
||||||
void setStatusText(const QString &text);
|
void setStatusText(const QString &text);
|
||||||
|
void showBalanceDialog();
|
||||||
QString statusDots();
|
QString statusDots();
|
||||||
|
|
||||||
WalletWizard *createWizard(WalletWizard::Page startPage);
|
WalletWizard *createWizard(WalletWizard::Page startPage);
|
||||||
|
@ -192,7 +193,7 @@ private:
|
||||||
TickerWidget *m_balanceWidget;
|
TickerWidget *m_balanceWidget;
|
||||||
|
|
||||||
// lower status bar
|
// lower status bar
|
||||||
QLabel *m_statusLabelBalance;
|
ClickableLabel *m_statusLabelBalance;
|
||||||
QLabel *m_statusLabelStatus;
|
QLabel *m_statusLabelStatus;
|
||||||
QLabel *m_statusLabelNetStats;
|
QLabel *m_statusLabelNetStats;
|
||||||
StatusBarButton *m_statusBtnConnectionStatusIndicator;
|
StatusBarButton *m_statusBtnConnectionStatusIndicator;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "dialog/xmrtoinfodialog.h"
|
#include "dialog/xmrtoinfodialog.h"
|
||||||
#include "libwalletqt/WalletManager.h"
|
#include "libwalletqt/WalletManager.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "globals.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
@ -71,8 +72,8 @@ void XMRToWidget::setHistoryModel(XmrToModel *model) {
|
||||||
this->ui->historyTable->setModel(model);
|
this->ui->historyTable->setModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMRToWidget::onBalanceUpdated(double balance, double unlocked, const QString &balance_str, const QString &unlocked_str) {
|
void XMRToWidget::onBalanceUpdated(quint64 balance, quint64 spendable) {
|
||||||
this->m_unlockedBalance = unlocked;
|
this->m_unlockedBalance = spendable / globals::cdiv;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMRToWidget::onWalletClosed() {
|
void XMRToWidget::onWalletClosed() {
|
||||||
|
|
|
@ -30,7 +30,7 @@ public slots:
|
||||||
void onRatesUpdated(XmrToRates rates);
|
void onRatesUpdated(XmrToRates rates);
|
||||||
void onTorCheckBoxToggled(int state);
|
void onTorCheckBoxToggled(int state);
|
||||||
void onCreateOrder();
|
void onCreateOrder();
|
||||||
void onBalanceUpdated(double balance, double unlocked, const QString &balance_str, const QString &unlocked_str);
|
void onBalanceUpdated(quint64 balance, quint64 spendable);
|
||||||
void updateConversionLabel();
|
void updateConversionLabel();
|
||||||
|
|
||||||
void onInitiateTransaction();
|
void onInitiateTransaction();
|
||||||
|
|
Loading…
Reference in a new issue