Line data Source code
1 : // Copyright (c) 2010-2021 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 <util/translation.h> 8 : 9 : #include <boost/signals2/optional_last_value.hpp> 10 : #include <boost/signals2/signal.hpp> 11 : 12 : CClientUIInterface uiInterface; 13 : 14 3308 : struct UISignals { 15 : boost::signals2::signal<CClientUIInterface::ThreadSafeMessageBoxSig, boost::signals2::optional_last_value<bool>> ThreadSafeMessageBox; 16 : boost::signals2::signal<CClientUIInterface::ThreadSafeQuestionSig, boost::signals2::optional_last_value<bool>> ThreadSafeQuestion; 17 : boost::signals2::signal<CClientUIInterface::InitMessageSig> InitMessage; 18 : boost::signals2::signal<CClientUIInterface::InitWalletSig> InitWallet; 19 : boost::signals2::signal<CClientUIInterface::NotifyNumConnectionsChangedSig> NotifyNumConnectionsChanged; 20 : boost::signals2::signal<CClientUIInterface::NotifyNetworkActiveChangedSig> NotifyNetworkActiveChanged; 21 : boost::signals2::signal<CClientUIInterface::NotifyAlertChangedSig> NotifyAlertChanged; 22 : boost::signals2::signal<CClientUIInterface::ShowProgressSig> ShowProgress; 23 : boost::signals2::signal<CClientUIInterface::NotifyBlockTipSig> NotifyBlockTip; 24 : boost::signals2::signal<CClientUIInterface::NotifyChainLockSig> NotifyChainLock; 25 : boost::signals2::signal<CClientUIInterface::NotifyHeaderTipSig> NotifyHeaderTip; 26 : boost::signals2::signal<CClientUIInterface::NotifyGovernanceChangedSig> NotifyGovernanceChanged; 27 : boost::signals2::signal<CClientUIInterface::NotifyInstantSendChangedSig> NotifyInstantSendChanged; 28 : boost::signals2::signal<CClientUIInterface::NotifyMasternodeListChangedSig> NotifyMasternodeListChanged; 29 : boost::signals2::signal<CClientUIInterface::NotifyAdditionalDataSyncProgressChangedSig> NotifyAdditionalDataSyncProgressChanged; 30 : boost::signals2::signal<CClientUIInterface::BannedListChangedSig> BannedListChanged; 31 : }; 32 3308 : static UISignals g_ui_signals; 33 : 34 : #define ADD_SIGNALS_IMPL_WRAPPER(signal_name) \ 35 : boost::signals2::connection CClientUIInterface::signal_name##_connect(std::function<signal_name##Sig> fn) \ 36 : { \ 37 : return g_ui_signals.signal_name.connect(fn); \ 38 : } 39 : 40 3390 : ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeMessageBox); 41 3390 : ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeQuestion); 42 6409 : ADD_SIGNALS_IMPL_WRAPPER(InitMessage); 43 0 : ADD_SIGNALS_IMPL_WRAPPER(InitWallet); 44 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyNumConnectionsChanged); 45 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyNetworkActiveChanged); 46 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyAlertChanged); 47 0 : ADD_SIGNALS_IMPL_WRAPPER(ShowProgress); 48 3918 : ADD_SIGNALS_IMPL_WRAPPER(NotifyBlockTip); 49 4 : ADD_SIGNALS_IMPL_WRAPPER(NotifyChainLock); 50 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyHeaderTip); 51 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyGovernanceChanged); 52 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyInstantSendChanged); 53 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyMasternodeListChanged); 54 0 : ADD_SIGNALS_IMPL_WRAPPER(NotifyAdditionalDataSyncProgressChanged); 55 0 : ADD_SIGNALS_IMPL_WRAPPER(BannedListChanged); 56 : 57 333 : bool CClientUIInterface::ThreadSafeMessageBox(const bilingual_str& message, const std::string& caption, unsigned int style) { return g_ui_signals.ThreadSafeMessageBox(message, caption, style).value_or(false);} 58 18 : bool CClientUIInterface::ThreadSafeQuestion(const bilingual_str& message, const std::string& non_interactive_message, const std::string& caption, unsigned int style) { return g_ui_signals.ThreadSafeQuestion(message, non_interactive_message, caption, style).value_or(false);} 59 21237 : void CClientUIInterface::InitMessage(const std::string& message) { return g_ui_signals.InitMessage(message); } 60 3023 : void CClientUIInterface::InitWallet() { return g_ui_signals.InitWallet(); } 61 13855 : void CClientUIInterface::NotifyNumConnectionsChanged(int newNumConnections) { return g_ui_signals.NotifyNumConnectionsChanged(newNumConnections); } 62 374 : void CClientUIInterface::NotifyNetworkActiveChanged(bool networkActive) { return g_ui_signals.NotifyNetworkActiveChanged(networkActive); } 63 4 : void CClientUIInterface::NotifyAlertChanged() { return g_ui_signals.NotifyAlertChanged(); } 64 23762 : void CClientUIInterface::ShowProgress(const std::string& title, int nProgress, bool resume_possible) { return g_ui_signals.ShowProgress(title, nProgress, resume_possible); } 65 245018 : void CClientUIInterface::NotifyBlockTip(SynchronizationState s, const CBlockIndex* i) { return g_ui_signals.NotifyBlockTip(s, i); } 66 13549 : void CClientUIInterface::NotifyChainLock(const std::string& bestChainLockHash, int bestChainLockHeight) { return g_ui_signals.NotifyChainLock(bestChainLockHash, bestChainLockHeight); } 67 216239 : void CClientUIInterface::NotifyHeaderTip(SynchronizationState s, const CBlockIndex* i) { return g_ui_signals.NotifyHeaderTip(s, i); } 68 1780 : void CClientUIInterface::NotifyGovernanceChanged() { return g_ui_signals.NotifyGovernanceChanged(); } 69 805 : void CClientUIInterface::NotifyInstantSendChanged() { return g_ui_signals.NotifyInstantSendChanged(); } 70 105505 : void CClientUIInterface::NotifyMasternodeListChanged(const CDeterministicMNList& list, const CBlockIndex* i) { return g_ui_signals.NotifyMasternodeListChanged(list, i); } 71 9413 : void CClientUIInterface::NotifyAdditionalDataSyncProgressChanged(double nSyncProgress) { return g_ui_signals.NotifyAdditionalDataSyncProgressChanged(nSyncProgress); } 72 68 : void CClientUIInterface::BannedListChanged() { return g_ui_signals.BannedListChanged(); } 73 : 74 298 : bool InitError(const bilingual_str& str) 75 : { 76 298 : uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_ERROR); 77 298 : return false; 78 0 : } 79 : 80 34 : void InitWarning(const bilingual_str& str) 81 : { 82 34 : uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_WARNING); 83 34 : }