From 1e0df536c2fae85c317ce9c3cc17603d5f98c911 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 15 Oct 2008 20:33:15 +0000 Subject: moved client console into a Widget --- src/sys/consoleinterface.h | 150 ++++++++++++++++++++++++++++++--------------- 1 file changed, 101 insertions(+), 49 deletions(-) (limited to 'src/sys/consoleinterface.h') diff --git a/src/sys/consoleinterface.h b/src/sys/consoleinterface.h index 5411cb6..3a7d3ed 100644 --- a/src/sys/consoleinterface.h +++ b/src/sys/consoleinterface.h @@ -8,89 +8,141 @@ #define __INCLUDED_SYS_CONSOLEINTERFACE_H__ #include +#include +#include +#include #include #include #include "sys/sys.h" -/// global define to send a message to the system console -#define con_print sys::ConsoleInterface::instance()->messagestream() -/// global define to send a warning message to the system console -#define con_warn sys::ConsoleInterface::instance()->warningstream() -/// global define to send an error message to the system console -#define con_error sys::ConsoleInterface::instance()->errorstream() - -#ifdef HAVE_DEBUG_MESSAGES -/// global define to send a debug message to the system console -#define con_debug sys::ConsoleInterface::instance()->debugstream() -#else -#define con_debug if (0) *(std::ostream*)(0) -#endif namespace sys { -const size_t MAXCONLINES = 2048; +/// true if ANSI colors are enabled +bool ansi(); -/// interface for the client and server Console classes -class ConsoleInterface -{ -public: - /// default constructor - ConsoleInterface(); +/// enable or disable ANSI colors +void set_ansi(bool enable = true); - /// default destructor - virtual ~ConsoleInterface(); - - /// stream to send normal messages to - std::ostream & messagestream(); +/* -- ConsoleBuffer ------------------------------------------------ */ - /// stream to send warning messages to - std::ostream & warningstream(); +typedef std::char_traits Traits; - /// stream to send error messages to - std::ostream & errorstream(); +/// buffer back-end for console output +class ConsoleBuffer : public std::basic_streambuf +{ +public: + const std::string & str() const + { + return con_buffer; + } + +protected: + /// stream overflow + virtual int overflow(int c = Traits::eof()); + +private: + std::string con_buffer; +}; - /// stream to send debug messages to - std::ostream & debugstream(); - /// flush buffered messages - virtual void flush(); +/* -- ConsoleStream ------------------------------------------------ */ - /// resize the console (ncurses stub) - virtual void resize(); +/// provides global streams for console output +class ConsoleStream : public std::basic_ostream +{ +public: + ConsoleStream(); + ~ConsoleStream(); + + inline ConsoleBuffer & buf() + { + return con_buffer; + } + +private: + ConsoleBuffer con_buffer; +}; - /// return the console inputbuffer - inline std::stringstream & buffer() { return consoleinterface_buffer; } +/// global console output stream +extern ConsoleStream con_out; - inline bool rcon() { return consoleinterface_rcon; } - inline bool ansi() { return consoleinterface_ansi; } +/* -- Console ------------------------------------------------------ */ - /// enable or disable ANSI escape sequences - void set_ansi(bool enable = true); +/// interface for the client and server Console classes +class ConsoleInterface +{ +public: + /// default constructor + ConsoleInterface(); + + /// default destructor + virtual ~ConsoleInterface(); + + /// set maximal number of lines in the log + void set_logsize(const size_t logsize); + + /// return rcon state + inline bool rcon() + { + return consoleinterface_rcon; + } + /// enable or disable rcon void set_rcon(bool enable = true); - + + typedef std::deque Text; + + inline Text & rconbuf() + { + return consoleinterface_rconbuf; + } + + inline Text & log() + { + return consoleinterface_log; + } + /// a pointer to the current console instance static ConsoleInterface *instance(); - + + /// incoming text event handler + void event_text(const std::string & text); + + /// ncurses resize event + virtual void resize() + {}; + protected: - std::deque consoleinterface_text; - std::stringstream consoleinterface_buffer; + /// print one line of text + virtual void print(const std::string & text); - /// print a string to stdout with ansi color codes - void print_ansi(const char *line); - private: /// console singleton static ConsoleInterface *consoleinterface_instance; - bool consoleinterface_ansi; + bool consoleinterface_rcon; + Text consoleinterface_rconbuf; + + Text consoleinterface_log; + size_t consoleinterface_logsize; }; } // namespace sys +#define con_print sys::con_out << "^N" +#define con_warn sys::con_out << "^W" +#define con_error sys::con_out << "^R" +#ifdef HAVE_DEBUG_MESSAGES +#define con_debug sys::con_out << "^D" +#else +#define con_debug if (0) *(std::ostream*)(0) +#endif + + #endif // __INCLUDED_SYS_CONSOLEINTERFACE_H__ -- cgit v1.2.3