MainWindow.h 7.0 KB

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