#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 */