Bitcoin Core  27.99.0
P2P Digital Currency
transactionfilterproxy.cpp
Go to the documentation of this file.
1 // Copyright (c) 2011-2021 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.
4 
6 
8 #include <qt/transactionrecord.h>
9 
10 #include <algorithm>
11 #include <cstdlib>
12 #include <optional>
13 
15  : QSortFilterProxyModel(parent),
16  m_search_string(),
17  typeFilter(ALL_TYPES)
18 {
19 }
20 
21 bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
22 {
23  QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
24 
25  int status = index.data(TransactionTableModel::StatusRole).toInt();
27  return false;
28 
29  int type = index.data(TransactionTableModel::TypeRole).toInt();
30  if (!(TYPE(type) & typeFilter))
31  return false;
32 
33  bool involvesWatchAddress = index.data(TransactionTableModel::WatchonlyRole).toBool();
34  if (involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_No)
35  return false;
36  if (!involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_Yes)
37  return false;
38 
39  QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
40  if (dateFrom && datetime < *dateFrom) return false;
41  if (dateTo && datetime > *dateTo) return false;
42 
43  QString address = index.data(TransactionTableModel::AddressRole).toString();
44  QString label = index.data(TransactionTableModel::LabelRole).toString();
45  QString txid = index.data(TransactionTableModel::TxHashRole).toString();
46  if (!address.contains(m_search_string, Qt::CaseInsensitive) &&
47  ! label.contains(m_search_string, Qt::CaseInsensitive) &&
48  ! txid.contains(m_search_string, Qt::CaseInsensitive)) {
49  return false;
50  }
51 
52  qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
53  if (amount < minAmount)
54  return false;
55 
56  return true;
57 }
58 
59 void TransactionFilterProxy::setDateRange(const std::optional<QDateTime>& from, const std::optional<QDateTime>& to)
60 {
61  dateFrom = from;
62  dateTo = to;
63  invalidateFilter();
64 }
65 
66 void TransactionFilterProxy::setSearchString(const QString &search_string)
67 {
68  if (m_search_string == search_string) return;
69  m_search_string = search_string;
70  invalidateFilter();
71 }
72 
74 {
75  this->typeFilter = modes;
76  invalidateFilter();
77 }
78 
80 {
81  this->minAmount = minimum;
82  invalidateFilter();
83 }
84 
86 {
87  this->watchOnlyFilter = filter;
88  invalidateFilter();
89 }
90 
92 {
93  this->showInactive = _showInactive;
94  invalidateFilter();
95 }
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
std::optional< QDateTime > dateFrom
void setMinAmount(const CAmount &minimum)
void setDateRange(const std::optional< QDateTime > &from, const std::optional< QDateTime > &to)
Filter transactions between date range.
std::optional< QDateTime > dateTo
void setWatchOnlyFilter(WatchOnlyFilter filter)
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
static quint32 TYPE(int type)
void setShowInactive(bool showInactive)
Set whether to show conflicted transactions.
void setSearchString(const QString &)
void setTypeFilter(quint32 modes)
TransactionFilterProxy(QObject *parent=nullptr)
@ LabelRole
Label of address related to transaction.
@ TypeRole
Type of transaction.
@ StatusRole
Transaction status (TransactionRecord::Status)
@ DateRole
Date and time this transaction was created.
@ TxHashRole
Transaction hash.
@ AddressRole
Address of transaction.
@ WatchonlyRole
Watch-only boolean.
@ AmountRole
Net amount of transaction.
@ Conflicted
Conflicts with other transaction or mempool.