summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2017-08-24 16:35:47 +0200
committerspycrab <spycrab@users.noreply.github.com>2017-08-29 02:57:46 +0200
commita2b7632850015efde794f4cac0b1a80d0cd752a7 (patch)
tree7b9527e39074528656c1fa10ec07e4a70519a652 /Source/Core
parent0dfde1d34e7f4f068aad1461619691b8eea8d84d (diff)
Qt: Implement "Load GameCube Main Menu"
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt2/MainWindow.cpp25
-rw-r--r--Source/Core/DolphinQt2/MainWindow.h7
-rw-r--r--Source/Core/DolphinQt2/MenuBar.cpp18
-rw-r--r--Source/Core/DolphinQt2/MenuBar.h6
4 files changed, 49 insertions, 7 deletions
diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp
index 6dc3ff4ec9..2723ca6431 100644
--- a/Source/Core/DolphinQt2/MainWindow.cpp
+++ b/Source/Core/DolphinQt2/MainWindow.cpp
@@ -14,6 +14,7 @@
#include <QMimeData>
#include "Common/Common.h"
+#include "Common/Compat/optional"
#include "Core/Boot/Boot.h"
#include "Core/BootManager.h"
@@ -199,6 +200,7 @@ void MainWindow::ConnectMenuBar()
connect(m_menu_bar, &MenuBar::ConfigureHotkeys, this, &MainWindow::ShowHotkeyDialog);
// Tools
+ connect(m_menu_bar, &MenuBar::BootGameCubeIPL, this, &MainWindow::OnBootGameCubeIPL);
connect(m_menu_bar, &MenuBar::PerformOnlineUpdate, this, &MainWindow::PerformOnlineUpdate);
connect(m_menu_bar, &MenuBar::BootWiiSystemMenu, this, &MainWindow::BootWiiSystemMenu);
connect(m_menu_bar, &MenuBar::StartNetPlay, this, &MainWindow::ShowNetPlaySetupDialog);
@@ -345,10 +347,10 @@ void MainWindow::OnStopComplete()
QGuiApplication::instance()->quit();
// If the current emulation prevented the booting of another, do that now
- if (!m_pending_boot.isEmpty())
+ if (m_pending_boot != nullptr)
{
- StartGame(m_pending_boot);
- m_pending_boot.clear();
+ StartGame(std::move(m_pending_boot));
+ m_pending_boot.reset();
}
}
@@ -447,6 +449,11 @@ void MainWindow::ScreenShot()
void MainWindow::StartGame(const QString& path)
{
+ StartGame(BootParameters::GenerateFromFile(path.toStdString()));
+}
+
+void MainWindow::StartGame(std::unique_ptr<BootParameters>&& parameters)
+{
// If we're running, only start a new game once we've stopped the last.
if (Core::GetState() != Core::State::Uninitialized)
{
@@ -454,11 +461,11 @@ void MainWindow::StartGame(const QString& path)
return;
// As long as the shutdown isn't complete, we can't boot, so let's boot later
- m_pending_boot = path;
+ m_pending_boot = std::move(parameters);
return;
}
// Boot up, show an error if it fails to load the game.
- if (!BootManager::BootCore(BootParameters::GenerateFromFile(path.toStdString())))
+ if (!BootManager::BootCore(std::move(parameters)))
{
QMessageBox::critical(this, tr("Error"), tr("Failed to init core"), QMessageBox::Ok);
return;
@@ -637,7 +644,8 @@ void MainWindow::NetPlayInit()
m_netplay_setup_dialog = new NetPlaySetupDialog(this);
m_netplay_dialog = new NetPlayDialog(this);
- connect(m_netplay_dialog, &NetPlayDialog::Boot, this, &MainWindow::StartGame);
+ connect(m_netplay_dialog, &NetPlayDialog::Boot, this,
+ static_cast<void (MainWindow::*)(const QString&)>(&MainWindow::StartGame));
connect(m_netplay_dialog, &NetPlayDialog::Stop, this, &MainWindow::RequestStop);
connect(m_netplay_dialog, &NetPlayDialog::rejected, this, &MainWindow::NetPlayQuit);
connect(this, &MainWindow::EmulationStopped, m_netplay_dialog, &NetPlayDialog::EmulationStopped);
@@ -819,3 +827,8 @@ QSize MainWindow::sizeHint() const
{
return QSize(800, 600);
}
+
+void MainWindow::OnBootGameCubeIPL(DiscIO::Region region)
+{
+ StartGame(std::make_unique<BootParameters>(BootParameters::IPL{region}));
+}
diff --git a/Source/Core/DolphinQt2/MainWindow.h b/Source/Core/DolphinQt2/MainWindow.h
index c9804d940d..1d55b39289 100644
--- a/Source/Core/DolphinQt2/MainWindow.h
+++ b/Source/Core/DolphinQt2/MainWindow.h
@@ -9,11 +9,14 @@
#include <QString>
#include <QToolBar>
+#include <memory>
+
#include "DolphinQt2/GameList/GameList.h"
#include "DolphinQt2/MenuBar.h"
#include "DolphinQt2/RenderWidget.h"
#include "DolphinQt2/ToolBar.h"
+struct BootParameters;
class HotkeyScheduler;
class LoggerWidget;
class MappingWindow;
@@ -83,6 +86,7 @@ private:
void InitCoreCallbacks();
void StartGame(const QString& path);
+ void StartGame(std::unique_ptr<BootParameters>&& parameters);
void ShowRenderWidget();
void HideRenderWidget();
@@ -99,6 +103,7 @@ private:
bool NetPlayHost(const QString& game_id);
void NetPlayQuit();
+ void OnBootGameCubeIPL(DiscIO::Region region);
void OnStopComplete();
void dragEnterEvent(QDragEnterEvent* event) override;
void dropEvent(QDropEvent* event) override;
@@ -113,7 +118,7 @@ private:
bool m_stop_requested = false;
bool m_exit_requested = false;
int m_state_slot = 1;
- QString m_pending_boot;
+ std::unique_ptr<BootParameters> m_pending_boot;
HotkeyScheduler* m_hotkey_scheduler;
ControllersWindow* m_controllers_window;
diff --git a/Source/Core/DolphinQt2/MenuBar.cpp b/Source/Core/DolphinQt2/MenuBar.cpp
index 38aace538c..c235125317 100644
--- a/Source/Core/DolphinQt2/MenuBar.cpp
+++ b/Source/Core/DolphinQt2/MenuBar.cpp
@@ -9,6 +9,8 @@
#include <QMessageBox>
#include <QUrl>
+#include "Common/CommonPaths.h"
+#include "Common/FileUtil.h"
#include "Core/CommonTitles.h"
#include "Core/ConfigManager.h"
#include "Core/HW/WiiSaveCrypted.h"
@@ -95,6 +97,16 @@ void MenuBar::AddToolsMenu()
m_wad_install_action = tools_menu->addAction(tr("Install WAD..."), this, &MenuBar::InstallWAD);
+ tools_menu->addSeparator();
+ QMenu* gc_ipl = tools_menu->addMenu(tr("Load GameCube Main Menu"));
+
+ m_ntscj_ipl = gc_ipl->addAction(tr("NTSC-J"), this,
+ [this] { emit BootGameCubeIPL(DiscIO::Region::NTSC_J); });
+ m_ntscu_ipl = gc_ipl->addAction(tr("NTSC-U"), this,
+ [this] { emit BootGameCubeIPL(DiscIO::Region::NTSC_U); });
+ m_pal_ipl =
+ gc_ipl->addAction(tr("PAL"), this, [this] { emit BootGameCubeIPL(DiscIO::Region::PAL); });
+
tools_menu->addAction(tr("Start &NetPlay..."), this, &MenuBar::StartNetPlay);
tools_menu->addSeparator();
@@ -375,6 +387,12 @@ void MenuBar::UpdateToolsMenu(bool emulation_started)
{
m_boot_sysmenu->setEnabled(!emulation_started);
m_perform_online_update_menu->setEnabled(!emulation_started);
+ m_ntscj_ipl->setEnabled(!emulation_started &&
+ File::Exists(SConfig::GetInstance().GetBootROMPath(JAP_DIR)));
+ m_ntscu_ipl->setEnabled(!emulation_started &&
+ File::Exists(SConfig::GetInstance().GetBootROMPath(USA_DIR)));
+ m_pal_ipl->setEnabled(!emulation_started &&
+ File::Exists(SConfig::GetInstance().GetBootROMPath(EUR_DIR)));
if (!emulation_started)
{
diff --git a/Source/Core/DolphinQt2/MenuBar.h b/Source/Core/DolphinQt2/MenuBar.h
index 1a7347fa03..28bb00a7e1 100644
--- a/Source/Core/DolphinQt2/MenuBar.h
+++ b/Source/Core/DolphinQt2/MenuBar.h
@@ -55,6 +55,9 @@ signals:
void PerformOnlineUpdate(const std::string& region);
+ // Tools
+ void BootGameCubeIPL(DiscIO::Region region);
+
// Options
void Configure();
void ConfigureGraphics();
@@ -97,6 +100,9 @@ private:
QAction* m_wad_install_action;
QMenu* m_perform_online_update_menu;
QAction* m_perform_online_update_for_current_region;
+ QAction* m_ntscj_ipl;
+ QAction* m_ntscu_ipl;
+ QAction* m_pal_ipl;
// Emulation
QAction* m_play_action;