| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | // Copyright 2015 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2+
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QAction>
 | 
					
						
							| 
									
										
										
										
											2016-02-11 22:59:44 +11:00
										 |  |  | #include <QDesktopServices>
 | 
					
						
							|  |  |  | #include <QUrl>
 | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | #include "Core/State.h"
 | 
					
						
							| 
									
										
										
										
											2016-02-11 22:59:44 +11:00
										 |  |  | #include "DolphinQt2/AboutDialog.h"
 | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | #include "DolphinQt2/MenuBar.h"
 | 
					
						
							| 
									
										
										
										
											2016-01-01 02:29:39 -08:00
										 |  |  | #include "DolphinQt2/Settings.h"
 | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  | MenuBar::MenuBar(QWidget* parent) : QMenuBar(parent) | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   AddFileMenu(); | 
					
						
							|  |  |  |   AddEmulationMenu(); | 
					
						
							|  |  |  |   addMenu(tr("Movie")); | 
					
						
							|  |  |  |   addMenu(tr("Options")); | 
					
						
							|  |  |  |   addMenu(tr("Tools")); | 
					
						
							|  |  |  |   AddViewMenu(); | 
					
						
							|  |  |  |   AddHelpMenu(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EmulationStopped(); | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::EmulationStarted() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // 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(); | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | void MenuBar::EmulationPaused() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   m_play_action->setEnabled(true); | 
					
						
							|  |  |  |   m_play_action->setVisible(true); | 
					
						
							|  |  |  |   m_pause_action->setEnabled(false); | 
					
						
							|  |  |  |   m_pause_action->setVisible(false); | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | void MenuBar::EmulationStopped() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // 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(); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::AddFileMenu() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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())); | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::AddEmulationMenu() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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(); | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::AddStateLoadMenu(QMenu* emu_menu) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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); }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::AddStateSaveMenu(QMenu* emu_menu) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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); }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::AddStateSlotMenu(QMenu* emu_menu) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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); }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-02-15 12:56:40 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::UpdateStateSlotMenu() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MenuBar::AddViewMenu() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   QMenu* view_menu = addMenu(tr("View")); | 
					
						
							|  |  |  |   AddGameListTypeSection(view_menu); | 
					
						
							|  |  |  |   view_menu->addSeparator(); | 
					
						
							|  |  |  |   AddTableColumnsMenu(view_menu); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-11 22:59:44 +11:00
										 |  |  | void MenuBar::AddHelpMenu() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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())); | 
					
						
							| 
									
										
										
										
											2016-02-11 22:59:44 +11:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | void MenuBar::AddGameListTypeSection(QMenu* view_menu) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   QAction* table_view = view_menu->addAction(tr("Table")); | 
					
						
							|  |  |  |   table_view->setCheckable(true); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   QAction* list_view = view_menu->addAction(tr("List")); | 
					
						
							|  |  |  |   list_view->setCheckable(true); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   QActionGroup* list_group = new QActionGroup(this); | 
					
						
							|  |  |  |   list_group->addAction(table_view); | 
					
						
							|  |  |  |   list_group->addAction(list_view); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   bool prefer_table = Settings().GetPreferredView(); | 
					
						
							|  |  |  |   table_view->setChecked(prefer_table); | 
					
						
							|  |  |  |   list_view->setChecked(!prefer_table); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   connect(table_view, &QAction::triggered, this, &MenuBar::ShowTable); | 
					
						
							|  |  |  |   connect(list_view, &QAction::triggered, this, &MenuBar::ShowList); | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-20 15:36:39 -08:00
										 |  |  | // TODO implement this
 | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | void MenuBar::AddTableColumnsMenu(QMenu* view_menu) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   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); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-12-19 21:24:48 -08:00
										 |  |  | } |