-Subproject commit 9e4a4d305c0a24f294d9f75d33065381b6fba520
+Subproject commit ecca08f4c0b1e5a012cdd20110b015c540bce0c6
m_locked = false;
m_minutesToUnlock = 0;
+ quint64 balance = 0;
+
m_pimpl->refresh();
for (const auto i : m_pimpl->getAll()) {
if (i->subaddrAccount() != accountIndex) {
continue;
}
- m_tinfo.append(new TransactionInfo(i, this));
+ if (i->direction() == Monero::TransactionInfo::Direction_In) {
+ balance += i->amount();
+ }
+ else if (i->direction() == Monero::TransactionInfo::Direction_Out) {
+ balance -= i->amount() + i->fee();
+ }
+
+ m_tinfo.append(new TransactionInfo(i, balance, this));
const TransactionInfo *ti = m_tinfo.back();
// looking for transactions timestamp scope
});
for (const auto &tx : transactions) {
- TransactionInfo info(tx, this);
+ TransactionInfo info(tx, 0, this);
// collect column data
QDateTime timeStamp = info.timestamp();
return m_amount;
}
+quint64 TransactionInfo::balance() const
+{
+ return m_balance;
+}
+
double TransactionInfo::amount() const
{
// there's no unsigned uint64 for JS, so better use double
return rings;
}
-TransactionInfo::TransactionInfo(const Monero::TransactionInfo *pimpl, QObject *parent)
+TransactionInfo::TransactionInfo(const Monero::TransactionInfo *pimpl, quint64 balance, QObject *parent)
: QObject(parent)
, m_amount(pimpl->amount())
, m_blockHeight(pimpl->blockHeight())
, m_timestamp(QDateTime::fromSecsSinceEpoch(pimpl->timestamp()))
, m_unlockTime(pimpl->unlockTime())
, m_coinbase(pimpl->isCoinbase())
+ , m_balance(balance)
{
for (auto const &t: pimpl->transfers())
{
bool isFailed() const;
bool isCoinbase() const;
quint64 balanceDelta() const;
+ quint64 balance() const;
double amount() const;
quint64 atomicAmount() const;
QString displayAmount() const;
QString rings_formatted() const;
private:
- explicit TransactionInfo(const Monero::TransactionInfo *pimpl, QObject *parent = nullptr);
+ explicit TransactionInfo(const Monero::TransactionInfo *pimpl, quint64 balance, QObject *parent = nullptr);
private:
friend class TransactionHistory;
mutable QList<Transfer*> m_transfers;
QDateTime m_timestamp;
quint64 m_unlockTime;
bool m_coinbase;
+ quint64 m_balance;
};
#endif // TRANSACTIONINFO_H
header()->showSection(TransactionHistoryModel::Description);
header()->showSection(TransactionHistoryModel::Amount);
header()->showSection(TransactionHistoryModel::FiatAmount);
+ header()->hideSection(TransactionHistoryModel::Balance);
// Reset column order to logical indices
for (int i = 0; i < header()->count(); ++i) {
bool found = m_transactionHistory->transaction(index.row(), [this, &index, &result, &role](const TransactionInfo &tInfo) {
if(role == Qt::DisplayRole || role == Qt::EditRole || role == Qt::UserRole) {
- result = parseTransactionInfo(tInfo, index.column(), role);
+ result = parseTransactionInfo(tInfo, index.row(), index.column(), role);
}
else if (role == Qt::TextAlignmentRole) {
switch (index.column()) {
return result;
}
-QVariant TransactionHistoryModel::parseTransactionInfo(const TransactionInfo &tInfo, int column, int role) const
+QVariant TransactionHistoryModel::parseTransactionInfo(const TransactionInfo &tInfo, int row, int column, int role) const
{
switch (column)
{
case Column::Date:
{
if (role == Qt::UserRole) {
- return tInfo.timestamp();
+ return row;
}
return tInfo.timestamp().toString(QString("%1 %2 ").arg(config()->get(Config::dateFormat).toString(),
config()->get(Config::timeFormat).toString()));
if (role == Qt::UserRole) {
return tInfo.balanceDelta();
}
- QString amount = QString::number(tInfo.balanceDelta() / constants::cdiv, 'f', config()->get(Config::amountPrecision).toInt());
+ auto amount = this->formatAmount(tInfo.balanceDelta());
amount = (tInfo.direction() == TransactionInfo::Direction_Out) ? "-" + amount : "+" + amount;
return amount;
}
double fiat_rounded = ceil(Utils::roundSignificant(usd_amount, 3) * 100.0) / 100.0;
return QString("%1").arg(Utils::amountToCurrencyString(fiat_rounded, preferredFiatCurrency));
}
+ case Column::Balance:
+ {
+ return this->formatAmount(tInfo.balance());
+ }
default:
{
qCritical() << "Unimplemented role";
}
}
+QString TransactionHistoryModel::formatAmount(quint64 amount) const {
+ return QString::number(amount / constants::cdiv, 'f', config()->get(Config::amountPrecision).toInt());
+}
+
QVariant TransactionHistoryModel::headerData(int section, Qt::Orientation orientation, int role) const {
Q_UNUSED(orientation)
if (role != Qt::DisplayRole) {
return QString("Txid");
case Column::FiatAmount:
return QString("Fiat");
+ case Column::Balance:
+ return QString("Balance");
default:
return QVariant();
}
Description,
Amount,
FiatAmount,
+ Balance,
COUNT
};
void transactionHistoryChanged();
private:
- QVariant parseTransactionInfo(const TransactionInfo &tInfo, int column, int role) const;
+ QVariant parseTransactionInfo(const TransactionInfo &tInfo, int row, int column, int role) const;
+ QString formatAmount(quint64 amount) const;
TransactionHistory * m_transactionHistory;
};