git / moonbite-core / src/qt/transactiontablemodel.h · raw

// Copyright (c) 2011-2018 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_QT_TRANSACTIONTABLEMODEL_H#define BITCOIN_QT_TRANSACTIONTABLEMODEL_H#include <qt/bitcoinunits.h>#include <QAbstractTableModel>#include <QStringList>#include <memory>namespace interfaces {class Handler;}class PlatformStyle;class WalletTxRecord;class TransactionTablePriv;class WalletModel;/** UI model for the transaction table of a wallet. */class TransactionTableModel : public QAbstractTableModel{    Q_OBJECTpublic:    explicit TransactionTableModel(const PlatformStyle *platformStyle, WalletModel *parent = nullptr);    ~TransactionTableModel();    enum ColumnIndex {        Status = 0,        Watchonly = 1,        Date = 2,        Type = 3,        ToAddress = 4,        Amount = 5    };    /** Roles to get specific information from a transaction row.        These are independent of column.    */    enum RoleIndex {        /** Type of transaction */        TypeRole = Qt::UserRole,        /** Date and time this transaction was created */        DateRole,        /** Watch-only boolean */        WatchonlyRole,        /** Watch-only icon */        WatchonlyDecorationRole,        /** Long description (HTML format) */        LongDescriptionRole,        /** Address of transaction */        AddressRole,        /** Label of address related to transaction */        LabelRole,        /** Net amount of transaction */        AmountRole,        /** Transaction hash */        TxHashRole,        /** Transaction data, hex-encoded */        TxHexRole,        /** Whole transaction as plain text */        TxPlainTextRole,        /** Is transaction confirmed? */        ConfirmedRole,        /** Formatted amount, without brackets when unconfirmed */        FormattedAmountRole,        /** Transaction status (WalletTxRecord::Status) */        StatusRole,        /** Unprocessed icon */        RawDecorationRole,    };    int rowCount(const QModelIndex &parent) const override;    int columnCount(const QModelIndex &parent) const override;    QVariant data(const QModelIndex &index, int role) const override;    QVariant headerData(int section, Qt::Orientation orientation, int role) const override;    QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const override;    bool processingQueuedTransactions() const { return fProcessingQueuedTransactions; }private:    WalletModel *walletModel;    std::unique_ptr<interfaces::Handler> m_handler_transaction_changed;    std::unique_ptr<interfaces::Handler> m_handler_show_progress;    QStringList columns;    TransactionTablePriv *priv;    bool fProcessingQueuedTransactions;    const PlatformStyle *platformStyle;    void subscribeToCoreSignals();    void unsubscribeFromCoreSignals();    QString lookupAddress(const std::string &address, bool tooltip) const;    QVariant addressColor(const WalletTxRecord *wtx) const;    QString formatTxStatus(const WalletTxRecord *wtx) const;    QString formatTxDate(const WalletTxRecord *wtx) const;    QString formatTxType(const WalletTxRecord *wtx) const;    QString formatTxToAddress(const WalletTxRecord *wtx, bool tooltip) const;    QString formatTxAmount(const WalletTxRecord *wtx, bool showUnconfirmed=true, BitcoinUnits::SeparatorStyle separators=BitcoinUnits::SeparatorStyle::STANDARD) const;    QString formatTooltip(const WalletTxRecord *rec) const;    QVariant txStatusDecoration(const WalletTxRecord *wtx) const;    QVariant txWatchonlyDecoration(const WalletTxRecord *wtx) const;    QVariant txAddressDecoration(const WalletTxRecord *wtx) const;public Q_SLOTS:    /* New transaction, or transaction changed status */    void updateTransaction(const QString &hash, int status, bool showTransaction);    void updateConfirmations();    void updateDisplayUnit();    /** Updates the column title to "Amount (DisplayUnit)" and emits headerDataChanged() signal for table headers to react. */    void updateAmountColumnTitle();    /* Needed to update fProcessingQueuedTransactions through a QueuedConnection */    void setProcessingQueuedTransactions(bool value) { fProcessingQueuedTransactions = value; }    friend class TransactionTablePriv;};#endif // BITCOIN_QT_TRANSACTIONTABLEMODEL_H