forked from ciphrex/mSIGNA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunspenttxoutmodel.cpp
125 lines (97 loc) · 3.54 KB
/
unspenttxoutmodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
///////////////////////////////////////////////////////////////////////////////
//
// mSIGNA
//
// unspenttxoutmodel.cpp
//
// Copyright (c) 2014 Eric Lombrozo
//
// All Rights Reserved.
#include "unspenttxoutmodel.h"
#include <CoinQ/CoinQ_script.h>
#include <CoinQ/CoinQ_netsync.h>
#include <QStandardItemModel>
#include "settings.h"
#include "coinparams.h"
#include "severitylogger.h"
using namespace CoinDB;
using namespace CoinQ::Script;
using namespace std;
UnspentTxOutModel::UnspentTxOutModel(QObject* parent)
: QStandardItemModel(parent)
{
base58_versions[0] = getCoinParams().pay_to_pubkey_hash_version();
base58_versions[1] = getCoinParams().pay_to_script_hash_version();
//currency_divisor = getCoinParams().currency_divisor();
//currency_symbol = getCoinParams().currency_symbol();
initColumns();
}
UnspentTxOutModel::UnspentTxOutModel(CoinDB::Vault* vault, const QString& accountName, QObject* parent)
: QStandardItemModel(parent)
{
base58_versions[0] = getCoinParams().pay_to_pubkey_hash_version();
base58_versions[1] = getCoinParams().pay_to_script_hash_version();
//currency_divisor = getCurrencyDivisor();
//currency_symbol = getCurrencySymbol();
initColumns();
setVault(vault);
setAccount(accountName);
}
void UnspentTxOutModel::initColumns()
{
QStringList columns;
columns << (tr("Amount") + " (" + getCurrencySymbol() + ")") << tr("Address") << tr("Confirmations");
setHorizontalHeaderLabels(columns);
}
void UnspentTxOutModel::setVault(CoinDB::Vault* vault)
{
this->vault = vault;
accountName.clear();
}
void UnspentTxOutModel::setAccount(const QString& accountName)
{
if (!vault) throw std::runtime_error("Vault is not open.");
if (!vault->accountExists(accountName.toStdString()))
throw std::runtime_error("Account not found.");
this->accountName = accountName;
}
void UnspentTxOutModel::update()
{
removeRows(0, rowCount());
if (!vault || accountName.isEmpty()) return;
uint32_t bestHeight = vault->getBestHeight();
std::vector<TxOutView> txoutviews = vault->getUnspentTxOutViews(accountName.toStdString());
for (auto& item: txoutviews) {
QList<QStandardItem*> row;
//QString amount(QString::number(item.value/(1.0 * currency_divisor), 'g', 8));
QString amount(getFormattedCurrencyAmount(item.value));
QStandardItem* amountItem = new QStandardItem(amount);
std::stringstream strAmount;
strAmount << item.value;
amountItem->setData(QString::fromStdString(strAmount.str()), Qt::UserRole);
QString address(QString::fromStdString(getAddressForTxOutScript(item.script, base58_versions)));
QStandardItem* addressItem = new QStandardItem(address);
addressItem->setData((int)item.id, Qt::UserRole);
uint32_t nConfirmations = 0;
if (bestHeight && item.height) { nConfirmations = bestHeight + 1 - item.height; }
QString confirmations(QString::number(nConfirmations));
row.append(amountItem);
row.append(addressItem);
row.append(new QStandardItem(confirmations));
appendRow(row);
}
}
QVariant UnspentTxOutModel::data(const QModelIndex& index, int role) const
{
// Right-align numeric fields
if (role == Qt::TextAlignmentRole) {// && index.column() >= 3 && index.column() <= 6) {
return Qt::AlignRight;
}
else {
return QStandardItemModel::data(index, role);
}
}
Qt::ItemFlags UnspentTxOutModel::flags(const QModelIndex& /*index*/) const
{
return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
}