6 #include "ui_historypage.h"
23 #include <QCalendarWidget>
25 #include <QItemSelection>
27 #include <QSortFilterProxyModel>
28 #include <QTextDocument>
31 #include <QTextStream>
34 HistoryPage::HistoryPage(QWidget* parent) : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint),
58 ui->tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
59 ui->tableView->setAttribute(Qt::WA_TranslucentBackground,
true);
60 connect(
ui->tableView, SIGNAL(cellDoubleClicked(
int,
int)),
this, SLOT(
on_cellClicked(
int,
int)));
63 ui->dateTimeEditTo->setDisplayFormat(
"M/d/yy");
64 ui->dateTimeEditFrom->setDisplayFormat(
"M/d/yy");
65 ui->dateTimeEditTo->setDateTime(QDateTime::currentDateTime().addDays(1));
66 ui->dateTimeEditFrom->setDateTime(QDateTime::currentDateTime().addDays(-7));
70 ui->dateTimeEditTo->calendarWidget()->parentWidget()->layout()->addWidget(
timeEditTo);
71 ui->dateTimeEditFrom->calendarWidget()->parentWidget()->layout()->addWidget(
timeEditFrom);
75 ui->horizontalLayout_2->setAlignment(Qt::AlignTop);
80 connect(
ui->dateTimeEditTo, SIGNAL(dateChanged(
const QDate&)),
this, SLOT(
updateFilter()));
81 connect(
ui->dateTimeEditFrom, SIGNAL(dateChanged(
const QDate&)),
this, SLOT(
updateFilter()));
82 connect(
ui->comboBoxType, SIGNAL(currentIndexChanged(
const int&)),
this, SLOT(
updateFilter()));
84 connect(
ui->lineEditDesc, SIGNAL(currentIndexChanged(
const int&)),
this, SLOT(
updateFilter()));
85 connect(
ui->lineEditDesc->lineEdit(), SIGNAL(textChanged(
const QString&)),
this, SLOT(
updateFilter()));
88 connect(
ui->lineEditAmount, SIGNAL(textChanged(
const QString&)),
this, SLOT(
updateFilter()));
98 QTableWidgetItem* cell =
ui->tableView->item(row, 1);
99 QString type = cell->data(0).toString();
100 std::string stdType = type.trimmed().toStdString();
102 cell =
ui->tableView->item(row, 2);
103 QString address = cell->data(0).toString();
105 cell =
ui->tableView->item(row, 3);
106 QString amount = cell->data(0).toString();
107 std::string stdAddress = address.trimmed().toStdString();
115 bool privkeyFound =
false;
123 for (
size_t i = 0; i < tx.
vout.size(); i++) {
125 std::vector<CTxDestination> addresses;
130 if (stdAddress == parseddAddress) {
133 txPriv.
Set(tx.
vout[i].txPriv.begin(), tx.
vout[i].txPriv.end(),
true);
137 std::string
key = txHash + std::to_string(i);
157 std::string txdlgMsg =
"Request from Sender (if applicable)";
158 if (stdType ==
"Minted") {
159 privkeyFound =
false;
160 txdlgMsg =
"Minted transactions do not have a PrivKey";
163 privkeyFound =
false;
164 txdlgMsg =
"Wallet must be unlocked to view PrivKey";
166 if (!privkeyFound) txdlg.
setTxPrivKey(std::string(txdlgMsg).c_str());
174 QWidget::resizeEvent(event);
175 ui->tableView->setColumnWidth(2, this->width() * .65);
176 ui->tableView->resizeColumnToContents(QHeaderView::ResizeToContents);
177 ui->tableView->resizeColumnsToContents();
182 this->QDialog::keyPressEvent(event);
194 if (!wallet || wallet->
IsLocked())
return;
202 ui->tableView->setSortingEnabled(
false);
203 while (
ui->tableView->rowCount() > 0)
205 ui->tableView->removeRow(0);
207 ui->tableView->setRowCount(0);
208 std::vector<std::map<QString, QString> > txs;
210 for (
int row = 0; row < (short)txs.size(); row++) {
211 ui->tableView->insertRow(row);
213 for (QString dataName : {
"date",
"type",
"address",
"amount",
"confirmations"}) {
214 QString data = txs[row].at(dataName);
216 QTableWidgetItem* cell =
new QTableWidgetItem();
219 date = QDateTime::fromString(data,
"MM/dd/yy hh:mm:ss").addYears(100);
220 cell->setData(0, date);
223 if (
settings.value(
"fHideBalance",
false).toBool()) {
224 cell->setData(0, QString(
"Hidden"));
226 cell->setData(0, data);
230 cell->setData(0, data.toInt());
233 cell->setData(0, data);
236 ui->tableView->setItem(row, col, cell);
237 cell->setTextAlignment(Qt::AlignCenter);
241 ui->tableView->setVisible(
ui->tableView->rowCount());
242 ui->tableView->sortByColumn(4, Qt::AscendingOrder);
243 ui->tableView->setSortingEnabled(
true);
249 ui->lineEditDesc->clear();
252 for (QString address : addresses)
253 ui->lineEditDesc->addItem(address);
254 ui->lineEditDesc->lineEdit()->setText(QString(
""));
261 auto selectedAmount =
ui->lineEditAmount->text().toFloat();
262 QString selectedType =
ui->comboBoxType->currentText();
263 QList<QString> selectedAddresses =
ui->lineEditDesc->lineEdit()->text().split(
" | ");
265 for (
int row = 0; row <
ui->tableView->rowCount(); row++) {
267 QDateTime date = QDateTime::fromString(
ui->tableView->item(row, 0)->text(),
"yyyy-MM-ddThh:mm:ss");
268 QString type =
ui->tableView->item(row, 1)->text();
269 QString address =
ui->tableView->item(row, 2)->text();
270 auto amount =
ui->tableView->item(row, 3)->text().toFloat();
273 (
ui->dateTimeEditFrom->dateTime() > date) || (
ui->dateTimeEditTo->dateTime() < date) ||
275 (amount < selectedAmount)
278 if (selectedType != tr(
"All Types")) {
279 if (selectedType == tr(
"Received")) {
280 hide = hide || !(type == tr(
"Received"));
281 }
else if (selectedType == tr(
"Sent")) {
282 hide = hide || !(type == tr(
"Sent"));
283 }
else if (selectedType == tr(
"Mined")) {
284 hide = hide || !(type == tr(
"Mined"));
285 }
else if (selectedType == tr(
"Minted")) {
286 hide = hide || !(type == tr(
"Minted"));
287 }
else if (selectedType == tr(
"Masternode")) {
288 hide = hide || !(type == tr(
"Masternode"));
289 }
else if (selectedType == tr(
"Payment to yourself")) {
290 hide = hide || !(type == tr(
"Payment to yourself"));
291 }
else if (selectedType == tr(
"Rewards")) {
292 hide = hide || !(type == tr(
"Mined")) && !(type == tr(
"Minted")) && !(type == tr(
"Masternode"));
295 hide = hide || !(type == tr(
"Received")) && !(type == tr(
"Sent")) && !(type == tr(
"Mined")) && !(type == tr(
"Minted")) && !(type == tr(
"Masternode")) && !(type == tr(
"Payment to yourself"));
300 for (QString selectedAddress : selectedAddresses)
301 if (address.contains(selectedAddress))
303 hide = !found || hide;
306 ui->tableView->setRowHidden(row, hide);
312 calendar->setTime(clock->time());
318 connect(
model, SIGNAL(WalletUnlocked()),
this,