ed13ada7912899f165bdcd3c283e2013808f8e3b
[supertux.git] / src / supertux / 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/language_menu.hpp"
19
20 extern "C" {
21 #include "findlocale.h"
22 }
23 #include "gui/menu_item.hpp"
24 #include "supertux/gameconfig.hpp"
25
26 enum {
27   MNID_LANGUAGE_AUTO_DETECT = 0,
28   MNID_LANGUAGE_ENGLISH     = 1,
29   MNID_LANGUAGE_NEXT        = 10
30 };
31
32 LanguageMenu::LanguageMenu() 
33 {
34   add_label(_("Language"));
35   add_hl();
36   add_entry(MNID_LANGUAGE_AUTO_DETECT, _("<auto-detect>"));
37   add_entry(MNID_LANGUAGE_ENGLISH, "English");
38
39   int mnid = MNID_LANGUAGE_NEXT;
40   std::set<tinygettext::Language> languages = dictionary_manager.get_languages();
41   for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++) 
42   {
43     add_entry(mnid++, i->get_name());
44   }
45
46   add_hl();
47   add_back(_("Back"));
48 }
49
50 void
51 LanguageMenu::menu_action(MenuItem* item) 
52 {
53   if (item->id == MNID_LANGUAGE_AUTO_DETECT) // auto detect
54   {
55       FL_Locale *locale;
56       FL_FindLocale(&locale, FL_MESSAGES);
57       tinygettext::Language language = tinygettext::Language::from_spec(locale->lang, locale->country, locale->variant);
58       FL_FreeLocale(&locale);
59
60       dictionary_manager.set_language(language);
61       g_config->locale = language.str();
62       g_config->save();
63       Menu::pop_current();
64   }
65   else if (item->id == MNID_LANGUAGE_ENGLISH) // english
66   {
67     g_config->locale = "en";
68     dictionary_manager.set_language(tinygettext::Language::from_name(g_config->locale));
69     g_config->save();
70     Menu::pop_current();
71   }
72   else
73   {
74     int mnid = MNID_LANGUAGE_NEXT;
75     std::set<tinygettext::Language> languages = dictionary_manager.get_languages();
76
77     for (std::set<tinygettext::Language>::iterator i = languages.begin(); i != languages.end(); i++) 
78     {
79       if (item->id == mnid++) 
80       {
81         g_config->locale = i->str();
82         dictionary_manager.set_language(*i);
83         g_config->save();
84         Menu::pop_current();
85         break;
86       }
87     }
88   }
89 }
90
91 /* EOF */