aboutsummaryrefslogtreecommitdiff
path: root/src/qt/bitcoingui.h
blob: 1338998a98c9e4d9e2f725a6378e414bae839d35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifndef BITCOINGUI_H
#define BITCOINGUI_H

#include <QMainWindow>
#include <QSystemTrayIcon>

class TransactionTableModel;
class ClientModel;
class WalletModel;
class TransactionView;
class OverviewPage;
class AddressBookPage;
class SendCoinsDialog;
class Notificator;

QT_BEGIN_NAMESPACE
class QLabel;
class QLineEdit;
class QTableView;
class QAbstractItemModel;
class QModelIndex;
class QProgressBar;
class QStackedWidget;
class QUrl;
QT_END_NAMESPACE

class BitcoinGUI : public QMainWindow
{
    Q_OBJECT
public:
    explicit BitcoinGUI(QWidget *parent = 0);
    ~BitcoinGUI();

    void setClientModel(ClientModel *clientModel);
    void setWalletModel(WalletModel *walletModel);
    
    /* Transaction table tab indices */
    enum {
        AllTransactions = 0,
        SentReceived = 1,
        Sent = 2,
        Received = 3
    } TabIndex;

protected:
    void changeEvent(QEvent *e);
    void closeEvent(QCloseEvent *event);
    void dragEnterEvent(QDragEnterEvent *event);
    void dropEvent(QDropEvent *event);

private:
    ClientModel *clientModel;
    WalletModel *walletModel;

    QStackedWidget *centralWidget;

    QWidget *dummyWidget;

    OverviewPage *overviewPage;
    QWidget *transactionsPage;
    AddressBookPage *addressBookPage;
    AddressBookPage *receiveCoinsPage;
    SendCoinsDialog *sendCoinsPage;

    QLabel *labelEncryptionIcon;
    QLabel *labelConnectionsIcon;
    QLabel *labelBlocksIcon;
    QLabel *progressBarLabel;
    QProgressBar *progressBar;

    QMenuBar *appMenuBar;
    QAction *overviewAction;
    QAction *historyAction;
    QAction *quitAction;
    QAction *sendCoinsAction;
    QAction *addressBookAction;
    QAction *aboutAction;
    QAction *receiveCoinsAction;
    QAction *optionsAction;
    QAction *openBitcoinAction;
    QAction *exportAction;
    QAction *encryptWalletAction;
    QAction *changePassphraseAction;
    QAction *aboutQtAction;

    QSystemTrayIcon *trayIcon;
    Notificator *notificator;
    TransactionView *transactionView;

    QMovie *syncIconMovie;

    void createActions();
    void createMenuBar();
    void createToolBars();
    QWidget *createTabs();
    void createTrayIcon();

public slots:
    void setNumConnections(int count);
    void setNumBlocks(int count);
    void setEncryptionStatus(int status);
    /** Set the status bar text if there are any warnings (removes sync progress bar if applicable) */
    void refreshStatusBar();

    void error(const QString &title, const QString &message);
    /* It is currently not possible to pass a return value to another thread through
       BlockingQueuedConnection, so use an indirected pointer.
       http://bugreports.qt.nokia.com/browse/QTBUG-10440
    */
    void askFee(qint64 nFeeRequired, bool *payFee);

    void showNormal();

private slots:
    // UI pages
    void gotoOverviewPage();
    void gotoHistoryPage();
    void gotoAddressBookPage();
    void gotoReceiveCoinsPage();
    void gotoSendCoinsPage();

    // Misc actions
    void optionsClicked();
    void aboutClicked();
#ifndef Q_WS_MAC
    void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
#endif
    void incomingTransaction(const QModelIndex & parent, int start, int end);
    void encryptWallet(bool status);
    void changePassphrase();
    void unlockWallet();
};

#endif