transactionfilterproxy.h raw
1 // Copyright (c) 2011-present 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
5 #ifndef BITCOIN_QT_TRANSACTIONFILTERPROXY_H
6 #define BITCOIN_QT_TRANSACTIONFILTERPROXY_H
7
8 #include <consensus/amount.h>
9
10 #include <QDateTime>
11 #include <QSortFilterProxyModel>
12
13 #include <optional>
14
15 /** Filter the transaction list according to pre-specified rules. */
16 class TransactionFilterProxy : public QSortFilterProxyModel
17 {
18 Q_OBJECT
19
20 public:
21 explicit TransactionFilterProxy(QObject *parent = nullptr);
22
23 /** Type filter bit field (all types) */
24 static const quint32 ALL_TYPES = 0xFFFFFFFF;
25
26 static quint32 TYPE(int type) { return 1<<type; }
27
28 /** Filter transactions between date range. Use std::nullopt for open range. */
29 void setDateRange(const std::optional<QDateTime>& from, const std::optional<QDateTime>& to);
30 void setSearchString(const QString &);
31 /**
32 @note Type filter takes a bit field created with TYPE() or ALL_TYPES
33 */
34 void setTypeFilter(quint32 modes);
35 void setMinAmount(const CAmount& minimum);
36
37 /** Set whether to show conflicted transactions. */
38 void setShowInactive(bool showInactive);
39
40 protected:
41 bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const override;
42
43 private:
44 std::optional<QDateTime> dateFrom;
45 std::optional<QDateTime> dateTo;
46 QString m_search_string;
47 quint32 typeFilter{ALL_TYPES};
48 CAmount minAmount{0};
49 bool showInactive{true};
50 };
51
52 #endif // BITCOIN_QT_TRANSACTIONFILTERPROXY_H
53