Update UI through async calls MainFrameRepaint and AddressBookRepaint instead of...
[novacoin.git] / src / qt / addresstablemodel.h
index d846585..7fd07cf 100644 (file)
@@ -6,28 +6,41 @@
 
 class AddressTablePriv;
 class CWallet;
+class WalletModel;
 
+/**
+   Qt model of the address book in the core. This allows views to access and modify the address book.
+ */
 class AddressTableModel : public QAbstractTableModel
 {
     Q_OBJECT
 public:
-    explicit AddressTableModel(CWallet *wallet, QObject *parent = 0);
+    explicit AddressTableModel(CWallet *wallet, WalletModel *parent = 0);
     ~AddressTableModel();
 
     enum ColumnIndex {
-        Label = 0,   /* User specified label */
-        Address = 1,  /* Bitcoin address */
-        IsDefaultAddress = 2 /* Is default address? */
+        Label = 0,   /**< User specified label */
+        Address = 1  /**< Bitcoin address */
     };
 
-    enum {
-        TypeRole = Qt::UserRole
-    } RoleIndex;
+    enum RoleIndex {
+        TypeRole = Qt::UserRole /**< Type of address (#Send or #Receive) */
+    };
+
+    /** Return status of edit/insert operation */
+    enum EditStatus {
+        OK,
+        INVALID_ADDRESS,   /**< Unparseable address */
+        DUPLICATE_ADDRESS,  /**< Address already in address book */
+        WALLET_UNLOCK_FAILURE, /**< Wallet could not be unlocked to create new receiving address */
+        KEY_GENERATION_FAILURE /**< Generating a new public key for a receiving address failed */
+    };
 
-    static const QString Send; /* Send addres */
-    static const QString Receive; /* Receive address */
+    static const QString Send; /**< Specifies send address */
+    static const QString Receive; /**< Specifies receive address */
 
-    /* Overridden methods from QAbstractTableModel */
+    /** @name Methods overridden from QAbstractTableModel
+        @{*/
     int rowCount(const QModelIndex &parent) const;
     int columnCount(const QModelIndex &parent) const;
     QVariant data(const QModelIndex &index, int role) const;
@@ -35,29 +48,38 @@ public:
     QVariant headerData(int section, Qt::Orientation orientation, int role) const;
     QModelIndex index(int row, int column, const QModelIndex & parent) const;
     bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+    Qt::ItemFlags flags(const QModelIndex & index) const;
+    /*@}*/
 
     /* Add an address to the model.
        Returns the added address on success, and an empty string otherwise.
      */
-    QString addRow(const QString &type, const QString &label, const QString &address, bool setAsDefault);
+    QString addRow(const QString &type, const QString &label, const QString &address);
 
-    /* Set and get default address */
-    QString getDefaultAddress() const;
-    void setDefaultAddress(const QString &defaultAddress);
+    /* Look up label for address in address book, if not found return empty string.
+     */
+    QString labelForAddress(const QString &address) const;
 
-    /* Update address list from core. Invalidates any indices.
+    /* Look up row index of an address in the model.
+       Return -1 if not found.
      */
-    void updateList();
+    int lookupAddress(const QString &address) const;
+
+    EditStatus getEditStatus() const { return editStatus; }
 
 private:
+    WalletModel *walletModel;
     CWallet *wallet;
     AddressTablePriv *priv;
     QStringList columns;
+    EditStatus editStatus;
 
 signals:
     void defaultAddressChanged(const QString &address);
 
 public slots:
+    /* Update address list from core. Invalidates any indices.
+     */
     void update();
 };