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_SPLASHSCREEN_H
6 #define BITCOIN_QT_SPLASHSCREEN_H
7 
8 #include <QWidget>
9 
10 #include <memory>
11 
12 class NetworkStyle;
13 
14 namespace interfaces {
15 class Handler;
16 class Node;
17 class Wallet;
18 };
19 
20 /** Class for the splashscreen with information of the running client.
21  *
22  * @note this is intentionally not a QSplashScreen. Bitcoin Core initialization
23  * can take a long time, and in that case a progress window that cannot be
24  * moved around and minimized has turned out to be frustrating to the user.
25  */
26 class SplashScreen : public QWidget
27 {
28     Q_OBJECT
29 
30 public:
31     explicit SplashScreen(interfaces::Node& node, Qt::WindowFlags f, const NetworkStyle *networkStyle);
32     ~SplashScreen();
33 
34 protected:
35     void paintEvent(QPaintEvent *event);
36     void closeEvent(QCloseEvent *event);
37 
38 public Q_SLOTS:
39     /** Hide the splash screen window and schedule the splash screen object for deletion */
40     void finish();
41 
42     /** Show message and progress */
43     void showMessage(const QString &message, int alignment, const QColor &color);
44 
45 protected:
46     bool eventFilter(QObject * obj, QEvent * ev);
47 
48 private:
49     /** Connect core signals to splash screen */
50     void subscribeToCoreSignals();
51     /** Disconnect core signals to splash screen */
52     void unsubscribeFromCoreSignals();
53     /** Connect wallet signals to splash screen */
54     void ConnectWallet(std::unique_ptr<interfaces::Wallet> wallet);
55 
56     QPixmap pixmap;
57     QString curMessage;
58     QColor curColor;
59     int curAlignment;
60 
61     interfaces::Node& m_node;
62     std::unique_ptr<interfaces::Handler> m_handler_init_message;
63     std::unique_ptr<interfaces::Handler> m_handler_show_progress;
64     std::unique_ptr<interfaces::Handler> m_handler_load_wallet;
65     std::list<std::unique_ptr<interfaces::Wallet>> m_connected_wallets;
66     std::list<std::unique_ptr<interfaces::Handler>> m_connected_wallet_handlers;
67 };
68 
69 #endif // BITCOIN_QT_SPLASHSCREEN_H
70