Merge #11997: [tests] util_tests.cpp: actually check ignored args
[bitcoinplatinum.git] / src / qt / transactionfilterproxy.cpp
blob39d03fa5475e425c8b8e86cc501203dbdd8af9eb
1 // Copyright (c) 2011-2017 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #include <qt/transactionfilterproxy.h>
7 #include <qt/transactiontablemodel.h>
8 #include <qt/transactionrecord.h>
10 #include <cstdlib>
12 // Earliest date that can be represented (far in the past)
13 const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromTime_t(0);
14 // Last date that can be represented (far in the future)
15 const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromTime_t(0xFFFFFFFF);
17 TransactionFilterProxy::TransactionFilterProxy(QObject *parent) :
18 QSortFilterProxyModel(parent),
19 dateFrom(MIN_DATE),
20 dateTo(MAX_DATE),
21 m_search_string(),
22 typeFilter(ALL_TYPES),
23 watchOnlyFilter(WatchOnlyFilter_All),
24 minAmount(0),
25 limitRows(-1),
26 showInactive(true)
30 bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
32 QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
34 int type = index.data(TransactionTableModel::TypeRole).toInt();
35 QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
36 bool involvesWatchAddress = index.data(TransactionTableModel::WatchonlyRole).toBool();
37 QString address = index.data(TransactionTableModel::AddressRole).toString();
38 QString label = index.data(TransactionTableModel::LabelRole).toString();
39 QString txid = index.data(TransactionTableModel::TxIDRole).toString();
40 qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
41 int status = index.data(TransactionTableModel::StatusRole).toInt();
43 if(!showInactive && status == TransactionStatus::Conflicted)
44 return false;
45 if(!(TYPE(type) & typeFilter))
46 return false;
47 if (involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_No)
48 return false;
49 if (!involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_Yes)
50 return false;
51 if(datetime < dateFrom || datetime > dateTo)
52 return false;
53 if (!address.contains(m_search_string, Qt::CaseInsensitive) &&
54 ! label.contains(m_search_string, Qt::CaseInsensitive) &&
55 ! txid.contains(m_search_string, Qt::CaseInsensitive)) {
56 return false;
58 if(amount < minAmount)
59 return false;
61 return true;
64 void TransactionFilterProxy::setDateRange(const QDateTime &from, const QDateTime &to)
66 this->dateFrom = from;
67 this->dateTo = to;
68 invalidateFilter();
71 void TransactionFilterProxy::setSearchString(const QString &search_string)
73 if (m_search_string == search_string) return;
74 m_search_string = search_string;
75 invalidateFilter();
78 void TransactionFilterProxy::setTypeFilter(quint32 modes)
80 this->typeFilter = modes;
81 invalidateFilter();
84 void TransactionFilterProxy::setMinAmount(const CAmount& minimum)
86 this->minAmount = minimum;
87 invalidateFilter();
90 void TransactionFilterProxy::setWatchOnlyFilter(WatchOnlyFilter filter)
92 this->watchOnlyFilter = filter;
93 invalidateFilter();
96 void TransactionFilterProxy::setLimit(int limit)
98 this->limitRows = limit;
101 void TransactionFilterProxy::setShowInactive(bool _showInactive)
103 this->showInactive = _showInactive;
104 invalidateFilter();
107 int TransactionFilterProxy::rowCount(const QModelIndex &parent) const
109 if(limitRows != -1)
111 return std::min(QSortFilterProxyModel::rowCount(parent), limitRows);
113 else
115 return QSortFilterProxyModel::rowCount(parent);