📄 gld.c
字号:
uid_dw = NULL; } gtk_object_set_user_data(GTK_OBJECT(b), uid_dw);}static gboolean gld_lvl_dw_delete(GtkObject *o, GdkEvent *e, GtkToggleButton *b){ gtk_object_set_user_data(GTK_OBJECT(b), NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b), FALSE); return FALSE;}static void gld_lvl_dw_in(GtkButton *b, Gld *gld){ GtkCList *llist, *rlist; GList *l, *l2; char *elt; int r; int redo = 0; llist = GTK_CLIST(gtk_object_get_user_data(GTK_OBJECT(b))); rlist = GTK_CLIST(gtk_object_get_user_data(GTK_OBJECT(llist))); gtk_clist_freeze(llist); gtk_clist_freeze(rlist); /* hack : we eat selection as well as we run in it, so we take the head every time */ for(l = g_list_first(llist->selection); l; l = g_list_first(llist->selection)) { gtk_clist_get_text( llist, (int)l->data, 0, &elt ); r = gtk_clist_append( rlist, &elt ); gtk_clist_remove( llist, (int)l->data ); gtk_clist_get_text( rlist, r, 0, &elt ); for(l2 = g_list_first( GLOGGER(gld)->logd->lvls ); l2; l2 = g_list_next(l2) ) if( !strcmp( NC(l2)->name, elt ) ) { gld->lvls = g_list_append(gld->lvls, NC(l2)); redo = 1; break; } } gtk_clist_thaw(llist); gtk_clist_thaw(rlist); if(redo) gld_compute_again(gld);}static void gld_lvl_dw_out(GtkButton *b, Gld *gld){ GtkCList *llist, *rlist; GList *l, *l2; char *elt; int r; int redo = 0; rlist = GTK_CLIST(gtk_object_get_user_data(GTK_OBJECT(b))); llist = GTK_CLIST(gtk_object_get_user_data(GTK_OBJECT(rlist))); gtk_clist_freeze(rlist); gtk_clist_freeze(llist); /* hack : we eat selection as well as we run in it, so we take the head every time */ for(l = g_list_first(rlist->selection); l; l = g_list_first(rlist->selection)) { gtk_clist_get_text( rlist, (int)l->data, 0, &elt ); r = gtk_clist_append( llist, &elt ); gtk_clist_remove( rlist, (int)l->data ); gtk_clist_get_text( llist, r, 0, &elt); for(l2 = g_list_first( GLOGGER(gld)->logd->lvls ); l2; l2 = g_list_next(l2) ) if( !strcmp( NC(l2)->name, elt ) ) { gld->lvls = g_list_remove(gld->lvls, NC(l2)); redo = 1; break; } } gtk_clist_thaw(rlist); gtk_clist_thaw(llist); if(redo) gld_compute_again(gld);}static void gld_select_lvls(GtkToggleButton *b, Gld *gld){ GtkWidget *lvl_dw; GtkWidget *hbox, *vbbox, *llist, *rlist, *lrarrow, *rlarrow, *lb, *rb; char *title_in[1] = { "LVL to display" }; char *title_out[1] = { "LVL not to display" }; GList *l; char *elt[1]; lvl_dw = gtk_object_get_user_data(GTK_OBJECT(b)); if( gtk_toggle_button_get_active(b) ) { if( !lvl_dw ) { lvl_dw = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(lvl_dw), "Select LVLs"); gtk_widget_show(lvl_dw); hbox = gtk_hbox_new(FALSE, 0); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(lvl_dw)->vbox), hbox); gtk_widget_show(hbox); llist = gtk_clist_new_with_titles(1, title_out); gtk_box_pack_start(GTK_BOX(hbox), llist, TRUE, TRUE, 0); gtk_widget_show(llist); gtk_clist_set_selection_mode (GTK_CLIST(llist), GTK_SELECTION_MULTIPLE); vbbox = gtk_vbutton_box_new(); gtk_box_pack_start(GTK_BOX(hbox), vbbox, FALSE, FALSE, 0); gtk_vbutton_box_set_layout_default(GTK_BUTTONBOX_SPREAD); gtk_widget_show(vbbox); lrarrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_OUT); gtk_widget_show(lrarrow); lb = gtk_button_new(); gtk_container_add(GTK_CONTAINER(lb), lrarrow); gtk_box_pack_start(GTK_BOX(vbbox), lb, FALSE, FALSE, 0); gtk_widget_show(lb); gtk_object_set_user_data(GTK_OBJECT(lb), llist); gtk_signal_connect(GTK_OBJECT(lb), "clicked", GTK_SIGNAL_FUNC(gld_lvl_dw_in), gld); rlist = gtk_clist_new_with_titles(1, title_in); gtk_box_pack_start(GTK_BOX(hbox), rlist, TRUE, TRUE, 0); gtk_widget_show(rlist); gtk_clist_set_selection_mode (GTK_CLIST(rlist), GTK_SELECTION_MULTIPLE); rlarrow = gtk_arrow_new(GTK_ARROW_LEFT, GTK_SHADOW_OUT); gtk_widget_show(rlarrow); rb = gtk_button_new(); gtk_container_add(GTK_CONTAINER(rb), rlarrow); gtk_box_pack_start(GTK_BOX(vbbox), rb, FALSE, FALSE, 0); gtk_widget_show(rb); gtk_object_set_user_data(GTK_OBJECT(rb), rlist); gtk_signal_connect(GTK_OBJECT(rb), "clicked", GTK_SIGNAL_FUNC(gld_lvl_dw_out), gld); gtk_object_set_user_data(GTK_OBJECT(rlist), llist); gtk_object_set_user_data(GTK_OBJECT(llist), rlist); gtk_clist_freeze(GTK_CLIST(llist)); gtk_clist_freeze(GTK_CLIST(rlist)); for(l = g_list_first(GLOGGER(gld)->logd->lvls); l; l = g_list_next(l)) { elt[0] = NC(l)->name; if( g_list_find( gld->lvls, NC(l) ) ) gtk_clist_append(GTK_CLIST(rlist), elt); else gtk_clist_append(GTK_CLIST(llist), elt); } gtk_clist_thaw(GTK_CLIST(llist)); gtk_clist_thaw(GTK_CLIST(rlist)); gtk_object_set_user_data(GTK_OBJECT(lvl_dw), rlist); gtk_signal_connect( GTK_OBJECT(lvl_dw), "delete_event", GTK_SIGNAL_FUNC(gld_lvl_dw_delete), b ); } } else { if( lvl_dw ) gtk_widget_destroy(lvl_dw); lvl_dw = NULL; } gtk_object_set_user_data(GTK_OBJECT(b), lvl_dw);}static gint gld_compare_emission_dates(GtkCList *list, gconstpointer p1, gconstpointer p2){ const GtkCListRow *row1 = (const GtkCListRow *) p1; const GtkCListRow *row2 = (const GtkCListRow *) p2; if( timercmp( &((msg *)row1->data)->edate, &((msg *)row2->data)->edate, ==) ) return 0; if( timercmp( &((msg *)row1->data)->edate, &((msg *)row2->data)->edate, <) ) return -1; return 1;}static void gld_init(Gld *gld){ char *titles[10] = { "UID" ,"LVL", "file", "function", "line number", "message id", "message", "emission date", "reception date", "sender" }; GtkWidget *vbox; GtkWidget *table; GtkWidget *b; GtkWidget *hbbox; GtkWidget *sw; int i; gld->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(gld->window), "Log vizualizer"); gtk_widget_show(gld->window); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(gld->window), vbox); gtk_widget_show(vbox); hbbox = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); gtk_widget_show(hbbox); gld->select_uids = gtk_toggle_button_new_with_label("Select UIDs to display"); gtk_object_set_user_data(GTK_OBJECT(gld->select_uids), NULL); gtk_signal_connect(GTK_OBJECT(gld->select_uids), "toggled", GTK_SIGNAL_FUNC(gld_select_uids), gld); gtk_box_pack_start(GTK_BOX(hbbox), gld->select_uids, FALSE, FALSE, 0); gtk_widget_show(gld->select_uids); gld->select_lvls = gtk_toggle_button_new_with_label("Select LVLs to display"); gtk_object_set_user_data(GTK_OBJECT(gld->select_lvls), NULL); gtk_signal_connect(GTK_OBJECT(gld->select_lvls), "toggled", GTK_SIGNAL_FUNC(gld_select_lvls), gld); gtk_box_pack_start(GTK_BOX(hbbox), gld->select_lvls, FALSE, FALSE, 0); gtk_widget_show(gld->select_lvls); table = gtk_table_new(3, 3, FALSE); gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); gtk_widget_show(table); for(i = 0; i < 10; i++) { b = gtk_check_button_new_with_label( titles[i] ); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b), TRUE); gtk_object_set_user_data(GTK_OBJECT(b), (gpointer)i); gtk_signal_connect(GTK_OBJECT(b), "toggled", GTK_SIGNAL_FUNC(gld_column_display_toggled), gld); gtk_table_attach(GTK_TABLE(table), b, i/3, i/3+1, i%3, i%3+1, GTK_EXPAND|GTK_SHRINK, GTK_EXPAND|GTK_SHRINK, 0, 0); gtk_widget_show(b); } sw = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(sw); gld->mlist = gtk_clist_new_with_titles(10, titles); gtk_container_add(GTK_CONTAINER(sw), gld->mlist); gtk_clist_set_compare_func(GTK_CLIST(gld->mlist), gld_compare_emission_dates); gtk_clist_set_sort_column(GTK_CLIST(gld->mlist), 7); gtk_clist_set_sort_type(GTK_CLIST(gld->mlist), GTK_SORT_ASCENDING); gtk_widget_show(gld->mlist); gtk_object_set_user_data( GTK_OBJECT(gld->window), gld); gtk_signal_connect(GTK_OBJECT(gld->window), "delete_event", GTK_SIGNAL_FUNC(gld_delete), NULL); gtk_signal_connect(GTK_OBJECT(gld), "destroy", GTK_SIGNAL_FUNC(gld_destroy), NULL);}guint gld_get_type(void){ static guint gld_type = 0; if (!gld_type) { GtkTypeInfo gld_info = { "Gld", sizeof (Gld), sizeof (GldClass), (GtkClassInitFunc) gld_class_init, (GtkObjectInitFunc) gld_init, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL }; gld_type = gtk_type_unique (glogger_get_type (), &gld_info); } return gld_type;}void gld_compute_again(Gld *gld){ GList *l; gtk_clist_freeze(GTK_CLIST(gld->mlist)); gtk_clist_clear(GTK_CLIST(gld->mlist)); for(l = g_list_first( GLOGGER(gld)->logd->msgs); l; l = g_list_next(l)) gld_data(GLOGGER(gld), MSG(l->data) ); gtk_clist_thaw(GTK_CLIST(gld->mlist));}GtkObject *gld_new(struct _GLogd *logd){ Gld *gld = GLD( gtk_object_newv (gld_get_type(), 0, NULL) ); GLOGGER(gld)->logd = logd; gtk_signal_connect( GTK_OBJECT(gld), "newuid", GTK_SIGNAL_FUNC(gld_new_uid), NULL ); gtk_signal_connect( GTK_OBJECT(gld), "newlvl", GTK_SIGNAL_FUNC(gld_new_lvl), NULL ); gld->uids = g_list_copy(logd->uids); gld->lvls = g_list_copy(logd->lvls); gld_compute_again(gld); return GTK_OBJECT(gld);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -