transactionfilterproxy.cpp 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  #include <qt/transactionfilterproxy.h>
   6  
   7  #include <qt/transactiontablemodel.h>
   8  #include <qt/transactionrecord.h>
   9  
  10  #include <algorithm>
  11  #include <cstdlib>
  12  #include <optional>
  13  
  14  TransactionFilterProxy::TransactionFilterProxy(QObject* parent)
  15      : QSortFilterProxyModel(parent)
  16  {
  17  }
  18  
  19  bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
  20  {
  21      QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
  22  
  23      int status = index.data(TransactionTableModel::StatusRole).toInt();
  24      if (!showInactive && status == TransactionStatus::Conflicted)
  25          return false;
  26  
  27      int type = index.data(TransactionTableModel::TypeRole).toInt();
  28      if (!(TYPE(type) & typeFilter))
  29          return false;
  30  
  31      QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
  32      if (dateFrom && datetime < *dateFrom) return false;
  33      if (dateTo && datetime > *dateTo) return false;
  34  
  35      QString address = index.data(TransactionTableModel::AddressRole).toString();
  36      QString label = index.data(TransactionTableModel::LabelRole).toString();
  37      QString txid = index.data(TransactionTableModel::TxHashRole).toString();
  38      if (!address.contains(m_search_string, Qt::CaseInsensitive) &&
  39          !  label.contains(m_search_string, Qt::CaseInsensitive) &&
  40          !   txid.contains(m_search_string, Qt::CaseInsensitive)) {
  41          return false;
  42      }
  43  
  44      qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
  45      if (amount < minAmount)
  46          return false;
  47  
  48      return true;
  49  }
  50  
  51  void TransactionFilterProxy::setDateRange(const std::optional<QDateTime>& from, const std::optional<QDateTime>& to)
  52  {
  53  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
  54      beginFilterChange();
  55  #endif
  56  
  57      dateFrom = from;
  58      dateTo = to;
  59  
  60  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
  61      endFilterChange(QSortFilterProxyModel::Direction::Rows);
  62  #else
  63      invalidateFilter();
  64  #endif
  65  }
  66  
  67  void TransactionFilterProxy::setSearchString(const QString &search_string)
  68  {
  69      if (m_search_string == search_string) return;
  70  
  71  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
  72      beginFilterChange();
  73  #endif
  74  
  75      m_search_string = search_string;
  76  
  77  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
  78      endFilterChange(QSortFilterProxyModel::Direction::Rows);
  79  #else
  80      invalidateFilter();
  81  #endif
  82  }
  83  
  84  void TransactionFilterProxy::setTypeFilter(quint32 modes)
  85  {
  86  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
  87      beginFilterChange();
  88  #endif
  89  
  90      this->typeFilter = modes;
  91  
  92  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
  93      endFilterChange(QSortFilterProxyModel::Direction::Rows);
  94  #else
  95      invalidateFilter();
  96  #endif
  97  }
  98  
  99  void TransactionFilterProxy::setMinAmount(const CAmount& minimum)
 100  {
 101  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
 102      beginFilterChange();
 103  #endif
 104  
 105      this->minAmount = minimum;
 106  
 107  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
 108      endFilterChange(QSortFilterProxyModel::Direction::Rows);
 109  #else
 110      invalidateFilter();
 111  #endif
 112  }
 113  
 114  void TransactionFilterProxy::setShowInactive(bool _showInactive)
 115  {
 116  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
 117      beginFilterChange();
 118  #endif
 119  
 120      this->showInactive = _showInactive;
 121  
 122  #if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
 123      endFilterChange(QSortFilterProxyModel::Direction::Rows);
 124  #else
 125      invalidateFilter();
 126  #endif
 127  }
 128