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