/* * 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 "OptionsConfirmState.h" #include #include #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 "../Engine/Options.h" #include "../Engine/Timer.h" #include "../Engine/Screen.h" #include "../Savegame/SavedGame.h" namespace OpenXcom { /** * Initializes all the elements in the Confirm Display Options screen. * @param game Pointer to the core game. * @param origin Game section that originated this state. */ OptionsConfirmState::OptionsConfirmState(OptionsOrigin origin) : _origin(origin), _countdown(15) { _screen = false; // Create objects _window = new Window(this, 216, 100, 52, 50, POPUP_BOTH); _btnYes = new TextButton(50, 20, 70, 120); _btnNo = new TextButton(50, 20, 200, 120); _txtTitle = new Text(206, 20, 57, 70); _txtTimer = new Text(206, 20, 57, 100); _timer = new Timer(1000); // Set palette setInterface("optionsMenu", false, _game->getSavedGame() ? _game->getSavedGame()->getSavedBattle() : 0); add(_window, "confirmVideo", "optionsMenu"); add(_btnYes, "confirmVideo", "optionsMenu"); add(_btnNo, "confirmVideo", "optionsMenu"); add(_txtTitle, "confirmVideo", "optionsMenu"); add(_txtTimer, "confirmVideo", "optionsMenu"); centerAllSurfaces(); // Set up objects _window->setBackground(_game->getMod()->getSurface("BACK01.SCR")); _btnYes->setText(tr("STR_YES")); _btnYes->onMouseClick((ActionHandler)&OptionsConfirmState::btnYesClick); _btnNo->setText(tr("STR_NO")); _btnNo->onMouseClick((ActionHandler)&OptionsConfirmState::btnNoClick); // no keyboard shortcuts to make sure users can see the message _txtTitle->setAlign(ALIGN_CENTER); _txtTitle->setWordWrap(true); _txtTitle->setText(tr("STR_DISPLAY_OPTIONS_CONFIRM")); _txtTimer->setAlign(ALIGN_CENTER); _txtTimer->setWordWrap(true); _txtTimer->setText(tr("STR_DISPLAY_OPTIONS_REVERT").arg(_countdown)); if (_origin == OPT_BATTLESCAPE) { applyBattlescapeTheme(); } _timer->onTimer((StateHandler)&OptionsConfirmState::countdown); _timer->start(); } /** * */ OptionsConfirmState::~OptionsConfirmState() { delete _timer; } /** * Runs the countdown timer. */ void OptionsConfirmState::think() { State::think(); _timer->think(this, 0); } /** * Counts down the timer for reverting display options. */ void OptionsConfirmState::countdown() { _countdown--; std::ostringstream ss; ss << std::setfill('0') << std::setw(2) << _countdown; _txtTimer->setText(tr("STR_DISPLAY_OPTIONS_REVERT").arg(ss.str())); if (_countdown == 0) { btnNoClick(0); } } /** * Goes back to the Main Menu. * @param action Pointer to an action. */ void OptionsConfirmState::btnYesClick(Action *) { _game->popState(); OptionsBaseState::restart(_origin); } /** * Restores the original display options. * @param action Pointer to an action. */ void OptionsConfirmState::btnNoClick(Action *) { Options::switchDisplay(); Screen::updateScale(Options::battlescapeScale, Options::baseXBattlescape, Options::baseYBattlescape, _origin == OPT_BATTLESCAPE); Screen::updateScale(Options::geoscapeScale, Options::baseXGeoscape, Options::baseYGeoscape, _origin != OPT_BATTLESCAPE); Options::save(); _game->getScreen()->resetDisplay(); _game->popState(); OptionsBaseState::restart(_origin); } }