PageRenderTime 26ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Source/Core/DolphinQt2/MenuBar.cpp

https://gitlab.com/WoomyNightClub/dolphin
C++ | 225 lines | 192 code | 27 blank | 6 comment | 7 complexity | e79bbbeec4a3754495410403362592f3 MD5 | raw file
  1. // Copyright 2015 Dolphin Emulator Project
  2. // Licensed under GPLv2+
  3. // Refer to the license.txt file included.
  4. #include <QAction>
  5. #include <QDesktopServices>
  6. #include <QUrl>
  7. #include "Core/State.h"
  8. #include "DolphinQt2/AboutDialog.h"
  9. #include "DolphinQt2/MenuBar.h"
  10. #include "DolphinQt2/Settings.h"
  11. MenuBar::MenuBar(QWidget* parent)
  12. : QMenuBar(parent)
  13. {
  14. AddFileMenu();
  15. AddEmulationMenu();
  16. addMenu(tr("Movie"));
  17. addMenu(tr("Options"));
  18. addMenu(tr("Tools"));
  19. AddViewMenu();
  20. AddHelpMenu();
  21. EmulationStopped();
  22. }
  23. void MenuBar::EmulationStarted()
  24. {
  25. // Emulation
  26. m_play_action->setEnabled(false);
  27. m_play_action->setVisible(false);
  28. m_pause_action->setEnabled(true);
  29. m_pause_action->setVisible(true);
  30. m_stop_action->setEnabled(true);
  31. m_reset_action->setEnabled(true);
  32. m_fullscreen_action->setEnabled(true);
  33. m_frame_advance_action->setEnabled(true);
  34. m_screenshot_action->setEnabled(true);
  35. m_state_load_menu->setEnabled(true);
  36. m_state_save_menu->setEnabled(true);
  37. UpdateStateSlotMenu();
  38. }
  39. void MenuBar::EmulationPaused()
  40. {
  41. m_play_action->setEnabled(true);
  42. m_play_action->setVisible(true);
  43. m_pause_action->setEnabled(false);
  44. m_pause_action->setVisible(false);
  45. }
  46. void MenuBar::EmulationStopped()
  47. {
  48. // Emulation
  49. m_play_action->setEnabled(true);
  50. m_play_action->setVisible(true);
  51. m_pause_action->setEnabled(false);
  52. m_pause_action->setVisible(false);
  53. m_stop_action->setEnabled(false);
  54. m_reset_action->setEnabled(false);
  55. m_fullscreen_action->setEnabled(false);
  56. m_frame_advance_action->setEnabled(false);
  57. m_screenshot_action->setEnabled(false);
  58. m_state_load_menu->setEnabled(false);
  59. m_state_save_menu->setEnabled(false);
  60. UpdateStateSlotMenu();
  61. }
  62. void MenuBar::AddFileMenu()
  63. {
  64. QMenu* file_menu = addMenu(tr("File"));
  65. m_open_action = file_menu->addAction(tr("Open"), this, SIGNAL(Open()));
  66. m_exit_action = file_menu->addAction(tr("Exit"), this, SIGNAL(Exit()));
  67. }
  68. void MenuBar::AddEmulationMenu()
  69. {
  70. QMenu* emu_menu = addMenu(tr("Emulation"));
  71. m_play_action = emu_menu->addAction(tr("Play"), this, SIGNAL(Play()));
  72. m_pause_action = emu_menu->addAction(tr("Pause"), this, SIGNAL(Pause()));
  73. m_stop_action = emu_menu->addAction(tr("Stop"), this, SIGNAL(Stop()));
  74. m_reset_action = emu_menu->addAction(tr("Reset"), this, SIGNAL(Reset()));
  75. m_fullscreen_action = emu_menu->addAction(tr("Fullscreen"), this, SIGNAL(Fullscreen()));
  76. m_frame_advance_action = emu_menu->addAction(tr("Frame Advance"), this, SIGNAL(FrameAdvance()));
  77. m_screenshot_action = emu_menu->addAction(tr("Take Screenshot"), this, SIGNAL(Screenshot()));
  78. AddStateLoadMenu(emu_menu);
  79. AddStateSaveMenu(emu_menu);
  80. AddStateSlotMenu(emu_menu);
  81. UpdateStateSlotMenu();
  82. }
  83. void MenuBar::AddStateLoadMenu(QMenu* emu_menu)
  84. {
  85. m_state_load_menu = emu_menu->addMenu(tr("Load State"));
  86. m_state_load_menu->addAction(tr("Load State from File"), this, SIGNAL(StateLoad()));
  87. m_state_load_menu->addAction(tr("Load State from Selected Slot"), this, SIGNAL(StateLoadSlot()));
  88. m_state_load_slots_menu = m_state_load_menu->addMenu(tr("Load State from Slot"));
  89. m_state_load_menu->addAction(tr("Undo Load State"), this, SIGNAL(StateLoadUndo()));
  90. for (int i = 1; i <= 10; i++)
  91. {
  92. QAction* action = m_state_load_slots_menu->addAction(QStringLiteral(""));
  93. connect(action, &QAction::triggered, this, [=]() {
  94. emit StateLoadSlotAt(i);
  95. });
  96. }
  97. }
  98. void MenuBar::AddStateSaveMenu(QMenu* emu_menu)
  99. {
  100. m_state_save_menu = emu_menu->addMenu(tr("Save State"));
  101. m_state_save_menu->addAction(tr("Save State to File"), this, SIGNAL(StateSave()));
  102. m_state_save_menu->addAction(tr("Save State to Selected Slot"), this, SIGNAL(StateSaveSlot()));
  103. m_state_save_menu->addAction(tr("Save State to Oldest Slot"), this, SIGNAL(StateSaveOldest()));
  104. m_state_save_slots_menu = m_state_save_menu->addMenu(tr("Save State to Slot"));
  105. m_state_save_menu->addAction(tr("Undo Save State"), this, SIGNAL(StateSaveUndo()));
  106. for (int i = 1; i <= 10; i++)
  107. {
  108. QAction* action = m_state_save_slots_menu->addAction(QStringLiteral(""));
  109. connect(action, &QAction::triggered, this, [=]() {
  110. emit StateSaveSlotAt(i);
  111. });
  112. }
  113. }
  114. void MenuBar::AddStateSlotMenu(QMenu* emu_menu)
  115. {
  116. m_state_slot_menu = emu_menu->addMenu(tr("Select State Slot"));
  117. m_state_slots = new QActionGroup(this);
  118. for (int i = 1; i <= 10; i++)
  119. {
  120. QAction* action = m_state_slot_menu->addAction(QStringLiteral(""));
  121. action->setCheckable(true);
  122. action->setActionGroup(m_state_slots);
  123. if (Settings().GetStateSlot() == i)
  124. action->setChecked(true);
  125. connect(action, &QAction::triggered, this, [=]() {
  126. emit SetStateSlot(i);
  127. });
  128. }
  129. }
  130. void MenuBar::UpdateStateSlotMenu()
  131. {
  132. QList<QAction*> actions_slot = m_state_slots->actions();
  133. QList<QAction*> actions_load = m_state_load_slots_menu->actions();
  134. QList<QAction*> actions_save = m_state_save_slots_menu->actions();
  135. for (int i = 0; i < actions_slot.length(); i++)
  136. {
  137. int slot = i + 1;
  138. QString info = QString::fromStdString(State::GetInfoStringOfSlot(slot));
  139. QString action_string = tr(" Slot %1 - %2").arg(slot).arg(info);
  140. actions_load.at(i)->setText(tr("Load from") + action_string);
  141. actions_save.at(i)->setText(tr("Save to") + action_string);
  142. actions_slot.at(i)->setText(tr("Select") + action_string);
  143. }
  144. }
  145. void MenuBar::AddViewMenu()
  146. {
  147. QMenu* view_menu = addMenu(tr("View"));
  148. AddGameListTypeSection(view_menu);
  149. view_menu->addSeparator();
  150. AddTableColumnsMenu(view_menu);
  151. }
  152. void MenuBar::AddHelpMenu()
  153. {
  154. QMenu* help_menu = addMenu(tr("Help"));
  155. QAction* documentation = help_menu->addAction(tr("Online Documentation"));
  156. connect(documentation, &QAction::triggered, this, [=]() {
  157. QDesktopServices::openUrl(QUrl(QStringLiteral("https://dolphin-emu.org/docs/guides")));
  158. });
  159. help_menu->addAction(tr("About"), this, SIGNAL(ShowAboutDialog()));
  160. }
  161. void MenuBar::AddGameListTypeSection(QMenu* view_menu)
  162. {
  163. QAction* table_view = view_menu->addAction(tr("Table"));
  164. table_view->setCheckable(true);
  165. QAction* list_view = view_menu->addAction(tr("List"));
  166. list_view->setCheckable(true);
  167. QActionGroup* list_group = new QActionGroup(this);
  168. list_group->addAction(table_view);
  169. list_group->addAction(list_view);
  170. bool prefer_table = Settings().GetPreferredView();
  171. table_view->setChecked(prefer_table);
  172. list_view->setChecked(!prefer_table);
  173. connect(table_view, &QAction::triggered, this, &MenuBar::ShowTable);
  174. connect(list_view, &QAction::triggered, this, &MenuBar::ShowList);
  175. }
  176. // TODO implement this
  177. void MenuBar::AddTableColumnsMenu(QMenu* view_menu)
  178. {
  179. QActionGroup* column_group = new QActionGroup(this);
  180. QMenu* cols_menu = view_menu->addMenu(tr("Table Columns"));
  181. column_group->setExclusive(false);
  182. QStringList col_names{
  183. tr("Platform"),
  184. tr("ID"),
  185. tr("Banner"),
  186. tr("Title"),
  187. tr("Description"),
  188. tr("Maker"),
  189. tr("Size"),
  190. tr("Country"),
  191. tr("Quality")
  192. };
  193. for (int i = 0; i < col_names.count(); i++)
  194. {
  195. QAction* action = column_group->addAction(cols_menu->addAction(col_names[i]));
  196. action->setCheckable(true);
  197. }
  198. }