recentrequeststablemodel.h
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