Switched from passing pointers around to using numeric MenuIds and a factory class
[supertux.git] / src / supertux / menu / menu_storage.cpp
index 22a6949..757eeff 100644 (file)
 
 #include "supertux/menu/menu_storage.hpp"
 
+#include "supertux/globals.hpp"
+#include "supertux/menu/addon_menu.hpp"
+#include "supertux/menu/contrib_menu.hpp"
+#include "supertux/menu/contrib_world_menu.hpp"
+#include "supertux/menu/game_menu.hpp"
+#include "supertux/menu/joystick_menu.hpp"
+#include "supertux/menu/keyboard_menu.hpp"
+#include "supertux/menu/language_menu.hpp"
+#include "supertux/menu/main_menu.hpp"
 #include "supertux/menu/options_menu.hpp"
 #include "supertux/menu/profile_menu.hpp"
+#include "supertux/menu/worldmap_menu.hpp"
 
-Menu* MenuStorage::options_menu = 0;
-Menu* MenuStorage::profile_menu = 0;
+MenuStorage* MenuStorage::s_instance = 0;
 
-Menu*
-MenuStorage::get_options_menu()
+MenuStorage&
+MenuStorage::instance()
 {
-  options_menu = new OptionsMenu();
-  return options_menu;
+  assert(s_instance);
+  return *s_instance;
 }
 
-void
-MenuStorage::free_options_menu()
+MenuStorage::MenuStorage()
 {
-  delete options_menu;
-  options_menu = 0;
+  assert(!s_instance);
+  s_instance = this;
+}
+
+MenuStorage::~MenuStorage()
+{
+  s_instance = nullptr;
 }
 
 Menu*
-MenuStorage::get_profile_menu()
+MenuStorage::create(MenuId menu_id)
+{
+  switch(menu_id)
+  {
+    case MAIN_MENU:
+      return new MainMenu;
+
+    case LANGUAGE_MENU:
+      return new LanguageMenu;
+
+    case OPTIONS_MENU:
+      return new OptionsMenu;
+
+    case PROFILE_MENU:
+      return new ProfileMenu;
+
+    case KEYBOARD_MENU:
+      return new KeyboardMenu(g_input_manager);
+
+    case JOYSTICK_MENU:
+      return new JoystickMenu(g_input_manager);
+
+    case WORLDMAP_MENU:
+      return new WorldmapMenu;
+
+    case GAME_MENU:
+      return new GameMenu;
+
+    case CONTRIB_MENU:
+      return new ContribMenu;
+
+    case CONTRIB_WORLD_MENU:
+      return 0; //return new ContribWorldMenu();
+
+    case ADDON_MENU:
+      return new AddonMenu;
+
+    default:
+      assert(!"unknown MenuId provided");
+  }
+}
+
+KeyboardMenu*
+MenuStorage::get_key_options_menu()
 {
-  profile_menu = new ProfileMenu();
-  return profile_menu;
+  return new KeyboardMenu(g_input_manager);
 }
 
-void
-MenuStorage::free_profile_menu()
+JoystickMenu*
+MenuStorage::get_joystick_options_menu()
 {
-  delete profile_menu;
-  profile_menu = 0;
+  return new JoystickMenu(g_input_manager);
 }
 
 /* EOF */