mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-11 05:03:16 +01:00
Implement SI-style (thin space) thoudands separator
This commit is contained in:
@@ -8,6 +8,37 @@
|
||||
#include <QAbstractListModel>
|
||||
#include <QString>
|
||||
|
||||
// U+2009 THIN SPACE = UTF-8 E2 80 89
|
||||
#define REAL_THIN_SP_CP 0x2009
|
||||
#define REAL_THIN_SP_UTF8 "\xE2\x80\x89"
|
||||
#define REAL_THIN_SP_HTML " "
|
||||
|
||||
// U+200A HAIR SPACE = UTF-8 E2 80 8A
|
||||
#define HAIR_SP_CP 0x200A
|
||||
#define HAIR_SP_UTF8 "\xE2\x80\x8A"
|
||||
#define HAIR_SP_HTML " "
|
||||
|
||||
// U+2006 SIX-PER-EM SPACE = UTF-8 E2 80 86
|
||||
#define SIXPEREM_SP_CP 0x2006
|
||||
#define SIXPEREM_SP_UTF8 "\xE2\x80\x86"
|
||||
#define SIXPEREM_SP_HTML " "
|
||||
|
||||
// U+2007 FIGURE SPACE = UTF-8 E2 80 87
|
||||
#define FIGURE_SP_CP 0x2007
|
||||
#define FIGURE_SP_UTF8 "\xE2\x80\x87"
|
||||
#define FIGURE_SP_HTML " "
|
||||
|
||||
// QMessageBox seems to have a bug whereby it doesn't display thin/hair spaces
|
||||
// correctly. Workaround is to display a space in a small font. If you
|
||||
// change this, please test that it doesn't cause the parent span to start
|
||||
// wrapping.
|
||||
#define HTML_HACK_SP "<span style='white-space: nowrap; font-size: 6pt'> </span>"
|
||||
|
||||
// Define THIN_SP_* variables to be our preferred type of thin space
|
||||
#define THIN_SP_CP REAL_THIN_SP_CP
|
||||
#define THIN_SP_UTF8 REAL_THIN_SP_UTF8
|
||||
#define THIN_SP_HTML HTML_HACK_SP
|
||||
|
||||
/** Bitcoin unit definitions. Encapsulates parsing and formatting
|
||||
and serves as list model for drop-down selection boxes.
|
||||
*/
|
||||
@@ -28,6 +59,13 @@ public:
|
||||
uBTC
|
||||
};
|
||||
|
||||
enum SeparatorStyle
|
||||
{
|
||||
separatorNever,
|
||||
separatorStandard,
|
||||
separatorAlways
|
||||
};
|
||||
|
||||
//! @name Static API
|
||||
//! Unit conversion and formatting
|
||||
///@{
|
||||
@@ -49,9 +87,10 @@ public:
|
||||
//! Number of decimals left
|
||||
static int decimals(int unit);
|
||||
//! Format as string
|
||||
static QString format(int unit, qint64 amount, bool plussign=false);
|
||||
static QString format(int unit, qint64 amount, bool plussign=false, SeparatorStyle separators=separatorStandard, bool fAlign=false);
|
||||
//! Format as string (with unit)
|
||||
static QString formatWithUnit(int unit, qint64 amount, bool plussign=false);
|
||||
static QString formatWithUnit(int unit, qint64 amount, bool plussign=false, SeparatorStyle separators=separatorStandard, bool fAlign=false);
|
||||
static QString formatHtmlWithUnit(int unit, qint64 amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||
//! Parse string to coin amount
|
||||
static bool parse(int unit, const QString &value, qint64 *val_out);
|
||||
///@}
|
||||
@@ -67,6 +106,16 @@ public:
|
||||
QVariant data(const QModelIndex &index, int role) const;
|
||||
///@}
|
||||
|
||||
static QString removeSpaces(QString text)
|
||||
{
|
||||
text.remove(' ');
|
||||
text.remove(QChar(THIN_SP_CP));
|
||||
#if (THIN_SP_CP != REAL_THIN_SP_CP)
|
||||
text.remove(QChar(REAL_THIN_SP_CP));
|
||||
#endif
|
||||
return text;
|
||||
}
|
||||
|
||||
private:
|
||||
QList<BitcoinUnits::Unit> unitlist;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user