Line data Source code
1 : // Copyright (c) 2011-2019 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_TRANSACTIONVIEW_H 6 : #define BITCOIN_QT_TRANSACTIONVIEW_H 7 : 8 : #include <qt/guiutil.h> 9 : 10 : #include <uint256.h> 11 : 12 : #include <QWidget> 13 : #include <QKeyEvent> 14 : 15 : class PlatformStyle; 16 : class TransactionFilterProxy; 17 : class WalletModel; 18 : 19 : QT_BEGIN_NAMESPACE 20 : class QComboBox; 21 : class QDateTimeEdit; 22 : class QFrame; 23 : class QLineEdit; 24 : class QMenu; 25 : class QModelIndex; 26 : class QTableView; 27 : QT_END_NAMESPACE 28 : 29 : /** Widget showing the transaction list for a wallet, including a filter row. 30 : Using the filter row, the user can view or export a subset of the transactions. 31 : */ 32 0 : class TransactionView : public QWidget 33 : { 34 0 : Q_OBJECT 35 : 36 : public: 37 : explicit TransactionView(const PlatformStyle *platformStyle, QWidget *parent = nullptr); 38 : 39 : void setModel(WalletModel *model); 40 : 41 : // Date ranges for filter 42 : enum DateEnum 43 : { 44 : All, 45 : Today, 46 : ThisWeek, 47 : ThisMonth, 48 : LastMonth, 49 : ThisYear, 50 : Range 51 : }; 52 : 53 : enum ColumnWidths { 54 : STATUS_COLUMN_WIDTH = 30, 55 : WATCHONLY_COLUMN_WIDTH = 23, 56 : DATE_COLUMN_WIDTH = 120, 57 : TYPE_COLUMN_WIDTH = 113, 58 : AMOUNT_MINIMUM_COLUMN_WIDTH = 120, 59 : MINIMUM_COLUMN_WIDTH = 23 60 : }; 61 : 62 : private: 63 : WalletModel *model{nullptr}; 64 : TransactionFilterProxy *transactionProxyModel{nullptr}; 65 : QTableView *transactionView{nullptr}; 66 : 67 : QComboBox *dateWidget; 68 : QComboBox *typeWidget; 69 : QComboBox *watchOnlyWidget; 70 : QLineEdit *search_widget; 71 : QLineEdit *amountWidget; 72 : 73 : QMenu *contextMenu; 74 : 75 : QFrame *dateRangeWidget; 76 : QDateTimeEdit *dateFrom; 77 : QDateTimeEdit *dateTo; 78 : QAction *abandonAction{nullptr}; 79 : QAction *bumpFeeAction{nullptr}; 80 : QAction *copyAddressAction{nullptr}; 81 : QAction *copyLabelAction{nullptr}; 82 : 83 : QWidget *createDateRangeWidget(); 84 : 85 : GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer{nullptr}; 86 : 87 : virtual void resizeEvent(QResizeEvent* event) override; 88 : 89 : bool eventFilter(QObject *obj, QEvent *event) override; 90 : 91 : private Q_SLOTS: 92 : void contextualMenu(const QPoint &); 93 : void dateRangeChanged(); 94 : void showDetails(); 95 : void copyAddress(); 96 : void editLabel(); 97 : void copyLabel(); 98 : void copyAmount(); 99 : void copyTxID(); 100 : void copyTxHex(); 101 : void copyTxPlainText(); 102 : void openThirdPartyTxUrl(QString url); 103 : void updateWatchOnlyColumn(bool fHaveWatchOnly); 104 : void abandonTx(); 105 : void bumpFee(); 106 : 107 : Q_SIGNALS: 108 : void doubleClicked(const QModelIndex&); 109 : 110 : /** Fired when a message should be reported to the user */ 111 : void message(const QString &title, const QString &message, unsigned int style); 112 : 113 : void bumpedFee(const uint256& txid); 114 : 115 : public Q_SLOTS: 116 : void chooseDate(int idx); 117 : void chooseType(int idx); 118 : void chooseWatchonly(int idx); 119 : void changedAmount(); 120 : void changedSearch(); 121 : void exportClicked(); 122 : void focusTransaction(const QModelIndex&); 123 : void focusTransaction(const uint256& txid); 124 : }; 125 : 126 : #endif // BITCOIN_QT_TRANSACTIONVIEW_H