X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Foptions_menu.cpp;h=c4c7ac9a6af096ab20e5ea0ad212d359939dafea;hb=b8bb8a85f28cce0eaecbcd91ad7ed8fc957ef53f;hp=509c85d160098882dee795e99887d045c9b74778;hpb=65839a887c235c6f0544a314f778f2fe4e256a41;p=supertux.git diff --git a/src/options_menu.cpp b/src/options_menu.cpp index 509c85d16..c4c7ac9a6 100644 --- a/src/options_menu.cpp +++ b/src/options_menu.cpp @@ -35,6 +35,59 @@ enum OptionsMenuIDs { MNID_MUSIC }; +class LanguageMenu : public Menu +{ +public: + LanguageMenu() { + add_label(_("Language")); + add_hl(); + add_entry(0, std::string("(")+_("auto-detect language")+")"); + add_entry(1, "English"); + + int mnid = 10; + std::set languages = dictionary_manager.get_languages(); + for (std::set::iterator i = languages.begin(); i != languages.end(); i++) { + std::string locale_name = *i; + TinyGetText::LanguageDef ldef = TinyGetText::get_language_def(locale_name); + std::string locale_fullname = locale_name; + if (std::string(ldef.code) == locale_name) { + locale_fullname = ldef.name; + } + add_entry(mnid++, locale_fullname); + } + + add_hl(); + add_back(_("Back")); + } + + virtual void menu_action(MenuItem* item) { + if (item->id == 0) { + config->locale = ""; + dictionary_manager.set_language(config->locale); + config->save(); + Menu::set_current(0); + } + else if (item->id == 1) { + config->locale = "en"; + dictionary_manager.set_language(config->locale); + config->save(); + Menu::set_current(0); + } + int mnid = 10; + std::set languages = dictionary_manager.get_languages(); + for (std::set::iterator i = languages.begin(); i != languages.end(); i++) { + std::string locale_name = *i; + if (item->id == mnid++) { + config->locale = locale_name; + dictionary_manager.set_language(config->locale); + config->save(); + Menu::set_current(0); + } + } + } +}; + + class OptionsMenu : public Menu { public: @@ -42,13 +95,20 @@ public: virtual ~OptionsMenu(); virtual void menu_action(MenuItem* item); + +protected: + std::auto_ptr language_menu; + }; OptionsMenu::OptionsMenu() { + language_menu.reset(new LanguageMenu()); + add_label(_("Options")); add_hl(); add_toggle(MNID_FULLSCREEN,_("Fullscreen"), config->use_fullscreen); + add_submenu(_("Language"), language_menu.get()); if (sound_manager->is_audio_enabled()) { add_toggle(MNID_SOUND, _("Sound"), config->sound_enabled); add_toggle(MNID_MUSIC, _("Music"), config->music_enabled); @@ -98,8 +158,8 @@ OptionsMenu::menu_action(MenuItem* item) Menu* get_options_menu() { - if(options_menu == NULL) - options_menu = new OptionsMenu(); + //if(options_menu == NULL) + options_menu = new OptionsMenu(); return options_menu; }