allow multiple units in bitcoin amount widget (for example, for sending) using a...
[novacoin.git] / src / qt / bitcoinunits.h
index fa85755..18b6235 100644 (file)
@@ -2,33 +2,53 @@
 #define BITCOINUNITS_H
 
 #include <QString>
+#include <QAbstractListModel>
 
 // Bitcoin unit definitions
-class BitcoinUnits
+class BitcoinUnits: public QAbstractListModel
 {
 public:
+    explicit BitcoinUnits(QObject *parent);
+
     enum Unit
     {
+        // Source: https://en.bitcoin.it/wiki/Units
+        // Please add only sensible ones
         BTC,
         mBTC,
         uBTC
     };
 
+    /// Static API
+    // Get list of units, for dropdown box
+    static QList<Unit> availableUnits();
     // Short name
-    static QString name(Unit unit);
+    static QString name(int unit);
     // Longer description
-    static QString description(Unit unit);
+    static QString description(int unit);
     // Number of satoshis / unit
-    static qint64 factor(Unit 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(Unit unit);
+    static int decimals(int unit);
     // Format as string
-    static QString format(Unit unit, qint64 amount, bool plussign=false);
+    static QString format(int unit, qint64 amount, bool plussign=false);
     // Format as string (with unit)
-    static QString formatWithUnit(Unit unit, qint64 amount, bool plussign=false);
+    static QString formatWithUnit(int unit, qint64 amount, bool plussign=false);
     // Parse string to coin amount
-    static bool parse(Unit unit, const QString &value, qint64 *val_out);
+    static bool parse(int unit, const QString &value, qint64 *val_out);
 
+    /// AbstractListModel implementation
+    enum {
+        // Unit identifier
+        UnitRole = Qt::UserRole
+    } RoleIndex;
+    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