/* * Copyright 2010-2016 OpenXcom Developers. * * This file is part of OpenXcom. * * OpenXcom 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. * * OpenXcom 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 OpenXcom. If not, see . */ #include "TargetInfoState.h" #include "../Engine/Game.h" #include "../Mod/Mod.h" #include "../Engine/LocalizedText.h" #include "../Interface/TextButton.h" #include "../Interface/Window.h" #include "../Interface/Text.h" #include "../Interface/TextEdit.h" #include "../Savegame/MovingTarget.h" #include "../Engine/Options.h" #include "InterceptState.h" #include "../Engine/Action.h" namespace OpenXcom { /** * Initializes all the elements in the Target Info window. * @param game Pointer to the core game. * @param target Pointer to the target to show info from. * @param globe Pointer to the Geoscape globe. */ TargetInfoState::TargetInfoState(Target *target, Globe *globe) : _target(target), _globe(globe) { _screen = false; // Create objects _window = new Window(this, 192, 120, 32, 40, POPUP_BOTH); _btnIntercept = new TextButton(160, 12, 48, 124); _btnOk = new TextButton(160, 12, 48, 140); _edtTitle = new TextEdit(this, 182, 32, 37, 46); _txtTargetted = new Text(182, 9, 37, 78); _txtFollowers = new Text(182, 40, 37, 88); // Set palette setInterface("targetInfo"); add(_window, "window", "targetInfo"); add(_btnIntercept, "button", "targetInfo"); add(_btnOk, "button", "targetInfo"); add(_edtTitle, "text2", "targetInfo"); add(_txtTargetted, "text1", "targetInfo"); add(_txtFollowers, "text1", "targetInfo"); centerAllSurfaces(); // Set up objects _window->setBackground(_game->getMod()->getSurface("BACK01.SCR")); _btnIntercept->setText(tr("STR_INTERCEPT")); _btnIntercept->onMouseClick((ActionHandler)&TargetInfoState::btnInterceptClick); _btnOk->setText(tr("STR_OK")); _btnOk->onMouseClick((ActionHandler)&TargetInfoState::btnOkClick); _btnOk->onKeyboardPress((ActionHandler)&TargetInfoState::btnOkClick, Options::keyCancel); _edtTitle->setBig(); _edtTitle->setAlign(ALIGN_CENTER); _edtTitle->setVerticalAlign(ALIGN_MIDDLE); _edtTitle->setWordWrap(true); _edtTitle->setText(_target->getName(_game->getLanguage())); _edtTitle->onChange((ActionHandler)&TargetInfoState::edtTitleChange); _txtTargetted->setAlign(ALIGN_CENTER); _txtTargetted->setText(tr("STR_TARGETTED_BY")); _txtFollowers->setAlign(ALIGN_CENTER); std::ostringstream ss; for (std::vector::iterator i = _target->getFollowers()->begin(); i != _target->getFollowers()->end(); ++i) { ss << (*i)->getName(_game->getLanguage()) << '\n'; } _txtFollowers->setText(ss.str()); } /** * */ TargetInfoState::~TargetInfoState() { } /** * Picks a craft to intercept the UFO. * @param action Pointer to an action. */ void TargetInfoState::btnInterceptClick(Action *) { _game->pushState(new InterceptState(_globe, 0, _target)); } /** * Closes the window. * @param action Pointer to an action. */ void TargetInfoState::btnOkClick(Action *) { _game->popState(); } /** * Changes the target name. * @param action Pointer to an action. */ void TargetInfoState::edtTitleChange(Action *action) { if (_edtTitle->getText() == _target->getDefaultName(_game->getLanguage())) { _target->setName(""); } else { _target->setName(_edtTitle->getText()); } if (action->getDetails()->key.keysym.sym == SDLK_RETURN || action->getDetails()->key.keysym.sym == SDLK_KP_ENTER) { _edtTitle->setText(_target->getName(_game->getLanguage())); } } }