transactiontablemodel.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_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