Bitcoin Core 22.99.0
P2P Digital Currency
bitcoingui.h
Go to the documentation of this file.
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_BITCOINGUI_H
6#define BITCOIN_QT_BITCOINGUI_H
7
8#if defined(HAVE_CONFIG_H)
10#endif
11
12#include <qt/guiutil.h>
13#include <qt/optionsdialog.h>
14
15#include <consensus/amount.h>
16
17#include <QLabel>
18#include <QMainWindow>
19#include <QMap>
20#include <QMenu>
21#include <QPoint>
22#include <QSystemTrayIcon>
23
24#ifdef Q_OS_MAC
25#include <qt/macos_appnap.h>
26#endif
27
28#include <memory>
29
30class ClientModel;
31class NetworkStyle;
32class Notificator;
33class OptionsModel;
34class PlatformStyle;
35class RPCConsole;
39class WalletFrame;
40class WalletModel;
42class ModalOverlay;
43enum class SynchronizationState;
44
45namespace interfaces {
46class Handler;
47class Node;
48struct BlockAndHeaderTipInfo;
49}
50
51QT_BEGIN_NAMESPACE
52class QAction;
53class QComboBox;
54class QDateTime;
55class QProgressBar;
56class QProgressDialog;
57QT_END_NAMESPACE
58
59namespace GUIUtil {
60class ClickableLabel;
62}
63
68class BitcoinGUI : public QMainWindow
69{
70 Q_OBJECT
71
72public:
73 static const std::string DEFAULT_UIPLATFORM;
74
75 explicit BitcoinGUI(interfaces::Node& node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent = nullptr);
77
81 void setClientModel(ClientModel *clientModel = nullptr, interfaces::BlockAndHeaderTipInfo* tip_info = nullptr);
82#ifdef ENABLE_WALLET
83 void setWalletController(WalletController* wallet_controller);
84 WalletController* getWalletController();
85#endif
86
87#ifdef ENABLE_WALLET
92 void addWallet(WalletModel* walletModel);
93 void removeWallet(WalletModel* walletModel);
94 void removeAllWallets();
95#endif // ENABLE_WALLET
96 bool enableWallet = false;
97
101 bool hasTrayIcon() const { return trayIcon; }
102
105
106 bool isPrivacyModeActivated() const;
107
108protected:
109 void changeEvent(QEvent *e) override;
110 void closeEvent(QCloseEvent *event) override;
111 void showEvent(QShowEvent *event) override;
112 void dragEnterEvent(QDragEnterEvent *event) override;
113 void dropEvent(QDropEvent *event) override;
114 bool eventFilter(QObject *object, QEvent *event) override;
115
116private:
119 std::unique_ptr<interfaces::Handler> m_handler_message_box;
120 std::unique_ptr<interfaces::Handler> m_handler_question;
123
130 QLabel* progressBarLabel = nullptr;
132 QProgressDialog* progressDialog = nullptr;
133
134 QMenuBar* appMenuBar = nullptr;
135 QToolBar* appToolBar = nullptr;
136 QAction* overviewAction = nullptr;
137 QAction* historyAction = nullptr;
138 QAction* quitAction = nullptr;
139 QAction* sendCoinsAction = nullptr;
140 QAction* sendCoinsMenuAction = nullptr;
141 QAction* usedSendingAddressesAction = nullptr;
143 QAction* signMessageAction = nullptr;
144 QAction* verifyMessageAction = nullptr;
145 QAction* m_load_psbt_action = nullptr;
147 QAction* aboutAction = nullptr;
148 QAction* receiveCoinsAction = nullptr;
149 QAction* receiveCoinsMenuAction = nullptr;
150 QAction* optionsAction = nullptr;
151 QAction* toggleHideAction = nullptr;
152 QAction* encryptWalletAction = nullptr;
153 QAction* backupWalletAction = nullptr;
154 QAction* changePassphraseAction = nullptr;
155 QAction* aboutQtAction = nullptr;
156 QAction* openRPCConsoleAction = nullptr;
157 QAction* openAction = nullptr;
158 QAction* showHelpMessageAction = nullptr;
159 QAction* m_create_wallet_action{nullptr};
160 QAction* m_open_wallet_action{nullptr};
161 QMenu* m_open_wallet_menu{nullptr};
162 QAction* m_close_wallet_action{nullptr};
163 QAction* m_close_all_wallets_action{nullptr};
165 QAction* m_wallet_selector_action = nullptr;
166 QAction* m_mask_values_action{nullptr};
167
168 QLabel *m_wallet_selector_label = nullptr;
169 QComboBox* m_wallet_selector = nullptr;
170
171 QSystemTrayIcon* trayIcon = nullptr;
172 const std::unique_ptr<QMenu> trayIconMenu;
177
178 QMenu* m_network_context_menu = new QMenu(this);
179
180#ifdef Q_OS_MAC
181 CAppNapInhibitor* m_app_nap_inhibitor = nullptr;
182#endif
183
185 int prevBlocks = 0;
187
190
192 void createActions();
194 void createMenuBar();
196 void createToolBars();
198 void createTrayIcon();
200 void createTrayIconMenu();
201
203 void setWalletActionsEnabled(bool enabled);
204
207
209 void updateNetworkState();
210
212
215
216Q_SIGNALS:
217 void quitRequested();
219 void receivedURI(const QString &uri);
221 void consoleShown(RPCConsole* console);
222 void setPrivacy(bool privacy);
223
224public Q_SLOTS:
226 void setNumConnections(int count);
228 void setNetworkActive(bool network_active);
230 void setNumBlocks(int count, const QDateTime& blockDate, double nVerificationProgress, bool headers, SynchronizationState sync_state);
231
240 void message(const QString& title, QString message, unsigned int style, bool* ret = nullptr, const QString& detailed_message = QString());
241
242#ifdef ENABLE_WALLET
243 void setCurrentWallet(WalletModel* wallet_model);
244 void setCurrentWalletBySelectorIndex(int index);
247 void updateWalletStatus();
248
249private:
254 void setEncryptionStatus(int status);
255
260 void setHDStatus(bool privkeyDisabled, int hdEnabled);
261
262public Q_SLOTS:
263 bool handlePaymentRequest(const SendCoinsRecipient& recipient);
264
266 void incomingTransaction(const QString& date, int unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName);
267#endif // ENABLE_WALLET
268
269private:
271 void updateProxyIcon();
272 void updateWindowTitle();
273
274public Q_SLOTS:
275#ifdef ENABLE_WALLET
277 void gotoOverviewPage();
279 void gotoHistoryPage();
281 void gotoReceiveCoinsPage();
283 void gotoSendCoinsPage(QString addr = "");
284
286 void gotoSignMessageTab(QString addr = "");
288 void gotoVerifyMessageTab(QString addr = "");
290 void gotoLoadPSBT(bool from_clipboard = false);
291
293 void openClicked();
294#endif // ENABLE_WALLET
296 void optionsClicked();
298 void aboutClicked();
300 void showDebugWindow();
305#ifndef Q_OS_MAC
307 void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
308#else
310 void macosDockIconActivated();
311#endif
312
315 void showNormalIfMinimized(bool fToggleHidden);
317 void toggleHidden();
318
320 void detectShutdown();
321
323 void showProgress(const QString &title, int nProgress);
324
325 void showModalOverlay();
326};
327
328class UnitDisplayStatusBarControl : public QLabel
329{
330 Q_OBJECT
331
332public:
333 explicit UnitDisplayStatusBarControl(const PlatformStyle *platformStyle);
336
337protected:
339 void mousePressEvent(QMouseEvent *event) override;
340 void changeEvent(QEvent* e) override;
341
342private:
344 QMenu* menu;
346
348 void onDisplayUnitsClicked(const QPoint& point);
350 void createContextMenu();
351
352private Q_SLOTS:
354 void updateDisplayUnit(int newUnits);
356 void onMenuSelection(QAction* action);
357};
358
359#endif // BITCOIN_QT_BITCOINGUI_H
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
Bitcoin GUI main class.
Definition: bitcoingui.h:69
GUIUtil::ClickableProgressBar * progressBar
Definition: bitcoingui.h:131
QAction * m_close_all_wallets_action
Definition: bitcoingui.h:163
void showEvent(QShowEvent *event) override
QLabel * progressBarLabel
Definition: bitcoingui.h:130
QAction * m_open_wallet_action
Definition: bitcoingui.h:160
static const std::string DEFAULT_UIPLATFORM
Definition: bitcoingui.h:73
QAction * openAction
Definition: bitcoingui.h:157
void setClientModel(ClientModel *clientModel=nullptr, interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)
Set the client model.
Definition: bitcoingui.cpp:580
GUIUtil::ClickableLabel * connectionsControl
Definition: bitcoingui.h:128
void receivedURI(const QString &uri)
Signal raised when a URI was entered or dragged to the GUI.
ModalOverlay * modalOverlay
Definition: bitcoingui.h:176
GUIUtil::ThemedLabel * labelWalletEncryptionIcon
Definition: bitcoingui.h:125
QAction * changePassphraseAction
Definition: bitcoingui.h:154
void openOptionsDialogWithTab(OptionsDialog::Tab tab)
Open the OptionsDialog on the specified tab index.
Definition: bitcoingui.cpp:986
QAction * receiveCoinsMenuAction
Definition: bitcoingui.h:149
int prevBlocks
Keep track of previous number of blocks, to detect progress.
Definition: bitcoingui.h:185
QAction * openRPCConsoleAction
Definition: bitcoingui.h:156
const NetworkStyle *const m_network_style
Definition: bitcoingui.h:189
void changeEvent(QEvent *e) override
GUIUtil::ClickableLabel * labelProxyIcon
Definition: bitcoingui.h:127
QAction * historyAction
Definition: bitcoingui.h:137
bool eventFilter(QObject *object, QEvent *event) override
QMenu * m_open_wallet_menu
Definition: bitcoingui.h:161
QAction * toggleHideAction
Definition: bitcoingui.h:151
void createTrayIcon()
Create system tray icon and notification.
Definition: bitcoingui.cpp:771
QAction * m_load_psbt_clipboard_action
Definition: bitcoingui.h:146
QAction * quitAction
Definition: bitcoingui.h:138
void setNetworkActive(bool network_active)
Set network state shown in the UI.
Definition: bitcoingui.cpp:957
void setPrivacy(bool privacy)
QProgressDialog * progressDialog
Definition: bitcoingui.h:132
BitcoinGUI(interfaces::Node &node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent=nullptr)
Definition: bitcoingui.cpp:79
std::unique_ptr< interfaces::Handler > m_handler_message_box
Definition: bitcoingui.h:119
WalletFrame * walletFrame
Definition: bitcoingui.h:122
void updateProxyIcon()
Set the proxy-enabled icon as shown in the UI.
QAction * receiveCoinsAction
Definition: bitcoingui.h:148
const std::unique_ptr< QMenu > trayIconMenu
Definition: bitcoingui.h:172
QAction * usedSendingAddressesAction
Definition: bitcoingui.h:141
void unsubscribeFromCoreSignals()
Disconnect core signals from GUI client.
void closeEvent(QCloseEvent *event) override
QAction * verifyMessageAction
Definition: bitcoingui.h:144
void createTrayIconMenu()
Create system tray menu (or setup the dock menu)
Definition: bitcoingui.cpp:784
HelpMessageDialog * helpMessageDialog
Definition: bitcoingui.h:175
void aboutClicked()
Show about dialog.
Definition: bitcoingui.cpp:844
void toggleHidden()
Simply calls showNormalIfMinimized(true) for use in SLOT() macro.
QAction * encryptWalletAction
Definition: bitcoingui.h:152
void updateNetworkState()
Update UI with latest network info from model.
Definition: bitcoingui.cpp:919
void createActions()
Create the main UI actions.
Definition: bitcoingui.cpp:245
void showDebugWindow()
Show debug window.
Definition: bitcoingui.cpp:853
bool hasTrayIcon() const
Get the tray icon status.
Definition: bitcoingui.h:101
QAction * m_mask_values_action
Definition: bitcoingui.h:166
int spinnerFrame
Definition: bitcoingui.h:186
QAction * aboutAction
Definition: bitcoingui.h:147
void consoleShown(RPCConsole *console)
Signal raised when RPC console shown.
bool isPrivacyModeActivated() const
void showDebugWindowActivateConsole()
Show debug window and set focus to the console.
Definition: bitcoingui.cpp:859
void dropEvent(QDropEvent *event) override
void showProgress(const QString &title, int nProgress)
Show progress dialog e.g.
QAction * usedReceivingAddressesAction
Definition: bitcoingui.h:142
void subscribeToCoreSignals()
Connect core signals to GUI client.
void createToolBars()
Create the toolbars.
Definition: bitcoingui.cpp:544
QAction * m_wallet_selector_action
Definition: bitcoingui.h:165
UnitDisplayStatusBarControl * unitDisplayControl
Definition: bitcoingui.h:124
QAction * optionsAction
Definition: bitcoingui.h:150
void updateWindowTitle()
void setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
Definition: bitcoingui.cpp:751
const PlatformStyle * platformStyle
Definition: bitcoingui.h:188
void dragEnterEvent(QDragEnterEvent *event) override
QAction * m_close_wallet_action
Definition: bitcoingui.h:162
QAction * overviewAction
Definition: bitcoingui.h:136
GUIUtil::ClickableLabel * labelBlocksIcon
Definition: bitcoingui.h:129
interfaces::Node & m_node
Definition: bitcoingui.h:117
void setNumBlocks(int count, const QDateTime &blockDate, double nVerificationProgress, bool headers, SynchronizationState sync_state)
Set number of blocks and last block date shown in the UI.
Definition: bitcoingui.cpp:998
QAction * m_create_wallet_action
Definition: bitcoingui.h:159
QAction * m_load_psbt_action
Definition: bitcoingui.h:145
void detectShutdown()
called by a timer to check if ShutdownRequested() has been set
QAction * m_wallet_selector_label_action
Definition: bitcoingui.h:164
WalletController * m_wallet_controller
Definition: bitcoingui.h:118
bool enableWallet
Definition: bitcoingui.h:96
RPCConsole * rpcConsole
Definition: bitcoingui.h:174
QMenu * m_network_context_menu
Definition: bitcoingui.h:178
QAction * backupWalletAction
Definition: bitcoingui.h:153
QAction * sendCoinsMenuAction
Definition: bitcoingui.h:140
QAction * showHelpMessageAction
Definition: bitcoingui.h:158
QAction * aboutQtAction
Definition: bitcoingui.h:155
QComboBox * m_wallet_selector
Definition: bitcoingui.h:169
QLabel * m_wallet_selector_label
Definition: bitcoingui.h:168
void showNormalIfMinimized()
Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHid...
Definition: bitcoingui.h:314
ClientModel * clientModel
Definition: bitcoingui.h:121
void updateHeadersSyncProgressLabel()
Definition: bitcoingui.cpp:977
void createMenuBar()
Create the menu bar and sub-menus.
Definition: bitcoingui.cpp:447
QSystemTrayIcon * trayIcon
Definition: bitcoingui.h:171
void message(const QString &title, QString message, unsigned int style, bool *ret=nullptr, const QString &detailed_message=QString())
Notify the user of an event from the core network or transaction handling code.
void showHelpMessageClicked()
Show help message dialog.
Definition: bitcoingui.cpp:865
QAction * sendCoinsAction
Definition: bitcoingui.h:139
void quitRequested()
QToolBar * appToolBar
Definition: bitcoingui.h:135
void setNumConnections(int count)
Set number of connections shown in the UI.
Definition: bitcoingui.cpp:952
void trayIconActivated(QSystemTrayIcon::ActivationReason reason)
Handle tray icon clicked.
Definition: bitcoingui.cpp:823
QAction * signMessageAction
Definition: bitcoingui.h:143
GUIUtil::ThemedLabel * labelWalletHDStatusIcon
Definition: bitcoingui.h:126
void showModalOverlay()
Notificator * notificator
Definition: bitcoingui.h:173
std::unique_ptr< interfaces::Handler > m_handler_question
Definition: bitcoingui.h:120
QMenuBar * appMenuBar
Definition: bitcoingui.h:134
Model for Bitcoin network client.
Definition: clientmodel.h:48
"Help message" dialog box
Definition: utilitydialog.h:21
Modal overlay to display information about the chain-sync state.
Definition: modaloverlay.h:21
Cross-platform desktop notification client.
Definition: notificator.h:25
Interface from Qt to configuration data structure for Bitcoin client.
Definition: optionsmodel.h:39
Local Bitcoin RPC console.
Definition: rpcconsole.h:39
void changeEvent(QEvent *e) override
void mousePressEvent(QMouseEvent *event) override
So that it responds to left-button clicks.
void updateDisplayUnit(int newUnits)
When Display Units are changed on OptionsModel it will refresh the display text of the control on the...
void createContextMenu()
Creates context menu, its actions, and wires up all the relevant signals for mouse events.
OptionsModel * optionsModel
Definition: bitcoingui.h:343
UnitDisplayStatusBarControl(const PlatformStyle *platformStyle)
void onMenuSelection(QAction *action)
Tells underlying optionsModel to update its current display unit.
const PlatformStyle * m_platform_style
Definition: bitcoingui.h:345
void setOptionsModel(OptionsModel *optionsModel)
Lets the control know about the Options Model (and its signals)
void onDisplayUnitsClicked(const QPoint &point)
Shows context menu with Display Unit options by the mouse coordinates.
Controller between interfaces::Node, WalletModel instances and the GUI.
A container for embedding all wallet-related controls into BitcoinGUI.
Definition: walletframe.h:29
Interface to Bitcoin wallet from Qt view code.
Definition: walletmodel.h:52
Top-level interface for a bitcoin node (bitcoind process).
Definition: node.h:55
Utility functions used by the Bitcoin Qt UI.
Definition: bitcoingui.h:59
Block and header tip information.
Definition: node.h:45
static int count
Definition: tests.c:41
SynchronizationState
Current sync state passed to tip changed callbacks.
Definition: validation.h:93