|
|
|
@ -175,7 +175,7 @@ void GMainWindow::InitializeRecentFileMenuActions() {
|
|
|
|
|
for (int i = 0; i < max_recent_files_item; ++i) {
|
|
|
|
|
actions_recent_files[i] = new QAction(this);
|
|
|
|
|
actions_recent_files[i]->setVisible(false);
|
|
|
|
|
connect(actions_recent_files[i], SIGNAL(triggered()), this, SLOT(OnMenuRecentFile()));
|
|
|
|
|
connect(actions_recent_files[i], &QAction::triggered, this, &GMainWindow::OnMenuRecentFile);
|
|
|
|
|
|
|
|
|
|
ui.menu_recent_files->addAction(actions_recent_files[i]);
|
|
|
|
|
}
|
|
|
|
@ -190,10 +190,10 @@ void GMainWindow::InitializeHotkeys() {
|
|
|
|
|
RegisterHotkey("Main Window", "Exit Fullscreen", QKeySequence::Cancel, Qt::ApplicationShortcut);
|
|
|
|
|
LoadHotkeys();
|
|
|
|
|
|
|
|
|
|
connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this,
|
|
|
|
|
SLOT(OnMenuLoadFile()));
|
|
|
|
|
connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this,
|
|
|
|
|
SLOT(OnStartGame()));
|
|
|
|
|
connect(GetHotkey("Main Window", "Load File", this), &QShortcut::activated, this,
|
|
|
|
|
&GMainWindow::OnMenuLoadFile);
|
|
|
|
|
connect(GetHotkey("Main Window", "Start Emulation", this), &QShortcut::activated, this,
|
|
|
|
|
&GMainWindow::OnStartGame);
|
|
|
|
|
connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activated,
|
|
|
|
|
ui.action_Fullscreen, &QAction::trigger);
|
|
|
|
|
connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activatedAmbiguously,
|
|
|
|
@ -245,13 +245,14 @@ void GMainWindow::RestoreUIState() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GMainWindow::ConnectWidgetEvents() {
|
|
|
|
|
connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString)));
|
|
|
|
|
connect(game_list, SIGNAL(OpenSaveFolderRequested(u64)), this,
|
|
|
|
|
SLOT(OnGameListOpenSaveFolder(u64)));
|
|
|
|
|
connect(game_list, &GameList::GameChosen, this, &GMainWindow::OnGameListLoadFile);
|
|
|
|
|
connect(game_list, &GameList::OpenSaveFolderRequested, this,
|
|
|
|
|
&GMainWindow::OnGameListOpenSaveFolder);
|
|
|
|
|
|
|
|
|
|
connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window,
|
|
|
|
|
SLOT(OnEmulationStarting(EmuThread*)));
|
|
|
|
|
connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping()));
|
|
|
|
|
connect(this, &GMainWindow::EmulationStarting, render_window,
|
|
|
|
|
&GRenderWindow::OnEmulationStarting);
|
|
|
|
|
connect(this, &GMainWindow::EmulationStopping, render_window,
|
|
|
|
|
&GRenderWindow::OnEmulationStopping);
|
|
|
|
|
|
|
|
|
|
connect(&status_bar_update_timer, &QTimer::timeout, this, &GMainWindow::UpdateStatusBar);
|
|
|
|
|
}
|
|
|
|
@ -398,17 +399,17 @@ void GMainWindow::BootGame(const QString& filename) {
|
|
|
|
|
render_window->moveContext();
|
|
|
|
|
emu_thread->start();
|
|
|
|
|
|
|
|
|
|
connect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame()));
|
|
|
|
|
connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
|
|
|
|
|
// BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
|
|
|
|
|
// before the CPU continues
|
|
|
|
|
connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget,
|
|
|
|
|
SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), SIGNAL(DebugModeEntered()), waitTreeWidget,
|
|
|
|
|
SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()),
|
|
|
|
|
Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), SIGNAL(DebugModeLeft()), waitTreeWidget, SLOT(OnDebugModeLeft()),
|
|
|
|
|
Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), &EmuThread::DebugModeEntered, registersWidget,
|
|
|
|
|
&RegistersWidget::OnDebugModeEntered, Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), &EmuThread::DebugModeEntered, waitTreeWidget,
|
|
|
|
|
&WaitTreeWidget::OnDebugModeEntered, Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), &EmuThread::DebugModeLeft, registersWidget,
|
|
|
|
|
&RegistersWidget::OnDebugModeLeft, Qt::BlockingQueuedConnection);
|
|
|
|
|
connect(emu_thread.get(), &EmuThread::DebugModeLeft, waitTreeWidget,
|
|
|
|
|
&WaitTreeWidget::OnDebugModeLeft, Qt::BlockingQueuedConnection);
|
|
|
|
|
|
|
|
|
|
// Update the GUI
|
|
|
|
|
registersWidget->OnDebugModeEntered();
|
|
|
|
@ -437,7 +438,7 @@ void GMainWindow::ShutdownGame() {
|
|
|
|
|
emu_thread = nullptr;
|
|
|
|
|
|
|
|
|
|
// The emulation is stopped, so closing the window or not does not matter anymore
|
|
|
|
|
disconnect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame()));
|
|
|
|
|
disconnect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
|
|
|
|
|
|
|
|
|
|
// Update the GUI
|
|
|
|
|
ui.action_Start->setEnabled(false);
|
|
|
|
@ -548,8 +549,7 @@ void GMainWindow::OnStartGame() {
|
|
|
|
|
emu_thread->SetRunning(true);
|
|
|
|
|
qRegisterMetaType<Core::System::ResultStatus>("Core::System::ResultStatus");
|
|
|
|
|
qRegisterMetaType<std::string>("std::string");
|
|
|
|
|
connect(emu_thread.get(), SIGNAL(ErrorThrown(Core::System::ResultStatus, std::string)), this,
|
|
|
|
|
SLOT(OnCoreError(Core::System::ResultStatus, std::string)));
|
|
|
|
|
connect(emu_thread.get(), &EmuThread::ErrorThrown, this, &GMainWindow::OnCoreError);
|
|
|
|
|
|
|
|
|
|
ui.action_Start->setEnabled(false);
|
|
|
|
|
ui.action_Start->setText(tr("Continue"));
|
|
|
|
|