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