Qt: Implement missing "File" menu items

This commit is contained in:
spycrab 2018-03-23 01:18:53 +01:00
parent 5e76f3a6d4
commit 95a5a51e55
4 changed files with 65 additions and 2 deletions

View File

@ -28,6 +28,7 @@
#include "Core/Config/NetplaySettings.h" #include "Core/Config/NetplaySettings.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
#include "Core/Core.h" #include "Core/Core.h"
#include "Core/HW/DVD/DVDInterface.h"
#include "Core/HW/GCKeyboard.h" #include "Core/HW/GCKeyboard.h"
#include "Core/HW/GCPad.h" #include "Core/HW/GCPad.h"
#include "Core/HW/ProcessorInterface.h" #include "Core/HW/ProcessorInterface.h"
@ -231,6 +232,10 @@ void MainWindow::ConnectMenuBar()
// File // File
connect(m_menu_bar, &MenuBar::Open, this, &MainWindow::Open); connect(m_menu_bar, &MenuBar::Open, this, &MainWindow::Open);
connect(m_menu_bar, &MenuBar::Exit, this, &MainWindow::close); connect(m_menu_bar, &MenuBar::Exit, this, &MainWindow::close);
connect(m_menu_bar, &MenuBar::EjectDisc, this, &MainWindow::EjectDisc);
connect(m_menu_bar, &MenuBar::ChangeDisc, this, &MainWindow::ChangeDisc);
connect(m_menu_bar, &MenuBar::BootDVDBackup, this,
[this](const QString& drive) { StartGame(drive); });
// Emulation // Emulation
connect(m_menu_bar, &MenuBar::Pause, this, &MainWindow::Pause); connect(m_menu_bar, &MenuBar::Pause, this, &MainWindow::Pause);
@ -406,12 +411,30 @@ void MainWindow::ConnectStack()
tabifyDockWidget(m_log_widget, m_breakpoint_widget); tabifyDockWidget(m_log_widget, m_breakpoint_widget);
} }
void MainWindow::Open() QString MainWindow::PromptFileName()
{ {
QString file = QFileDialog::getOpenFileName( return QFileDialog::getOpenFileName(
this, tr("Select a File"), QDir::currentPath(), this, tr("Select a File"), QDir::currentPath(),
tr("All GC/Wii files (*.elf *.dol *.gcm *.iso *.tgc *.wbfs *.ciso *.gcz *.wad);;" tr("All GC/Wii files (*.elf *.dol *.gcm *.iso *.tgc *.wbfs *.ciso *.gcz *.wad);;"
"All Files (*)")); "All Files (*)"));
}
void MainWindow::ChangeDisc()
{
QString file = PromptFileName();
if (!file.isEmpty())
Core::RunAsCPUThread([&file] { DVDInterface::ChangeDisc(file.toStdString()); });
}
void MainWindow::EjectDisc()
{
Core::RunAsCPUThread(DVDInterface::EjectDisc);
}
void MainWindow::Open()
{
QString file = PromptFileName();
if (!file.isEmpty()) if (!file.isEmpty())
StartGame(file); StartGame(file);
} }

View File

@ -128,6 +128,11 @@ private:
void OnExportRecording(); void OnExportRecording();
void ShowTASInput(); void ShowTASInput();
void ChangeDisc();
void EjectDisc();
QString PromptFileName();
void EnableScreenSaver(bool enable); void EnableScreenSaver(bool enable);
void OnStopComplete(); void OnStopComplete();

View File

@ -19,6 +19,7 @@
#include "Common/FileUtil.h" #include "Common/FileUtil.h"
#include "Common/StringUtil.h" #include "Common/StringUtil.h"
#include "Common/CDUtils.h"
#include "Core/Boot/Boot.h" #include "Core/Boot/Boot.h"
#include "Core/CommonTitles.h" #include "Core/CommonTitles.h"
#include "Core/ConfigManager.h" #include "Core/ConfigManager.h"
@ -74,6 +75,10 @@ void MenuBar::OnEmulationStateChanged(Core::State state)
bool running = state != Core::State::Uninitialized; bool running = state != Core::State::Uninitialized;
bool playing = running && state != Core::State::Paused; bool playing = running && state != Core::State::Paused;
// File
m_eject_disc->setEnabled(running);
m_change_disc->setEnabled(running);
// Emulation // Emulation
m_play_action->setEnabled(!playing); m_play_action->setEnabled(!playing);
m_play_action->setVisible(!playing); m_play_action->setVisible(!playing);
@ -122,11 +127,34 @@ void MenuBar::OnDebugModeToggled(bool enabled)
removeAction(m_symbols->menuAction()); removeAction(m_symbols->menuAction());
} }
void MenuBar::AddDVDBackupMenu(QMenu* file_menu)
{
m_backup_menu = file_menu->addMenu(tr("Boot from DVD Backup"));
const std::vector<std::string> drives = cdio_get_devices();
// Windows Limitation of 24 character drives
for (size_t i = 0; i < drives.size() && i < 24; i++)
{
auto drive = QString::fromStdString(drives[i]);
AddAction(m_backup_menu, drive, this, [this, drive] { emit BootDVDBackup(drive); });
}
}
void MenuBar::AddFileMenu() void MenuBar::AddFileMenu()
{ {
QMenu* file_menu = addMenu(tr("&File")); QMenu* file_menu = addMenu(tr("&File"));
m_open_action = AddAction(file_menu, tr("&Open..."), this, &MenuBar::Open, m_open_action = AddAction(file_menu, tr("&Open..."), this, &MenuBar::Open,
QKeySequence(QStringLiteral("Ctrl+O"))); QKeySequence(QStringLiteral("Ctrl+O")));
file_menu->addSeparator();
m_change_disc = AddAction(file_menu, tr("Change &Disc..."), this, &MenuBar::ChangeDisc);
m_eject_disc = AddAction(file_menu, tr("&Eject Disc"), this, &MenuBar::EjectDisc);
AddDVDBackupMenu(file_menu);
file_menu->addSeparator();
m_exit_action = AddAction(file_menu, tr("E&xit"), this, &MenuBar::Exit, m_exit_action = AddAction(file_menu, tr("E&xit"), this, &MenuBar::Exit,
QKeySequence(QStringLiteral("Alt+F4"))); QKeySequence(QStringLiteral("Alt+F4")));
} }

View File

@ -40,6 +40,9 @@ signals:
// File // File
void Open(); void Open();
void Exit(); void Exit();
void ChangeDisc();
void BootDVDBackup(const QString& backup);
void EjectDisc();
// Emulation // Emulation
void Play(); void Play();
@ -102,6 +105,7 @@ private:
void OnEmulationStateChanged(Core::State state); void OnEmulationStateChanged(Core::State state);
void AddFileMenu(); void AddFileMenu();
void AddDVDBackupMenu(QMenu* file_menu);
void AddEmulationMenu(); void AddEmulationMenu();
void AddStateLoadMenu(QMenu* emu_menu); void AddStateLoadMenu(QMenu* emu_menu);
@ -148,6 +152,9 @@ private:
// File // File
QAction* m_open_action; QAction* m_open_action;
QAction* m_exit_action; QAction* m_exit_action;
QAction* m_change_disc;
QAction* m_eject_disc;
QMenu* m_backup_menu;
// Tools // Tools
QAction* m_wad_install_action; QAction* m_wad_install_action;