Bitcoin Core 22.99.0
P2P Digital Currency
bitcoinunits.h
Go to the documentation of this file.
1// Copyright (c) 2011-2020 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_QT_BITCOINUNITS_H
6#define BITCOIN_QT_BITCOINUNITS_H
7
8#include <consensus/amount.h>
9
10#include <QAbstractListModel>
11#include <QString>
12
13// U+2009 THIN SPACE = UTF-8 E2 80 89
14#define REAL_THIN_SP_CP 0x2009
15#define REAL_THIN_SP_UTF8 "\xE2\x80\x89"
16
17// QMessageBox seems to have a bug whereby it doesn't display thin/hair spaces
18// correctly. Workaround is to display a space in a small font. If you
19// change this, please test that it doesn't cause the parent span to start
20// wrapping.
21#define HTML_HACK_SP "<span style='white-space: nowrap; font-size: 6pt'> </span>"
22
23// Define THIN_SP_* variables to be our preferred type of thin space
24#define THIN_SP_CP REAL_THIN_SP_CP
25#define THIN_SP_UTF8 REAL_THIN_SP_UTF8
26#define THIN_SP_HTML HTML_HACK_SP
27
31class BitcoinUnits: public QAbstractListModel
32{
33 Q_OBJECT
34
35public:
36 explicit BitcoinUnits(QObject *parent);
37
41 enum Unit
42 {
46 SAT
47 };
48
49 enum class SeparatorStyle
50 {
51 NEVER,
53 ALWAYS
54 };
55
59
61 static QList<Unit> availableUnits();
63 static bool valid(int unit);
65 static QString longName(int unit);
67 static QString shortName(int unit);
69 static QString description(int unit);
71 static qint64 factor(int unit);
73 static int decimals(int unit);
75 static QString format(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = SeparatorStyle::STANDARD, bool justify = false);
77 static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD);
79 static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD);
81 static QString formatWithPrivacy(int unit, const CAmount& amount, SeparatorStyle separators, bool privacy);
83 static bool parse(int unit, const QString &value, CAmount *val_out);
85 static QString getAmountColumnTitle(int unit);
87
91 enum RoleIndex {
93 UnitRole = Qt::UserRole
94 };
95 int rowCount(const QModelIndex &parent) const override;
96 QVariant data(const QModelIndex &index, int role) const override;
98
99 static QString removeSpaces(QString text)
100 {
101 text.remove(' ');
102 text.remove(QChar(THIN_SP_CP));
103 return text;
104 }
105
107 static CAmount maxMoney();
108
109private:
110 QList<BitcoinUnits::Unit> unitlist;
111};
113
114#endif // BITCOIN_QT_BITCOINUNITS_H
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
BitcoinUnits::Unit BitcoinUnit
Definition: bitcoinunits.h:112
#define THIN_SP_CP
Definition: bitcoinunits.h:24
Bitcoin unit definitions.
Definition: bitcoinunits.h:32
@ UnitRole
Unit identifier.
Definition: bitcoinunits.h:93
int rowCount(const QModelIndex &parent) const override
QList< BitcoinUnits::Unit > unitlist
Definition: bitcoinunits.h:110
static bool parse(int unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
static CAmount maxMoney()
Return maximum number of base units (Satoshis)
static int decimals(int unit)
Number of decimals left.
QVariant data(const QModelIndex &index, int role) const override
static QString formatHtmlWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as HTML string (with unit)
static QString formatWithPrivacy(int unit, const CAmount &amount, SeparatorStyle separators, bool privacy)
Format as string (with unit) of fixed length to preserve privacy, if it is set.
static bool valid(int unit)
Is unit ID valid?
static QString description(int unit)
Longer description.
static QString removeSpaces(QString text)
Definition: bitcoinunits.h:99
static QString longName(int unit)
Long name.
static QString formatWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as string (with unit)
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
static QString getAmountColumnTitle(int unit)
Gets title for amount column including current display unit if optionsModel reference available *‍/.
Unit
Bitcoin units.
Definition: bitcoinunits.h:42
BitcoinUnits(QObject *parent)
static qint64 factor(int unit)
Number of Satoshis (1e-8) per unit.
static QString format(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD, bool justify=false)
Format as string.
static QString shortName(int unit)
Short name.