Split off WalletModel from ClientModel, to be able to support multi-wallets in future
[novacoin.git] / src / qt / bitcoingui.h
1 #ifndef BITCOINGUI_H
2 #define BITCOINGUI_H
3
4 #include <QMainWindow>
5 #include <QSystemTrayIcon>
6
7 class TransactionTableModel;
8 class ClientModel;
9 class WalletModel;
10 class TransactionView;
11
12 QT_BEGIN_NAMESPACE
13 class QLabel;
14 class QLineEdit;
15 class QTableView;
16 class QAbstractItemModel;
17 class QModelIndex;
18 class QProgressBar;
19 QT_END_NAMESPACE
20
21 class BitcoinGUI : public QMainWindow
22 {
23     Q_OBJECT
24 public:
25     explicit BitcoinGUI(QWidget *parent = 0);
26     void setClientModel(ClientModel *clientModel);
27     void setWalletModel(WalletModel *walletModel);
28     
29     /* Transaction table tab indices */
30     enum {
31         AllTransactions = 0,
32         SentReceived = 1,
33         Sent = 2,
34         Received = 3
35     } TabIndex;
36
37 protected:
38     void changeEvent(QEvent *e);
39     void closeEvent(QCloseEvent *event);
40
41 private:
42     ClientModel *clientModel;
43     WalletModel *walletModel;
44
45     QLineEdit *address;
46     QLabel *labelBalance;
47     QLabel *labelConnections;
48     QLabel *labelConnectionsIcon;
49     QLabel *labelBlocks;
50     QLabel *labelTransactions;
51     QLabel *progressBarLabel;
52     QProgressBar *progressBar;
53
54     QAction *quit;
55     QAction *sendcoins;
56     QAction *addressbook;
57     QAction *about;
58     QAction *receivingAddresses;
59     QAction *options;
60     QAction *openBitcoin;
61
62     QSystemTrayIcon *trayIcon;
63     TransactionView *transactionView;
64
65     void createActions();
66     QWidget *createTabs();
67     void createTrayIcon();
68
69 public slots:
70     void setBalance(qint64 balance);
71     void setAddress(const QString &address);
72     void setNumConnections(int count);
73     void setNumBlocks(int count);
74     void setNumTransactions(int count);
75     void error(const QString &title, const QString &message);
76     /* It is currently not possible to pass a return value to another thread through
77        BlockingQueuedConnection, so use an indirected pointer.
78        http://bugreports.qt.nokia.com/browse/QTBUG-10440
79     */
80     void askFee(qint64 nFeeRequired, bool *payFee);
81
82 private slots:
83     void sendcoinsClicked();
84     void addressbookClicked();
85     void optionsClicked();
86     void receivingAddressesClicked();
87     void aboutClicked();
88     void newAddressClicked();
89     void copyClipboardClicked();
90     void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
91     void transactionDetails(const QModelIndex& idx);
92     void incomingTransaction(const QModelIndex & parent, int start, int end);
93 };
94
95 #endif