Hush lite wallet
https://faq.hush.is/sdl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.3 KiB
93 lines
2.3 KiB
6 years ago
|
#include "balancestablemodel.h"
|
||
|
|
||
|
BalancesTableModel::BalancesTableModel(
|
||
|
QObject *parent,
|
||
|
const QMap<QString, double>* balances,
|
||
|
const QList<UnspentOutput>* outputs)
|
||
|
: QAbstractTableModel(parent)
|
||
|
{
|
||
|
// Copy over the utxos for our use
|
||
|
utxos = new QList<UnspentOutput>();
|
||
|
// This is a QList deep copy.
|
||
|
*utxos = *outputs;
|
||
|
|
||
|
// Process the address balances into a list
|
||
|
modeldata = new QList<std::tuple<QString, QString>>();
|
||
|
std::for_each(balances->constKeyValueBegin(), balances->constKeyValueEnd(), [=] (auto it) {
|
||
|
modeldata->push_back(std::make_tuple(it.first, QString::number(it.second, 'f')));
|
||
|
});
|
||
|
}
|
||
|
|
||
|
BalancesTableModel::~BalancesTableModel() {
|
||
|
delete modeldata;
|
||
|
delete utxos;
|
||
|
}
|
||
|
|
||
|
int BalancesTableModel::rowCount(const QModelIndex&) const
|
||
|
{
|
||
|
return modeldata->size();
|
||
|
}
|
||
|
|
||
|
int BalancesTableModel::columnCount(const QModelIndex&) const
|
||
|
{
|
||
|
return 2;
|
||
|
}
|
||
|
|
||
|
|
||
|
QVariant BalancesTableModel::data(const QModelIndex &index, int role) const
|
||
|
{
|
||
|
if (role == Qt::TextAlignmentRole && index.column() == 1) return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||
|
|
||
|
if (role == Qt::ForegroundRole) {
|
||
|
// If any of the UTXOs for this address has zero confirmations, paint it in red
|
||
|
const auto& addr = std::get<0>(modeldata->at(index.row()));
|
||
|
for (auto utxo : *utxos) {
|
||
|
if (utxo.address == addr && utxo.confirmations == 0) {
|
||
|
QBrush b;
|
||
|
b.setColor(Qt::red);
|
||
|
return b;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Else, just return the default brush
|
||
|
QBrush b;
|
||
|
b.setColor(Qt::black);
|
||
|
return b;
|
||
|
}
|
||
|
|
||
|
if (role == Qt::DisplayRole || role == Qt::ToolTipRole) {
|
||
|
switch (index.column()) {
|
||
|
case 0: return std::get<0>(modeldata->at(index.row()));
|
||
|
case 1: return QVariant(std::get<1>(modeldata->at(index.row())) % " ZEC");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return QVariant();
|
||
|
}
|
||
|
|
||
|
|
||
|
QVariant BalancesTableModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||
|
{
|
||
|
if (role == Qt::TextAlignmentRole && section == 1) {
|
||
|
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||
|
}
|
||
|
|
||
|
if (role == Qt::FontRole) {
|
||
|
QFont f;
|
||
|
f.setBold(true);
|
||
|
return f;
|
||
|
}
|
||
|
|
||
|
if (role != Qt::DisplayRole)
|
||
|
return QVariant();
|
||
|
|
||
|
if (orientation == Qt::Horizontal) {
|
||
|
switch (section) {
|
||
|
case 0: return tr("Address");
|
||
|
case 1: return tr("Amount");
|
||
|
default: return QVariant();
|
||
|
}
|
||
|
}
|
||
|
return QVariant();
|
||
|
}
|