It's a c++: use string.clear()
[novacoin.git] / src / qt / bitcoinunits.h
index fa85755..5ed0c64 100644 (file)
@@ -2,11 +2,20 @@
 #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,
@@ -14,21 +23,47 @@ public:
         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