X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Foptions_menu.cpp;h=eb381a21d453e6dc7fda0c17df2d43f87aca16a6;hb=0262a9c0ae29d375e8174038d8cc81ebbeb10215;hp=d9ef205749ddad86c337183dc69beeedbc42f3f8;hpb=77d6c22146b06e5737b905795c8d7aab3f146527;p=supertux.git diff --git a/src/options_menu.cpp b/src/options_menu.cpp index d9ef20574..eb381a21d 100644 --- a/src/options_menu.cpp +++ b/src/options_menu.cpp @@ -19,6 +19,7 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include +#include "profile_menu.hpp" #include "options_menu.hpp" #include "gui/menu.hpp" #include "audio/sound_manager.hpp" @@ -35,6 +36,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,21 +96,32 @@ 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(); + + // FIXME: Implement me: if (get_parent() == main_menu) + add_submenu(_("Change Profile"), get_profile_menu()); + + add_submenu(_("Select Language"), language_menu.get()); add_toggle(MNID_FULLSCREEN,_("Fullscreen"), config->use_fullscreen); if (sound_manager->is_audio_enabled()) { add_toggle(MNID_SOUND, _("Sound"), config->sound_enabled); add_toggle(MNID_MUSIC, _("Music"), config->music_enabled); } else { - add_deactive(MNID_SOUND, _("Sound disabled")); - add_deactive(MNID_SOUND, _("Music disabled")); + add_deactive(MNID_SOUND, _("Sound (disabled)")); + add_deactive(MNID_SOUND, _("Music (disabled)")); } - add_submenu(_("Setup Keys"), main_controller->get_key_options_menu()); + add_submenu(_("Setup Keyboard"), main_controller->get_key_options_menu()); add_submenu(_("Setup Joystick"),main_controller->get_joystick_options_menu()); add_hl(); add_back(_("Back")); @@ -98,14 +163,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; }