QtUI code cleanup / comment improvements
[novacoin.git] / src / qt / walletmodel.cpp
index 6e4b814..10b3738 100644 (file)
@@ -9,9 +9,10 @@
 #include <QTimer>
 #include <QSet>
 
-WalletModel::WalletModel(CWallet *wallet, QObject *parent) :
-    QObject(parent), wallet(wallet), optionsModel(0), addressTableModel(0),
-    transactionTableModel(0)
+WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) :
+    QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0),
+    transactionTableModel(0),
+    cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0)
 {
     // Until signal notifications is built into the bitcoin core,
     //  simply update everything after polling using a timer.
@@ -19,7 +20,6 @@ WalletModel::WalletModel(CWallet *wallet, QObject *parent) :
     connect(timer, SIGNAL(timeout()), this, SLOT(update()));
     timer->start(MODEL_UPDATE_DELAY);
 
-    optionsModel = new OptionsModel(wallet, this);
     addressTableModel = new AddressTableModel(wallet, this);
     transactionTableModel = new TransactionTableModel(wallet, this);
 }
@@ -46,20 +46,27 @@ int WalletModel::getNumTransactions() const
 
 void WalletModel::update()
 {
-    // Plainly emit all signals for now. To be more efficient this should check
-    //   whether the values actually changed first, although it'd be even better if these
-    //   were events coming in from the bitcoin core.
-    emit balanceChanged(getBalance(), wallet->GetUnconfirmedBalance());
-    emit numTransactionsChanged(getNumTransactions());
+    qint64 newBalance = getBalance();
+    qint64 newUnconfirmedBalance = getUnconfirmedBalance();
+    int newNumTransactions = getNumTransactions();
+
+    if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance)
+        emit balanceChanged(newBalance, newUnconfirmedBalance);
+
+    if(cachedNumTransactions != newNumTransactions)
+        emit numTransactionsChanged(newNumTransactions);
+
+    cachedBalance = newBalance;
+    cachedUnconfirmedBalance = newUnconfirmedBalance;
+    cachedNumTransactions = newNumTransactions;
 
     addressTableModel->update();
 }
 
 bool WalletModel::validateAddress(const QString &address)
 {
-    uint160 hash160 = 0;
-
-    return AddressToHash160(address.toStdString(), hash160);
+    CBitcoinAddress addressParsed(address.toStdString());
+    return addressParsed.IsValid();
 }
 
 WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipient> &recipients)
@@ -76,9 +83,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie
     // Pre-check input data for validity
     foreach(const SendCoinsRecipient &rcp, recipients)
     {
-        uint160 hash160 = 0;
-
-        if(!AddressToHash160(rcp.address.toUtf8().constData(), hash160))
+        if(!validateAddress(rcp.address))
         {
             return InvalidAddress;
         }
@@ -153,6 +158,9 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie
         }
     }
 
+    // Update our model of the address table
+    addressTableModel->updateList();
+
     return SendCoinsReturn(OK, 0, hex);
 }