PRCYCoin  2.0.0.7rc1
P2P Digital Currency
transactionfilterproxy.cpp
Go to the documentation of this file.
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 
6 
7 #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) : QSortFilterProxyModel(parent),
20  dateFrom(MIN_DATE),
21  dateTo(MAX_DATE),
22  addrPrefix(),
23  typeFilter(COMMON_TYPES),
24  watchOnlyFilter(WatchOnlyFilter_All),
25  minAmount(0),
26  limitRows(-1),
27  showInactive(true),
28  fHideOrphans(false)
29 {
30 }
31 
32 bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const
33 {
34  QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
35 
36  int type = index.data(TransactionTableModel::TypeRole).toInt();
37  QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
38  bool involvesWatchAddress = index.data(TransactionTableModel::WatchonlyRole).toBool();
39  QString address = index.data(TransactionTableModel::AddressRole).toString();
40  QString label = index.data(TransactionTableModel::LabelRole).toString();
41  qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
42  int status = index.data(TransactionTableModel::StatusRole).toInt();
43 
45  return false;
46  if (fHideOrphans && isOrphan(status, type))
47  return false;
48  if (!(TYPE(type) & typeFilter))
49  return false;
50  if (involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_No)
51  return false;
52  if (!involvesWatchAddress && watchOnlyFilter == WatchOnlyFilter_Yes)
53  return false;
54  if (datetime < dateFrom || datetime > dateTo)
55  return false;
56  if (!address.contains(addrPrefix, Qt::CaseInsensitive) && !label.contains(addrPrefix, Qt::CaseInsensitive))
57  return false;
58  if (amount < minAmount)
59  return false;
60 
61  return true;
62 }
63 
64 void TransactionFilterProxy::setDateRange(const QDateTime& from, const QDateTime& to)
65 {
66  this->dateFrom = from;
67  this->dateTo = to;
68  invalidateFilter();
69 }
70 
72 {
73  this->fHideOrphans = fHide;
74  invalidateFilter();
75 }
76 
77 void TransactionFilterProxy::setAddressPrefix(const QString& addrPrefix)
78 {
79  this->addrPrefix = addrPrefix;
80  invalidateFilter();
81 }
82 
84 {
85  this->typeFilter = modes;
86  invalidateFilter();
87 }
88 
90 {
91  this->minAmount = minimum;
92  invalidateFilter();
93 }
94 
96 {
97  this->watchOnlyFilter = filter;
98  invalidateFilter();
99 }
100 
102 {
103  this->limitRows = limit;
104 }
105 
107 {
108  this->showInactive = showInactive;
109  invalidateFilter();
110 }
111 
112 int TransactionFilterProxy::rowCount(const QModelIndex& parent) const
113 {
114  if (limitRows != -1) {
115  return std::min(QSortFilterProxyModel::rowCount(parent), limitRows);
116  } else {
117  return QSortFilterProxyModel::rowCount(parent);
118  }
119 }
120 
121 bool TransactionFilterProxy::isOrphan(const int status, const int type)
122 {
125 }
TransactionRecord::StakeMint
@ StakeMint
Definition: transactionrecord.h:78
transactiontablemodel.h
TransactionFilterProxy::setAddressPrefix
void setAddressPrefix(const QString &addrPrefix)
Definition: transactionfilterproxy.cpp:77
TransactionTableModel::AddressRole
@ AddressRole
Address of transaction.
Definition: transactiontablemodel.h:54
TransactionFilterProxy::dateTo
QDateTime dateTo
Definition: transactionfilterproxy.h:64
TransactionTableModel::WatchonlyRole
@ WatchonlyRole
Watch-only boolean.
Definition: transactiontablemodel.h:48
TransactionStatus::Conflicted
@ Conflicted
Conflicts with other transaction or mempool.
Definition: transactionrecord.h:36
TransactionFilterProxy::filterAcceptsRow
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
Definition: transactionfilterproxy.cpp:32
TransactionFilterProxy::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: transactionfilterproxy.cpp:112
TransactionFilterProxy::WatchOnlyFilter_No
@ WatchOnlyFilter_No
Definition: transactionfilterproxy.h:35
TransactionFilterProxy::setHideOrphans
void setHideOrphans(bool fHide)
Set whether to hide orphan stakes.
Definition: transactionfilterproxy.cpp:71
TransactionRecord::MNReward
@ MNReward
Definition: transactionrecord.h:82
TransactionFilterProxy::MIN_DATE
static const QDateTime MIN_DATE
Earliest date that can be represented (far in the past)
Definition: transactionfilterproxy.h:22
TransactionFilterProxy::addrPrefix
QString addrPrefix
Definition: transactionfilterproxy.h:65
TransactionFilterProxy::setShowInactive
void setShowInactive(bool showInactive)
Set whether to show conflicted transactions.
Definition: transactionfilterproxy.cpp:106
TransactionFilterProxy::showInactive
bool showInactive
Definition: transactionfilterproxy.h:70
TransactionTableModel::AmountRole
@ AmountRole
Net amount of transaction.
Definition: transactiontablemodel.h:58
TransactionFilterProxy::TransactionFilterProxy
TransactionFilterProxy(QObject *parent=0)
Definition: transactionfilterproxy.cpp:19
TransactionFilterProxy::setMinAmount
void setMinAmount(const CAmount &minimum)
Definition: transactionfilterproxy.cpp:89
transactionfilterproxy.h
CAmount
int64_t CAmount
Amount in PRCY (Can be negative)
Definition: amount.h:17
TransactionFilterProxy::setLimit
void setLimit(int limit)
Set maximum number of rows returned, -1 if unlimited.
Definition: transactionfilterproxy.cpp:101
TransactionFilterProxy::TYPE
static quint32 TYPE(int type)
Definition: transactionfilterproxy.h:30
TransactionTableModel::StatusRole
@ StatusRole
Transaction status (TransactionRecord::Status)
Definition: transactiontablemodel.h:68
TransactionFilterProxy::limitRows
int limitRows
Definition: transactionfilterproxy.h:69
TransactionFilterProxy::typeFilter
quint32 typeFilter
Definition: transactionfilterproxy.h:66
TransactionRecord::Generated
@ Generated
Definition: transactionrecord.h:77
TransactionFilterProxy::setTypeFilter
void setTypeFilter(quint32 modes)
Definition: transactionfilterproxy.cpp:83
TransactionFilterProxy::setWatchOnlyFilter
void setWatchOnlyFilter(WatchOnlyFilter filter)
Definition: transactionfilterproxy.cpp:95
TransactionFilterProxy::MAX_DATE
static const QDateTime MAX_DATE
Last date that can be represented (far in the future)
Definition: transactionfilterproxy.h:24
TransactionFilterProxy::setDateRange
void setDateRange(const QDateTime &from, const QDateTime &to)
Definition: transactionfilterproxy.cpp:64
transactionrecord.h
TransactionFilterProxy::WatchOnlyFilter_Yes
@ WatchOnlyFilter_Yes
Definition: transactionfilterproxy.h:34
TransactionFilterProxy::fHideOrphans
bool fHideOrphans
Definition: transactionfilterproxy.h:71
TransactionFilterProxy::WatchOnlyFilter
WatchOnlyFilter
Definition: transactionfilterproxy.h:32
TransactionTableModel::DateRole
@ DateRole
Date and time this transaction was created.
Definition: transactiontablemodel.h:46
TransactionStatus::NotAccepted
@ NotAccepted
Mined but not accepted.
Definition: transactionrecord.h:40
TransactionTableModel::TypeRole
@ TypeRole
Type of transaction.
Definition: transactiontablemodel.h:44
TransactionFilterProxy::isOrphan
static bool isOrphan(const int status, const int type)
Definition: transactionfilterproxy.cpp:121
TransactionFilterProxy::watchOnlyFilter
WatchOnlyFilter watchOnlyFilter
Definition: transactionfilterproxy.h:67
TransactionTableModel::LabelRole
@ LabelRole
Label of address related to transaction.
Definition: transactiontablemodel.h:56
TransactionFilterProxy::minAmount
CAmount minAmount
Definition: transactionfilterproxy.h:68
TransactionFilterProxy::dateFrom
QDateTime dateFrom
Definition: transactionfilterproxy.h:63