BSHA3  0.17.99
P2P Blockchain, based on Bitcoin
bitcoingui.h
Go to the documentation of this file.
1 // Copyright (c) 2011-2018 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_BITCOINGUI_H
6 #define BITCOIN_QT_BITCOINGUI_H
7 
8 #if defined(HAVE_CONFIG_H)
10 #endif
11 
12 #include <qt/optionsdialog.h>
13 
14 #include <amount.h>
15 
16 #include <QLabel>
17 #include <QMainWindow>
18 #include <QMap>
19 #include <QMenu>
20 #include <QPoint>
21 #include <QSystemTrayIcon>
22 
23 #include <memory>
24 
25 class ClientModel;
26 class NetworkStyle;
27 class Notificator;
28 class OptionsModel;
29 class PlatformStyle;
30 class RPCConsole;
31 class SendCoinsRecipient;
33 class WalletFrame;
34 class WalletModel;
35 class HelpMessageDialog;
36 class ModalOverlay;
37 
38 namespace interfaces {
39 class Handler;
40 class Node;
41 }
42 
43 QT_BEGIN_NAMESPACE
44 class QAction;
45 class QComboBox;
46 class QProgressBar;
47 class QProgressDialog;
48 QT_END_NAMESPACE
49 
50 namespace GUIUtil {
51 class ClickableLabel;
53 }
54 
59 class BitcoinGUI : public QMainWindow
60 {
61  Q_OBJECT
62 
63 public:
64  static const std::string DEFAULT_UIPLATFORM;
65 
66  explicit BitcoinGUI(interfaces::Node& node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent = 0);
67  ~BitcoinGUI();
68 
73 
74 #ifdef ENABLE_WALLET
75 
79  bool addWallet(WalletModel *walletModel);
80  bool removeWallet(WalletModel* walletModel);
81  void removeAllWallets();
82 #endif // ENABLE_WALLET
83  bool enableWallet = false;
84 
85 protected:
86  void changeEvent(QEvent *e);
87  void closeEvent(QCloseEvent *event);
88  void showEvent(QShowEvent *event);
89  void dragEnterEvent(QDragEnterEvent *event);
90  void dropEvent(QDropEvent *event);
91  bool eventFilter(QObject *object, QEvent *event);
92 
93 private:
95  std::unique_ptr<interfaces::Handler> m_handler_message_box;
96  std::unique_ptr<interfaces::Handler> m_handler_question;
99 
101  QLabel* labelWalletEncryptionIcon = nullptr;
102  QLabel* labelWalletHDStatusIcon = nullptr;
106  QLabel* progressBarLabel = nullptr;
108  QProgressDialog* progressDialog = nullptr;
109 
110  QMenuBar* appMenuBar = nullptr;
111  QToolBar* appToolBar = nullptr;
112  QAction* overviewAction = nullptr;
113  QAction* historyAction = nullptr;
114  QAction* quitAction = nullptr;
115  QAction* sendCoinsAction = nullptr;
116  QAction* sendCoinsMenuAction = nullptr;
117  QAction* usedSendingAddressesAction = nullptr;
118  QAction* usedReceivingAddressesAction = nullptr;
119  QAction* signMessageAction = nullptr;
120  QAction* verifyMessageAction = nullptr;
121  QAction* aboutAction = nullptr;
122  QAction* receiveCoinsAction = nullptr;
123  QAction* receiveCoinsMenuAction = nullptr;
124  QAction* optionsAction = nullptr;
125  QAction* toggleHideAction = nullptr;
126  QAction* encryptWalletAction = nullptr;
127  QAction* backupWalletAction = nullptr;
128  QAction* changePassphraseAction = nullptr;
129  QAction* aboutQtAction = nullptr;
130  QAction* openRPCConsoleAction = nullptr;
131  QAction* openAction = nullptr;
132  QAction* showHelpMessageAction = nullptr;
133  QAction* m_wallet_selector_label_action = nullptr;
134  QAction* m_wallet_selector_action = nullptr;
135 
136  QLabel *m_wallet_selector_label = nullptr;
137  QComboBox* m_wallet_selector = nullptr;
138 
139  QSystemTrayIcon* trayIcon = nullptr;
140  QMenu* trayIconMenu = nullptr;
142  RPCConsole* rpcConsole = nullptr;
145 
147  int prevBlocks = 0;
148  int spinnerFrame = 0;
149 
151 
153  void createActions();
155  void createMenuBar();
157  void createToolBars();
159  void createTrayIcon(const NetworkStyle *networkStyle);
161  void createTrayIconMenu();
162 
164  void setWalletActionsEnabled(bool enabled);
165 
167  void subscribeToCoreSignals();
170 
172  void updateNetworkState();
173 
175 
178 
179 Q_SIGNALS:
181  void receivedURI(const QString &uri);
182 
183 public Q_SLOTS:
185  void setNumConnections(int count);
187  void setNetworkActive(bool networkActive);
189  void setNumBlocks(int count, const QDateTime& blockDate, double nVerificationProgress, bool headers);
190 
198  void message(const QString &title, const QString &message, unsigned int style, bool *ret = nullptr);
199 
200 #ifdef ENABLE_WALLET
201  bool setCurrentWallet(const QString& name);
202  bool setCurrentWalletBySelectorIndex(int index);
205  void updateWalletStatus();
206 
207 private:
212  void setEncryptionStatus(int status);
213 
218  void setHDStatus(int hdEnabled);
219 
220 public Q_SLOTS:
221  bool handlePaymentRequest(const SendCoinsRecipient& recipient);
222 
224  void incomingTransaction(const QString& date, int unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName);
225 #endif // ENABLE_WALLET
226 
227 private:
229  void updateProxyIcon();
230 
231 public Q_SLOTS:
232 #ifdef ENABLE_WALLET
233 
234  void gotoOverviewPage();
236  void gotoHistoryPage();
238  void gotoReceiveCoinsPage();
240  void gotoSendCoinsPage(QString addr = "");
241 
243  void gotoSignMessageTab(QString addr = "");
245  void gotoVerifyMessageTab(QString addr = "");
246 
248  void openClicked();
249 #endif // ENABLE_WALLET
250 
251  void optionsClicked();
253  void aboutClicked();
255  void showDebugWindow();
259  void showHelpMessageClicked();
260 #ifndef Q_OS_MAC
261 
262  void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
263 #endif
264 
267  void showNormalIfMinimized(bool fToggleHidden);
269  void toggleHidden();
270 
272  void detectShutdown();
273 
275  void showProgress(const QString &title, int nProgress);
276 
278  void setTrayIconVisible(bool);
279 
280  void showModalOverlay();
281 };
282 
283 class UnitDisplayStatusBarControl : public QLabel
284 {
285  Q_OBJECT
286 
287 public:
288  explicit UnitDisplayStatusBarControl(const PlatformStyle *platformStyle);
291 
292 protected:
294  void mousePressEvent(QMouseEvent *event);
295 
296 private:
298  QMenu* menu;
299 
301  void onDisplayUnitsClicked(const QPoint& point);
303  void createContextMenu();
304 
305 private Q_SLOTS:
307  void updateDisplayUnit(int newUnits);
309  void onMenuSelection(QAction* action);
310 };
311 
312 #endif // BITCOIN_QT_BITCOINGUI_H
void subscribeToCoreSignals()
Connect core signals to GUI client.
void unsubscribeFromCoreSignals()
Disconnect core signals from GUI client.
void setNetworkActive(bool networkActive)
Set network state shown in the UI.
Definition: bitcoingui.cpp:762
QAction * receiveCoinsAction
Definition: bitcoingui.h:122
UnitDisplayStatusBarControl * unitDisplayControl
Definition: bitcoingui.h:100
Local Bitcoin RPC console.
Definition: rpcconsole.h:36
QMenuBar * appMenuBar
Definition: bitcoingui.h:110
void message(const QString &title, const QString &message, unsigned int style, bool *ret=nullptr)
Notify the user of an event from the core network or transaction handling code.
Definition: bitcoingui.cpp:897
QAction * signMessageAction
Definition: bitcoingui.h:119
void receivedURI(const QString &uri)
Signal raised when a URI was entered or dragged to the GUI.
Utility functions used by the Bitcoin Qt UI.
Definition: bitcoingui.h:50
QAction * aboutAction
Definition: bitcoingui.h:121
void updateNetworkState()
Update UI with latest network info from model.
Definition: bitcoingui.cpp:728
QLabel * labelWalletHDStatusIcon
Definition: bitcoingui.h:102
void mousePressEvent(QMouseEvent *event)
So that it responds to left-button clicks.
void showNormalIfMinimized()
Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHid...
Definition: bitcoingui.h:266
UnitDisplayStatusBarControl(const PlatformStyle *platformStyle)
QProgressDialog * progressDialog
Definition: bitcoingui.h:108
QMenu * trayIconMenu
Definition: bitcoingui.h:140
void showDebugWindow()
Show debug window.
Definition: bitcoingui.cpp:664
GUIUtil::ClickableLabel * labelProxyIcon
Definition: bitcoingui.h:103
ClientModel * clientModel
Definition: bitcoingui.h:97
void createToolBars()
Create the toolbars.
Definition: bitcoingui.cpp:410
ModalOverlay * modalOverlay
Definition: bitcoingui.h:144
void createTrayIconMenu()
Create system tray menu (or setup the dock menu)
Definition: bitcoingui.cpp:599
RPCConsole * rpcConsole
Definition: bitcoingui.h:142
QAction * m_wallet_selector_action
Definition: bitcoingui.h:134
QAction * overviewAction
Definition: bitcoingui.h:112
UniValue ret(UniValue::VARR)
Definition: rpcwallet.cpp:1140
QAction * verifyMessageAction
Definition: bitcoingui.h:120
QAction * quitAction
Definition: bitcoingui.h:114
void dropEvent(QDropEvent *event)
QAction * historyAction
Definition: bitcoingui.h:113
void setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
Definition: bitcoingui.cpp:568
QAction * aboutQtAction
Definition: bitcoingui.h:129
Bitcoin GUI main class.
Definition: bitcoingui.h:59
HelpMessageDialog * helpMessageDialog
Definition: bitcoingui.h:143
QLabel * progressBarLabel
Definition: bitcoingui.h:106
QSystemTrayIcon * trayIcon
Definition: bitcoingui.h:139
QAction * showHelpMessageAction
Definition: bitcoingui.h:132
Modal overlay to display information about the chain-sync state.
Definition: modaloverlay.h:19
GUIUtil::ClickableLabel * connectionsControl
Definition: bitcoingui.h:104
QAction * backupWalletAction
Definition: bitcoingui.h:127
void setOptionsModel(OptionsModel *optionsModel)
Lets the control know about the Options Model (and its signals)
void openOptionsDialogWithTab(OptionsDialog::Tab tab)
Open the OptionsDialog on the specified tab index.
Definition: bitcoingui.cpp:776
QAction * usedReceivingAddressesAction
Definition: bitcoingui.h:118
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
BitcoinGUI(interfaces::Node &node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent=0)
Definition: bitcoingui.cpp:73
void setClientModel(ClientModel *clientModel)
Set the client model.
Definition: bitcoingui.cpp:446
void showModalOverlay()
const PlatformStyle * platformStyle
Definition: bitcoingui.h:150
QAction * toggleHideAction
Definition: bitcoingui.h:125
void showProgress(const QString &title, int nProgress)
Show progress dialog e.g.
QAction * m_wallet_selector_label_action
Definition: bitcoingui.h:133
OptionsModel * optionsModel
Definition: bitcoingui.h:297
QLabel * m_wallet_selector_label
Definition: bitcoingui.h:136
void optionsClicked()
Show configuration dialog.
Definition: bitcoingui.cpp:650
bool eventFilter(QObject *object, QEvent *event)
const char * name
Definition: rest.cpp:37
QToolBar * appToolBar
Definition: bitcoingui.h:111
WalletFrame * walletFrame
Definition: bitcoingui.h:98
void updateDisplayUnit(int newUnits)
When Display Units are changed on OptionsModel it will refresh the display text of the control on the...
QAction * usedSendingAddressesAction
Definition: bitcoingui.h:117
void setTrayIconVisible(bool)
When hideTrayIcon setting is changed in OptionsModel hide or show the icon accordingly.
bool enableWallet
Definition: bitcoingui.h:83
QAction * openRPCConsoleAction
Definition: bitcoingui.h:130
void detectShutdown()
called by a timer to check if ShutdownRequested() has been set
Cross-platform desktop notification client.
Definition: notificator.h:24
QLabel * labelWalletEncryptionIcon
Definition: bitcoingui.h:101
GUIUtil::ClickableLabel * labelBlocksIcon
Definition: bitcoingui.h:105
GUIUtil::ClickableProgressBar * progressBar
Definition: bitcoingui.h:107
void showHelpMessageClicked()
Show help message dialog.
Definition: bitcoingui.cpp:678
void dragEnterEvent(QDragEnterEvent *event)
Notificator * notificator
Definition: bitcoingui.h:141
Model for Bitcoin network client.
Definition: clientmodel.h:44
QAction * receiveCoinsMenuAction
Definition: bitcoingui.h:123
QAction * sendCoinsAction
Definition: bitcoingui.h:115
QAction * openAction
Definition: bitcoingui.h:131
void trayIconActivated(QSystemTrayIcon::ActivationReason reason)
Handle tray icon clicked.
Definition: bitcoingui.cpp:640
void updateProxyIcon()
Set the proxy-enabled icon as shown in the UI.
QAction * changePassphraseAction
Definition: bitcoingui.h:128
void closeEvent(QCloseEvent *event)
Definition: bitcoingui.cpp:981
Interface from Qt to configuration data structure for Bitcoin client.
Definition: optionsmodel.h:29
std::unique_ptr< interfaces::Handler > m_handler_question
Definition: bitcoingui.h:96
Interface to Bitcoin wallet from Qt view code.
Definition: walletmodel.h:125
QAction * sendCoinsMenuAction
Definition: bitcoingui.h:116
void changeEvent(QEvent *e)
Definition: bitcoingui.cpp:957
int prevBlocks
Keep track of previous number of blocks, to detect progress.
Definition: bitcoingui.h:147
void toggleHidden()
Simply calls showNormalIfMinimized(true) for use in SLOT() macro.
interfaces::Node & m_node
Definition: bitcoingui.h:94
int spinnerFrame
Definition: bitcoingui.h:148
void showEvent(QShowEvent *event)
void setNumConnections(int count)
Set number of connections shown in the UI.
Definition: bitcoingui.cpp:757
"Help message" dialog box
Definition: utilitydialog.h:22
QComboBox * m_wallet_selector
Definition: bitcoingui.h:137
void createContextMenu()
Creates context menu, its actions, and wires up all the relevant signals for mouse events...
void showDebugWindowActivateConsole()
Show debug window and set focus to the console.
Definition: bitcoingui.cpp:672
void createActions()
Create the main UI actions.
Definition: bitcoingui.cpp:233
QAction * optionsAction
Definition: bitcoingui.h:124
QAction * encryptWalletAction
Definition: bitcoingui.h:126
void aboutClicked()
Show about dialog.
Definition: bitcoingui.cpp:655
void updateHeadersSyncProgressLabel()
Definition: bitcoingui.cpp:767
static const std::string DEFAULT_UIPLATFORM
Definition: bitcoingui.h:64
Top-level interface for a bitcoin node (bsha3d process).
Definition: node.h:35
A container for embedding all wallet-related controls into BitcoinGUI.
Definition: walletframe.h:29
void setNumBlocks(int count, const QDateTime &blockDate, double nVerificationProgress, bool headers)
Set number of blocks and last block date shown in the UI.
Definition: bitcoingui.cpp:787
void onDisplayUnitsClicked(const QPoint &point)
Shows context menu with Display Unit options by the mouse coordinates.
void createTrayIcon(const NetworkStyle *networkStyle)
Create system tray icon and notification.
Definition: bitcoingui.cpp:586
void createMenuBar()
Create the menu bar and sub-menus.
Definition: bitcoingui.cpp:365
void onMenuSelection(QAction *action)
Tells underlying optionsModel to update its current display unit.
std::unique_ptr< interfaces::Handler > m_handler_message_box
Definition: bitcoingui.h:95