/ src / qt / recentrequeststablemodel.h
recentrequeststablemodel.h
  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  
  5  #ifndef BITCOIN_QT_RECENTREQUESTSTABLEMODEL_H
  6  #define BITCOIN_QT_RECENTREQUESTSTABLEMODEL_H
  7  
  8  #include <qt/sendcoinsrecipient.h>
  9  
 10  #include <string>
 11  
 12  #include <QAbstractTableModel>
 13  #include <QStringList>
 14  #include <QDateTime>
 15  
 16  class WalletModel;
 17  
 18  class RecentRequestEntry
 19  {
 20  public:
 21      RecentRequestEntry() : nVersion(RecentRequestEntry::CURRENT_VERSION) {}
 22  
 23      static const int CURRENT_VERSION = 1;
 24      int nVersion;
 25      int64_t id{0};
 26      QDateTime date;
 27      SendCoinsRecipient recipient;
 28  
 29      SERIALIZE_METHODS(RecentRequestEntry, obj) {
 30          unsigned int date_timet;
 31          SER_WRITE(obj, date_timet = obj.date.toSecsSinceEpoch());
 32          READWRITE(obj.nVersion, obj.id, date_timet, obj.recipient);
 33          SER_READ(obj, obj.date = QDateTime::fromSecsSinceEpoch(date_timet));
 34      }
 35  };
 36  
 37  class RecentRequestEntryLessThan
 38  {
 39  public:
 40      RecentRequestEntryLessThan(int nColumn, Qt::SortOrder fOrder):
 41          column(nColumn), order(fOrder) {}
 42      bool operator()(const RecentRequestEntry& left, const RecentRequestEntry& right) const;
 43  
 44  private:
 45      int column;
 46      Qt::SortOrder order;
 47  };
 48  
 49  /** Model for list of recently generated payment requests / bitcoin: URIs.
 50   * Part of wallet model.
 51   */
 52  class RecentRequestsTableModel: public QAbstractTableModel
 53  {
 54      Q_OBJECT
 55  
 56  public:
 57      explicit RecentRequestsTableModel(WalletModel *parent);
 58      ~RecentRequestsTableModel();
 59  
 60      enum ColumnIndex {
 61          Date = 0,
 62          Label = 1,
 63          Message = 2,
 64          Amount = 3,
 65          NUMBER_OF_COLUMNS
 66      };
 67  
 68      /** @name Methods overridden from QAbstractTableModel
 69          @{*/
 70      int rowCount(const QModelIndex &parent) const override;
 71      int columnCount(const QModelIndex &parent) const override;
 72      QVariant data(const QModelIndex &index, int role) const override;
 73      bool setData(const QModelIndex &index, const QVariant &value, int role) override;
 74      QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
 75      QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
 76      bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
 77      Qt::ItemFlags flags(const QModelIndex &index) const override;
 78      void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
 79      /*@}*/
 80  
 81      const RecentRequestEntry &entry(int row) const { return list[row]; }
 82      void addNewRequest(const SendCoinsRecipient &recipient);
 83      void addNewRequest(const std::string &recipient);
 84      void addNewRequest(RecentRequestEntry &recipient);
 85  
 86  public Q_SLOTS:
 87      void updateDisplayUnit();
 88  
 89  private:
 90      WalletModel *walletModel;
 91      QStringList columns;
 92      QList<RecentRequestEntry> list;
 93      int64_t nReceiveRequestsMaxId{0};
 94  
 95      /** Updates the column title to "Amount (DisplayUnit)" and emits headerDataChanged() signal for table headers to react. */
 96      void updateAmountColumnTitle();
 97      /** Gets title for amount column including current display unit if optionsModel reference available. */
 98      QString getAmountTitle();
 99  };
100  
101  #endif // BITCOIN_QT_RECENTREQUESTSTABLEMODEL_H