X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Foptions_menu.cpp;h=000592a71cc94542185afac727b341f36c1183b1;hb=472d0ad804844d28811c86f03da74b6d6be53f1b;hp=a87676e011687e75a08b86f8f62ba5e406d4f5b7;hpb=f171cfbf82ac235d60cc53d24bf9be6cc5365550;p=supertux.git diff --git a/src/options_menu.cpp b/src/options_menu.cpp index a87676e01..000592a71 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" @@ -31,6 +32,7 @@ Menu* options_menu = 0; enum OptionsMenuIDs { MNID_FULLSCREEN, + MNID_ASPECTRATIO, MNID_SOUND, MNID_MUSIC }; @@ -42,6 +44,7 @@ public: 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(); @@ -66,6 +69,12 @@ public: 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++) { @@ -100,17 +109,61 @@ OptionsMenu::OptionsMenu() add_label(_("Options")); add_hl(); - add_toggle(MNID_FULLSCREEN,_("Fullscreen"), config->use_fullscreen); - add_submenu(_("Language"), language_menu.get()); + + add_submenu(_("Select Language"), language_menu.get()) + ->set_help(_("Switch to another language")); + + add_submenu(_("Select Profile"), get_profile_menu()) + ->set_help(_("Switch between different savegames")); + + add_toggle(MNID_SOUND, _("Profile on Startup"), config->sound_enabled) + ->set_help(_("Display the profile menu when the game is newly started")); + + // FIXME: Implement me: if (get_parent() == main_menu) + add_toggle(MNID_FULLSCREEN,_("Fullscreen"), config->use_fullscreen) + ->set_help(_("Let the game cover the whole screen")); + + MenuItem* aspect = add_string_select(MNID_ASPECTRATIO, _("Aspect Ratio")); + aspect->set_help(_("Adjust the aspect ratio")); + + aspect->list.push_back("16:9"); + aspect->list.push_back("16:10"); + aspect->list.push_back("4:3"); + aspect->list.push_back("5:4"); + + std::ostringstream out; + out << config->aspect_width << ":" << config->aspect_height; + std::string aspect_ratio = out.str(); + for(std::vector::iterator i = aspect->list.begin(); i != aspect->list.end(); ++i) + { + if(*i == aspect_ratio) + { + aspect_ratio.clear(); + break; + } + } + + if (!aspect_ratio.empty()) + { + aspect->selected = aspect->list.size(); + aspect->list.push_back(aspect_ratio); + } + if (sound_manager->is_audio_enabled()) { - add_toggle(MNID_SOUND, _("Sound"), config->sound_enabled); - add_toggle(MNID_MUSIC, _("Music"), config->music_enabled); + add_toggle(MNID_SOUND, _("Sound"), config->sound_enabled) + ->set_help(_("Disable all sound effects in the game")); + add_toggle(MNID_MUSIC, _("Music"), config->music_enabled) + ->set_help(_("Disable all music in the game")); } else { add_deactive(MNID_SOUND, _("Sound (disabled)")); add_deactive(MNID_SOUND, _("Music (disabled)")); } - add_submenu(_("Setup Keyboard"), main_controller->get_key_options_menu()); - add_submenu(_("Setup Joystick"),main_controller->get_joystick_options_menu()); + + add_submenu(_("Setup Keyboard"), main_controller->get_key_options_menu()) + ->set_help(_("Configure how your keyboard maps to the game")); + + add_submenu(_("Setup Joystick"),main_controller->get_joystick_options_menu()) + ->set_help(_("Configure how your joystick maps to the game")); add_hl(); add_back(_("Back")); } @@ -123,6 +176,32 @@ void OptionsMenu::menu_action(MenuItem* item) { switch (item->id) { + case MNID_ASPECTRATIO: + { // FIXME: Really crude and ugly here, move to video or so + if(sscanf(item->list[item->selected].c_str(), "%d:%d", &config->aspect_width, &config->aspect_height) == 2) + { + float aspect_ratio = static_cast(config->aspect_width) / + static_cast(config->aspect_height); + + if (aspect_ratio > 1) { + SCREEN_WIDTH = static_cast (600 * aspect_ratio + 0.5); + SCREEN_HEIGHT = 600; + } else { + SCREEN_WIDTH = 600; + SCREEN_HEIGHT = static_cast (600 * 1/aspect_ratio + 0.5); + } + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1.0, 1.0); + std::cout << __FILE__ << ":" << __LINE__ << ": change aspect ratio to " << item->list[item->selected] << std::endl; + + // Reposition the menu to be in the center of the screen again + set_pos(SCREEN_WIDTH/2, SCREEN_HEIGHT/2); + } + } + break; + case MNID_FULLSCREEN: if(config->use_fullscreen != options_menu->is_toggled(MNID_FULLSCREEN)) { config->use_fullscreen = !config->use_fullscreen; @@ -151,14 +230,13 @@ OptionsMenu::menu_action(MenuItem* item) Menu* get_options_menu() { - //if(options_menu == NULL) + //static OptionsMenu menu; options_menu = new OptionsMenu(); - return options_menu; } void free_options_menu() { delete options_menu; - options_menu = NULL; + options_menu = 0; }