Bitcoin Core 31.99.0
P2P Digital Currency
bitcoingui.h
Go to the documentation of this file.
1// Copyright (c) 2011-present 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#include <bitcoin-build-config.h> // IWYU pragma: keep
9
10#include <qt/bitcoinunits.h>
11#include <qt/clientmodel.h>
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_MACOS
25#include <qt/macos_appnap.h>
26#endif
27
28#include <memory>
29
30class NetworkStyle;
31class Notificator;
32class OptionsModel;
33class PlatformStyle;
34class RPCConsole;
38class WalletFrame;
39class WalletModel;
41class ModalOverlay;
42enum class SynchronizationState;
43
44namespace interfaces {
45class Handler;
46class Node;
47struct BlockAndHeaderTipInfo;
48}
49
50QT_BEGIN_NAMESPACE
51class QAction;
52class QComboBox;
53class QDateTime;
54class QProgressBar;
55class QProgressDialog;
56QT_END_NAMESPACE
57
58namespace GUIUtil {
59class ClickableLabel;
61}
62
67class BitcoinGUI : public QMainWindow
68{
69 Q_OBJECT
70
71public:
72 static const std::string DEFAULT_UIPLATFORM;
73
74 explicit BitcoinGUI(interfaces::Node& node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent = nullptr);
76
80 void setClientModel(ClientModel *clientModel = nullptr, interfaces::BlockAndHeaderTipInfo* tip_info = nullptr);
81#ifdef ENABLE_WALLET
82 void setWalletController(WalletController* wallet_controller, bool show_loading_minimized);
83 WalletController* getWalletController();
84#endif
85
86#ifdef ENABLE_WALLET
91 void addWallet(WalletModel* walletModel);
92 void removeWallet(WalletModel* walletModel);
93 void removeAllWallets();
94#endif // ENABLE_WALLET
95 bool enableWallet = false;
96
100 bool hasTrayIcon() const { return trayIcon; }
101
104
105 bool isPrivacyModeActivated() const;
106
107protected:
108 void changeEvent(QEvent *e) override;
109 void closeEvent(QCloseEvent *event) override;
110 void showEvent(QShowEvent *event) override;
111 void dragEnterEvent(QDragEnterEvent *event) override;
112 void dropEvent(QDropEvent *event) override;
113 bool eventFilter(QObject *object, QEvent *event) override;
114
115private:
117#ifdef ENABLE_WALLET
118 WalletController* m_wallet_controller{nullptr};
119#endif // ENABLE_WALLET
120 std::unique_ptr<interfaces::Handler> m_handler_message_box;
121 std::unique_ptr<interfaces::Handler> m_handler_question;
124
131 QLabel* progressBarLabel = nullptr;
133 QProgressDialog* progressDialog = nullptr;
134
135 QMenuBar* appMenuBar = nullptr;
136 QToolBar* appToolBar = nullptr;
137 QAction* overviewAction = nullptr;
138 QAction* historyAction = nullptr;
139 QAction* quitAction = nullptr;
140 QAction* sendCoinsAction = 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* optionsAction = nullptr;
150 QAction* encryptWalletAction = nullptr;
151 QAction* backupWalletAction = nullptr;
152 QAction* changePassphraseAction = nullptr;
153 QAction* aboutQtAction = nullptr;
154 QAction* openRPCConsoleAction = nullptr;
155 QAction* openAction = nullptr;
156 QAction* showHelpMessageAction = nullptr;
157 QAction* m_create_wallet_action{nullptr};
158 QAction* m_open_wallet_action{nullptr};
159 QMenu* m_open_wallet_menu{nullptr};
160 QAction* m_restore_wallet_action{nullptr};
161 QAction* m_close_wallet_action{nullptr};
162 QAction* m_close_all_wallets_action{nullptr};
163#ifdef ENABLE_WALLET
164 QAction* m_wallet_selector_label_action = nullptr;
165 QAction* m_wallet_selector_action = nullptr;
166#endif // ENABLE_WALLET
167 QAction* m_mask_values_action{nullptr};
168 QAction* m_migrate_wallet_action{nullptr};
169 QMenu* m_migrate_wallet_menu{nullptr};
170 QAction* m_export_watchonly_action{nullptr};
171#ifdef ENABLE_WALLET
172 QLabel *m_wallet_selector_label = nullptr;
173 QComboBox* m_wallet_selector = nullptr;
174#endif // ENABLE_WALLET
175 QSystemTrayIcon* trayIcon = nullptr;
176 const std::unique_ptr<QMenu> trayIconMenu;
181
182 QMenu* m_network_context_menu = new QMenu(this);
183
184#ifdef Q_OS_MACOS
185 CAppNapInhibitor* m_app_nap_inhibitor = nullptr;
186#endif
187
189 int prevBlocks = 0;
191
194
196 void createActions();
198 void createMenuBar();
200 void createToolBars();
202 void createTrayIcon();
204 void createTrayIconMenu();
205
207 void setWalletActionsEnabled(bool enabled);
208
211
213 void updateNetworkState();
214
216 void updateHeadersPresyncProgressLabel(int64_t height, const QDateTime& blockDate);
217
220
221Q_SIGNALS:
224 void receivedURI(const QString &uri);
226 void consoleShown(RPCConsole* console);
227 void setPrivacy(bool privacy);
228
229public Q_SLOTS:
231 void setNumConnections(int count);
233 void setNetworkActive(bool network_active);
235 void setNumBlocks(int count, const QDateTime& blockDate, double nVerificationProgress, SyncType synctype, SynchronizationState sync_state);
237 void createWallet();
238
247 void message(const QString& title, QString message, unsigned int style, bool* ret = nullptr, const QString& detailed_message = QString());
248
249#ifdef ENABLE_WALLET
250 void setCurrentWallet(WalletModel* wallet_model);
251 void setCurrentWalletBySelectorIndex(int index);
254 void updateWalletStatus();
255
256private:
261 void setEncryptionStatus(int status);
262
267 void setHDStatus(bool privkeyDisabled, int hdEnabled);
268
269public Q_SLOTS:
270 bool handlePaymentRequest(const SendCoinsRecipient& recipient);
271
273 void incomingTransaction(const QString& date, BitcoinUnit unit, const CAmount& amount, const QString& type, const QString& address, const QString& label, const QString& walletName);
274#endif // ENABLE_WALLET
275
276private:
278 void updateProxyIcon();
279 void updateWindowTitle();
280
281public Q_SLOTS:
282#ifdef ENABLE_WALLET
284 void gotoOverviewPage();
286 void gotoHistoryPage();
288 void gotoReceiveCoinsPage();
290 void gotoSendCoinsPage(QString addr = "");
291
293 void gotoSignMessageTab(QString addr = "");
295 void gotoVerifyMessageTab(QString addr = "");
297 void gotoLoadPSBT(bool from_clipboard = false);
299 void enableHistoryAction(bool privacy);
300
302 void openClicked();
303#endif // ENABLE_WALLET
305 void optionsClicked();
307 void aboutClicked();
309 void showDebugWindow();
314
317 void showNormalIfMinimized(bool fToggleHidden);
319 void toggleHidden();
320
322 void detectShutdown();
323
325 void showProgress(const QString &title, int nProgress);
326
327 void showModalOverlay();
328};
329
330class UnitDisplayStatusBarControl : public QLabel
331{
332 Q_OBJECT
333
334public:
335 explicit UnitDisplayStatusBarControl(const PlatformStyle *platformStyle);
338
339protected:
341 void mousePressEvent(QMouseEvent *event) override;
342 void changeEvent(QEvent* e) override;
343
344private:
346 QMenu* menu{nullptr};
348
350 void onDisplayUnitsClicked(const QPoint& point);
352 void createContextMenu();
353
354private Q_SLOTS:
356 void updateDisplayUnit(BitcoinUnit newUnits);
358 void onMenuSelection(QAction* action);
359};
360
361#endif // BITCOIN_QT_BITCOINGUI_H
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
int ret
Bitcoin GUI main class.
Definition: bitcoingui.h:68
void updateHeadersPresyncProgressLabel(int64_t height, const QDateTime &blockDate)
GUIUtil::ClickableProgressBar * progressBar
Definition: bitcoingui.h:132
QAction * m_close_all_wallets_action
Definition: bitcoingui.h:162
void showEvent(QShowEvent *event) override
QLabel * progressBarLabel
Definition: bitcoingui.h:131
QAction * m_open_wallet_action
Definition: bitcoingui.h:158
static const std::string DEFAULT_UIPLATFORM
Definition: bitcoingui.h:72
QAction * m_export_watchonly_action
Definition: bitcoingui.h:170
QAction * openAction
Definition: bitcoingui.h:155
void createWallet()
Launch the wallet creation modal (no-op if wallet is not compiled)
void setNumBlocks(int count, const QDateTime &blockDate, double nVerificationProgress, SyncType synctype, SynchronizationState sync_state)
Set number of blocks and last block date shown in the UI.
void setClientModel(ClientModel *clientModel=nullptr, interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)
Set the client model.
Definition: bitcoingui.cpp:681
GUIUtil::ClickableLabel * connectionsControl
Definition: bitcoingui.h:129
void receivedURI(const QString &uri)
Signal raised when a URI was entered or dragged to the GUI.
ModalOverlay * modalOverlay
Definition: bitcoingui.h:180
GUIUtil::ThemedLabel * labelWalletEncryptionIcon
Definition: bitcoingui.h:126
QAction * changePassphraseAction
Definition: bitcoingui.h:152
void openOptionsDialogWithTab(OptionsDialog::Tab tab)
Open the OptionsDialog on the specified tab index.
int prevBlocks
Keep track of previous number of blocks, to detect progress.
Definition: bitcoingui.h:189
QAction * openRPCConsoleAction
Definition: bitcoingui.h:154
const NetworkStyle *const m_network_style
Definition: bitcoingui.h:193
void changeEvent(QEvent *e) override
GUIUtil::ClickableLabel * labelProxyIcon
Definition: bitcoingui.h:128
QAction * historyAction
Definition: bitcoingui.h:138
bool eventFilter(QObject *object, QEvent *event) override
QMenu * m_open_wallet_menu
Definition: bitcoingui.h:159
void createTrayIcon()
Create system tray icon and notification.
Definition: bitcoingui.cpp:890
QAction * m_load_psbt_clipboard_action
Definition: bitcoingui.h:146
QAction * quitAction
Definition: bitcoingui.h:139
void setNetworkActive(bool network_active)
Set network state shown in the UI.
void setPrivacy(bool privacy)
QProgressDialog * progressDialog
Definition: bitcoingui.h:133
BitcoinGUI(interfaces::Node &node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent=nullptr)
Definition: bitcoingui.cpp:91
std::unique_ptr< interfaces::Handler > m_handler_message_box
Definition: bitcoingui.h:120
WalletFrame * walletFrame
Definition: bitcoingui.h:123
void updateProxyIcon()
Set the proxy-enabled icon as shown in the UI.
QAction * m_restore_wallet_action
Definition: bitcoingui.h:160
QAction * receiveCoinsAction
Definition: bitcoingui.h:148
const std::unique_ptr< QMenu > trayIconMenu
Definition: bitcoingui.h:176
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
QAction * m_migrate_wallet_action
Definition: bitcoingui.h:168
void createTrayIconMenu()
Create system tray menu (or setup the dock menu)
Definition: bitcoingui.cpp:903
HelpMessageDialog * helpMessageDialog
Definition: bitcoingui.h:179
void aboutClicked()
Show about dialog.
Definition: bitcoingui.cpp:991
void toggleHidden()
Simply calls showNormalIfMinimized(true)
QAction * encryptWalletAction
Definition: bitcoingui.h:150
void updateNetworkState()
Update UI with latest network info from model.
void createActions()
Create the main UI actions.
Definition: bitcoingui.cpp:253
void showDebugWindow()
Show debug window.
bool hasTrayIcon() const
Get the tray icon status.
Definition: bitcoingui.h:100
QAction * m_mask_values_action
Definition: bitcoingui.h:167
int spinnerFrame
Definition: bitcoingui.h:190
QAction * aboutAction
Definition: bitcoingui.h:147
void consoleShown(RPCConsole *console)
Signal raised when RPC console shown.
bool isPrivacyModeActivated() const
QMenu * m_migrate_wallet_menu
Definition: bitcoingui.h:169
void showDebugWindowActivateConsole()
Show debug window and set focus to the console.
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:645
UnitDisplayStatusBarControl * unitDisplayControl
Definition: bitcoingui.h:125
QAction * optionsAction
Definition: bitcoingui.h:149
void updateWindowTitle()
void setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
Definition: bitcoingui.cpp:871
const PlatformStyle * platformStyle
Definition: bitcoingui.h:192
void dragEnterEvent(QDragEnterEvent *event) override
QAction * m_close_wallet_action
Definition: bitcoingui.h:161
QAction * overviewAction
Definition: bitcoingui.h:137
GUIUtil::ClickableLabel * labelBlocksIcon
Definition: bitcoingui.h:130
interfaces::Node & m_node
Definition: bitcoingui.h:116
QAction * m_create_wallet_action
Definition: bitcoingui.h:157
QAction * m_load_psbt_action
Definition: bitcoingui.h:145
void detectShutdown()
called by a timer to check if shutdown has been requested
bool enableWallet
Definition: bitcoingui.h:95
RPCConsole * rpcConsole
Definition: bitcoingui.h:178
QMenu * m_network_context_menu
Definition: bitcoingui.h:182
QAction * backupWalletAction
Definition: bitcoingui.h:151
QAction * showHelpMessageAction
Definition: bitcoingui.h:156
QAction * aboutQtAction
Definition: bitcoingui.h:153
void showNormalIfMinimized()
Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHid...
Definition: bitcoingui.h:316
ClientModel * clientModel
Definition: bitcoingui.h:122
void updateHeadersSyncProgressLabel()
void createMenuBar()
Create the menu bar and sub-menus.
Definition: bitcoingui.cpp:550
QSystemTrayIcon * trayIcon
Definition: bitcoingui.h:175
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.
QAction * sendCoinsAction
Definition: bitcoingui.h:140
void quitRequested()
QToolBar * appToolBar
Definition: bitcoingui.h:136
void setNumConnections(int count)
Set number of connections shown in the UI.
QAction * signMessageAction
Definition: bitcoingui.h:143
GUIUtil::ThemedLabel * labelWalletHDStatusIcon
Definition: bitcoingui.h:127
void showModalOverlay()
Notificator * notificator
Definition: bitcoingui.h:177
std::unique_ptr< interfaces::Handler > m_handler_question
Definition: bitcoingui.h:121
QMenuBar * appMenuBar
Definition: bitcoingui.h:135
Unit
Bitcoin units.
Definition: bitcoinunits.h:42
Model for Bitcoin network client.
Definition: clientmodel.h:57
"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:23
Interface from Qt to configuration data structure for Bitcoin client.
Definition: optionsmodel.h:44
Local Bitcoin RPC console.
Definition: rpcconsole.h:44
void changeEvent(QEvent *e) override
void mousePressEvent(QMouseEvent *event) override
So that it responds to left-button clicks.
void createContextMenu()
Creates context menu, its actions, and wires up all the relevant signals for mouse events.
void updateDisplayUnit(BitcoinUnit newUnits)
When Display Units are changed on OptionsModel it will refresh the display text of the control on the...
OptionsModel * optionsModel
Definition: bitcoingui.h:345
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:347
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:49
Top-level interface for a bitcoin node (bitcoind process).
Definition: node.h:71
SyncType
Definition: clientmodel.h:42
Utility functions used by the Bitcoin Qt UI.
Definition: bitcoingui.h:58
Definition: messages.h:21
Block and header tip information.
Definition: node.h:51
static int count
SynchronizationState
Current sync state passed to tip changed callbacks.
Definition: validation.h:96