/* client/console.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_CONSOLE_H__ #define __INCLUDED_CLIENT_CONSOLE_H__ #include "sys/consoleinterface.h" namespace client { const size_t MAXNOTIFYLINES = 3; const size_t MAXHISTOLINES = 512; /// client console implementation class Console : public sys::ConsoleInterface { public: Console(); virtual ~Console(); virtual void flush(); void draw_console(); void draw_notify(); /// clear notifications void clear_notify(); /// draw client notifications or console text void draw(); /// toggle the console on or off void toggle(); /// handle keyboard input void keypressed(int key); /// true of the console is visible inline bool visible() { return console_visible; } /// load input history void load_history(); /// save input history void save_history(); /// clear console void clear(); /// initialize client console static void init(); /// shutdown the client console static void shutdown(); private: // notifications size_t notify_pos; std::string notify_text[MAXNOTIFYLINES]; float notify_time[MAXNOTIFYLINES]; // input history std::deque history; std::deque::reverse_iterator history_pos; size_t input_pos; bool console_visible; size_t console_scroll; }; Console *console(); } #endif // __INCLUDED_CLIENT_CONSOLE_H__