forked from dolphin-emu/dolphin
		
	Save states, fullscreen, frame advance, screenshot and emulation controls are available through the MenuBar
		
			
				
	
	
		
			226 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2015 Dolphin Emulator Project
 | |
| // Licensed under GPLv2+
 | |
| // Refer to the license.txt file included.
 | |
| 
 | |
| #include <QAction>
 | |
| #include <QDesktopServices>
 | |
| #include <QUrl>
 | |
| 
 | |
| #include "Core/State.h"
 | |
| #include "DolphinQt2/AboutDialog.h"
 | |
| #include "DolphinQt2/MenuBar.h"
 | |
| #include "DolphinQt2/Settings.h"
 | |
| 
 | |
| MenuBar::MenuBar(QWidget* parent)
 | |
| 	: QMenuBar(parent)
 | |
| {
 | |
| 	AddFileMenu();
 | |
| 	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"));
 | |
| 	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()
 | |
| {
 | |
| 	QMenu* view_menu = addMenu(tr("View"));
 | |
| 	AddGameListTypeSection(view_menu);
 | |
| 	view_menu->addSeparator();
 | |
| 	AddTableColumnsMenu(view_menu);
 | |
| }
 | |
| 
 | |
| void MenuBar::AddHelpMenu()
 | |
| {
 | |
| 	QMenu* help_menu = addMenu(tr("Help"));
 | |
| 	QAction* documentation = help_menu->addAction(tr("Online Documentation"));
 | |
| 	connect(documentation, &QAction::triggered, this, [=]() {
 | |
| 	    QDesktopServices::openUrl(QUrl(QStringLiteral("https://dolphin-emu.org/docs/guides")));
 | |
| 	});
 | |
| 	help_menu->addAction(tr("About"), this, SIGNAL(ShowAboutDialog()));
 | |
| }
 | |
| 
 | |
| 
 | |
| void MenuBar::AddGameListTypeSection(QMenu* view_menu)
 | |
| {
 | |
| 	QAction* table_view = view_menu->addAction(tr("Table"));
 | |
| 	table_view->setCheckable(true);
 | |
| 
 | |
| 	QAction* list_view = view_menu->addAction(tr("List"));
 | |
| 	list_view->setCheckable(true);
 | |
| 
 | |
| 	QActionGroup* list_group = new QActionGroup(this);
 | |
| 	list_group->addAction(table_view);
 | |
| 	list_group->addAction(list_view);
 | |
| 
 | |
| 	bool prefer_table = Settings().GetPreferredView();
 | |
| 	table_view->setChecked(prefer_table);
 | |
| 	list_view->setChecked(!prefer_table);
 | |
| 
 | |
| 	connect(table_view, &QAction::triggered, this, &MenuBar::ShowTable);
 | |
| 	connect(list_view, &QAction::triggered, this, &MenuBar::ShowList);
 | |
| }
 | |
| 
 | |
| // TODO implement this
 | |
| void MenuBar::AddTableColumnsMenu(QMenu* view_menu)
 | |
| {
 | |
| 	QActionGroup* column_group = new QActionGroup(this);
 | |
| 	QMenu* cols_menu = view_menu->addMenu(tr("Table Columns"));
 | |
| 	column_group->setExclusive(false);
 | |
| 
 | |
| 	QStringList col_names{
 | |
| 		tr("Platform"),
 | |
| 		tr("ID"),
 | |
| 		tr("Banner"),
 | |
| 		tr("Title"),
 | |
| 		tr("Description"),
 | |
| 		tr("Maker"),
 | |
| 		tr("Size"),
 | |
| 		tr("Country"),
 | |
| 		tr("Quality")
 | |
| 	};
 | |
| 	for (int i = 0; i < col_names.count(); i++)
 | |
| 	{
 | |
| 		QAction* action = column_group->addAction(cols_menu->addAction(col_names[i]));
 | |
| 		action->setCheckable(true);
 | |
| 	}
 | |
| }
 |