Bitcoin Core  29.1.0
P2P Digital Currency
bitcoinunits.h
Go to the documentation of this file.
1 // Copyright (c) 2011-2021 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 <QDataStream>
12 #include <QString>
13 
14 // U+2009 THIN SPACE = UTF-8 E2 80 89
15 #define REAL_THIN_SP_CP 0x2009
16 #define REAL_THIN_SP_UTF8 "\xE2\x80\x89"
17 
18 // QMessageBox seems to have a bug whereby it doesn't display thin/hair spaces
19 // correctly. Workaround is to display a space in a small font. If you
20 // change this, please test that it doesn't cause the parent span to start
21 // wrapping.
22 #define HTML_HACK_SP "<span style='white-space: nowrap; font-size: 6pt'> </span>"
23 
24 // Define THIN_SP_* variables to be our preferred type of thin space
25 #define THIN_SP_CP REAL_THIN_SP_CP
26 #define THIN_SP_UTF8 REAL_THIN_SP_UTF8
27 #define THIN_SP_HTML HTML_HACK_SP
28 
32 class BitcoinUnits: public QAbstractListModel
33 {
34  Q_OBJECT
35 
36 public:
37  explicit BitcoinUnits(QObject *parent);
38 
42  enum class Unit {
43  BTC,
44  mBTC,
45  uBTC,
46  SAT
47  };
48  Q_ENUM(Unit)
49 
50  enum class SeparatorStyle
51  {
52  NEVER,
53  STANDARD,
54  ALWAYS
55  };
56 
60 
62  static QList<Unit> availableUnits();
64  static QString longName(Unit unit);
66  static QString shortName(Unit unit);
68  static QString description(Unit unit);
70  static qint64 factor(Unit unit);
72  static int decimals(Unit unit);
74  static QString format(Unit unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = SeparatorStyle::STANDARD, bool justify = false);
76  static QString formatWithUnit(Unit unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = SeparatorStyle::STANDARD);
78  static QString formatHtmlWithUnit(Unit unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = SeparatorStyle::STANDARD);
80  static QString formatWithPrivacy(Unit unit, const CAmount& amount, SeparatorStyle separators, bool privacy);
82  static bool parse(Unit unit, const QString& value, CAmount* val_out);
84  static QString getAmountColumnTitle(Unit unit);
86 
90  enum RoleIndex {
92  UnitRole = Qt::UserRole
93  };
94  int rowCount(const QModelIndex &parent) const override;
95  QVariant data(const QModelIndex &index, int role) const override;
97 
98  static QString removeSpaces(QString text)
99  {
100  text.remove(' ');
101  text.remove(QChar(THIN_SP_CP));
102  return text;
103  }
104 
106  static CAmount maxMoney();
107 
108 private:
109  QList<Unit> unitlist;
110 };
112 
113 QDataStream& operator<<(QDataStream& out, const BitcoinUnit& unit);
114 QDataStream& operator>>(QDataStream& in, BitcoinUnit& unit);
115 
116 #endif // BITCOIN_QT_BITCOINUNITS_H
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
Unit
Bitcoin units.
Definition: bitcoinunits.h:42
Bitcoin unit definitions.
Definition: bitcoinunits.h:32
QList< Unit > unitlist
Definition: bitcoinunits.h:109
BitcoinUnits::Unit BitcoinUnit
Definition: bitcoinunits.h:111
static QString description(Unit unit)
Longer description.
static bool parse(Unit unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
QDataStream & operator<<(QDataStream &out, const BitcoinUnit &unit)
static QString formatWithUnit(Unit unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as string (with unit)
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
static QString formatWithPrivacy(Unit unit, const CAmount &amount, SeparatorStyle separators, bool privacy)
Format as string (with unit) of fixed length to preserve privacy, if it is set.
BitcoinUnits(QObject *parent)
static QString format(Unit unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD, bool justify=false)
Format as string.
Unit identifier.
Definition: bitcoinunits.h:92
static int decimals(Unit unit)
Number of decimals left.
int rowCount(const QModelIndex &parent) const override
static QString removeSpaces(QString text)
Definition: bitcoinunits.h:98
QVariant data(const QModelIndex &index, int role) const override
QDataStream & operator>>(QDataStream &in, BitcoinUnit &unit)
static QString getAmountColumnTitle(Unit unit)
Gets title for amount column including current display unit if optionsModel reference available */...
static QString formatHtmlWithUnit(Unit unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as HTML string (with unit)
static QString shortName(Unit unit)
Short name.
static QString longName(Unit unit)
Long name.
#define THIN_SP_CP
Definition: bitcoinunits.h:25
static CAmount maxMoney()
Return maximum number of base units (Satoshis)
static qint64 factor(Unit unit)
Number of Satoshis (1e-8) per unit.