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 <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 
31 class BitcoinUnits: public QAbstractListModel
32 {
33  Q_OBJECT
34 
35 public:
36  explicit BitcoinUnits(QObject *parent);
37 
41  enum Unit
42  {
43  BTC,
47  };
48 
49  enum class SeparatorStyle
50  {
51  NEVER,
52  STANDARD,
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 
109 private:
110  QList<BitcoinUnits::Unit> unitlist;
111 };
113 
114 #endif // BITCOIN_QT_BITCOINUNITS_H
BitcoinUnits::RoleIndex
RoleIndex
Definition: bitcoinunits.h:91
BitcoinUnits::SeparatorStyle::NEVER
@ NEVER
BitcoinUnits::decimals
static int decimals(int unit)
Number of decimals left.
Definition: bitcoinunits.cpp:89
BitcoinUnits::formatWithUnit
static QString formatWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as string (with unit)
Definition: bitcoinunits.cpp:148
BitcoinUnits::maxMoney
static CAmount maxMoney()
Return maximum number of base units (Satoshis)
Definition: bitcoinunits.cpp:247
BitcoinUnits::formatHtmlWithUnit
static QString formatHtmlWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as HTML string (with unit)
Definition: bitcoinunits.cpp:153
BitcoinUnits::factor
static qint64 factor(int unit)
Number of Satoshis (1e-8) per unit.
Definition: bitcoinunits.cpp:77
BitcoinUnits::parse
static bool parse(int unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
Definition: bitcoinunits.cpp:172
BitcoinUnits::valid
static bool valid(int unit)
Is unit ID valid?
Definition: bitcoinunits.cpp:29
BitcoinUnits::description
static QString description(int unit)
Longer description.
Definition: bitcoinunits.cpp:65
BitcoinUnits::removeSpaces
static QString removeSpaces(QString text)
Definition: bitcoinunits.h:99
BitcoinUnits::mBTC
@ mBTC
Definition: bitcoinunits.h:44
BitcoinUnits::availableUnits
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
Definition: bitcoinunits.cpp:19
THIN_SP_CP
#define THIN_SP_CP
Definition: bitcoinunits.h:24
BitcoinUnits::unitlist
QList< BitcoinUnits::Unit > unitlist
Definition: bitcoinunits.h:110
BitcoinUnit
BitcoinUnits::Unit BitcoinUnit
Definition: bitcoinunits.h:112
BitcoinUnits
Bitcoin unit definitions.
Definition: bitcoinunits.h:31
CAmount
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
BitcoinUnits::SeparatorStyle
SeparatorStyle
Definition: bitcoinunits.h:49
BitcoinUnits::uBTC
@ uBTC
Definition: bitcoinunits.h:45
BitcoinUnits::longName
static QString longName(int unit)
Long name.
Definition: bitcoinunits.cpp:43
BitcoinUnits::rowCount
int rowCount(const QModelIndex &parent) const override
Definition: bitcoinunits.cpp:221
BitcoinUnits::data
QVariant data(const QModelIndex &index, int role) const override
Definition: bitcoinunits.cpp:227
BitcoinUnits::SeparatorStyle::ALWAYS
@ ALWAYS
BitcoinUnits::getAmountColumnTitle
static QString getAmountColumnTitle(int unit)
Gets title for amount column including current display unit if optionsModel reference available *‍/.
Definition: bitcoinunits.cpp:211
BitcoinUnits::Unit
Unit
Bitcoin units.
Definition: bitcoinunits.h:41
BitcoinUnits::SAT
@ SAT
Definition: bitcoinunits.h:46
BitcoinUnits::shortName
static QString shortName(int unit)
Short name.
Definition: bitcoinunits.cpp:55
BitcoinUnits::formatWithPrivacy
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.
Definition: bitcoinunits.cpp:160
BitcoinUnits::BitcoinUnits
BitcoinUnits(QObject *parent)
Definition: bitcoinunits.cpp:13
amount.h
BitcoinUnits::UnitRole
@ UnitRole
Unit identifier.
Definition: bitcoinunits.h:93
BitcoinUnits::SeparatorStyle::STANDARD
@ STANDARD
BitcoinUnits::BTC
@ BTC
Definition: bitcoinunits.h:43
BitcoinUnits::format
static QString format(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD, bool justify=false)
Format as string.
Definition: bitcoinunits.cpp:101