recentrequeststablemodel.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_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() = default;
  22  
  23      static const int CURRENT_VERSION = 1;
  24      int nVersion{RecentRequestEntry::CURRENT_VERSION};
  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
 102