#define BITCOINUNITS_H
#include <QString>
+#include <QAbstractListModel>
-// Bitcoin unit definitions
-class BitcoinUnits
+#include <stdint.h>
+/** Bitcoin unit definitions. Encapsulates parsing and formatting
+ and serves as list model for drop-down selection boxes.
+*/
+class BitcoinUnits: public QAbstractListModel
{
public:
+ explicit BitcoinUnits(QObject *parent);
+
+ /** Bitcoin units.
+ @note Source: https://en.bitcoin.it/wiki/Units . Please add only sensible ones
+ */
enum Unit
{
BTC,
uBTC
};
- // Short name
- static QString name(Unit unit);
- // Longer description
- static QString description(Unit unit);
- // Number of satoshis / unit
- static qint64 factor(Unit unit);
- // Number of decimals left
- static int decimals(Unit unit);
- // Format as string
- static QString format(Unit unit, qint64 amount, bool plussign=false);
- // Format as string (with unit)
- static QString formatWithUnit(Unit unit, qint64 amount, bool plussign=false);
- // Parse string to coin amount
- static bool parse(Unit unit, const QString &value, qint64 *val_out);
+ //! @name Static API
+ //! Unit conversion and formatting
+ ///@{
+
+ //! Get list of units, for drop-down box
+ static QList<Unit> availableUnits();
+ //! Is unit ID valid?
+ static bool valid(int unit);
+ //! Short name
+ static QString name(int unit);
+ //! Longer description
+ static QString description(int unit);
+ //! Number of Satoshis (1e-8) per unit
+ static qint64 factor(int unit);
+ //! Number of amount digits (to represent max number of coins)
+ static int amountDigits(int unit);
+ //! Number of decimals left
+ static int decimals(int unit);
+ //! Format as string
+ static QString format(int unit, qint64 amount, bool plussign=false, uint8_t nNumberOfZeros=2);
+ //! Format as string (with unit)
+ static QString formatWithUnit(int unit, qint64 amount, bool plussign=false, uint8_t nNumberOfZeros=2);
+ //! Parse string to coin amount
+ static bool parse(int unit, const QString &value, qint64 *val_out);
+ //! Gets title for amount column including current display unit if optionsModel reference available */
+ static QString getAmountColumnTitle(int unit);
+ ///@}
+ //! @name AbstractListModel implementation
+ //! List model for unit drop-down selection box.
+ ///@{
+ enum RoleIndex {
+ /** Unit identifier */
+ UnitRole = Qt::UserRole
+ };
+ int rowCount(const QModelIndex &parent) const;
+ QVariant data(const QModelIndex &index, int role) const;
+ ///@}
+private:
+ QList<BitcoinUnits::Unit> unitlist;
};
+typedef BitcoinUnits::Unit BitcoinUnit;
#endif // BITCOINUNITS_H