mirror of
https://github.com/dashpay/dash.git
synced 2024-12-28 05:23:01 +01:00
Configurable decimal digits
This commit is contained in:
parent
3d787e9273
commit
ee167ad2f3
@ -7,6 +7,7 @@
|
|||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
BitcoinUnits::BitcoinUnits(QObject *parent):
|
BitcoinUnits::BitcoinUnits(QObject *parent):
|
||||||
@ -177,6 +178,43 @@ QString BitcoinUnits::format(int unit, const CAmount& nIn, bool fPlus, Separator
|
|||||||
// Please take care to use formatHtmlWithUnit instead, when
|
// Please take care to use formatHtmlWithUnit instead, when
|
||||||
// appropriate.
|
// appropriate.
|
||||||
|
|
||||||
|
QString BitcoinUnits::simpleFormat(int unit, const CAmount& nIn, bool fPlus, SeparatorStyle separators)
|
||||||
|
{
|
||||||
|
// Note: not using straight sprintf here because we do NOT want
|
||||||
|
// localized number formatting.
|
||||||
|
if(!valid(unit))
|
||||||
|
return QString(); // Refuse to format invalid unit
|
||||||
|
qint64 n = (qint64)nIn;
|
||||||
|
qint64 coin = factor(unit);
|
||||||
|
int num_decimals = decimals(unit);
|
||||||
|
qint64 n_abs = (n > 0 ? n : -n);
|
||||||
|
qint64 quotient = n_abs / coin;
|
||||||
|
qint64 remainder = n_abs % coin;
|
||||||
|
QString quotient_str = QString::number(quotient);
|
||||||
|
QString remainder_str = QString::number(remainder).rightJustified(num_decimals, '0');
|
||||||
|
|
||||||
|
if (n < 0)
|
||||||
|
quotient_str.insert(0, '-');
|
||||||
|
else if (fPlus && n > 0)
|
||||||
|
quotient_str.insert(0, '+');
|
||||||
|
|
||||||
|
return quotient_str + QString(".") + remainder_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString BitcoinUnits::roundWithUnit(int unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
int digits = settings.value("digits").toInt();
|
||||||
|
|
||||||
|
QString result = simpleFormat(unit, amount, plussign);
|
||||||
|
double dAmount = result.toDouble();
|
||||||
|
|
||||||
|
QString rounded;
|
||||||
|
rounded.setNum(dAmount, 'f', digits);
|
||||||
|
|
||||||
|
return rounded + QString(" ") + name(unit);
|
||||||
|
}
|
||||||
|
|
||||||
QString BitcoinUnits::formatWithUnit(int unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
|
QString BitcoinUnits::formatWithUnit(int unit, const CAmount& amount, bool plussign, SeparatorStyle separators)
|
||||||
{
|
{
|
||||||
return format(unit, amount, plussign, separators) + QString(" ") + name(unit);
|
return format(unit, amount, plussign, separators) + QString(" ") + name(unit);
|
||||||
|
@ -90,8 +90,10 @@ public:
|
|||||||
static int decimals(int unit);
|
static int decimals(int unit);
|
||||||
//! Format as string
|
//! Format as string
|
||||||
static QString format(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
static QString format(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
|
static QString simpleFormat(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
//! Format as string (with unit)
|
//! Format as string (with unit)
|
||||||
static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
|
static QString roundWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
//! Parse string to coin amount
|
//! Parse string to coin amount
|
||||||
static bool parse(int unit, const QString &value, CAmount *val_out);
|
static bool parse(int unit, const QString &value, CAmount *val_out);
|
||||||
|
@ -524,6 +524,20 @@ https://www.transifex.com/projects/p/dash/</string>
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5_Display">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="digitsLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Decimal digits</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QValueComboBox" name="digits"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3_Display">
|
<layout class="QHBoxLayout" name="horizontalLayout_3_Display">
|
||||||
<item>
|
<item>
|
||||||
|
@ -74,6 +74,13 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
|
|||||||
|
|
||||||
/* Display elements init */
|
/* Display elements init */
|
||||||
|
|
||||||
|
/* Number of displayed decimal digits selector */
|
||||||
|
QString digits;
|
||||||
|
for(int index = 2; index <=8; index++){
|
||||||
|
digits.setNum(index);
|
||||||
|
ui->digits->addItem(digits, digits);
|
||||||
|
}
|
||||||
|
|
||||||
/* Theme selector */
|
/* Theme selector */
|
||||||
ui->theme->addItem(QString("DASH-blue"), QVariant("drkblue"));
|
ui->theme->addItem(QString("DASH-blue"), QVariant("drkblue"));
|
||||||
ui->theme->addItem(QString("DASH-traditional"), QVariant("trad"));
|
ui->theme->addItem(QString("DASH-traditional"), QVariant("trad"));
|
||||||
@ -160,6 +167,7 @@ void OptionsDialog::setModel(OptionsModel *model)
|
|||||||
connect(ui->allowIncoming, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning()));
|
connect(ui->allowIncoming, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning()));
|
||||||
connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning()));
|
connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning()));
|
||||||
/* Display */
|
/* Display */
|
||||||
|
connect(ui->digits, SIGNAL(valueChanged()), this, SLOT(showRestartWarning()));
|
||||||
connect(ui->theme, SIGNAL(valueChanged()), this, SLOT(showRestartWarning()));
|
connect(ui->theme, SIGNAL(valueChanged()), this, SLOT(showRestartWarning()));
|
||||||
connect(ui->lang, SIGNAL(valueChanged()), this, SLOT(showRestartWarning()));
|
connect(ui->lang, SIGNAL(valueChanged()), this, SLOT(showRestartWarning()));
|
||||||
connect(ui->thirdPartyTxUrls, SIGNAL(textChanged(const QString &)), this, SLOT(showRestartWarning()));
|
connect(ui->thirdPartyTxUrls, SIGNAL(textChanged(const QString &)), this, SLOT(showRestartWarning()));
|
||||||
@ -191,6 +199,8 @@ void OptionsDialog::setMapper()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Display */
|
/* Display */
|
||||||
|
mapper->addMapping(ui->digits, OptionsModel::Digits);
|
||||||
|
mapper->addMapping(ui->theme, OptionsModel::Theme);
|
||||||
mapper->addMapping(ui->theme, OptionsModel::Theme);
|
mapper->addMapping(ui->theme, OptionsModel::Theme);
|
||||||
mapper->addMapping(ui->lang, OptionsModel::Language);
|
mapper->addMapping(ui->lang, OptionsModel::Language);
|
||||||
mapper->addMapping(ui->unit, OptionsModel::DisplayUnit);
|
mapper->addMapping(ui->unit, OptionsModel::DisplayUnit);
|
||||||
|
@ -128,6 +128,8 @@ void OptionsModel::Init()
|
|||||||
addOverriddenOption("-proxy");
|
addOverriddenOption("-proxy");
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
|
if (!settings.contains("digits"))
|
||||||
|
settings.setValue("digits", "2");
|
||||||
if (!settings.contains("theme"))
|
if (!settings.contains("theme"))
|
||||||
settings.setValue("theme", "");
|
settings.setValue("theme", "");
|
||||||
if (!settings.contains("language"))
|
if (!settings.contains("language"))
|
||||||
@ -203,6 +205,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
|
|||||||
return nDisplayUnit;
|
return nDisplayUnit;
|
||||||
case ThirdPartyTxUrls:
|
case ThirdPartyTxUrls:
|
||||||
return strThirdPartyTxUrls;
|
return strThirdPartyTxUrls;
|
||||||
|
case Digits:
|
||||||
|
return settings.value("digits");
|
||||||
case Theme:
|
case Theme:
|
||||||
return settings.value("theme");
|
return settings.value("theme");
|
||||||
case Language:
|
case Language:
|
||||||
@ -300,6 +304,12 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
|
|||||||
setRestartRequired(true);
|
setRestartRequired(true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Digits:
|
||||||
|
if (settings.value("digits") != value) {
|
||||||
|
settings.setValue("digits", value);
|
||||||
|
setRestartRequired(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case Theme:
|
case Theme:
|
||||||
if (settings.value("theme") != value) {
|
if (settings.value("theme") != value) {
|
||||||
settings.setValue("theme", value);
|
settings.setValue("theme", value);
|
||||||
|
@ -36,6 +36,7 @@ public:
|
|||||||
ProxyPort, // int
|
ProxyPort, // int
|
||||||
DisplayUnit, // BitcoinUnits::Unit
|
DisplayUnit, // BitcoinUnits::Unit
|
||||||
ThirdPartyTxUrls, // QString
|
ThirdPartyTxUrls, // QString
|
||||||
|
Digits, // QString
|
||||||
Theme, // QString
|
Theme, // QString
|
||||||
Language, // QString
|
Language, // QString
|
||||||
CoinControlFeatures, // bool
|
CoinControlFeatures, // bool
|
||||||
|
@ -186,15 +186,15 @@ void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmed
|
|||||||
currentWatchOnlyBalance = watchOnlyBalance;
|
currentWatchOnlyBalance = watchOnlyBalance;
|
||||||
currentWatchUnconfBalance = watchUnconfBalance;
|
currentWatchUnconfBalance = watchUnconfBalance;
|
||||||
currentWatchImmatureBalance = watchImmatureBalance;
|
currentWatchImmatureBalance = watchImmatureBalance;
|
||||||
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, balance, false, BitcoinUnits::separatorAlways));
|
ui->labelBalance->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, balance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, unconfirmedBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelUnconfirmed->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, unconfirmedBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelImmature->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, immatureBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelImmature->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, immatureBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelAnonymized->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, anonymizedBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelAnonymized->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, anonymizedBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelTotal->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, balance + unconfirmedBalance + immatureBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelTotal->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, balance + unconfirmedBalance + immatureBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelWatchAvailable->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, watchOnlyBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelWatchAvailable->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, watchOnlyBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, watchUnconfBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelWatchPending->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, watchUnconfBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelWatchImmature->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, watchImmatureBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelWatchImmature->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, watchImmatureBalance, false, BitcoinUnits::separatorAlways));
|
||||||
ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, watchOnlyBalance + watchUnconfBalance + watchImmatureBalance, false, BitcoinUnits::separatorAlways));
|
ui->labelWatchTotal->setText(BitcoinUnits::roundWithUnit(nDisplayUnit, watchOnlyBalance + watchUnconfBalance + watchImmatureBalance, false, BitcoinUnits::separatorAlways));
|
||||||
|
|
||||||
// only show immature (newly mined) balance if it's non-zero, so as not to complicate things
|
// only show immature (newly mined) balance if it's non-zero, so as not to complicate things
|
||||||
// for the non-mining users
|
// for the non-mining users
|
||||||
|
Loading…
Reference in New Issue
Block a user