23 #ifndef SRC_HEADERS_GX_LOGGING_H_
24 #define SRC_HEADERS_GX_LOGGING_H_
26 #include <glib/gi18n.h>
27 #include <glibmm/dispatcher.h>
28 #include <boost/thread/mutex.hpp>
29 #include <boost/format.hpp>
35 class GxLogger:
public sigc::trackable {
44 typedef sigc::signal<void, const std::string&, MsgType, bool> msg_signal;
49 logmsg(std::string m,
MsgType t,
bool p): msg(m), msgtype(t), plugged(p) {}
51 std::list<logmsg> msglist;
52 boost::mutex msgmutex;
53 Glib::Dispatcher* got_new_msg;
57 std::string format(
const char* func,
const std::string& msg);
66 void print(
const char* func,
const std::string& msg,
MsgType msgtype);
67 void print(
const std::string& formatted_msg,
MsgType msgtype);
74 inline void gx_print_warning(
const char* fnc,
const boost::basic_format<char>& msg) {
78 inline void gx_print_error(
const char* fnc,
const boost::basic_format<char>& msg) {
82 inline void gx_print_fatal(
const char* fnc,
const boost::basic_format<char>& msg) {
86 inline void gx_print_info(
const char* fnc,
const boost::basic_format<char>& msg) {
94 virtual const char*
what()
const throw() {
98 GxFatalError(boost::basic_format<char>& m): msg(m.str()) {}
109 sigc::signal<void, bool> exit_sig;
111 sigc::signal<void,std::string> message;
115 void set_ui_thread() { ui_thread = pthread_self(); }
116 sigc::signal<void, bool>& signal_exit() {
return exit_sig; }
117 sigc::signal<void,std::string>& signal_msg() {
return message; }
118 void exit_program(std::string msg =
"",
int errcode = 1);
119 void fatal_msg(
const std::string& msg) { message(msg); exit_program(msg); }
120 static GxExit& get_instance();
123 #endif // SRC_HEADERS_GX_LOGGING_H_