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