00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <libheraia.h>
00026
00030 static void my_log(heraia_window_t *main_window, gchar *log_domain, GLogLevelFlags log_level, const char *format, ...);
00031
00032 static void log_window_connect_signals(heraia_window_t *main_window);
00033 static gboolean delete_log_window_event(GtkWidget *widget, GdkEvent *event, gpointer data );
00034 static void destroy_log_window(GtkWidget *widget, GdkEvent *event, gpointer data);
00035 static void logw_close_clicked(GtkWidget *widget, gpointer data);
00036
00040 void print_message(const char *format, ...)
00041 {
00042 va_list args;
00043 gchar *str = NULL;
00044 gchar *str_utf8 = NULL;
00045 GError *err = NULL;
00046
00047 g_return_if_fail (format != NULL);
00048
00049 va_start(args, format);
00050 str = g_strdup_vprintf(format, args);
00051 va_end(args);
00052
00053 str_utf8 = g_locale_to_utf8(str, -1, NULL, NULL, &err);
00054
00055 if (str_utf8)
00056 {
00057 fputs(str_utf8, stdout);
00058 g_free(str_utf8);
00059 }
00060 else
00061 {
00062 fprintf(stderr, "Can't convert output to the locale: %s\n", err->message);
00063 fputs(str, stderr);
00064 g_error_free(err);
00065 }
00066
00067 g_free(str);
00068 }
00069
00070
00074 static void my_log(heraia_window_t *main_window, gchar *log_domain, GLogLevelFlags log_level, const char *format, ...)
00075 {
00076 va_list args;
00077 gchar *str = NULL;
00078 gchar *display = NULL;
00079 GtkTextView *logw_textview = GTK_TEXT_VIEW(heraia_get_widget(main_window->xmls->main, "logw_textview"));
00080 GtkTextBuffer *tb = NULL;
00081 GtkTextIter iStart;
00082
00083 va_start(args, format);
00084 str = g_strdup_vprintf(format, args);
00085 va_end(args);
00086
00087 switch (log_level)
00088 {
00089 case G_LOG_FLAG_RECURSION:
00090 display = g_strdup_printf("%s - RECURSION: %s\n%c", log_domain, str, '\0');
00091 g_print("%s\n", display);
00092
00093 break;
00094
00095 case G_LOG_FLAG_FATAL:
00096 display = g_strdup_printf("%s - FATAL: %s\n%c", log_domain, str, '\0');
00097 g_print("%s\n", display);
00098
00099 break;
00100
00101 case G_LOG_LEVEL_ERROR:
00102 display = g_strdup_printf("%s - ERROR: %s\n%c", log_domain, str, '\0');
00103 g_print("%s\n", display);
00104
00105 break;
00106
00107 case G_LOG_LEVEL_CRITICAL:
00108 display = g_strdup_printf("%s - CRITICAL: %s\n%c", log_domain, str, '\0');
00109 break;
00110
00111 case G_LOG_LEVEL_WARNING:
00112 display = g_strdup_printf("%s - WARNING: %s\n%c", log_domain, str, '\0');
00113 break;
00114
00115 case G_LOG_LEVEL_MESSAGE:
00116 display = g_strdup_printf("%s - MESSAGE: %s\n%c", log_domain, str, '\0');
00117 break;
00118
00119 case G_LOG_LEVEL_INFO:
00120 display = g_strdup_printf("%s - INFO: %s\n%c", log_domain, str, '\0');
00121 break;
00122
00123 case G_LOG_LEVEL_DEBUG:
00124 display = g_strdup_printf("%s - DEBUG: %s\n%c", log_domain, str, '\0');
00125 break;
00126
00127 case G_LOG_LEVEL_MASK:
00128 break;
00129 }
00130
00131 g_print("%s", display);
00132 tb = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(logw_textview)));
00133 gtk_text_buffer_get_end_iter(tb, &iStart);
00134 gtk_text_buffer_insert(tb, &iStart, display, -1);
00135
00136 g_free(str);
00137 g_free(display);
00138 }
00139
00140
00144 void log_message(heraia_window_t *main_window, GLogLevelFlags log_level, const char *format, ...)
00145 {
00146 va_list args;
00147 gchar *str = NULL;
00148 gchar *str_time = NULL;
00149 gchar *str_time_utf8 = NULL;
00150 gchar *str_utf8 = NULL;
00151 GTimeVal *time = NULL;
00152 GError *err = NULL;
00153
00154 if (!(main_window->debug == FALSE && log_level == G_LOG_LEVEL_DEBUG))
00155 {
00156 g_return_if_fail(format != NULL);
00157
00158 va_start(args, format);
00159 str = g_strdup_vprintf(format, args);
00160 va_end(args);
00161 str_utf8 = g_locale_to_utf8(str, -1, NULL, NULL, &err);
00162
00163 time = (GTimeVal *) g_malloc0 (sizeof(GTimeVal));
00164 g_get_current_time(time);
00165 str_time = g_time_val_to_iso8601(time);
00166 str_time_utf8 = g_locale_to_utf8(str_time, -1, NULL, NULL, &err);
00167
00168
00169 if (str_utf8)
00170 {
00171 if (str_time_utf8)
00172 {
00173 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time_utf8, str_utf8, '\0');
00174 }
00175 else
00176 {
00177 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time, str_utf8, '\0');
00178 }
00179 }
00180 else
00181 {
00182 if (str_time_utf8)
00183 {
00184 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time_utf8, str, '\0');
00185 }
00186 else
00187 {
00188 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time, str, '\0');
00189 }
00190 }
00191
00192 g_free(time);
00193 g_free(str);
00194 g_free(str_time);
00195 g_free(str_time_utf8);
00196 g_free(str_utf8);
00197 }
00198 }
00199
00204 void show_hide_log_window(heraia_window_t *main_window, gboolean show, GtkCheckMenuItem *cmi)
00205 {
00206 GtkWidget *log_dialog = NULL;
00207 window_prop_t *log_box_prop = main_window->win_prop->log_box;
00208
00209 log_dialog = heraia_get_widget(main_window->xmls->main, "log_window");
00210
00211 if (show == TRUE)
00212 {
00213 move_and_show_dialog_box(log_dialog, log_box_prop);
00214 }
00215 else
00216 {
00217 if (log_box_prop->displayed == TRUE)
00218 {
00219 gtk_check_menu_item_set_active(cmi, FALSE);
00220 record_and_hide_dialog_box(log_dialog, log_box_prop);
00221 }
00222 }
00223 }
00224
00228 void mw_cmi_show_logw_toggle(GtkWidget *widget, gpointer data)
00229 {
00230 heraia_window_t *main_window = (heraia_window_t *) data;
00231 GtkCheckMenuItem *cmi = GTK_CHECK_MENU_ITEM(widget);
00232 gboolean checked = gtk_check_menu_item_get_active(cmi);
00233
00234 show_hide_log_window(main_window, checked, cmi);
00235 }
00236
00237
00238
00239
00243 static gboolean delete_log_window_event(GtkWidget *widget, GdkEvent *event, gpointer data )
00244 {
00245 logw_close_clicked(widget, data);
00246
00247 return TRUE;
00248 }
00249
00250 static void destroy_log_window(GtkWidget *widget, GdkEvent *event, gpointer data)
00251 {
00252 logw_close_clicked(widget, data);
00253 }
00254
00258 static void logw_close_clicked(GtkWidget *widget, gpointer data)
00259 {
00260 heraia_window_t *main_window = (heraia_window_t *) data;
00261 GtkWidget *cmi = NULL;
00262
00263 cmi = heraia_get_widget(main_window->xmls->main, "mw_cmi_show_logw");
00264
00265 show_hide_log_window(main_window, FALSE, GTK_CHECK_MENU_ITEM(cmi));
00266 }
00267
00268
00272 static void log_window_connect_signals(heraia_window_t *main_window)
00273 {
00274
00275 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "log_window")), "delete_event",
00276 G_CALLBACK(delete_log_window_event), main_window);
00277
00278 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "log_window")), "destroy",
00279 G_CALLBACK(destroy_log_window), main_window);
00280
00281
00282 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "logw_close_b")), "clicked",
00283 G_CALLBACK(logw_close_clicked), main_window);
00284
00285
00286 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "mw_cmi_show_logw")), "toggled",
00287 G_CALLBACK(mw_cmi_show_logw_toggle), main_window);
00288
00289 }
00290
00291
00292
00297 void log_window_init_interface(heraia_window_t *main_window)
00298 {
00299 if (main_window != NULL)
00300 {
00301
00302 log_window_connect_signals(main_window);
00303 }
00304 }