Removed a few things from svn:ignore that are no longer needed to to switch to Cmake
[supertux.git] / src / title.cpp
index 4490f11..6c0c095 100644 (file)
@@ -32,6 +32,7 @@
 #include <SDL.h>
 #include <SDL_image.h>
 #include <physfs.h>
+#include <algorithm>
 
 #include "title.hpp"
 #include "mainloop.hpp"
@@ -246,7 +247,7 @@ TitleScreen::generate_addons_menu()
       bool restart = false;
       for (std::vector<Addon>::iterator it = addons.begin(); it != addons.end(); ++it) {
         Addon addon2 = *it;
-        if ((addon2.title == addon.title) && (!addon2.isInstalled)) {
+        if ((addon2.equals(addon)) && (!addon2.isInstalled)) {
           addons.erase(it);
           restart = true;
           break;
@@ -277,7 +278,11 @@ TitleScreen::generate_addons_menu()
 
   for (unsigned int i = 0; i < addons.size(); i++) {
     Addon addon = addons[i];
-    addons_menu->add_toggle(ADDON_LIST_START_ID + i, std::string("\"") + addon.title + "\"", addon.isInstalled);
+    std::string text = "";
+    if (addon.kind != "") text += addon.kind + " ";
+    text += std::string("\"") + addon.title + "\"";
+    if (addon.author != "") text += " by \"" + addon.author + "\"";
+    addons_menu->add_toggle(ADDON_LIST_START_ID + i, text, addon.isInstalled);
   }
 
   addons_menu->add_hl();
@@ -292,10 +297,15 @@ TitleScreen::check_addons_menu()
 
   // check if "Check Online" was chosen
   if (index == 0) {
-    available_addons = AddonManager::get_instance().get_available_addons();
-    generate_addons_menu();
-    Menu::set_current(addons_menu.get());
-    addons_menu->set_active_item(index);
+    try {
+      available_addons = AddonManager::get_instance().get_available_addons();
+      generate_addons_menu();
+      Menu::set_current(addons_menu.get());
+      addons_menu->set_active_item(index);
+    } 
+    catch (std::runtime_error e) {
+      log_warning << "Check for available Add-ons failed: " << e.what() << std::endl;
+    }
     return;
   }
 
@@ -303,15 +313,27 @@ TitleScreen::check_addons_menu()
   if ((index >= ADDON_LIST_START_ID) && (index < ADDON_LIST_START_ID) + addons.size()) {
     Addon addon = addons[index - ADDON_LIST_START_ID];
     if (!addon.isInstalled) {
-      addon.install();
-      generate_addons_menu();
-      Menu::set_current(addons_menu.get());
-      addons_menu->set_active_item(index);
+      try {
+        addon.install();
+        //generate_addons_menu();
+        //Menu::set_current(addons_menu.get());
+        //addons_menu->set_active_item(index);
+        Menu::set_current(0);
+      } 
+      catch (std::runtime_error e) {
+        log_warning << "Installation of Add-on failed: " << e.what() << std::endl;
+      }
     } else {
-      addon.remove();
-      generate_addons_menu();
-      Menu::set_current(addons_menu.get());
-      addons_menu->set_active_item(index);
+      try {
+        addon.remove();
+        //generate_addons_menu();
+        //Menu::set_current(addons_menu.get());
+        //addons_menu->set_active_item(index);
+        Menu::set_current(0);
+      } 
+      catch (std::runtime_error e) {
+        log_warning << "Removal of Add-on failed: " << e.what() << std::endl;
+      }
     }
   }
 
@@ -359,6 +381,12 @@ TitleScreen::TitleScreen()
   player->set_controller(controller.get());
   player->set_speedlimit(230); //MAX_WALK_XM
 
+  generate_main_menu();
+}
+
+void
+TitleScreen::generate_main_menu()
+{
   main_menu.reset(new Menu());
   main_menu->set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2 + 35);
   main_menu->add_entry(MNID_STARTGAME, _("Start Game"));
@@ -454,6 +482,7 @@ TitleScreen::update(float elapsed_time)
           break;
         case MNID_QUITMAINMENU:
           main_loop->quit(new FadeOut(0.25));
+                 sound_manager->stop_music(0.25);
           break;
       }
     } else if(menu == load_game_menu.get()) {
@@ -486,6 +515,7 @@ TitleScreen::update(float elapsed_time)
   // reopen menu of user closed it (so that the app doesn't close when user
   // accidently hit ESC)
   if(Menu::current() == 0) {
+    generate_main_menu();
     Menu::set_current(main_menu.get());
   }
 }