// SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2009-2015 Marianne Gagnon // // 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 the Free Software Foundation; either version 3 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "states_screens/dialogs/add_device_dialog.hpp" #include "guiengine/engine.hpp" #include "guiengine/scalable_font.hpp" #include "guiengine/widget.hpp" #include "guiengine/widgets/button_widget.hpp" #include "input/device_manager.hpp" #include "input/input_manager.hpp" #include "states_screens/dialogs/message_dialog.hpp" #include "states_screens/options_screen_input.hpp" #include "states_screens/state_manager.hpp" #include "utils/cpp2011.hpp" #include "utils/string_utils.hpp" #include "utils/translation.hpp" #include "input/wiimote_manager.hpp" #include #include using namespace GUIEngine; using namespace irr::gui; using namespace irr::core; // ---------------------------------------------------------------------------- AddDeviceDialog::AddDeviceDialog() : ModalDialog(0.90f, 0.80f) { doInit(); ScalableFont* font = GUIEngine::getFont(); const int textHeight = GUIEngine::getFontHeight(); const int buttonHeight = textHeight + 10; #ifdef ENABLE_WIIUSE const int nbButtons = 3; #else const int nbButtons = 2; #endif const int y_bottom = m_area.getHeight() - nbButtons*(buttonHeight + 10) - 10; const int y_stride = buttonHeight+10; int cur_y = y_bottom; core::rect text_area( 15, 15, m_area.getWidth()-15, y_bottom-15 ); core::stringw msg = _("To add a new Gamepad/Joystick device, simply start SuperTuxKart " "with it connected and it will appear in the list.\n\nTo add a " "keyboard config, you can use the button below, HOWEVER please " "note that most keyboards only support a limited amount of " "simultaneous keypresses and are thus inappropriate for multiplayer " "gameplay. (You can, however, connect multiple keyboards to the " "computer. Remember that everyone still needs different keybindings " "in this case.)"); IGUIStaticText* b = GUIEngine::getGUIEnv()->addStaticText(msg.c_str(), text_area, /*border*/false , /*word wrap*/true, m_irrlicht_window); b->setTabStop(false); b->setRightToLeft(translations->isRTLText(msg)); // because it looks like 'setRightToLeft' applies next time // setText is called only b->setText(msg.c_str()); #ifdef ENABLE_WIIUSE { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "addwiimote"; //I18N: In the 'add new input device' dialog widget->setText( _("Add Wiimote") ); const int textWidth = font->getDimension( widget->getText().c_str() ).Width + 40; widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = cur_y; widget->m_w = textWidth; widget->m_h = buttonHeight; widget->setParent(m_irrlicht_window); m_widgets.push_back(widget); widget->add(); cur_y += y_stride; } #endif // ENABLE_WIIUSE { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "addkeyboard"; //I18N: In the 'add new input device' dialog widget->setText( _("Add Keyboard Configuration") ); const int textWidth = font->getDimension( widget->getText().c_str() ).Width + 40; widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = cur_y; widget->m_w = textWidth; widget->m_h = buttonHeight; widget->setParent(m_irrlicht_window); m_widgets.push_back(widget); widget->add(); cur_y += y_stride; } { ButtonWidget* widget = new ButtonWidget(); widget->m_properties[PROP_ID] = "cancel"; widget->setText( _("Cancel") ); const int textWidth = font->getDimension( widget->getText().c_str() ).Width + 40; widget->m_x = m_area.getWidth()/2 - textWidth/2; widget->m_y = cur_y; widget->m_w = textWidth; widget->m_h = buttonHeight; widget->setParent(m_irrlicht_window); m_widgets.push_back(widget); widget->add(); cur_y += y_stride; widget->setFocusForPlayer( PLAYER_ID_GAME_MASTER ); } } // AddDeviceDialog // ---------------------------------------------------------------------------- void AddDeviceDialog::onEnterPressedInternal() { } // onEnterPressedInternal // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- GUIEngine::EventPropagation AddDeviceDialog::processEvent (const std::string& eventSource) { if (eventSource == "cancel") { ModalDialog::dismiss(); return GUIEngine::EVENT_BLOCK; } else if (eventSource == "addkeyboard") { input_manager->getDeviceManager()->addEmptyKeyboard(); input_manager->getDeviceManager()->save(); ModalDialog::dismiss(); ((OptionsScreenInput*)GUIEngine::getCurrentScreen())->rebuildDeviceList(); return GUIEngine::EVENT_BLOCK; } #ifdef ENABLE_WIIUSE else if (eventSource == "addwiimote") { // Remove the previous modal dialog to avoid a warning GUIEngine::ModalDialog::dismiss(); if(wiimote_manager->askUserToConnectWiimotes() > 0) ((OptionsScreenInput*)GUIEngine::getCurrentScreen())->rebuildDeviceList(); return GUIEngine::EVENT_BLOCK; } #endif return GUIEngine::EVENT_LET; } // processEvent