mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
Implements Emulation MenuBar
Save states, fullscreen, frame advance, screenshot and emulation controls are available through the MenuBar
This commit is contained in:
@ -6,6 +6,7 @@
|
||||
#include <QDesktopServices>
|
||||
#include <QUrl>
|
||||
|
||||
#include "Core/State.h"
|
||||
#include "DolphinQt2/AboutDialog.h"
|
||||
#include "DolphinQt2/MenuBar.h"
|
||||
#include "DolphinQt2/Settings.h"
|
||||
@ -14,19 +15,149 @@ MenuBar::MenuBar(QWidget* parent)
|
||||
: QMenuBar(parent)
|
||||
{
|
||||
AddFileMenu();
|
||||
addMenu(tr("Emulation"));
|
||||
AddEmulationMenu();
|
||||
addMenu(tr("Movie"));
|
||||
addMenu(tr("Options"));
|
||||
addMenu(tr("Tools"));
|
||||
AddViewMenu();
|
||||
AddHelpMenu();
|
||||
|
||||
EmulationStopped();
|
||||
}
|
||||
|
||||
void MenuBar::EmulationStarted()
|
||||
{
|
||||
// Emulation
|
||||
m_play_action->setEnabled(false);
|
||||
m_play_action->setVisible(false);
|
||||
m_pause_action->setEnabled(true);
|
||||
m_pause_action->setVisible(true);
|
||||
m_stop_action->setEnabled(true);
|
||||
m_reset_action->setEnabled(true);
|
||||
m_fullscreen_action->setEnabled(true);
|
||||
m_frame_advance_action->setEnabled(true);
|
||||
m_screenshot_action->setEnabled(true);
|
||||
m_state_load_menu->setEnabled(true);
|
||||
m_state_save_menu->setEnabled(true);
|
||||
UpdateStateSlotMenu();
|
||||
}
|
||||
void MenuBar::EmulationPaused()
|
||||
{
|
||||
m_play_action->setEnabled(true);
|
||||
m_play_action->setVisible(true);
|
||||
m_pause_action->setEnabled(false);
|
||||
m_pause_action->setVisible(false);
|
||||
}
|
||||
void MenuBar::EmulationStopped()
|
||||
{
|
||||
// Emulation
|
||||
m_play_action->setEnabled(true);
|
||||
m_play_action->setVisible(true);
|
||||
m_pause_action->setEnabled(false);
|
||||
m_pause_action->setVisible(false);
|
||||
m_stop_action->setEnabled(false);
|
||||
m_reset_action->setEnabled(false);
|
||||
m_fullscreen_action->setEnabled(false);
|
||||
m_frame_advance_action->setEnabled(false);
|
||||
m_screenshot_action->setEnabled(false);
|
||||
m_state_load_menu->setEnabled(false);
|
||||
m_state_save_menu->setEnabled(false);
|
||||
UpdateStateSlotMenu();
|
||||
}
|
||||
|
||||
void MenuBar::AddFileMenu()
|
||||
{
|
||||
QMenu* file_menu = addMenu(tr("File"));
|
||||
file_menu->addAction(tr("Open"), this, SIGNAL(Open()));
|
||||
file_menu->addAction(tr("Exit"), this, SIGNAL(Exit()));
|
||||
m_open_action = file_menu->addAction(tr("Open"), this, SIGNAL(Open()));
|
||||
m_exit_action = file_menu->addAction(tr("Exit"), this, SIGNAL(Exit()));
|
||||
}
|
||||
|
||||
void MenuBar::AddEmulationMenu()
|
||||
{
|
||||
QMenu* emu_menu = addMenu(tr("Emulation"));
|
||||
m_play_action = emu_menu->addAction(tr("Play"), this, SIGNAL(Play()));
|
||||
m_pause_action = emu_menu->addAction(tr("Pause"), this, SIGNAL(Pause()));
|
||||
m_stop_action = emu_menu->addAction(tr("Stop"), this, SIGNAL(Stop()));
|
||||
m_reset_action = emu_menu->addAction(tr("Reset"), this, SIGNAL(Reset()));
|
||||
m_fullscreen_action = emu_menu->addAction(tr("Fullscreen"), this, SIGNAL(Fullscreen()));
|
||||
m_frame_advance_action = emu_menu->addAction(tr("Frame Advance"), this, SIGNAL(FrameAdvance()));
|
||||
m_screenshot_action = emu_menu->addAction(tr("Take Screenshot"), this, SIGNAL(Screenshot()));
|
||||
AddStateLoadMenu(emu_menu);
|
||||
AddStateSaveMenu(emu_menu);
|
||||
AddStateSlotMenu(emu_menu);
|
||||
UpdateStateSlotMenu();
|
||||
}
|
||||
|
||||
void MenuBar::AddStateLoadMenu(QMenu* emu_menu)
|
||||
{
|
||||
m_state_load_menu = emu_menu->addMenu(tr("Load State"));
|
||||
m_state_load_menu->addAction(tr("Load State from File"), this, SIGNAL(StateLoad()));
|
||||
m_state_load_menu->addAction(tr("Load State from Selected Slot"), this, SIGNAL(StateLoadSlot()));
|
||||
m_state_load_slots_menu = m_state_load_menu->addMenu(tr("Load State from Slot"));
|
||||
m_state_load_menu->addAction(tr("Undo Load State"), this, SIGNAL(StateLoadUndo()));
|
||||
|
||||
for (int i = 1; i <= 10; i++)
|
||||
{
|
||||
QAction* action = m_state_load_slots_menu->addAction(QStringLiteral(""));
|
||||
|
||||
connect(action, &QAction::triggered, this, [=]() {
|
||||
emit StateLoadSlotAt(i);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void MenuBar::AddStateSaveMenu(QMenu* emu_menu)
|
||||
{
|
||||
m_state_save_menu = emu_menu->addMenu(tr("Save State"));
|
||||
m_state_save_menu->addAction(tr("Save State to File"), this, SIGNAL(StateSave()));
|
||||
m_state_save_menu->addAction(tr("Save State to Selected Slot"), this, SIGNAL(StateSaveSlot()));
|
||||
m_state_save_menu->addAction(tr("Save State to Oldest Slot"), this, SIGNAL(StateSaveOldest()));
|
||||
m_state_save_slots_menu = m_state_save_menu->addMenu(tr("Save State to Slot"));
|
||||
m_state_save_menu->addAction(tr("Undo Save State"), this, SIGNAL(StateSaveUndo()));
|
||||
|
||||
for (int i = 1; i <= 10; i++)
|
||||
{
|
||||
QAction* action = m_state_save_slots_menu->addAction(QStringLiteral(""));
|
||||
|
||||
connect(action, &QAction::triggered, this, [=]() {
|
||||
emit StateSaveSlotAt(i);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void MenuBar::AddStateSlotMenu(QMenu* emu_menu)
|
||||
{
|
||||
m_state_slot_menu = emu_menu->addMenu(tr("Select State Slot"));
|
||||
m_state_slots = new QActionGroup(this);
|
||||
|
||||
for (int i = 1; i <= 10; i++)
|
||||
{
|
||||
QAction* action = m_state_slot_menu->addAction(QStringLiteral(""));
|
||||
action->setCheckable(true);
|
||||
action->setActionGroup(m_state_slots);
|
||||
if (Settings().GetStateSlot() == i)
|
||||
action->setChecked(true);
|
||||
|
||||
connect(action, &QAction::triggered, this, [=]() {
|
||||
emit SetStateSlot(i);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void MenuBar::UpdateStateSlotMenu()
|
||||
{
|
||||
QList<QAction*> actions_slot = m_state_slots->actions();
|
||||
QList<QAction*> actions_load = m_state_load_slots_menu->actions();
|
||||
QList<QAction*> actions_save = m_state_save_slots_menu->actions();
|
||||
for (int i = 0; i < actions_slot.length(); i++)
|
||||
{
|
||||
int slot = i + 1;
|
||||
QString info = QString::fromStdString(State::GetInfoStringOfSlot(slot));
|
||||
QString action_string = tr(" Slot %1 - %2").arg(slot).arg(info);
|
||||
actions_load.at(i)->setText(tr("Load from") + action_string);
|
||||
actions_save.at(i)->setText(tr("Save to") + action_string);
|
||||
actions_slot.at(i)->setText(tr("Select") + action_string);
|
||||
}
|
||||
}
|
||||
|
||||
void MenuBar::AddViewMenu()
|
||||
|
Reference in New Issue
Block a user