lbrycrd/src/qt/bitcoinunits.h

129 lines
3.9 KiB
C
Raw Normal View History

2015-12-13 17:58:29 +01:00
// Copyright (c) 2011-2015 The Bitcoin Core developers
2014-12-13 05:09:33 +01:00
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
2014-11-03 16:16:40 +01:00
#ifndef BITCOIN_QT_BITCOINUNITS_H
#define BITCOIN_QT_BITCOINUNITS_H
2014-04-23 00:46:19 +02:00
#include "amount.h"
#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 "&thinsp;"
// 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 "&#8202;"
// 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 "&#8198;"
// 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 "&#8199;"
// 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
2011-11-13 13:19:52 +01:00
/** Bitcoin unit definitions. Encapsulates parsing and formatting
2012-07-26 02:48:39 +02:00
and serves as list model for drop-down selection boxes.
2011-11-13 13:19:52 +01:00
*/
class BitcoinUnits: public QAbstractListModel
{
Q_OBJECT
public:
explicit BitcoinUnits(QObject *parent);
2011-11-13 13:19:52 +01:00
/** Bitcoin units.
@note Source: https://en.bitcoin.it/wiki/Units . Please add only sensible ones
*/
enum Unit
{
BTC,
mBTC,
uBTC
};
enum SeparatorStyle
{
separatorNever,
separatorStandard,
separatorAlways
};
2011-11-13 13:19:52 +01:00
//! @name Static API
//! Unit conversion and formatting
///@{
2012-07-26 02:48:39 +02:00
//! Get list of units, for drop-down box
static QList<Unit> availableUnits();
2011-11-13 13:19:52 +01:00
//! Is unit ID valid?
static bool valid(int unit);
2011-11-13 13:19:52 +01:00
//! Short name
static QString name(int unit);
2011-11-13 13:19:52 +01:00
//! Longer description
static QString description(int unit);
2011-11-13 13:19:52 +01:00
//! Number of Satoshis (1e-8) per unit
static qint64 factor(int unit);
2011-11-13 13:19:52 +01:00
//! Number of decimals left
static int decimals(int unit);
2011-11-13 13:19:52 +01:00
//! Format as string
2014-04-23 00:46:19 +02:00
static QString format(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
2011-11-13 13:19:52 +01:00
//! Format as string (with unit)
2014-04-23 00:46:19 +02:00
static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
//! Format as HTML string (with unit)
2014-04-23 00:46:19 +02:00
static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
2011-11-13 13:19:52 +01:00
//! Parse string to coin amount
2014-04-23 00:46:19 +02:00
static bool parse(int unit, const QString &value, CAmount *val_out);
//! Gets title for amount column including current display unit if optionsModel reference available */
static QString getAmountColumnTitle(int unit);
2011-11-13 13:19:52 +01:00
///@}
2011-11-13 13:19:52 +01:00
//! @name AbstractListModel implementation
2012-07-26 02:48:39 +02:00
//! List model for unit drop-down selection box.
2011-11-13 13:19:52 +01:00
///@{
enum RoleIndex {
/** Unit identifier */
UnitRole = Qt::UserRole
2011-11-13 13:19:52 +01:00
};
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
2011-11-13 13:19:52 +01:00
///@}
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;
}
//! Return maximum number of base units (Satoshis)
2014-04-23 00:46:19 +02:00
static CAmount maxMoney();
private:
QList<BitcoinUnits::Unit> unitlist;
};
typedef BitcoinUnits::Unit BitcoinUnit;
2014-11-03 16:16:40 +01:00
#endif // BITCOIN_QT_BITCOINUNITS_H