X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fmintingtablemodel.cpp;h=430b535348a3f248f7f38b8fcf4f4d64e5d79fa0;hb=77a43545b4491b9703d803765da9059d2bdd5aaa;hp=97e3245da7018dcff25a95437175e9eb9249a368;hpb=cba47ba37a96ae48b3bba132d75d2a2d75da0a46;p=novacoin.git diff --git a/src/qt/mintingtablemodel.cpp b/src/qt/mintingtablemodel.cpp index 97e3245..430b535 100644 --- a/src/qt/mintingtablemodel.cpp +++ b/src/qt/mintingtablemodel.cpp @@ -1,4 +1,5 @@ #include "mintingtablemodel.h" +#include "mintingfilterproxy.h" #include "transactiontablemodel.h" #include "guiutil.h" #include "kernelrecord.h" @@ -135,16 +136,17 @@ public: KernelRecord::decomposeOutput(wallet, mi->second); if(!toInsert.empty()) /* only if something to insert */ { - parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex+toInsert.size()-1); int insert_idx = lowerIndex; BOOST_FOREACH(const KernelRecord &rec, toInsert) { - if(!rec.spent) { + if(!rec.spent) + { + parent->beginInsertRows(QModelIndex(), insert_idx, insert_idx); cachedWallet.insert(insert_idx, rec); + parent->endInsertRows(); insert_idx += 1; } } - parent->endInsertRows(); } } else if(!inWallet && inModel) @@ -156,7 +158,27 @@ public: } else if(inWallet && inModel) { - // Updated -- nothing to do, status update will take care of this + // Updated -- remove spent coins from table + std::vector toCheck = KernelRecord::decomposeOutput(wallet, mi->second); + BOOST_FOREACH(const KernelRecord &rec, toCheck) + { + if(rec.spent) + { + for(int i = 0; i < cachedWallet.size(); i++) + { + KernelRecord cachedRec = cachedWallet.at(i); + if((rec.hash == cachedRec.hash) + && (rec.nTime == cachedRec.nTime) + && (rec.nValue == cachedRec.nValue)) + { + parent->beginRemoveRows(QModelIndex(), i, i); + cachedWallet.removeAt(i); + parent->endRemoveRows(); + break; + } + } + } + } } } } @@ -228,6 +250,16 @@ void MintingTableModel::update() BOOST_FOREACH(uint256 hash, wallet->vMintingWalletUpdated) { updated.append(hash); + + // Also check the inputs to remove spent outputs from the table if necessary + CWalletTx wtx; + if(wallet->GetTransaction(hash, wtx)) + { + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + { + updated.append(txin.prevout.hash); + } + } } wallet->vMintingWalletUpdated.clear(); } @@ -236,9 +268,15 @@ void MintingTableModel::update() if(!updated.empty()) { priv->updateWallet(updated); + mintingProxyModel->invalidate(); // Force deletion of empty rows } } +void MintingTableModel::setMintingProxyModel(MintingFilterProxy *mintingProxy) +{ + mintingProxyModel = mintingProxy; +} + int MintingTableModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); @@ -312,11 +350,11 @@ QVariant MintingTableModel::data(const QModelIndex &index, int role) const case TxHash: return formatTxHash(rec); case Age: - return rec->getAge(); + return static_cast(rec->getAge()); case CoinDay: - return rec->coinAge; + return static_cast(rec->coinAge); case Balance: - return rec->nValue; + return static_cast(rec->nValue); case MintProbability: return getDayToMint(rec); case MintReward: @@ -401,12 +439,12 @@ QString MintingTableModel::formatTxHash(const KernelRecord *wtx) const QString MintingTableModel::formatTxCoinDay(const KernelRecord *wtx) const { - return QString::number(wtx->coinAge); + return QString::number(wtx->getCoinDay()); } QString MintingTableModel::formatTxAge(const KernelRecord *wtx) const { - int64 nAge = wtx->getAge(); + int64_t nAge = wtx->getAge(); return QString::number(nAge); }