/* 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" #include "ui/window.h" #include "ui/input.h" namespace client { /* -- class ConsoleBuffer ------------------------------------------ */ /// client console buffer /** stores incoming console messages */ class ConsoleBuffer : public sys::ConsoleInterface { public: ConsoleBuffer(); ~ConsoleBuffer(); }; /* -- class Console ------------------------------------------------ */ /// client system console widget class Console : public ui::Window { public: typedef std::deque Text; Console(Widget *parent); virtual ~Console(); /// load input history void load_history(); /// save input history void save_history(); /// show console virtual void show(); /// hide console virtual void hide(); void toggle(); protected: /// draw event virtual void event_draw(); /// draw the client console text virtual void draw(); /// handle keypress events virtual bool on_keypress(const int key, const unsigned int modifier); private: inline Text & log() { return con_buffer.log(); } // input history Text history; Text::reverse_iterator history_pos; // scroll position size_t console_scroll; // input widget ui::Input *console_input; // console buffer static ConsoleBuffer con_buffer; }; } #endif // __INCLUDED_CLIENT_CONSOLE_H__