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
00026
00027
00028 #include <libheraia.h>
00029
00030
00031 static void my_log(heraia_window_t *main_window, gchar *log_domain, GLogLevelFlags log_level, const char *format, ...);
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
00037
00038
00039
00040
00041
00042
00043 void print_message(const char *format, ...)
00044 {
00045 va_list args;
00046 gchar *str = NULL;
00047 gchar *str_utf8 = NULL;
00048 GError *err = NULL;
00049
00050 g_return_if_fail (format != NULL);
00051
00052 va_start(args, format);
00053 str = g_strdup_vprintf(format, args);
00054 va_end(args);
00055
00056 str_utf8 = g_locale_to_utf8(str, -1, NULL, NULL, &err);
00057
00058 if (str_utf8)
00059 {
00060 fputs(str_utf8, stdout);
00061 g_free(str_utf8);
00062 }
00063 else
00064 {
00065 fprintf(stderr, "Can't convert output to the locale: %s\n", err->message);
00066 fputs(str, stderr);
00067 g_error_free(err);
00068 }
00069
00070 g_free(str);
00071 }
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 static void my_log(heraia_window_t *main_window, gchar *log_domain, GLogLevelFlags log_level, const char *format, ...)
00087 {
00088 va_list args;
00089 gchar *str = NULL;
00090 gchar *display = NULL;
00091 GtkTextView *logw_textview = GTK_TEXT_VIEW(heraia_get_widget(main_window->xmls->main, "logw_textview"));
00092 GtkTextBuffer *tb = NULL;
00093 GtkTextIter iStart;
00094
00095 va_start(args, format);
00096 str = g_strdup_vprintf(format, args);
00097 va_end(args);
00098
00099 switch (log_level)
00100 {
00101 case G_LOG_FLAG_RECURSION:
00102 display = g_strdup_printf("%s - RECURSION: %s\n%c", log_domain, str, '\0');
00103 g_print("%s\n", display);
00104
00105 break;
00106
00107 case G_LOG_FLAG_FATAL:
00108 display = g_strdup_printf("%s - FATAL: %s\n%c", log_domain, str, '\0');
00109 g_print("%s\n", display);
00110
00111 break;
00112
00113 case G_LOG_LEVEL_ERROR:
00114 display = g_strdup_printf("%s - ERROR: %s\n%c", log_domain, str, '\0');
00115 g_print("%s\n", display);
00116
00117 break;
00118
00119 case G_LOG_LEVEL_CRITICAL:
00120 display = g_strdup_printf("%s - CRITICAL: %s\n%c", log_domain, str, '\0');
00121 break;
00122
00123 case G_LOG_LEVEL_WARNING:
00124 display = g_strdup_printf("%s - WARNING: %s\n%c", log_domain, str, '\0');
00125 break;
00126
00127 case G_LOG_LEVEL_MESSAGE:
00128 display = g_strdup_printf("%s - MESSAGE: %s\n%c", log_domain, str, '\0');
00129 break;
00130
00131 case G_LOG_LEVEL_INFO:
00132 display = g_strdup_printf("%s - INFO: %s\n%c", log_domain, str, '\0');
00133 break;
00134
00135 case G_LOG_LEVEL_DEBUG:
00136 display = g_strdup_printf("%s - DEBUG: %s\n%c", log_domain, str, '\0');
00137 break;
00138
00139 case G_LOG_LEVEL_MASK:
00140 break;
00141 }
00142
00143 g_print("%s", display);
00144 tb = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(logw_textview)));
00145 gtk_text_buffer_get_end_iter(tb, &iStart);
00146 gtk_text_buffer_insert(tb, &iStart, display, -1);
00147
00148 g_free(str);
00149 g_free(display);
00150 }
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 void log_message(heraia_window_t *main_window, GLogLevelFlags log_level, const char *format, ...)
00167 {
00168 va_list args;
00169 gchar *str = NULL;
00170 gchar *str_time = NULL;
00171 gchar *str_time_utf8 = NULL;
00172 gchar *str_utf8 = NULL;
00173 GTimeVal *time = NULL;
00174 GError *err = NULL;
00175
00176 if (!(main_window->debug == FALSE && log_level == G_LOG_LEVEL_DEBUG))
00177 {
00178 g_return_if_fail(format != NULL);
00179
00180 va_start(args, format);
00181 str = g_strdup_vprintf(format, args);
00182 va_end(args);
00183 str_utf8 = g_locale_to_utf8(str, -1, NULL, NULL, &err);
00184
00185 time = (GTimeVal *) g_malloc0 (sizeof(GTimeVal));
00186 g_get_current_time(time);
00187 str_time = g_time_val_to_iso8601(time);
00188 str_time_utf8 = g_locale_to_utf8(str_time, -1, NULL, NULL, &err);
00189
00190
00191 if (str_utf8)
00192 {
00193 if (str_time_utf8)
00194 {
00195 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time_utf8, str_utf8, '\0');
00196 }
00197 else
00198 {
00199 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time, str_utf8, '\0');
00200 }
00201 }
00202 else
00203 {
00204 if (str_time_utf8)
00205 {
00206 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time_utf8, str, '\0');
00207 }
00208 else
00209 {
00210 my_log(main_window, HERAIA_LOG_DOMAIN, log_level, "%s - %s%c", str_time, str, '\0');
00211 }
00212 }
00213
00214 g_free(time);
00215 g_free(str);
00216 g_free(str_time);
00217 g_free(str_time_utf8);
00218 g_free(str_utf8);
00219 }
00220 }
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 void show_hide_log_window(heraia_window_t *main_window, gboolean show, GtkCheckMenuItem *cmi)
00232 {
00233 GtkWidget *log_dialog = NULL;
00234 window_prop_t *log_box_prop = main_window->win_prop->log_box;
00235
00236 log_dialog = heraia_get_widget(main_window->xmls->main, "log_window");
00237
00238 if (show == TRUE)
00239 {
00240 move_and_show_dialog_box(log_dialog, log_box_prop);
00241 }
00242 else
00243 {
00244 if (log_box_prop->displayed == TRUE)
00245 {
00246 gtk_check_menu_item_set_active(cmi, FALSE);
00247 record_and_hide_dialog_box(log_dialog, log_box_prop);
00248 }
00249 }
00250 }
00251
00252
00253
00254
00255
00256
00257
00258
00259 void mw_cmi_show_logw_toggle(GtkWidget *widget, gpointer data)
00260 {
00261 heraia_window_t *main_window = (heraia_window_t *) data;
00262 GtkCheckMenuItem *cmi = GTK_CHECK_MENU_ITEM(widget);
00263 gboolean checked = gtk_check_menu_item_get_active(cmi);
00264
00265 show_hide_log_window(main_window, checked, cmi);
00266 }
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279 static gboolean delete_log_window_event(GtkWidget *widget, GdkEvent *event, gpointer data )
00280 {
00281 logw_close_clicked(widget, data);
00282
00283 return TRUE;
00284 }
00285
00286
00287
00288
00289
00290
00291
00292
00293 static void destroy_log_window(GtkWidget *widget, GdkEvent *event, gpointer data)
00294 {
00295 logw_close_clicked(widget, data);
00296 }
00297
00298
00299
00300
00301
00302
00303
00304 static void logw_close_clicked(GtkWidget *widget, gpointer data)
00305 {
00306 heraia_window_t *main_window = (heraia_window_t *) data;
00307 GtkWidget *cmi = NULL;
00308
00309 if (main_window != NULL && main_window->xmls != NULL && main_window->xmls->main != NULL)
00310 {
00311 cmi = heraia_get_widget(main_window->xmls->main, "mw_cmi_show_logw");
00312 show_hide_log_window(main_window, FALSE, GTK_CHECK_MENU_ITEM(cmi));
00313 }
00314 }
00315
00316
00317
00318
00319
00320
00321
00322 static void log_window_connect_signals(heraia_window_t *main_window)
00323 {
00324
00325 if (main_window != NULL && main_window->xmls != NULL && main_window->xmls->main != NULL)
00326 {
00327
00328 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "log_window")), "delete_event",
00329 G_CALLBACK(delete_log_window_event), main_window);
00330
00331 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "log_window")), "destroy",
00332 G_CALLBACK(destroy_log_window), main_window);
00333
00334
00335 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "logw_close_b")), "clicked",
00336 G_CALLBACK(logw_close_clicked), main_window);
00337
00338
00339 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "mw_cmi_show_logw")), "toggled",
00340 G_CALLBACK(mw_cmi_show_logw_toggle), main_window);
00341 }
00342
00343 }
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353 void log_window_init_interface(heraia_window_t *main_window)
00354 {
00355 if (main_window != NULL)
00356 {
00357
00358 log_window_connect_signals(main_window);
00359 }
00360 }