/ src / qt / bitcoin.h
bitcoin.h
  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_BITCOIN_H
  6  #define BITCOIN_QT_BITCOIN_H
  7  
  8  #include <bitcoin-build-config.h> // IWYU pragma: keep
  9  
 10  #include <interfaces/node.h>
 11  #include <qt/initexecutor.h>
 12  
 13  #include <cassert>
 14  #include <memory>
 15  #include <optional>
 16  
 17  #include <QApplication>
 18  
 19  class BitcoinGUI;
 20  class ClientModel;
 21  class NetworkStyle;
 22  class OptionsModel;
 23  class PaymentServer;
 24  class PlatformStyle;
 25  class SplashScreen;
 26  class WalletController;
 27  class WalletModel;
 28  namespace interfaces {
 29  class Init;
 30  } // namespace interfaces
 31  
 32  
 33  /** Main Bitcoin application object */
 34  class BitcoinApplication: public QApplication
 35  {
 36      Q_OBJECT
 37  public:
 38      explicit BitcoinApplication();
 39      ~BitcoinApplication();
 40  
 41  #ifdef ENABLE_WALLET
 42      /// Create payment server
 43      void createPaymentServer();
 44  #endif
 45      /// parameter interaction/setup based on rules
 46      void parameterSetup();
 47      /// Create options model
 48      [[nodiscard]] bool createOptionsModel(bool resetSettings);
 49      /// Initialize prune setting
 50      void InitPruneSetting(int64_t prune_MiB);
 51      /// Create main window
 52      void createWindow(const NetworkStyle *networkStyle);
 53      /// Create splash screen
 54      void createSplashScreen(const NetworkStyle *networkStyle);
 55      /// Create or spawn node
 56      void createNode(interfaces::Init& init);
 57      /// Basic initialization, before starting initialization/shutdown thread. Return true on success.
 58      bool baseInitialize();
 59  
 60      /// Request core initialization
 61      void requestInitialize();
 62  
 63      /// Get window identifier of QMainWindow (BitcoinGUI)
 64      WId getMainWinId() const;
 65  
 66      /// Setup platform style
 67      void setupPlatformStyle();
 68  
 69      interfaces::Node& node() const { assert(m_node); return *m_node; }
 70  
 71  public Q_SLOTS:
 72      void initializeResult(bool success, interfaces::BlockAndHeaderTipInfo tip_info);
 73      /// Request core shutdown
 74      void requestShutdown();
 75      /// Handle runaway exceptions. Shows a message box with the problem and quits the program.
 76      void handleRunawayException(const QString &message);
 77  
 78      /**
 79       * A helper function that shows a message box
 80       * with details about a non-fatal exception.
 81       */
 82      void handleNonFatalException(const QString& message);
 83  
 84  Q_SIGNALS:
 85      void requestedInitialize();
 86      void requestedShutdown();
 87      void windowShown(BitcoinGUI* window);
 88  
 89  protected:
 90      bool event(QEvent* e) override;
 91  
 92  private:
 93      std::optional<InitExecutor> m_executor;
 94      OptionsModel* optionsModel{nullptr};
 95      ClientModel* clientModel{nullptr};
 96      BitcoinGUI* window{nullptr};
 97      QTimer* pollShutdownTimer{nullptr};
 98  #ifdef ENABLE_WALLET
 99      PaymentServer* paymentServer{nullptr};
100      WalletController* m_wallet_controller{nullptr};
101  #endif
102      const PlatformStyle* platformStyle{nullptr};
103      std::unique_ptr<QWidget> shutdownWindow;
104      SplashScreen* m_splash = nullptr;
105      std::unique_ptr<interfaces::Node> m_node;
106  
107      void startThread();
108  };
109  
110  int GuiMain(int argc, char* argv[]);
111  
112  #endif // BITCOIN_QT_BITCOIN_H