Implemented MenuManager::refresh() so that joystick/keyboard_manager have something...
[supertux.git] / src / supertux / menu / contrib_menu.cpp
index 9219bfa..6bf8fcf 100644 (file)
 #include <physfs.h>
 
 #include "gui/menu_manager.hpp"
+#include "supertux/game_manager.hpp"
 #include "supertux/menu/contrib_world_menu.hpp"
+#include "supertux/menu/menu_storage.hpp"
 #include "supertux/title_screen.hpp"
 #include "supertux/world.hpp"
 #include "util/gettext.hpp"
 
 ContribMenu::ContribMenu() :
-  m_contrib_world_menu(),
   m_contrib_worlds()
 {
   /** Generating contrib levels list by making use of Level Subset  */
@@ -51,7 +52,7 @@ ContribMenu::ContribMenu() :
       if (!world->hide_from_contribs) 
       {
         add_entry(i++, world->get_title());
-        m_contrib_worlds.push_back(world.release());
+        m_contrib_worlds.push_back(std::move(world));
       }
     }
     catch(std::exception& e)
@@ -66,11 +67,6 @@ ContribMenu::ContribMenu() :
 
 ContribMenu::~ContribMenu()
 {
-  for(std::vector<World*>::iterator i = m_contrib_worlds.begin(); i != m_contrib_worlds.end(); ++i)
-  {
-    delete *i;
-  }
-  m_contrib_worlds.clear();
 }
 
 void
@@ -79,16 +75,17 @@ ContribMenu::check_menu()
   int index = check();
   if (index != -1)
   {
-    World* world = m_contrib_worlds[index];
-    
+    World* world = m_contrib_worlds[index].get();
     if (!world->is_levelset) 
     {
-      TitleScreen::start_game(world);
+      // FIXME: not the most elegant of solutions to std::move() the
+      // World, but the ContribMenu should get destructed after this,
+      // so it might be ok
+      GameManager::current()->start_game(std::move(m_contrib_worlds[index]));
     }
     else 
     {
-      m_contrib_world_menu.reset(new ContribWorldMenu(*world));
-      MenuManager::push_current(m_contrib_world_menu.get());
+      MenuManager::instance().push_menu(std::unique_ptr<Menu>(new ContribWorldMenu(std::move(m_contrib_worlds[index]))));
     }
   }
 }