/tmp/bitcoin/src/node/interface_ui.cpp
Line | Count | Source |
1 | | // Copyright (c) 2010-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 | | #include <node/interface_ui.h> |
6 | | |
7 | | #include <btcsignals.h> |
8 | | #include <util/string.h> |
9 | | #include <util/translation.h> |
10 | | |
11 | | using util::MakeUnorderedList; |
12 | | |
13 | | CClientUIInterface uiInterface; |
14 | | |
15 | | struct UISignals { |
16 | | btcsignals::signal<CClientUIInterface::ThreadSafeMessageBoxSig, btcsignals::optional_last_value<bool>> ThreadSafeMessageBox; |
17 | | btcsignals::signal<CClientUIInterface::ThreadSafeQuestionSig, btcsignals::optional_last_value<bool>> ThreadSafeQuestion; |
18 | | btcsignals::signal<CClientUIInterface::InitMessageSig> InitMessage; |
19 | | btcsignals::signal<CClientUIInterface::InitWalletSig> InitWallet; |
20 | | btcsignals::signal<CClientUIInterface::NotifyNumConnectionsChangedSig> NotifyNumConnectionsChanged; |
21 | | btcsignals::signal<CClientUIInterface::NotifyNetworkActiveChangedSig> NotifyNetworkActiveChanged; |
22 | | btcsignals::signal<CClientUIInterface::NotifyAlertChangedSig> NotifyAlertChanged; |
23 | | btcsignals::signal<CClientUIInterface::ShowProgressSig> ShowProgress; |
24 | | btcsignals::signal<CClientUIInterface::NotifyBlockTipSig> NotifyBlockTip; |
25 | | btcsignals::signal<CClientUIInterface::NotifyHeaderTipSig> NotifyHeaderTip; |
26 | | btcsignals::signal<CClientUIInterface::BannedListChangedSig> BannedListChanged; |
27 | | }; |
28 | | static UISignals g_ui_signals; |
29 | | |
30 | | #define ADD_SIGNALS_IMPL_WRAPPER(signal_name) \ |
31 | | btcsignals::connection CClientUIInterface::signal_name##_connect(std::function<signal_name##Sig> fn) \ |
32 | 5.35k | { \ |
33 | 5.35k | return g_ui_signals.signal_name.connect(fn); \ |
34 | 5.35k | } CClientUIInterface::ThreadSafeMessageBox_connect(std::function<bool (bilingual_str const&, unsigned int)>) Line | Count | Source | 32 | 1.42k | { \ | 33 | 1.42k | return g_ui_signals.signal_name.connect(fn); \ | 34 | 1.42k | } |
CClientUIInterface::ThreadSafeQuestion_connect(std::function<bool (bilingual_str const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, unsigned int)>) Line | Count | Source | 32 | 1.42k | { \ | 33 | 1.42k | return g_ui_signals.signal_name.connect(fn); \ | 34 | 1.42k | } |
CClientUIInterface::InitMessage_connect(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)>) Line | Count | Source | 32 | 2.51k | { \ | 33 | 2.51k | return g_ui_signals.signal_name.connect(fn); \ | 34 | 2.51k | } |
Unexecuted instantiation: CClientUIInterface::InitWallet_connect(std::function<void ()>) Unexecuted instantiation: CClientUIInterface::NotifyNumConnectionsChanged_connect(std::function<void (int)>) Unexecuted instantiation: CClientUIInterface::NotifyNetworkActiveChanged_connect(std::function<void (bool)>) Unexecuted instantiation: CClientUIInterface::NotifyAlertChanged_connect(std::function<void ()>) Unexecuted instantiation: CClientUIInterface::ShowProgress_connect(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int, bool)>) CClientUIInterface::NotifyBlockTip_connect(std::function<void (SynchronizationState, CBlockIndex const&, double)>) Line | Count | Source | 32 | 1 | { \ | 33 | 1 | return g_ui_signals.signal_name.connect(fn); \ | 34 | 1 | } |
Unexecuted instantiation: CClientUIInterface::NotifyHeaderTip_connect(std::function<void (SynchronizationState, long, long, bool)>) Unexecuted instantiation: CClientUIInterface::BannedListChanged_connect(std::function<void ()>) |
35 | | |
36 | | ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeMessageBox); |
37 | | ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeQuestion); |
38 | | ADD_SIGNALS_IMPL_WRAPPER(InitMessage); |
39 | | ADD_SIGNALS_IMPL_WRAPPER(InitWallet); |
40 | | ADD_SIGNALS_IMPL_WRAPPER(NotifyNumConnectionsChanged); |
41 | | ADD_SIGNALS_IMPL_WRAPPER(NotifyNetworkActiveChanged); |
42 | | ADD_SIGNALS_IMPL_WRAPPER(NotifyAlertChanged); |
43 | | ADD_SIGNALS_IMPL_WRAPPER(ShowProgress); |
44 | | ADD_SIGNALS_IMPL_WRAPPER(NotifyBlockTip); |
45 | | ADD_SIGNALS_IMPL_WRAPPER(NotifyHeaderTip); |
46 | | ADD_SIGNALS_IMPL_WRAPPER(BannedListChanged); |
47 | | |
48 | 171 | bool CClientUIInterface::ThreadSafeMessageBox(const bilingual_str& message, unsigned int style) { return g_ui_signals.ThreadSafeMessageBox(message, style).value_or(false);} |
49 | 11 | bool CClientUIInterface::ThreadSafeQuestion(const bilingual_str& message, const std::string& non_interactive_message, unsigned int style) { return g_ui_signals.ThreadSafeQuestion(message, non_interactive_message, style).value_or(false);} |
50 | 7.48k | void CClientUIInterface::InitMessage(const std::string& message) { return g_ui_signals.InitMessage(message); } |
51 | 1.11k | void CClientUIInterface::InitWallet() { return g_ui_signals.InitWallet(); } |
52 | 2.21k | void CClientUIInterface::NotifyNumConnectionsChanged(int newNumConnections) { return g_ui_signals.NotifyNumConnectionsChanged(newNumConnections); } |
53 | 9 | void CClientUIInterface::NotifyNetworkActiveChanged(bool networkActive) { return g_ui_signals.NotifyNetworkActiveChanged(networkActive); } |
54 | 28 | void CClientUIInterface::NotifyAlertChanged() { return g_ui_signals.NotifyAlertChanged(); } |
55 | 7.45k | void CClientUIInterface::ShowProgress(const std::string& title, int nProgress, bool resume_possible) { return g_ui_signals.ShowProgress(title, nProgress, resume_possible); } |
56 | 94.4k | void CClientUIInterface::NotifyBlockTip(SynchronizationState s, const CBlockIndex& block, double verification_progress) { return g_ui_signals.NotifyBlockTip(s, block, verification_progress); } |
57 | 72.8k | void CClientUIInterface::NotifyHeaderTip(SynchronizationState s, int64_t height, int64_t timestamp, bool presync) { return g_ui_signals.NotifyHeaderTip(s, height, timestamp, presync); } |
58 | 36 | void CClientUIInterface::BannedListChanged() { return g_ui_signals.BannedListChanged(); } |
59 | | |
60 | | bool InitError(const bilingual_str& str) |
61 | 163 | { |
62 | 163 | uiInterface.ThreadSafeMessageBox(str, CClientUIInterface::MSG_ERROR); |
63 | 163 | return false; |
64 | 163 | } |
65 | | |
66 | | bool InitError(const bilingual_str& str, const std::vector<std::string>& details) |
67 | 27 | { |
68 | | // For now just flatten the list of error details into a string to pass to |
69 | | // the base InitError overload. In the future, if more init code provides |
70 | | // error details, the details could be passed separately from the main |
71 | | // message for rich display in the GUI. But currently the only init |
72 | | // functions which provide error details are ones that run during early init |
73 | | // before the GUI uiInterface is registered, so there's no point passing |
74 | | // main messages and details separately to uiInterface yet. |
75 | 27 | return InitError(details.empty() ? str : str + Untranslated(strprintf(":\n%s", MakeUnorderedList(details)))); |
76 | 27 | } |
77 | | |
78 | | void InitWarning(const bilingual_str& str) |
79 | 7 | { |
80 | 7 | uiInterface.ThreadSafeMessageBox(str, CClientUIInterface::MSG_WARNING); |
81 | 7 | } |