2020-01-14 16:17:38 -03:00
|
|
|
// Copyright (c) 2011-2020 The Bitcoin Core developers
|
2014-12-13 01:09:33 -03:00
|
|
|
// Distributed under the MIT software license, see the accompanying
|
2013-11-04 12:20:43 -03:00
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2014-11-03 12:16:40 -03:00
|
|
|
#ifndef BITCOIN_QT_BITCOINUNITS_H
|
|
|
|
#define BITCOIN_QT_BITCOINUNITS_H
|
2011-07-25 15:35:45 -04:00
|
|
|
|
2017-11-09 21:57:53 -03:00
|
|
|
#include <amount.h>
|
2014-04-22 19:46:19 -03:00
|
|
|
|
2011-07-26 07:08:34 -04:00
|
|
|
#include <QAbstractListModel>
|
2013-04-13 02:13:08 -03:00
|
|
|
#include <QString>
|
2011-07-25 15:35:45 -04:00
|
|
|
|
2014-05-09 18:50:09 -04:00
|
|
|
// U+2009 THIN SPACE = UTF-8 E2 80 89
|
|
|
|
#define REAL_THIN_SP_CP 0x2009
|
|
|
|
#define REAL_THIN_SP_UTF8 "\xE2\x80\x89"
|
|
|
|
|
|
|
|
// 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 09:19:52 -03:00
|
|
|
/** Bitcoin unit definitions. Encapsulates parsing and formatting
|
2012-07-25 20:48:39 -04:00
|
|
|
and serves as list model for drop-down selection boxes.
|
2011-11-13 09:19:52 -03:00
|
|
|
*/
|
2011-07-26 07:08:34 -04:00
|
|
|
class BitcoinUnits: public QAbstractListModel
|
2011-07-25 15:35:45 -04:00
|
|
|
{
|
2013-01-23 17:51:02 -03:00
|
|
|
Q_OBJECT
|
|
|
|
|
2011-07-25 15:35:45 -04:00
|
|
|
public:
|
2011-07-26 07:08:34 -04:00
|
|
|
explicit BitcoinUnits(QObject *parent);
|
|
|
|
|
2011-11-13 09:19:52 -03:00
|
|
|
/** Bitcoin units.
|
|
|
|
@note Source: https://en.bitcoin.it/wiki/Units . Please add only sensible ones
|
|
|
|
*/
|
2011-07-25 15:35:45 -04:00
|
|
|
enum Unit
|
|
|
|
{
|
|
|
|
BTC,
|
|
|
|
mBTC,
|
2018-05-17 10:14:49 -04:00
|
|
|
uBTC,
|
|
|
|
SAT
|
2011-07-25 15:35:45 -04:00
|
|
|
};
|
|
|
|
|
2020-06-18 08:30:15 -04:00
|
|
|
enum class SeparatorStyle
|
2014-05-09 18:50:09 -04:00
|
|
|
{
|
2020-06-18 08:30:15 -04:00
|
|
|
NEVER,
|
|
|
|
STANDARD,
|
|
|
|
ALWAYS
|
2014-05-09 18:50:09 -04:00
|
|
|
};
|
|
|
|
|
2011-11-13 09:19:52 -03:00
|
|
|
//! @name Static API
|
|
|
|
//! Unit conversion and formatting
|
|
|
|
///@{
|
|
|
|
|
2012-07-25 20:48:39 -04:00
|
|
|
//! Get list of units, for drop-down box
|
2011-07-26 07:08:34 -04:00
|
|
|
static QList<Unit> availableUnits();
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Is unit ID valid?
|
2011-07-26 07:11:28 -04:00
|
|
|
static bool valid(int unit);
|
2017-12-27 13:01:45 -03:00
|
|
|
//! Long name
|
|
|
|
static QString longName(int unit);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Short name
|
2017-12-27 13:01:45 -03:00
|
|
|
static QString shortName(int unit);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Longer description
|
2011-07-26 07:08:34 -04:00
|
|
|
static QString description(int unit);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Number of Satoshis (1e-8) per unit
|
2011-07-26 07:08:34 -04:00
|
|
|
static qint64 factor(int unit);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Number of decimals left
|
2011-07-26 07:08:34 -04:00
|
|
|
static int decimals(int unit);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Format as string
|
2020-06-18 08:30:15 -04:00
|
|
|
static QString format(int unit, const CAmount& amount, bool plussign = false, SeparatorStyle separators = SeparatorStyle::STANDARD, bool justify = false);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Format as string (with unit)
|
2020-06-18 08:30:15 -04:00
|
|
|
static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD);
|
2015-12-26 00:49:19 -03:00
|
|
|
//! Format as HTML string (with unit)
|
2020-06-18 08:30:15 -04:00
|
|
|
static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD);
|
2020-01-04 16:13:32 -03:00
|
|
|
//! Format as string (with unit) of fixed length to preserve privacy, if it is set.
|
|
|
|
static QString formatWithPrivacy(int unit, const CAmount& amount, SeparatorStyle separators, bool privacy);
|
2011-11-13 09:19:52 -03:00
|
|
|
//! Parse string to coin amount
|
2014-04-22 19:46:19 -03:00
|
|
|
static bool parse(int unit, const QString &value, CAmount *val_out);
|
2014-06-07 02:20:22 -04:00
|
|
|
//! Gets title for amount column including current display unit if optionsModel reference available */
|
|
|
|
static QString getAmountColumnTitle(int unit);
|
2011-11-13 09:19:52 -03:00
|
|
|
///@}
|
2011-07-25 15:35:45 -04:00
|
|
|
|
2011-11-13 09:19:52 -03:00
|
|
|
//! @name AbstractListModel implementation
|
2012-07-25 20:48:39 -04:00
|
|
|
//! List model for unit drop-down selection box.
|
2011-11-13 09:19:52 -03:00
|
|
|
///@{
|
|
|
|
enum RoleIndex {
|
|
|
|
/** Unit identifier */
|
2011-07-26 07:08:34 -04:00
|
|
|
UnitRole = Qt::UserRole
|
2011-11-13 09:19:52 -03:00
|
|
|
};
|
2020-03-14 03:49:59 -03:00
|
|
|
int rowCount(const QModelIndex &parent) const override;
|
|
|
|
QVariant data(const QModelIndex &index, int role) const override;
|
2011-11-13 09:19:52 -03:00
|
|
|
///@}
|
2013-01-23 17:51:02 -03:00
|
|
|
|
2014-05-09 18:50:09 -04:00
|
|
|
static QString removeSpaces(QString text)
|
|
|
|
{
|
|
|
|
text.remove(' ');
|
|
|
|
text.remove(QChar(THIN_SP_CP));
|
|
|
|
return text;
|
|
|
|
}
|
|
|
|
|
2014-07-18 10:31:13 -04:00
|
|
|
//! Return maximum number of base units (Satoshis)
|
2014-04-22 19:46:19 -03:00
|
|
|
static CAmount maxMoney();
|
2014-07-18 10:31:13 -04:00
|
|
|
|
2011-07-26 07:08:34 -04:00
|
|
|
private:
|
|
|
|
QList<BitcoinUnits::Unit> unitlist;
|
2011-07-25 15:35:45 -04:00
|
|
|
};
|
2011-07-26 07:08:34 -04:00
|
|
|
typedef BitcoinUnits::Unit BitcoinUnit;
|
2011-07-25 15:35:45 -04:00
|
|
|
|
2014-11-03 12:16:40 -03:00
|
|
|
#endif // BITCOIN_QT_BITCOINUNITS_H
|