comparison engine/core/gui/console/console.h @ 0:4a0efb7baf70

* Datasets becomes the new trunk and retires after that :-)
author mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
date Sun, 29 Jun 2008 18:44:17 +0000
parents
children 90005975cdbb
comparison
equal deleted inserted replaced
-1:000000000000 0:4a0efb7baf70
1 /***************************************************************************
2 * Copyright (C) 2005-2008 by the FIFE team *
3 * http://www.fifengine.de *
4 * This file is part of FIFE. *
5 * *
6 * FIFE is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program 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 *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the *
18 * Free Software Foundation, Inc., *
19 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
20 ***************************************************************************/
21
22 #ifndef FIFE_GUICHAN_ADDON_CONSOLE_H
23 #define FIFE_GUICHAN_ADDON_CONSOLE_H
24
25 // Standard C++ library includes
26 #include <string>
27
28 // 3rd party library includes
29 #include <guichan.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 */
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 gcn::Container, public gcn::ActionListener {
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 guichan 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 guichan to respond to button press
122 */
123 void action(const gcn::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 private:
142
143 bool m_isAttached;
144 ConsoleExecuter* m_consoleexec;
145
146 CommandLine* m_input;
147 gcn::TextBox* m_output;
148 gcn::ScrollArea* m_outputscrollarea;
149 gcn::Label* m_status;
150 gcn::Button* m_toolsbutton;
151 static const unsigned m_maxOutputRows;
152
153 std::string m_prompt;
154
155 int m_hiddenPos;
156 int m_animationDelta;
157
158 bool m_hiding;
159
160 Timer m_fpsTimer;
161 Timer m_animationTimer;
162
163 void doShow();
164 void doHide();
165 };
166 }
167 #endif
168 /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */