X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Fmenu%2Fjoystick_menu.cpp;h=96f8c70282c4e84fff6aa28e9cb29e78a1d25de9;hb=4e0cd853876801033a9bf3255275db4f43d9aff2;hp=e4e1dcb243d6364b7e3657b021acfad20c8bcdf7;hpb=8b1d96110cb224d711749dccba18dd0d86ded20c;p=supertux.git diff --git a/src/supertux/menu/joystick_menu.cpp b/src/supertux/menu/joystick_menu.cpp index e4e1dcb24..96f8c7028 100644 --- a/src/supertux/menu/joystick_menu.cpp +++ b/src/supertux/menu/joystick_menu.cpp @@ -1,6 +1,6 @@ // SuperTux // Copyright (C) 2006 Matthias Braun , -// 2007 Ingo Ruhnke +// 2007,2014 Ingo Ruhnke // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -19,98 +19,132 @@ #include +#include "control/joystick_manager.hpp" +#include "supertux/gameconfig.hpp" #include "util/gettext.hpp" -namespace{ - const int SCAN_JOYSTICKS = Controller::CONTROLCOUNT + 1; -} +namespace { + +enum { + MNID_JUMP_WITH_UP = Controller::CONTROLCOUNT, + MNID_SCAN_JOYSTICKS, + MNID_AUTO_JOYSTICK_CFG +}; + +} // namespace -JoystickMenu::JoystickMenu(JoystickKeyboardController* _controller) : - controller(_controller) +JoystickMenu::JoystickMenu(InputManager& input_manager) : + m_input_manager(input_manager), + m_joysticks_available(false) { - recreateMenu(); + recreate_menu(); } JoystickMenu::~JoystickMenu() {} void -JoystickMenu::recreateMenu() +JoystickMenu::recreate_menu() { clear(); add_label(_("Setup Joystick")); add_hl(); - if(controller->joysticks.size() > 0) { - add_controlfield(Controller::UP, _("Up")); - add_controlfield(Controller::DOWN, _("Down")); - add_controlfield(Controller::LEFT, _("Left")); - add_controlfield(Controller::RIGHT, _("Right")); - add_controlfield(Controller::JUMP, _("Jump")); - add_controlfield(Controller::ACTION, _("Action")); - add_controlfield(Controller::PAUSE_MENU, _("Pause/Menu")); - add_controlfield(Controller::PEEK_LEFT, _("Peek Left")); - add_controlfield(Controller::PEEK_RIGHT, _("Peek Right")); - add_controlfield(Controller::PEEK_UP, _("Peek Up")); - add_controlfield(Controller::PEEK_DOWN, _("Peek Down")); - - add_toggle(Controller::CONTROLCOUNT, _("Jump with Up"), controller->jump_with_up_joy); - } else { - add_inactive(-1, _("No Joysticks found")); - } - add_inactive(-1,""); - add_entry(SCAN_JOYSTICKS, _("Scan for Joysticks")); - //Show Joysticks currently activated: //edit by giby - SDL_Joystick *joy; - if (SDL_NumJoysticks() > 0) { - joy = SDL_JoystickOpen(0); + + add_toggle(MNID_AUTO_JOYSTICK_CFG, _("Manual Configuration"), + !m_input_manager.use_game_controller()) + ->set_help(_("Use manual configuration instead of SDL2's automatic GameController support")); + + if (m_input_manager.use_game_controller()) + { + m_joysticks_available = false; } + else + { + if (m_input_manager.joystick_manager->joysticks.size() > 0) + { + m_joysticks_available = true; + + add_controlfield(Controller::UP, _("Up")); + add_controlfield(Controller::DOWN, _("Down")); + add_controlfield(Controller::LEFT, _("Left")); + add_controlfield(Controller::RIGHT, _("Right")); + add_controlfield(Controller::JUMP, _("Jump")); + add_controlfield(Controller::ACTION, _("Action")); + add_controlfield(Controller::PAUSE_MENU, _("Pause/Menu")); + add_controlfield(Controller::PEEK_LEFT, _("Peek Left")); + add_controlfield(Controller::PEEK_RIGHT, _("Peek Right")); + add_controlfield(Controller::PEEK_UP, _("Peek Up")); + add_controlfield(Controller::PEEK_DOWN, _("Peek Down")); + + add_toggle(MNID_JUMP_WITH_UP, _("Jump with Up"), g_config->joystick_config.jump_with_up_joy); + } + else + { + m_joysticks_available = false; - for(std::vector::iterator i = controller->joysticks.begin(); - i != controller->joysticks.end(); ++i) { - if(*i != 0) - add_inactive(-1, SDL_JoystickName(joy) ); + add_inactive(-1, _("No Joysticks found")); + add_entry(MNID_SCAN_JOYSTICKS, _("Scan for Joysticks")); + } } add_hl(); add_back(_("Back")); - update(); + refresh(); } std::string JoystickMenu::get_button_name(int button) { if(button < 0) + { return _("None"); - - std::ostringstream name; - name << "Button " << button; - return name.str(); + } + else + { + std::ostringstream name; + name << "Button " << button; + return name.str(); + } } void JoystickMenu::menu_action(MenuItem* item) { - if (item->id >= 0 && item->id < Controller::CONTROLCOUNT) { + if (0 <= item->id && item->id < Controller::CONTROLCOUNT) + { item->change_input(_("Press Button")); - controller->wait_for_joystick = item->id; - } else if (item->id == Controller::CONTROLCOUNT) { - controller->jump_with_up_joy = item->toggled; - } else if( item->id == SCAN_JOYSTICKS) { - controller->updateAvailableJoysticks(); - recreateMenu(); + m_input_manager.joystick_manager->wait_for_joystick = item->id; + } + else if (item->id == MNID_JUMP_WITH_UP) + { + g_config->joystick_config.jump_with_up_joy = item->toggled; + } + else if (item->id == MNID_AUTO_JOYSTICK_CFG) + { + m_input_manager.use_game_controller(!item->toggled); + m_input_manager.reset(); + recreate_menu(); + } + else if(item->id == MNID_SCAN_JOYSTICKS) + { + m_input_manager.reset(); + recreate_menu(); } } void -JoystickMenu::update_menu_item(Controller::Control id) +JoystickMenu::refresh_menu_item(Controller::Control id) { - int button = controller->reversemap_joybutton(id); - int axis = controller->reversemap_joyaxis(id); - int hat_dir = controller->reversemap_joyhat(id); + int button = g_config->joystick_config.reversemap_joybutton(id); + int axis = g_config->joystick_config.reversemap_joyaxis(id); + int hat_dir = g_config->joystick_config.reversemap_joyhat(id); - if (button != -1) { - get_item_by_id((int)id).change_input(get_button_name(button)); - } else if (axis != 0) { + if (button != -1) + { + get_item_by_id(static_cast(id)).change_input(get_button_name(button)); + } + else if (axis != 0) + { std::ostringstream name; name << "Axis "; @@ -131,8 +165,10 @@ JoystickMenu::update_menu_item(Controller::Control id) else name << abs(axis); - get_item_by_id((int)id).change_input(name.str()); - } else if (hat_dir != -1) { + get_item_by_id(static_cast(id)).change_input(name.str()); + } + else if (hat_dir != -1) + { std::string name; switch (hat_dir) @@ -158,32 +194,32 @@ JoystickMenu::update_menu_item(Controller::Control id) break; } - get_item_by_id((int)id).change_input(name); - } else { - get_item_by_id((int)id).change_input("None"); + get_item_by_id(static_cast(id)).change_input(name); + } + else + { + get_item_by_id(static_cast(id)).change_input("None"); } } void -JoystickMenu::update() +JoystickMenu::refresh() { - if(controller->joysticks.size() == 0) - return; - - update_menu_item(Controller::UP); - update_menu_item(Controller::DOWN); - update_menu_item(Controller::LEFT); - update_menu_item(Controller::RIGHT); - - update_menu_item(Controller::JUMP); - update_menu_item(Controller::ACTION); - update_menu_item(Controller::PAUSE_MENU); - update_menu_item(Controller::PEEK_LEFT); - update_menu_item(Controller::PEEK_RIGHT); - update_menu_item(Controller::PEEK_UP); - update_menu_item(Controller::PEEK_DOWN); - - get_item_by_id(Controller::CONTROLCOUNT).toggled = controller->jump_with_up_joy; + if (m_joysticks_available) + { + refresh_menu_item(Controller::UP); + refresh_menu_item(Controller::DOWN); + refresh_menu_item(Controller::LEFT); + refresh_menu_item(Controller::RIGHT); + + refresh_menu_item(Controller::JUMP); + refresh_menu_item(Controller::ACTION); + refresh_menu_item(Controller::PAUSE_MENU); + refresh_menu_item(Controller::PEEK_LEFT); + refresh_menu_item(Controller::PEEK_RIGHT); + refresh_menu_item(Controller::PEEK_UP); + refresh_menu_item(Controller::PEEK_DOWN); + } } /* EOF */