void OptionsScreenInput2::init() { Screen::init(); RibbonWidget* tabBar = getWidget<RibbonWidget>("options_choice"); if (tabBar != NULL) tabBar->select( "tab_controls", PLAYER_ID_GAME_MASTER ); tabBar->getRibbonChildren()[0].setTooltip( _("Graphics") ); tabBar->getRibbonChildren()[1].setTooltip( _("Audio") ); tabBar->getRibbonChildren()[2].setTooltip( _("User Interface") ); tabBar->getRibbonChildren()[3].setTooltip( _("Players") ); ButtonWidget* deleteBtn = getWidget<ButtonWidget>("delete"); if (m_config->getType() != DEVICE_CONFIG_TYPE_KEYBOARD) { core::stringw label = (m_config->isEnabled() ? //I18N: button to disable a gamepad configuration _("Disable Device") : //I18N: button to enable a gamepad configuration _("Enable Device")); // Make sure button is wide enough as the text is being changed away // from the original value core::dimension2d<u32> size = GUIEngine::getFont()->getDimension(label.c_str()); const int needed = size.Width + deleteBtn->getWidthNeededAroundLabel(); if (deleteBtn->m_w < needed) deleteBtn->m_w = needed; deleteBtn->setLabel(label); } else { deleteBtn->setLabel(_("Delete Configuration")); if (input_manager->getDeviceList()->getKeyboardAmount() < 2) { // don't allow deleting the last config deleteBtn->setDeactivated(); } else { deleteBtn->setActivated(); } } // Make the two buttons the same length, not strictly needed but will // look nicer... ButtonWidget* backBtn = getWidget<ButtonWidget>("back_to_device_list"); if (backBtn->m_w < deleteBtn->m_w) backBtn->m_w = deleteBtn->m_w; else deleteBtn->m_w = backBtn->m_w; backBtn->moveIrrlichtElement(); deleteBtn->moveIrrlichtElement(); LabelWidget* label = getWidget<LabelWidget>("title"); label->setText( m_config->getName().c_str(), false ); GUIEngine::ListWidget* actions = getWidget<GUIEngine::ListWidget>("actions"); assert( actions != NULL ); // ---- create list skeleton (right number of items, right internal names) // their actualy contents will be adapted as needed after //I18N: Key binding section addListItemSubheader(actions, "game_keys_section", _("Game Keys")); addListItem(actions, PA_STEER_LEFT); addListItem(actions, PA_STEER_RIGHT); addListItem(actions, PA_ACCEL); addListItem(actions, PA_BRAKE); addListItem(actions, PA_FIRE); addListItem(actions, PA_NITRO); addListItem(actions, PA_DRIFT); addListItem(actions, PA_LOOK_BACK); addListItem(actions, PA_RESCUE); addListItem(actions, PA_PAUSE_RACE); //I18N: Key binding section addListItemSubheader(actions, "menu_keys_section", _("Menu Keys")); addListItem(actions, PA_MENU_UP); addListItem(actions, PA_MENU_DOWN); addListItem(actions, PA_MENU_LEFT); addListItem(actions, PA_MENU_RIGHT); addListItem(actions, PA_MENU_SELECT); addListItem(actions, PA_MENU_CANCEL); updateInputButtons(); // Disable deletion keyboard configurations if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) { getWidget<ButtonWidget>("delete")->setDeactivated(); } else { getWidget<ButtonWidget>("delete")->setActivated(); } } // init
// ---------------------------------------------------------------------------- void OptionsScreenInput2::eventCallback(Widget* widget, const std::string& name, const int playerID) { //const std::string& screen_name = getName(); StateManager *sm = StateManager::get(); if (name == "options_choice") { std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); Screen *screen = NULL; if (selection == "tab_audio") screen = OptionsScreenAudio::getInstance(); //else if (selection == "tab_video") // screen = OptionsScreenVideo::getInstance(); else if (selection == "tab_players") screen = TabbedUserScreen::getInstance(); //else if (selection == "tab_controls") // screen = OptionsScreenInput::getInstance(); else if (selection == "tab_ui") screen = OptionsScreenUI::getInstance(); if(screen) StateManager::get()->replaceTopMostScreen(screen); } else if (name == "back_to_device_list") { sm->replaceTopMostScreen(OptionsScreenInput::getInstance()); } else if (name == "back") { sm->replaceTopMostScreen(OptionsScreenInput::getInstance()); } else if (name == "actions") { GUIEngine::ListWidget* actions = getWidget<GUIEngine::ListWidget>("actions"); assert( actions != NULL ); // a player action in the list was clicked. find which one const std::string& clicked = actions->getSelectionInternalName(); for (int n=PA_BEFORE_FIRST+1; n<PA_COUNT; n++) { if (KartActionStrings[n] == clicked) { // we found which one. show the "press a key" dialog. if (UserConfigParams::logMisc()) { Log::info("OptionsScreenInput2", "Entering sensing mode for %s", m_config->getName().c_str()); } binding_to_set = (PlayerAction)n; new PressAKeyDialog(0.4f, 0.4f); if (m_config->getType() == DEVICE_CONFIG_TYPE_KEYBOARD) { input_manager->setMode(InputManager::INPUT_SENSE_KEYBOARD); } else if (m_config->getType() == DEVICE_CONFIG_TYPE_GAMEPAD) { input_manager->setMode(InputManager::INPUT_SENSE_GAMEPAD); } else { Log::error("OptionsScreenInput2", "Unknown selection device in options: %s", m_config->getName().c_str()); } break; } } } else if (name == "delete") { if (m_config->getType() == DEVICE_CONFIG_TYPE_KEYBOARD) { // keyboard configs may be deleted //I18N: shown before deleting an input configuration new MessageDialog( _("Are you sure you want to permanently delete " "this configuration?"), MessageDialog::MESSAGE_DIALOG_CONFIRM, this, false ); } else { // gamepad configs may be disabled if (m_config->isEnabled()) m_config->setEnabled(false); else m_config->setEnabled(true); // update widget label ButtonWidget* deleteBtn = getWidget<ButtonWidget>("delete"); deleteBtn->setLabel(m_config->isEnabled() ? _("Disable Device") : _("Enable Device") ); input_manager->getDeviceList()->serialize(); } } } // eventCallback