#include "mintingtablemodel.h"
+#include "mintingfilterproxy.h"
#include "transactiontablemodel.h"
#include "guiutil.h"
#include "kernelrecord.h"
static int column_alignments[] = {
Qt::AlignLeft|Qt::AlignVCenter,
Qt::AlignLeft|Qt::AlignVCenter,
- Qt::AlignRight|Qt::AlignVCenter,
- Qt::AlignRight|Qt::AlignVCenter,
- Qt::AlignRight|Qt::AlignVCenter,
- Qt::AlignRight|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");
+ 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);
return formatTxCoinDay(rec);
case MintProbability:
return formatDayToMint(rec);
+ case MintReward:
+ return formatTxPoSReward(rec);
}
break;
case Qt::TextAlignmentRole:
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:
+ return formatTxPoSReward(rec);
}
break;
case Qt::BackgroundColorRole:
return description;
}
+QString MintingTableModel::formatTxPoSReward(KernelRecord *wtx) const
+{
+ QString posReward;
+ int nBits = GetLastBlockIndex(pindexBest, true)->nBits;
+ 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;
+}
+
double MintingTableModel::getDayToMint(KernelRecord *wtx) const
{
const CBlockIndex *p = GetLastBlockIndex(pindexBest, true);
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
return tr("Coin age in the output.");
case MintProbability:
return tr("Chance to mint a block within given time interval.");
+ case MintReward:
+ return tr("The size of the potential rewards if the block is found at the beginning and the end given time interval.");
}
}
}
return QModelIndex();
}
}
-