X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Foptions_menu.cpp;h=93ab43d340e21f1ca41d3b8625bc22bd2bee4be6;hb=af79f0712f972a0730f8a0220f927b22d568a196;hp=509c85d160098882dee795e99887d045c9b74778;hpb=65839a887c235c6f0544a314f778f2fe4e256a41;p=supertux.git diff --git a/src/options_menu.cpp b/src/options_menu.cpp index 509c85d16..93ab43d34 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,14 +158,13 @@ OptionsMenu::menu_action(MenuItem* item) Menu* get_options_menu() { - if(options_menu == NULL) - options_menu = new OptionsMenu(); - + //static OptionsMenu menu; + options_menu = new OptionsMenu(); return options_menu; } void free_options_menu() { delete options_menu; - options_menu = NULL; + options_menu = 0; }