Changed error handling in TransferStatus, then-callbacks are now always called and...
[supertux.git] / src / supertux / menu / menu_storage.cpp
index 0623f23..67b76da 100644 (file)
@@ -1,5 +1,5 @@
 //  SuperTux
-//  Copyright (C) 2009 Ingo Ruhnke <grumbel@gmx.de>
+//  Copyright (C) 2009 Ingo Ruhnke <grumbel@gmail.com>
 //
 //  This program is free software: you can redistribute it and/or modify
 //  it under the terms of the GNU General Public License as published by
 
 #include "supertux/menu/menu_storage.hpp"
 
-#include "supertux/menu/options_menu.hpp"
-#include "supertux/menu/profile_menu.hpp"
+#include "supertux/globals.hpp"
+#include "supertux/menu/addon_menu.hpp"
+#include "supertux/menu/cheat_menu.hpp"
+#include "supertux/menu/contrib_menu.hpp"
+#include "supertux/menu/game_menu.hpp"
 #include "supertux/menu/joystick_menu.hpp"
 #include "supertux/menu/keyboard_menu.hpp"
-#include "supertux/globals.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"
+#include "supertux/menu/worldmap_cheat_menu.hpp"
 
 MenuStorage* MenuStorage::s_instance = 0;
 
@@ -42,48 +50,60 @@ MenuStorage::~MenuStorage()
   s_instance = nullptr;
 }
 
-OptionsMenu*
-MenuStorage::get_options_menu()
+std::unique_ptr<Menu>
+MenuStorage::create(MenuId menu_id)
 {
-  if (!m_options_menu)
+  switch(menu_id)
   {
-    m_options_menu.reset(new OptionsMenu);
-  }
+    case MAIN_MENU:
+      return std::unique_ptr<Menu>(new MainMenu);
 
-  return m_options_menu.get();
-}
+    case LANGUAGE_MENU:
+      return std::unique_ptr<Menu>(new LanguageMenu);
 
-ProfileMenu*
-MenuStorage::get_profile_menu()
-{
-  if (!m_profile_menu)
-  {
-    m_profile_menu.reset(new ProfileMenu);
-  }
+    case OPTIONS_MENU:
+      return std::unique_ptr<Menu>(new OptionsMenu(true));
 
-  return m_profile_menu.get();
-}
+    case INGAME_OPTIONS_MENU:
+      return std::unique_ptr<Menu>(new OptionsMenu(false));
 
-KeyboardMenu*
-MenuStorage::get_key_options_menu()
-{
-  if (!m_key_options_menu)
-  {
-    m_key_options_menu.reset(new KeyboardMenu(g_input_manager));
-  }
+    case PROFILE_MENU:
+      return std::unique_ptr<Menu>(new ProfileMenu);
 
-  return m_key_options_menu.get();
-}
+    case KEYBOARD_MENU:
+      return std::unique_ptr<Menu>(new KeyboardMenu(*InputManager::current()));
 
-JoystickMenu*
-MenuStorage::get_joystick_options_menu()
-{
-  if (!m_joystick_options_menu)
-  {
-    m_joystick_options_menu.reset(new JoystickMenu(g_input_manager));
-  }
+    case JOYSTICK_MENU:
+      return std::unique_ptr<Menu>(new JoystickMenu(*InputManager::current()));
+
+    case WORLDMAP_MENU:
+      return std::unique_ptr<Menu>(new WorldmapMenu);
+
+    case WORLDMAP_CHEAT_MENU:
+      return std::unique_ptr<Menu>(new WorldmapCheatMenu);
 
-  return m_joystick_options_menu.get();
+    case GAME_MENU:
+      return std::unique_ptr<Menu>(new GameMenu);
+
+    case CHEAT_MENU:
+      return std::unique_ptr<Menu>(new CheatMenu);
+
+    case CONTRIB_MENU:
+      return std::unique_ptr<Menu>(new ContribMenu);
+
+    case CONTRIB_WORLD_MENU:
+      return 0; //return new ContribWorldMenu();
+
+    case ADDON_MENU:
+      return std::unique_ptr<Menu>(new AddonMenu);
+
+    case NO_MENU:
+      return std::unique_ptr<Menu>();
+
+    default:
+      assert(!"unknown MenuId provided");
+      return std::unique_ptr<Menu>();
+  }
 }
 
 /* EOF */