1 /*************************************************************************** 2 * Copyright (C) 2005-2019 by the FIFE team * 3 * http://www.fifengine.net * 4 * This file is part of FIFE. * 5 * * 6 * FIFE is free software; you can redistribute it and/or * 7 * modify it under the terms of the GNU Lesser General Public * 8 * License as published by the Free Software Foundation; either * 9 * version 2.1 of the License, or (at your option) any later version. * 10 * * 11 * This library is distributed in the hope that it will be useful, * 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14 * Lesser General Public License for more details. * 15 * * 16 * You should have received a copy of the GNU Lesser General Public * 17 * License along with this library; if not, write to the * 18 * Free Software Foundation, Inc., * 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 20 ***************************************************************************/ 21 22 #ifndef FIFE_FIFECHAN_ADDON_CONSOLE_H 23 #define FIFE_FIFECHAN_ADDON_CONSOLE_H 24 25 // Standard C++ library includes 26 #include <string> 27 28 // 3rd party library includes 29 #include <fifechan.hpp> 30 31 // FIFE includes 32 // These includes are split up in two parts, separated by one empty line 33 // First block: files included from the FIFE root src directory 34 // Second block: files included from the same folder 35 #include "util/time/timer.h" 36 37 namespace FIFE { 38 39 class CommandLine; 40 class GuiFont; 41 42 /** 43 * Console executer is listener interface for console activity 44 */ 45 class ConsoleExecuter { 46 public: 47 /** Destructor 48 */ ~ConsoleExecuter()49 virtual ~ConsoleExecuter() {} 50 51 /** Called when console tools button is clicked 52 */ 53 virtual void onToolsClick() = 0; 54 55 /** Called when user has typed command to console and pressed enter 56 * @return response from executer 57 */ 58 virtual std::string onConsoleCommand(const std::string& command) = 0; 59 }; 60 61 62 /** Ingame Console 63 */ 64 class Console : public fcn::Container, public fcn::ActionListener, public fcn::FocusListener { 65 public: 66 /** Constructor 67 */ 68 Console(); 69 70 /** Destructor 71 */ 72 virtual ~Console(); 73 74 /** Print one or more lines to the console output 75 */ 76 void println(const std::string & s); 77 78 /** Show the console 79 * Adds the Console to the fifechan toplevel container 80 * and pushes an input Context so that keys are not send to the 81 * rest of the game. 82 */ 83 void show(); 84 85 /** Hide the console 86 * Removes itself from the toplevel container 87 * and pops it's input context 88 */ 89 void hide(); 90 91 /** Clear the console output 92 */ 93 void clear(); 94 95 /** Toggle the console 96 * Toggles whether the Console is shown or not. 97 * Calls show() or hide() respectively. 98 */ 99 void toggleShowHide(); 100 101 /** Execute a command 102 * Normally just sends the command to runString() 103 * Checks whether the cmd is just one token 104 * and print it's value rather than throw an 105 * useless error. 106 * 107 * @todo generalize the generated command and the regexp used. 108 */ 109 void execute(std::string cmd); 110 111 /** Update the FPS caption 112 * @note Is a timer callback. 113 */ 114 void updateCaption(); 115 116 /** Update the scroll in/out animation. 117 * @note Is a timer callback. 118 */ 119 void updateAnimation(); 120 121 /** Callback from fifechan to respond to button press 122 */ 123 void action(const fcn::ActionEvent & event); 124 125 /** Sets executer for the console 126 */ 127 void setConsoleExecuter(ConsoleExecuter* const consoleexec); 128 129 /** Removes executer for the console 130 */ 131 void removeConsoleExecuter(); 132 133 /** Layouts the console to match e.g. font changes 134 */ 135 void reLayout(); 136 137 /** Sets the font used for the input and output areas 138 */ 139 void setIOFont(GuiFont* font); 140 141 /** Hide if we loose focus 142 */ 143 void focusLost(const fcn::Event& event); 144 private: 145 146 bool m_isAttached; 147 ConsoleExecuter* m_consoleexec; 148 149 CommandLine* m_input; 150 fcn::TextBox* m_output; 151 fcn::ScrollArea* m_outputscrollarea; 152 fcn::Label* m_status; 153 fcn::Button* m_toolsbutton; 154 static const unsigned m_maxOutputRows; 155 156 std::string m_prompt; 157 158 int32_t m_hiddenPos; 159 int32_t m_animationDelta; 160 161 bool m_hiding; 162 163 Timer m_fpsTimer; 164 Timer m_animationTimer; 165 166 void doShow(); 167 void doHide(); 168 }; 169 } 170 #endif 171