#include "mintingtablemodel.h"
+#include "mintingfilterproxy.h"
#include "transactiontablemodel.h"
#include "guiutil.h"
#include "kernelrecord.h"
extern double GetDifficulty(const CBlockIndex* blockindex);
static int column_alignments[] = {
- Qt::AlignCenter|Qt::AlignVCenter,
- Qt::AlignCenter|Qt::AlignVCenter,
- Qt::AlignCenter|Qt::AlignVCenter,
- Qt::AlignCenter|Qt::AlignVCenter,
- Qt::AlignCenter|Qt::AlignVCenter,
- Qt::AlignCenter|Qt::AlignVCenter,
- Qt::AlignCenter|Qt::AlignVCenter
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter
};
struct TxLessThan
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)
}
else if(inWallet && inModel)
{
- // Updated -- nothing to do, status update will take care of this
+ // Updated -- remove spent coins from table
+ std::vector<KernelRecord> 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;
+ }
+ }
+ }
+ }
}
}
}
mintingInterval(10),
priv(new MintingTablePriv(wallet, this))
{
- columns << tr("Transaction") << tr("Address") << tr("Age") << tr("Balance") << tr("CoinDay") << tr("MintProbability") << tr("MintReward");
+ columns << tr("Transaction") << tr("Address") << tr("Balance") << tr("Age") << tr("CoinDay") << tr("MintProbability") << tr("MintReward");
priv->refreshWallet();
QTimer *timer = new QTimer(this);
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();
}
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);
case TxHash:
return formatTxHash(rec);
case Age:
- return rec->getAge();
+ return static_cast<qlonglong>(rec->getAge());
case CoinDay:
- return rec->coinAge;
+ return static_cast<qlonglong>(rec->getCoinDay());
case Balance:
- return rec->nValue;
+ return static_cast<qlonglong>(rec->nValue);
case MintProbability:
return getDayToMint(rec);
case MintReward:
{
QString posReward;
int nBits = GetLastBlockIndex(pindexBest, true)->nBits;
- posReward += QString(QObject::tr("from %1 to %2")).arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, wtx->getPoSReward(nBits, 0)),
- BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, wtx->getPoSReward(nBits, mintingInterval)));
+ posReward += QString(QObject::tr("from %1 to %2")).arg(BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), wtx->getPoSReward(nBits, 0)),
+ BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), wtx->getPoSReward(nBits, mintingInterval)));
return posReward;
}
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);
}
QString MintingTableModel::formatTxBalance(const KernelRecord *wtx) const
{
- return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), wtx->nValue);
+ return BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), wtx->nValue);
}
QVariant MintingTableModel::headerData(int section, Qt::Orientation orientation, int role) const