/ src / qt / transactiontablemodel.h
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