MainWindow.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. // Copyright 2015 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <QMainWindow>
  5. #include <QStringList>
  6. #include <array>
  7. #include <memory>
  8. #include <optional>
  9. #include <string>
  10. #include "Core/Boot/Boot.h"
  11. class QMenu;
  12. class QStackedWidget;
  13. class QString;
  14. class AchievementsWindow;
  15. class AssemblerWidget;
  16. class BreakpointWidget;
  17. struct BootParameters;
  18. class CheatsManager;
  19. class CodeWidget;
  20. class ControllersWindow;
  21. class DiscordHandler;
  22. class DragEnterEvent;
  23. class FIFOPlayerWindow;
  24. class FreeLookWindow;
  25. class GameList;
  26. class GBATASInputWindow;
  27. class GCTASInputWindow;
  28. class GraphicsWindow;
  29. class HotkeyScheduler;
  30. class InfinityBaseWindow;
  31. class JITWidget;
  32. class LogConfigWidget;
  33. class LogWidget;
  34. class MappingWindow;
  35. class MemoryWidget;
  36. class MenuBar;
  37. class NetPlayDialog;
  38. class NetPlaySetupDialog;
  39. class NetworkWidget;
  40. class RegisterWidget;
  41. class RenderWidget;
  42. class SearchBar;
  43. class SettingsWindow;
  44. class SkylanderPortalWindow;
  45. class ThreadWidget;
  46. class ToolBar;
  47. class WatchWidget;
  48. class WiiTASInputWindow;
  49. struct WindowSystemInfo;
  50. namespace DiscIO
  51. {
  52. enum class Region;
  53. }
  54. namespace UICommon
  55. {
  56. class GameFile;
  57. }
  58. namespace X11Utils
  59. {
  60. class XRRConfiguration;
  61. }
  62. class MainWindow final : public QMainWindow
  63. {
  64. Q_OBJECT
  65. public:
  66. explicit MainWindow(std::unique_ptr<BootParameters> boot_parameters,
  67. const std::string& movie_path);
  68. ~MainWindow();
  69. WindowSystemInfo GetWindowSystemInfo() const;
  70. bool eventFilter(QObject* object, QEvent* event) override;
  71. QMenu* createPopupMenu() override;
  72. signals:
  73. void ReadOnlyModeChanged(bool read_only);
  74. void RecordingStatusChanged(bool recording);
  75. private:
  76. void Open();
  77. void RefreshGameList();
  78. void Play(const std::optional<std::string>& savestate_path = {});
  79. void Pause();
  80. void TogglePause();
  81. // May ask for confirmation. Returns whether or not it actually stopped.
  82. bool RequestStop();
  83. void ForceStop();
  84. void Reset();
  85. void FrameAdvance();
  86. void StateLoad();
  87. void StateSave();
  88. void StateLoadSlot();
  89. void StateSaveSlot();
  90. void StateLoadSlotAt(int slot);
  91. void StateSaveSlotAt(int slot);
  92. void StateLoadLastSavedAt(int slot);
  93. void StateLoadUndo();
  94. void StateSaveUndo();
  95. void StateSaveOldest();
  96. void SetStateSlot(int slot);
  97. void IncrementSelectedStateSlot();
  98. void DecrementSelectedStateSlot();
  99. void BootWiiSystemMenu();
  100. void PerformOnlineUpdate(const std::string& region);
  101. void SetFullScreenResolution(bool fullscreen);
  102. void FullScreen();
  103. void UnlockCursor();
  104. void ScreenShot();
  105. void CreateComponents();
  106. void ConnectGameList();
  107. void ConnectHost();
  108. void ConnectHotkeys();
  109. void ConnectMenuBar();
  110. void ConnectRenderWidget();
  111. void ConnectStack();
  112. void ConnectToolBar();
  113. void InitControllers();
  114. void ShutdownControllers();
  115. void InitCoreCallbacks();
  116. enum class ScanForSecondDisc
  117. {
  118. Yes,
  119. No,
  120. };
  121. void ScanForSecondDiscAndStartGame(const UICommon::GameFile& game,
  122. std::unique_ptr<BootSessionData> boot_session_data = nullptr);
  123. void StartGame(const QString& path, ScanForSecondDisc scan,
  124. std::unique_ptr<BootSessionData> boot_session_data = nullptr);
  125. void StartGame(const std::string& path, ScanForSecondDisc scan,
  126. std::unique_ptr<BootSessionData> boot_session_data = nullptr);
  127. void StartGame(const std::vector<std::string>& paths,
  128. std::unique_ptr<BootSessionData> boot_session_data = nullptr);
  129. void StartGame(std::unique_ptr<BootParameters>&& parameters);
  130. void ShowRenderWidget();
  131. void HideRenderWidget(bool reinit = true, bool is_exit = false);
  132. void ShowSettingsWindow();
  133. void ShowGeneralWindow();
  134. void ShowAudioWindow();
  135. void ShowControllersWindow();
  136. void ShowGraphicsWindow();
  137. void ShowFreeLookWindow();
  138. void ShowAboutDialog();
  139. void ShowHotkeyDialog();
  140. void ShowNetPlaySetupDialog();
  141. void ShowNetPlayBrowser();
  142. void ShowFIFOPlayer();
  143. void ShowSkylanderPortal();
  144. void ShowInfinityBase();
  145. void ShowMemcardManager();
  146. void ShowResourcePackManager();
  147. void ShowCheatsManager();
  148. void ShowRiivolutionBootWidget(const UICommon::GameFile& game);
  149. #ifdef USE_RETRO_ACHIEVEMENTS
  150. void ShowAchievementsWindow();
  151. void ShowAchievementSettings();
  152. #endif // USE_RETRO_ACHIEVEMENTS
  153. void NetPlayInit();
  154. bool NetPlayJoin();
  155. bool NetPlayHost(const UICommon::GameFile& game);
  156. void NetPlayQuit();
  157. void OnBootGameCubeIPL(DiscIO::Region region);
  158. void OnImportNANDBackup();
  159. void OnConnectWiiRemote(int id);
  160. #if defined(__unix__) || defined(__unix) || defined(__APPLE__)
  161. void OnSignal();
  162. #endif
  163. void OnPlayRecording();
  164. void OnStartRecording();
  165. void OnStopRecording();
  166. void OnExportRecording();
  167. void OnActivateChat();
  168. void OnRequestGolfControl();
  169. void ShowTASInput();
  170. void ChangeDisc();
  171. void EjectDisc();
  172. void OpenUserFolder();
  173. QStringList PromptFileNames();
  174. void UpdateScreenSaverInhibition();
  175. void OnStopComplete();
  176. void dragEnterEvent(QDragEnterEvent* event) override;
  177. void dropEvent(QDropEvent* event) override;
  178. QSize sizeHint() const override;
  179. #ifdef _WIN32
  180. // This gets called for each event from the Windows message queue.
  181. bool nativeEvent(const QByteArray& eventType, void* message, qintptr* result) override;
  182. #endif
  183. #ifdef HAVE_XRANDR
  184. std::unique_ptr<X11Utils::XRRConfiguration> m_xrr_config;
  185. #endif
  186. QStackedWidget* m_stack;
  187. ToolBar* m_tool_bar;
  188. MenuBar* m_menu_bar;
  189. SearchBar* m_search_bar;
  190. GameList* m_game_list;
  191. RenderWidget* m_render_widget = nullptr;
  192. bool m_rendering_to_main;
  193. bool m_stop_confirm_showing = false;
  194. bool m_stop_requested = false;
  195. bool m_exit_requested = false;
  196. bool m_fullscreen_requested = false;
  197. bool m_is_screensaver_inhibited = false;
  198. u32 m_state_slot = 1;
  199. std::unique_ptr<BootParameters> m_pending_boot;
  200. ControllersWindow* m_controllers_window = nullptr;
  201. SettingsWindow* m_settings_window = nullptr;
  202. GraphicsWindow* m_graphics_window = nullptr;
  203. FIFOPlayerWindow* m_fifo_window = nullptr;
  204. SkylanderPortalWindow* m_skylander_window = nullptr;
  205. InfinityBaseWindow* m_infinity_window = nullptr;
  206. MappingWindow* m_hotkey_window = nullptr;
  207. FreeLookWindow* m_freelook_window = nullptr;
  208. HotkeyScheduler* m_hotkey_scheduler;
  209. NetPlayDialog* m_netplay_dialog;
  210. DiscordHandler* m_netplay_discord;
  211. NetPlaySetupDialog* m_netplay_setup_dialog;
  212. static constexpr int num_gc_controllers = 4;
  213. std::array<GCTASInputWindow*, num_gc_controllers> m_gc_tas_input_windows{};
  214. std::array<GBATASInputWindow*, num_gc_controllers> m_gba_tas_input_windows{};
  215. static constexpr int num_wii_controllers = 4;
  216. std::array<WiiTASInputWindow*, num_wii_controllers> m_wii_tas_input_windows{};
  217. #ifdef USE_RETRO_ACHIEVEMENTS
  218. AchievementsWindow* m_achievements_window = nullptr;
  219. #endif // USE_RETRO_ACHIEVEMENTS
  220. AssemblerWidget* m_assembler_widget;
  221. BreakpointWidget* m_breakpoint_widget;
  222. CodeWidget* m_code_widget;
  223. JITWidget* m_jit_widget;
  224. LogWidget* m_log_widget;
  225. LogConfigWidget* m_log_config_widget;
  226. MemoryWidget* m_memory_widget;
  227. NetworkWidget* m_network_widget;
  228. RegisterWidget* m_register_widget;
  229. ThreadWidget* m_thread_widget;
  230. WatchWidget* m_watch_widget;
  231. CheatsManager* m_cheats_manager;
  232. QByteArray m_render_widget_geometry;
  233. };