2013-11-04 16:20:43 +01:00
|
|
|
// Copyright (c) 2011-2013 The Bitcoin developers
|
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2011-07-25 21:35:45 +02:00
|
|
|
#ifndef BITCOINUNITS_H
|
|
|
|
#define BITCOINUNITS_H
|
|
|
|
|
2011-07-26 13:08:34 +02:00
|
|
|
#include <QAbstractListModel>
|
2013-04-13 07:13:08 +02:00
|
|
|
#include <QString>
|
2011-07-25 21:35:45 +02:00
|
|
|
|
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
|
|
|
*/
|
2011-07-26 13:08:34 +02:00
|
|
|
class BitcoinUnits: public QAbstractListModel
|
2011-07-25 21:35:45 +02:00
|
|
|
{
|
2013-01-23 21:51:02 +01:00
|
|
|
Q_OBJECT
|
|
|
|
|
2011-07-25 21:35:45 +02:00
|
|
|
public:
|
2011-07-26 13:08:34 +02:00
|
|
|
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
|
|
|
|
*/
|
2011-07-25 21:35:45 +02:00
|
|
|
enum Unit
|
|
|
|
{
|
|
|
|
BTC,
|
|
|
|
mBTC,
|
|
|
|
uBTC
|
|
|
|
};
|
|
|
|
|
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
|
2011-07-26 13:08:34 +02:00
|
|
|
static QList<Unit> availableUnits();
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Is unit ID valid?
|
2011-07-26 13:11:28 +02:00
|
|
|
static bool valid(int unit);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Short name
|
2011-07-26 13:08:34 +02:00
|
|
|
static QString name(int unit);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Longer description
|
2011-07-26 13:08:34 +02:00
|
|
|
static QString description(int unit);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Number of Satoshis (1e-8) per unit
|
2011-07-26 13:08:34 +02:00
|
|
|
static qint64 factor(int unit);
|
2013-05-22 00:19:18 +02:00
|
|
|
//! Max amount per unit
|
|
|
|
static qint64 maxAmount(int unit);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Number of amount digits (to represent max number of coins)
|
2011-07-26 13:08:34 +02:00
|
|
|
static int amountDigits(int unit);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Number of decimals left
|
2011-07-26 13:08:34 +02:00
|
|
|
static int decimals(int unit);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Format as string
|
2011-07-26 13:08:34 +02:00
|
|
|
static QString format(int unit, qint64 amount, bool plussign=false);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Format as string (with unit)
|
2011-07-26 13:08:34 +02:00
|
|
|
static QString formatWithUnit(int unit, qint64 amount, bool plussign=false);
|
2011-11-13 13:19:52 +01:00
|
|
|
//! Parse string to coin amount
|
2011-07-26 13:08:34 +02:00
|
|
|
static bool parse(int unit, const QString &value, qint64 *val_out);
|
2011-11-13 13:19:52 +01:00
|
|
|
///@}
|
2011-07-25 21:35:45 +02: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 */
|
2011-07-26 13:08:34 +02:00
|
|
|
UnitRole = Qt::UserRole
|
2011-11-13 13:19:52 +01:00
|
|
|
};
|
2011-07-26 13:08:34 +02:00
|
|
|
int rowCount(const QModelIndex &parent) const;
|
|
|
|
QVariant data(const QModelIndex &index, int role) const;
|
2011-11-13 13:19:52 +01:00
|
|
|
///@}
|
2013-01-23 21:51:02 +01:00
|
|
|
|
2011-07-26 13:08:34 +02:00
|
|
|
private:
|
|
|
|
QList<BitcoinUnits::Unit> unitlist;
|
2011-07-25 21:35:45 +02:00
|
|
|
};
|
2011-07-26 13:08:34 +02:00
|
|
|
typedef BitcoinUnits::Unit BitcoinUnit;
|
2011-07-25 21:35:45 +02:00
|
|
|
|
|
|
|
#endif // BITCOINUNITS_H
|