2015-11-27 08:33:07 +00:00
|
|
|
// Copyright 2015 Dolphin Emulator Project
|
|
|
|
// Licensed under GPLv2+
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <QMainWindow>
|
|
|
|
#include <QStackedWidget>
|
|
|
|
#include <QString>
|
|
|
|
#include <QToolBar>
|
|
|
|
|
2017-08-24 14:35:47 +00:00
|
|
|
#include <memory>
|
2017-12-25 17:07:29 +00:00
|
|
|
#include <optional>
|
2017-12-31 19:33:36 +00:00
|
|
|
#include <string>
|
2017-08-24 14:35:47 +00:00
|
|
|
|
2018-07-06 22:40:15 +00:00
|
|
|
#include "DolphinQt/GameList/GameList.h"
|
|
|
|
#include "DolphinQt/MenuBar.h"
|
|
|
|
#include "DolphinQt/RenderWidget.h"
|
|
|
|
#include "DolphinQt/ToolBar.h"
|
2015-11-27 08:33:07 +00:00
|
|
|
|
2018-03-24 01:13:56 +00:00
|
|
|
class QProgressDialog;
|
|
|
|
|
2017-10-03 16:43:44 +00:00
|
|
|
class BreakpointWidget;
|
2017-08-24 14:35:47 +00:00
|
|
|
struct BootParameters;
|
2018-03-26 02:17:47 +00:00
|
|
|
class CheatsManager;
|
2018-02-14 22:25:01 +00:00
|
|
|
class CodeWidget;
|
2018-03-24 01:13:56 +00:00
|
|
|
class ControllersWindow;
|
|
|
|
class DragEnterEvent;
|
2017-08-30 14:44:28 +00:00
|
|
|
class FIFOPlayerWindow;
|
2018-03-24 01:13:56 +00:00
|
|
|
class GCTASInputWindow;
|
|
|
|
class GraphicsWindow;
|
2017-06-06 11:49:49 +00:00
|
|
|
class HotkeyScheduler;
|
2018-04-09 13:31:20 +00:00
|
|
|
class JITWidget;
|
2017-08-27 22:10:06 +00:00
|
|
|
class LogConfigWidget;
|
|
|
|
class LogWidget;
|
2018-03-16 11:39:53 +00:00
|
|
|
class MemoryWidget;
|
2017-07-21 20:48:21 +00:00
|
|
|
class NetPlayClient;
|
|
|
|
class NetPlayDialog;
|
|
|
|
class NetPlayServer;
|
|
|
|
class NetPlaySetupDialog;
|
2018-03-24 01:13:56 +00:00
|
|
|
class RegisterWidget;
|
2018-03-21 10:13:53 +00:00
|
|
|
class SearchBar;
|
2016-05-09 13:34:07 +00:00
|
|
|
class SettingsWindow;
|
2017-09-27 06:53:05 +00:00
|
|
|
class WatchWidget;
|
2018-01-31 11:35:09 +00:00
|
|
|
class WiiTASInputWindow;
|
2016-02-10 04:42:06 +00:00
|
|
|
|
2018-04-05 13:03:12 +00:00
|
|
|
namespace X11Utils
|
|
|
|
{
|
|
|
|
class XRRConfiguration;
|
|
|
|
}
|
|
|
|
|
2015-11-27 08:33:07 +00:00
|
|
|
class MainWindow final : public QMainWindow
|
|
|
|
{
|
2016-06-24 08:43:46 +00:00
|
|
|
Q_OBJECT
|
2015-11-27 08:33:07 +00:00
|
|
|
|
|
|
|
public:
|
2017-10-01 22:09:07 +00:00
|
|
|
explicit MainWindow(std::unique_ptr<BootParameters> boot_parameters);
|
2016-06-24 08:43:46 +00:00
|
|
|
~MainWindow();
|
2015-11-27 08:33:07 +00:00
|
|
|
|
2018-05-13 13:03:48 +00:00
|
|
|
void Show();
|
|
|
|
|
2017-06-24 15:00:37 +00:00
|
|
|
bool eventFilter(QObject* object, QEvent* event) override;
|
|
|
|
|
2015-11-27 08:33:07 +00:00
|
|
|
signals:
|
2017-08-27 11:55:05 +00:00
|
|
|
void ReadOnlyModeChanged(bool read_only);
|
|
|
|
void RecordingStatusChanged(bool recording);
|
2015-11-27 08:33:07 +00:00
|
|
|
|
2017-06-30 09:24:26 +00:00
|
|
|
private:
|
2016-06-24 08:43:46 +00:00
|
|
|
void Open();
|
2018-06-04 19:44:46 +00:00
|
|
|
void RefreshGameList();
|
2017-12-25 17:07:29 +00:00
|
|
|
void Play(const std::optional<std::string>& savestate_path = {});
|
2016-06-24 08:43:46 +00:00
|
|
|
void Pause();
|
2018-02-09 11:54:35 +00:00
|
|
|
void TogglePause();
|
2016-06-24 08:43:46 +00:00
|
|
|
|
|
|
|
// May ask for confirmation. Returns whether or not it actually stopped.
|
2017-07-03 14:04:24 +00:00
|
|
|
bool RequestStop();
|
2016-06-24 08:43:46 +00:00
|
|
|
void ForceStop();
|
|
|
|
void Reset();
|
|
|
|
void FrameAdvance();
|
|
|
|
void StateLoad();
|
|
|
|
void StateSave();
|
|
|
|
void StateLoadSlot();
|
|
|
|
void StateSaveSlot();
|
|
|
|
void StateLoadSlotAt(int slot);
|
|
|
|
void StateSaveSlotAt(int slot);
|
2018-05-17 18:27:14 +00:00
|
|
|
void StateLoadLastSavedAt(int slot);
|
2016-06-24 08:43:46 +00:00
|
|
|
void StateLoadUndo();
|
|
|
|
void StateSaveUndo();
|
|
|
|
void StateSaveOldest();
|
|
|
|
void SetStateSlot(int slot);
|
2017-07-06 09:01:32 +00:00
|
|
|
void BootWiiSystemMenu();
|
2016-06-24 08:43:46 +00:00
|
|
|
|
2017-06-14 09:58:11 +00:00
|
|
|
void PerformOnlineUpdate(const std::string& region);
|
|
|
|
|
2018-05-07 16:38:59 +00:00
|
|
|
void SetFullScreenResolution(bool fullscreen);
|
|
|
|
|
2016-06-24 08:43:46 +00:00
|
|
|
void FullScreen();
|
|
|
|
void ScreenShot();
|
2015-11-27 08:33:07 +00:00
|
|
|
|
2016-06-24 08:43:46 +00:00
|
|
|
void CreateComponents();
|
|
|
|
|
|
|
|
void ConnectGameList();
|
2018-03-24 01:13:56 +00:00
|
|
|
void ConnectHost();
|
2017-06-06 11:49:49 +00:00
|
|
|
void ConnectHotkeys();
|
2016-06-24 08:43:46 +00:00
|
|
|
void ConnectMenuBar();
|
|
|
|
void ConnectRenderWidget();
|
|
|
|
void ConnectStack();
|
|
|
|
void ConnectToolBar();
|
|
|
|
|
2017-05-23 20:12:01 +00:00
|
|
|
void InitControllers();
|
2017-06-01 04:11:54 +00:00
|
|
|
void ShutdownControllers();
|
2017-05-23 20:12:01 +00:00
|
|
|
|
2017-06-16 13:27:00 +00:00
|
|
|
void InitCoreCallbacks();
|
|
|
|
|
2017-12-25 17:07:29 +00:00
|
|
|
void StartGame(const QString& path, const std::optional<std::string>& savestate_path = {});
|
2017-12-31 19:33:36 +00:00
|
|
|
void StartGame(const std::string& path, const std::optional<std::string>& savestate_path = {});
|
2017-08-24 14:35:47 +00:00
|
|
|
void StartGame(std::unique_ptr<BootParameters>&& parameters);
|
2016-06-24 08:43:46 +00:00
|
|
|
void ShowRenderWidget();
|
2018-03-21 19:53:37 +00:00
|
|
|
void HideRenderWidget(bool reinit = true);
|
2016-06-24 08:43:46 +00:00
|
|
|
|
|
|
|
void ShowSettingsWindow();
|
2017-09-10 17:10:45 +00:00
|
|
|
void ShowGeneralWindow();
|
2017-07-16 21:11:11 +00:00
|
|
|
void ShowAudioWindow();
|
2017-05-09 16:49:10 +00:00
|
|
|
void ShowControllersWindow();
|
2017-06-15 23:42:12 +00:00
|
|
|
void ShowGraphicsWindow();
|
2016-06-24 08:43:46 +00:00
|
|
|
void ShowAboutDialog();
|
2017-06-06 11:49:49 +00:00
|
|
|
void ShowHotkeyDialog();
|
2017-07-21 20:48:21 +00:00
|
|
|
void ShowNetPlaySetupDialog();
|
2017-08-30 14:44:28 +00:00
|
|
|
void ShowFIFOPlayer();
|
2018-01-25 18:54:50 +00:00
|
|
|
void ShowMemcardManager();
|
2018-03-26 02:17:47 +00:00
|
|
|
void ShowCheatsManager();
|
2017-07-21 20:48:21 +00:00
|
|
|
|
|
|
|
void NetPlayInit();
|
|
|
|
bool NetPlayJoin();
|
|
|
|
bool NetPlayHost(const QString& game_id);
|
|
|
|
void NetPlayQuit();
|
2016-06-24 08:43:46 +00:00
|
|
|
|
2017-08-24 14:35:47 +00:00
|
|
|
void OnBootGameCubeIPL(DiscIO::Region region);
|
2017-08-24 15:38:31 +00:00
|
|
|
void OnImportNANDBackup();
|
2018-01-24 14:25:35 +00:00
|
|
|
void OnConnectWiiRemote(int id);
|
2018-05-22 19:30:54 +00:00
|
|
|
void OnSignal();
|
2017-08-27 11:55:05 +00:00
|
|
|
|
2018-03-24 01:13:56 +00:00
|
|
|
void OnUpdateProgressDialog(QString label, int progress, int total);
|
|
|
|
|
2017-08-27 11:55:05 +00:00
|
|
|
void OnPlayRecording();
|
|
|
|
void OnStartRecording();
|
|
|
|
void OnStopRecording();
|
|
|
|
void OnExportRecording();
|
2018-01-27 13:35:02 +00:00
|
|
|
void ShowTASInput();
|
2017-08-27 11:55:05 +00:00
|
|
|
|
2018-03-23 00:18:53 +00:00
|
|
|
void ChangeDisc();
|
|
|
|
void EjectDisc();
|
|
|
|
|
|
|
|
QString PromptFileName();
|
|
|
|
|
2018-01-01 21:15:26 +00:00
|
|
|
void EnableScreenSaver(bool enable);
|
|
|
|
|
2017-07-03 14:04:24 +00:00
|
|
|
void OnStopComplete();
|
2017-06-26 21:22:40 +00:00
|
|
|
void dragEnterEvent(QDragEnterEvent* event) override;
|
|
|
|
void dropEvent(QDropEvent* event) override;
|
2017-05-27 01:24:07 +00:00
|
|
|
QSize sizeHint() const override;
|
2017-06-26 21:22:40 +00:00
|
|
|
|
2018-04-05 13:03:12 +00:00
|
|
|
#if defined(HAVE_XRANDR) && HAVE_XRANDR
|
|
|
|
std::unique_ptr<X11Utils::XRRConfiguration> m_xrr_config;
|
|
|
|
#endif
|
|
|
|
|
2018-03-24 01:13:56 +00:00
|
|
|
QProgressDialog* m_progress_dialog = nullptr;
|
2016-06-24 08:43:46 +00:00
|
|
|
QStackedWidget* m_stack;
|
|
|
|
ToolBar* m_tool_bar;
|
|
|
|
MenuBar* m_menu_bar;
|
2018-03-21 10:13:53 +00:00
|
|
|
SearchBar* m_search_bar;
|
2016-06-24 08:43:46 +00:00
|
|
|
GameList* m_game_list;
|
|
|
|
RenderWidget* m_render_widget;
|
|
|
|
bool m_rendering_to_main;
|
2017-06-24 15:00:37 +00:00
|
|
|
bool m_stop_requested = false;
|
2017-07-03 14:04:24 +00:00
|
|
|
bool m_exit_requested = false;
|
2018-06-08 17:59:24 +00:00
|
|
|
bool m_fullscreen_requested = false;
|
2016-06-24 08:43:46 +00:00
|
|
|
int m_state_slot = 1;
|
2017-08-24 14:35:47 +00:00
|
|
|
std::unique_ptr<BootParameters> m_pending_boot;
|
2016-06-24 08:43:46 +00:00
|
|
|
|
2017-06-06 11:49:49 +00:00
|
|
|
HotkeyScheduler* m_hotkey_scheduler;
|
2017-05-09 16:49:10 +00:00
|
|
|
ControllersWindow* m_controllers_window;
|
2016-06-24 08:43:46 +00:00
|
|
|
SettingsWindow* m_settings_window;
|
2017-07-21 20:48:21 +00:00
|
|
|
NetPlayDialog* m_netplay_dialog;
|
|
|
|
NetPlaySetupDialog* m_netplay_setup_dialog;
|
2017-06-15 23:42:12 +00:00
|
|
|
GraphicsWindow* m_graphics_window;
|
2018-01-31 11:35:09 +00:00
|
|
|
static constexpr int num_gc_controllers = 4;
|
|
|
|
std::array<GCTASInputWindow*, num_gc_controllers> m_gc_tas_input_windows{};
|
|
|
|
static constexpr int num_wii_controllers = 4;
|
|
|
|
std::array<WiiTASInputWindow*, num_wii_controllers> m_wii_tas_input_windows{};
|
2017-09-13 17:33:45 +00:00
|
|
|
|
2017-10-03 16:43:44 +00:00
|
|
|
BreakpointWidget* m_breakpoint_widget;
|
2018-02-14 22:25:01 +00:00
|
|
|
CodeWidget* m_code_widget;
|
2018-04-09 13:31:20 +00:00
|
|
|
JITWidget* m_jit_widget;
|
2017-08-27 22:10:06 +00:00
|
|
|
LogWidget* m_log_widget;
|
|
|
|
LogConfigWidget* m_log_config_widget;
|
2018-03-16 11:39:53 +00:00
|
|
|
MemoryWidget* m_memory_widget;
|
2017-08-30 14:44:28 +00:00
|
|
|
FIFOPlayerWindow* m_fifo_window;
|
2017-09-13 17:33:45 +00:00
|
|
|
RegisterWidget* m_register_widget;
|
2017-09-27 06:53:05 +00:00
|
|
|
WatchWidget* m_watch_widget;
|
2018-03-26 02:17:47 +00:00
|
|
|
CheatsManager* m_cheats_manager;
|
2018-05-12 22:59:09 +00:00
|
|
|
QByteArray m_render_widget_geometry;
|
2015-11-27 08:33:07 +00:00
|
|
|
};
|