]> Git Repo - VerusCoin.git/blob - src/qt/transactionfilterproxy.cpp
Merge pull request #4558
[VerusCoin.git] / src / qt / transactionfilterproxy.cpp
1 // Copyright (c) 2011-2013 The Bitcoin developers
2 // Distributed under the MIT/X11 software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #include "transactionfilterproxy.h"
6
7 #include "transactiontablemodel.h"
8 #include "transactionrecord.h"
9
10 #include <cstdlib>
11
12 #include <QDateTime>
13
14 // Earliest date that can be represented (far in the past)
15 const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromTime_t(0);
16 // Last date that can be represented (far in the future)
17 const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromTime_t(0xFFFFFFFF);
18
19 TransactionFilterProxy::TransactionFilterProxy(QObject *parent) :
20     QSortFilterProxyModel(parent),
21     dateFrom(MIN_DATE),
22     dateTo(MAX_DATE),
23     addrPrefix(),
24     typeFilter(ALL_TYPES),
25     minAmount(0),
26     limitRows(-1),
27     showInactive(true)
28 {
29 }
30
31 bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
32 {
33     QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
34
35     int type = index.data(TransactionTableModel::TypeRole).toInt();
36     QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
37     QString address = index.data(TransactionTableModel::AddressRole).toString();
38     QString label = index.data(TransactionTableModel::LabelRole).toString();
39     qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
40     int status = index.data(TransactionTableModel::StatusRole).toInt();
41
42     if(!showInactive && status == TransactionStatus::Conflicted)
43         return false;
44     if(!(TYPE(type) & typeFilter))
45         return false;
46     if(datetime < dateFrom || datetime > dateTo)
47         return false;
48     if (!address.contains(addrPrefix, Qt::CaseInsensitive) && !label.contains(addrPrefix, Qt::CaseInsensitive))
49         return false;
50     if(amount < minAmount)
51         return false;
52
53     return true;
54 }
55
56 void TransactionFilterProxy::setDateRange(const QDateTime &from, const QDateTime &to)
57 {
58     this->dateFrom = from;
59     this->dateTo = to;
60     invalidateFilter();
61 }
62
63 void TransactionFilterProxy::setAddressPrefix(const QString &addrPrefix)
64 {
65     this->addrPrefix = addrPrefix;
66     invalidateFilter();
67 }
68
69 void TransactionFilterProxy::setTypeFilter(quint32 modes)
70 {
71     this->typeFilter = modes;
72     invalidateFilter();
73 }
74
75 void TransactionFilterProxy::setMinAmount(qint64 minimum)
76 {
77     this->minAmount = minimum;
78     invalidateFilter();
79 }
80
81 void TransactionFilterProxy::setLimit(int limit)
82 {
83     this->limitRows = limit;
84 }
85
86 void TransactionFilterProxy::setShowInactive(bool showInactive)
87 {
88     this->showInactive = showInactive;
89     invalidateFilter();
90 }
91
92 int TransactionFilterProxy::rowCount(const QModelIndex &parent) const
93 {
94     if(limitRows != -1)
95     {
96         return std::min(QSortFilterProxyModel::rowCount(parent), limitRows);
97     }
98     else
99     {
100         return QSortFilterProxyModel::rowCount(parent);
101     }
102 }
This page took 0.029922 seconds and 4 git commands to generate.