Turned MenuStorage into a proper class
[supertux.git] / src / supertux / menu / menu_storage.cpp
index 7350849..d2c6f17 100644 (file)
 #include "supertux/menu/keyboard_menu.hpp"
 #include "supertux/globals.hpp"
 
-OptionsMenu*  MenuStorage::options_menu = 0;
-ProfileMenu*  MenuStorage::profile_menu = 0;
-KeyboardMenu* MenuStorage::key_options_menu = 0;
-JoystickMenu* MenuStorage::joystick_options_menu = 0;
+MenuStorage* MenuStorage::s_instance = 0;
+
+MenuStorage&
+MenuStorage::instance()
+{
+  assert(s_instance);
+  return *s_instance;
+}
+
+MenuStorage::MenuStorage()
+{
+  assert(!s_instance);
+  s_instance = this;
+}
+
+MenuStorage::~MenuStorage()
+{
+  s_instance = nullptr;
+}
 
 OptionsMenu*
 MenuStorage::get_options_menu()
 {
-  options_menu = new OptionsMenu();
-  return options_menu;
+  if (!m_options_menu)
+  {
+    m_options_menu.reset(new OptionsMenu());
+  }
+
+  return m_options_menu.get();
 }
 
 ProfileMenu*
 MenuStorage::get_profile_menu()
 {
-  profile_menu = new ProfileMenu();
-  return profile_menu;
+  if (!m_profile_menu)
+  {
+    m_profile_menu.reset(new ProfileMenu());
+  }
+
+  return m_profile_menu.get();
 }
 
 KeyboardMenu*
 MenuStorage::get_key_options_menu()
 {
-  if (!key_options_menu)
-  { // FIXME: this in never freed
-    key_options_menu = new KeyboardMenu(g_input_manager);
+  if (!m_key_options_menu)
+  {
+    m_key_options_menu.reset(new KeyboardMenu(g_input_manager));
   }
 
-  return key_options_menu;
+  return m_key_options_menu.get();
 }
 
 JoystickMenu*
 MenuStorage::get_joystick_options_menu()
 {
-  if (!joystick_options_menu)
-  { // FIXME: this in never freed
-    joystick_options_menu = new JoystickMenu(g_input_manager);
+  if (!m_joystick_options_menu)
+  {
+    m_joystick_options_menu.reset(new JoystickMenu(g_input_manager));
   }
 
-  return joystick_options_menu;
+  return m_joystick_options_menu.get();
 }
 
 /* EOF */