Renamed MenuManager to MenuStorage and MenuManager2 to MenuManager
[supertux.git] / src / supertux / menu / language_menu.cpp
1 //  SuperTux
2 //  Copyright (C) 2004 Tobas Glaesser <tobi.web@gmx.de>
3 //  Copyright (C) 2006 Matthias Braun <matze@braunis.de>
4 //
5 //  This program is free software: you can redistribute it and/or modify
6 //  it under the terms of the GNU General Public License as published by
7 //  the Free Software Foundation, either version 3 of the License, or
8 //  (at your option) any later version.
9 //
10 //  This program is distributed in the hope that it will be useful,
11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //  GNU General Public License for more details.
14 //
15 //  You should have received a copy of the GNU General Public License
16 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18 #include "supertux/menu/language_menu.hpp"
19
20 extern "C" {
21 #include "findlocale.h"
22 }
23 #include "gui/menu_item.hpp"
24 #include "gui/menu_manager.hpp"
25 #include "supertux/gameconfig.hpp"
26
27 enum {
28   MNID_LANGUAGE_AUTO_DETECT = 0,
29   MNID_LANGUAGE_ENGLISH     = 1,
30   MNID_LANGUAGE_NEXT        = 10
31 };
32
33 LanguageMenu::LanguageMenu() 
34 {
35   add_label(_("Language"));
36   add_hl();
37   add_entry(MNID_LANGUAGE_AUTO_DETECT, _("<auto-detect>"));
38   add_entry(MNID_LANGUAGE_ENGLISH, "English");
39
40   int mnid = MNID_LANGUAGE_NEXT;
41   std::set<tinygettext::Language> languages = dictionary_manager.get_languages();
42   for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++) 
43   {
44     add_entry(mnid++, i->get_name());
45   }
46
47   add_hl();
48   add_back(_("Back"));
49 }
50
51 void
52 LanguageMenu::menu_action(MenuItem* item) 
53 {
54   if (item->id == MNID_LANGUAGE_AUTO_DETECT) // auto detect
55   {
56     FL_Locale *locale;
57     FL_FindLocale(&locale, FL_MESSAGES);
58     tinygettext::Language language = tinygettext::Language::from_spec(locale->lang, locale->country, locale->variant);
59     FL_FreeLocale(&locale);
60
61     dictionary_manager.set_language(language);
62     g_config->locale = language.str();
63     g_config->save();
64     MenuManager::pop_current();
65   }
66   else if (item->id == MNID_LANGUAGE_ENGLISH) // english
67   {
68     g_config->locale = "en";
69     dictionary_manager.set_language(tinygettext::Language::from_name(g_config->locale));
70     g_config->save();
71     MenuManager::pop_current();
72   }
73   else
74   {
75     int mnid = MNID_LANGUAGE_NEXT;
76     std::set<tinygettext::Language> languages = dictionary_manager.get_languages();
77
78     for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++) 
79     {
80       if (item->id == mnid++) 
81       {
82         g_config->locale = i->str();
83         dictionary_manager.set_language(*i);
84         g_config->save();
85         MenuManager::pop_current();
86         break;
87       }
88     }
89   }
90 }
91
92 /* EOF */