transactiontablemodel.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_TRANSACTIONTABLEMODEL_H
6 #define BITCOIN_QT_TRANSACTIONTABLEMODEL_H
7
8 #include <qt/bitcoinunits.h>
9
10 #include <QAbstractTableModel>
11 #include <QStringList>
12
13 #include <memory>
14
15 namespace interfaces {
16 class Handler;
17 }
18
19 class PlatformStyle;
20 class TransactionRecord;
21 class TransactionTablePriv;
22 class WalletModel;
23
24 /** UI model for the transaction table of a wallet.
25 */
26 class TransactionTableModel : public QAbstractTableModel
27 {
28 Q_OBJECT
29
30 public:
31 explicit TransactionTableModel(const PlatformStyle *platformStyle, WalletModel *parent = nullptr);
32 ~TransactionTableModel();
33
34 enum ColumnIndex {
35 Status = 0,
36 Date = 1,
37 Type = 2,
38 ToAddress = 3,
39 Amount = 4
40 };
41
42 /** Roles to get specific information from a transaction row.
43 These are independent of column.
44 */
45 enum RoleIndex {
46 /** Type of transaction */
47 TypeRole = Qt::UserRole,
48 /** Date and time this transaction was created */
49 DateRole,
50 /** Long description (HTML format) */
51 LongDescriptionRole,
52 /** Address of transaction */
53 AddressRole,
54 /** Label of address related to transaction */
55 LabelRole,
56 /** Net amount of transaction */
57 AmountRole,
58 /** Transaction hash */
59 TxHashRole,
60 /** Transaction data, hex-encoded */
61 TxHexRole,
62 /** Whole transaction as plain text */
63 TxPlainTextRole,
64 /** Is transaction confirmed? */
65 ConfirmedRole,
66 /** Formatted amount, without brackets when unconfirmed */
67 FormattedAmountRole,
68 /** Transaction status (TransactionRecord::Status) */
69 StatusRole,
70 /** Unprocessed icon */
71 RawDecorationRole,
72 };
73
74 int rowCount(const QModelIndex &parent) const override;
75 int columnCount(const QModelIndex &parent) const override;
76 QVariant data(const QModelIndex &index, int role) const override;
77 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
78 QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const override;
79 bool processingQueuedTransactions() const { return fProcessingQueuedTransactions; }
80
81 private:
82 WalletModel *walletModel;
83 std::unique_ptr<interfaces::Handler> m_handler_transaction_changed;
84 std::unique_ptr<interfaces::Handler> m_handler_show_progress;
85 QStringList columns;
86 TransactionTablePriv *priv;
87 bool fProcessingQueuedTransactions{false};
88 const PlatformStyle *platformStyle;
89
90 void subscribeToCoreSignals();
91 void unsubscribeFromCoreSignals();
92
93 QString lookupAddress(const std::string &address, bool tooltip) const;
94 QVariant addressColor(const TransactionRecord *wtx) const;
95 QString formatTxStatus(const TransactionRecord *wtx) const;
96 QString formatTxDate(const TransactionRecord *wtx) const;
97 QString formatTxType(const TransactionRecord *wtx) const;
98 QString formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const;
99 QString formatTxAmount(const TransactionRecord *wtx, bool showUnconfirmed=true, BitcoinUnits::SeparatorStyle separators=BitcoinUnits::SeparatorStyle::STANDARD) const;
100 QString formatTooltip(const TransactionRecord *rec) const;
101 QVariant txStatusDecoration(const TransactionRecord *wtx) const;
102 QVariant txAddressDecoration(const TransactionRecord *wtx) const;
103
104 public Q_SLOTS:
105 /* New transaction, or transaction changed status */
106 void updateTransaction(const QString &hash, int status, bool showTransaction);
107 void updateConfirmations();
108 void updateDisplayUnit();
109 /** Updates the column title to "Amount (DisplayUnit)" and emits headerDataChanged() signal for table headers to react. */
110 void updateAmountColumnTitle();
111 /* Needed to update fProcessingQueuedTransactions through a QueuedConnection */
112 void setProcessingQueuedTransactions(bool value) { fProcessingQueuedTransactions = value; }
113
114 friend class TransactionTablePriv;
115 };
116
117 #endif // BITCOIN_QT_TRANSACTIONTABLEMODEL_H
118