PRCYCoin  2.0.0.7rc1
P2P Digital Currency
bitcoinunits.h
Go to the documentation of this file.
1 // Copyright (c) 2011-2014 The Bitcoin developers
2 // Copyright (c) 2014-2015 The Dash developers
3 // Copyright (c) 2015-2018 The PIVX developers
4 // Copyright (c) 2018-2020 The DAPS Project developers
5 // Distributed under the MIT/X11 software license, see the accompanying
6 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
7 
8 #ifndef BITCOIN_QT_BITCOINUNITS_H
9 #define BITCOIN_QT_BITCOINUNITS_H
10 
11 #include "amount.h"
12 
13 #include <QAbstractListModel>
14 #include <QString>
15 
16 // U+2009 THIN SPACE = UTF-8 E2 80 89
17 #define REAL_THIN_SP_CP 0x2009
18 #define REAL_THIN_SP_UTF8 "\xE2\x80\x89"
19 #define REAL_THIN_SP_HTML "&thinsp;"
20 
21 // U+200A HAIR SPACE = UTF-8 E2 80 8A
22 #define HAIR_SP_CP 0x200A
23 #define HAIR_SP_UTF8 "\xE2\x80\x8A"
24 #define HAIR_SP_HTML "&#8202;"
25 
26 // U+2006 SIX-PER-EM SPACE = UTF-8 E2 80 86
27 #define SIXPEREM_SP_CP 0x2006
28 #define SIXPEREM_SP_UTF8 "\xE2\x80\x86"
29 #define SIXPEREM_SP_HTML "&#8198;"
30 
31 // U+2007 FIGURE SPACE = UTF-8 E2 80 87
32 #define FIGURE_SP_CP 0x2007
33 #define FIGURE_SP_UTF8 "\xE2\x80\x87"
34 #define FIGURE_SP_HTML "&#8199;"
35 
36 // QMessageBox seems to have a bug whereby it doesn't display thin/hair spaces
37 // correctly. Workaround is to display a space in a small font. If you
38 // change this, please test that it doesn't cause the parent span to start
39 // wrapping.
40 #define HTML_HACK_SP "<span style='white-space: nowrap; font-size: 6pt'> </span>"
41 
42 // Define THIN_SP_* variables to be our preferred type of thin space
43 #define THIN_SP_CP REAL_THIN_SP_CP
44 #define THIN_SP_UTF8 REAL_THIN_SP_UTF8
45 #define THIN_SP_HTML HTML_HACK_SP
46 
50 class BitcoinUnits : public QAbstractListModel
51 {
52  Q_OBJECT
53 
54 public:
55  explicit BitcoinUnits(QObject* parent);
56 
60  enum Unit {
64  };
65 
70  };
71 
75 
77  static QList<Unit> availableUnits();
79  static bool valid(int unit);
81  static QString id(int unit);
83  static QString name(int unit);
85  static QString description(int unit);
87  static qint64 factor(int unit);
89  static int decimals(int unit);
91  static QString format(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = separatorStandard);
92  static QString simpleFormat(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = separatorStandard);
94  static QString formatWithUnit(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = separatorStandard);
95  static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = separatorStandard);
97  static QString floorWithUnit(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = separatorStandard);
98  static QString floorHtmlWithUnit(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = separatorStandard);
100  static bool parse(int unit, const QString& value, CAmount* val_out);
102  static QString getAmountColumnTitle(int unit);
104 
108  enum RoleIndex {
110  UnitRole = Qt::UserRole
111  };
112  int rowCount(const QModelIndex& parent) const;
113  QVariant data(const QModelIndex& index, int role) const;
115 
116  static QString removeSpaces(QString text)
117  {
118  text.remove(' ');
119  text.remove(QChar(THIN_SP_CP));
120 #if (THIN_SP_CP != REAL_THIN_SP_CP)
121  text.remove(QChar(REAL_THIN_SP_CP));
122 #endif
123  return text;
124  }
125 
127  static CAmount maxMoney();
128 
129 private:
130  QList<BitcoinUnits::Unit> unitlist;
131 };
133 
134 #endif // BITCOIN_QT_BITCOINUNITS_H
BitcoinUnits::RoleIndex
RoleIndex
Definition: bitcoinunits.h:108
BitcoinUnits::simpleFormat
static QString simpleFormat(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
BitcoinUnits::id
static QString id(int unit)
Identifier, e.g. for image names.
Definition: bitcoinunits.cpp:42
BitcoinUnits::rowCount
int rowCount(const QModelIndex &parent) const
Definition: bitcoinunits.cpp:263
BitcoinUnits::floorWithUnit
static QString floorWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Format as string (with unit) but floor value up to "digits" settings.
Definition: bitcoinunits.cpp:202
BitcoinUnits::decimals
static int decimals(int unit)
Number of decimals left.
Definition: bitcoinunits.cpp:126
BitcoinUnits::data
QVariant data(const QModelIndex &index, int role) const
Definition: bitcoinunits.cpp:269
BitcoinUnits::formatWithUnit
static QString formatWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Format as string (with unit)
Definition: bitcoinunits.cpp:190
REAL_THIN_SP_CP
#define REAL_THIN_SP_CP
Definition: bitcoinunits.h:17
BitcoinUnits::maxMoney
static CAmount maxMoney()
Return maximum number of base units (Satoshis)
Definition: bitcoinunits.cpp:287
BitcoinUnits::factor
static qint64 factor(int unit)
Number of Satoshis (1e-8) per unit.
Definition: bitcoinunits.cpp:112
BitcoinUnits::parse
static bool parse(int unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
Definition: bitcoinunits.cpp:220
BitcoinUnits::valid
static bool valid(int unit)
Is unit ID valid?
Definition: bitcoinunits.cpp:30
BitcoinUnits::description
static QString description(int unit)
Longer description.
Definition: bitcoinunits.cpp:84
BitcoinUnits::removeSpaces
static QString removeSpaces(QString text)
Definition: bitcoinunits.h:116
BitcoinUnits::availableUnits
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
Definition: bitcoinunits.cpp:21
THIN_SP_CP
#define THIN_SP_CP
Definition: bitcoinunits.h:43
BitcoinUnits::PRCY
@ PRCY
Definition: bitcoinunits.h:61
BitcoinUnits::unitlist
QList< BitcoinUnits::Unit > unitlist
Definition: bitcoinunits.h:130
BitcoinUnit
BitcoinUnits::Unit BitcoinUnit
Definition: bitcoinunits.h:132
BitcoinUnits
PRCY unit definitions.
Definition: bitcoinunits.h:50
CAmount
int64_t CAmount
Amount in PRCY (Can be negative)
Definition: amount.h:17
BitcoinUnits::SeparatorStyle
SeparatorStyle
Definition: bitcoinunits.h:66
BitcoinUnits::separatorStandard
@ separatorStandard
Definition: bitcoinunits.h:68
BitcoinUnits::format
static QString format(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Format as string.
Definition: bitcoinunits.cpp:140
BitcoinUnits::separatorAlways
@ separatorAlways
Definition: bitcoinunits.h:69
BitcoinUnits::getAmountColumnTitle
static QString getAmountColumnTitle(int unit)
Gets title for amount column including current display unit if optionsModel reference available *‍/.
Definition: bitcoinunits.cpp:254
BitcoinUnits::Unit
Unit
PRCY units.
Definition: bitcoinunits.h:60
BitcoinUnits::mPRCY
@ mPRCY
Definition: bitcoinunits.h:62
BitcoinUnits::formatHtmlWithUnit
static QString formatHtmlWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Definition: bitcoinunits.cpp:195
BitcoinUnits::uPRCY
@ uPRCY
Definition: bitcoinunits.h:63
BitcoinUnits::floorHtmlWithUnit
static QString floorHtmlWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Definition: bitcoinunits.cpp:213
BitcoinUnits::name
static QString name(int unit)
Short name.
Definition: bitcoinunits.cpp:56
BitcoinUnits::BitcoinUnits
BitcoinUnits(QObject *parent)
Definition: bitcoinunits.cpp:16
amount.h
BitcoinUnits::UnitRole
@ UnitRole
Unit identifier.
Definition: bitcoinunits.h:110
BitcoinUnits::separatorNever
@ separatorNever
Definition: bitcoinunits.h:67