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_COINCONTROLDIALOG_H
6 #define BITCOIN_QT_COINCONTROLDIALOG_H
7 
8 #include <amount.h>
9 
10 #include <QAbstractButton>
11 #include <QAction>
12 #include <QDialog>
13 #include <QList>
14 #include <QMenu>
15 #include <QPoint>
16 #include <QString>
17 #include <QTreeWidgetItem>
18 
19 class PlatformStyle;
20 class WalletModel;
21 
22 class CCoinControl;
23 
24 namespace Ui {
25     class CoinControlDialog;
26 }
27 
28 #define ASYMP_UTF8 "\xE2\x89\x88"
29 
30 class CCoinControlWidgetItem : public QTreeWidgetItem
31 {
32 public:
QTreeWidgetItem(parent,type)33     explicit CCoinControlWidgetItem(QTreeWidget *parent, int type = Type) : QTreeWidgetItem(parent, type) {}
QTreeWidgetItem(parent,type)34     explicit CCoinControlWidgetItem(QTreeWidgetItem *parent, int type = Type) : QTreeWidgetItem(parent, type) {}
35 
36     bool operator<(const QTreeWidgetItem &other) const override;
37 };
38 
39 
40 class CoinControlDialog : public QDialog
41 {
42     Q_OBJECT
43 
44 public:
45     explicit CoinControlDialog(CCoinControl& coin_control, WalletModel* model, const PlatformStyle *platformStyle, QWidget *parent = nullptr);
46     ~CoinControlDialog();
47 
48     // static because also called from sendcoinsdialog
49     static void updateLabels(CCoinControl& m_coin_control, WalletModel*, QDialog*);
50 
51     static QList<CAmount> payAmounts;
52     static bool fSubtractFeeFromAmount;
53 
54 protected:
55     void changeEvent(QEvent* e) override;
56 
57 private:
58     Ui::CoinControlDialog *ui;
59     CCoinControl& m_coin_control;
60     WalletModel *model;
61     int sortColumn;
62     Qt::SortOrder sortOrder;
63 
64     QMenu *contextMenu;
65     QTreeWidgetItem *contextMenuItem;
66     QAction *copyTransactionHashAction;
67     QAction *lockAction;
68     QAction *unlockAction;
69 
70     const PlatformStyle *platformStyle;
71 
72     void sortView(int, Qt::SortOrder);
73     void updateView();
74 
75     enum
76     {
77         COLUMN_CHECKBOX = 0,
78         COLUMN_AMOUNT,
79         COLUMN_LABEL,
80         COLUMN_ADDRESS,
81         COLUMN_DATE,
82         COLUMN_CONFIRMATIONS,
83     };
84 
85     enum
86     {
87         TxHashRole = Qt::UserRole,
88         VOutRole
89     };
90 
91     friend class CCoinControlWidgetItem;
92 
93 private Q_SLOTS:
94     void showMenu(const QPoint &);
95     void copyAmount();
96     void copyLabel();
97     void copyAddress();
98     void copyTransactionHash();
99     void lockCoin();
100     void unlockCoin();
101     void clipboardQuantity();
102     void clipboardAmount();
103     void clipboardFee();
104     void clipboardAfterFee();
105     void clipboardBytes();
106     void clipboardLowOutput();
107     void clipboardChange();
108     void radioTreeMode(bool);
109     void radioListMode(bool);
110     void viewItemChanged(QTreeWidgetItem*, int);
111     void headerSectionClicked(int);
112     void buttonBoxClicked(QAbstractButton*);
113     void buttonSelectAllClicked();
114     void updateLabelLocked();
115 };
116 
117 #endif // BITCOIN_QT_COINCONTROLDIALOG_H
118