⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log.c

📁 GNOME下的短信息发送中心
💻 C
字号:
/* * Logging Window and handler 	 * * Authors:     Gerhard Khueny <e9625442@student.tuwien.ac.at> * * TODO:         * * Fixes: * * For license terms, see the file COPYING in the project directory. *//* log.c */#include <config.h>#include <glib.h>#include "log.h"static GtkWidget *log_text, *log_window;static gint loglevel;static void log_window_clear(GtkWidget * button);static void log_set_level(GtkWidget * item, gpointer data);static gint log_window_close(GtkWidget * window, gpointer data);GtkWidget *log_window_new(){	GtkWidget *window, *levelopt, *button, *vbox, *frame, *hboxtop,	    *hboxtext, *vscrollbar, *label, *menu, *menuitem;	GtkAdjustment *textadv;	GtkTooltips *tooltips;	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);	levelopt = gtk_option_menu_new();	button = gtk_button_new_with_label("CLEAR TEXT");	vbox = gtk_vbox_new(FALSE, 5);	hboxtop = gtk_hbox_new(FALSE, 2);	hboxtext = gtk_hbox_new(FALSE, 2);	textadv =	    (GtkAdjustment *) gtk_adjustment_new(0.5, 0, 1, 0.1, 0, 1);	log_text = gtk_text_new(NULL, textadv);	frame = gtk_frame_new("Logging");	vscrollbar = gtk_vscrollbar_new(textadv);	label = gtk_label_new("LOG-Level:");	menu = gtk_menu_new();	tooltips = gtk_tooltips_new();	gtk_tooltips_set_tip(tooltips, levelopt,			     "Set Level for displaying messages", NULL);	menuitem = gtk_menu_item_new_with_label("DEBUG");	gtk_widget_show(menuitem);	gtk_menu_append(GTK_MENU(menu), menuitem);	gtk_signal_connect(GTK_OBJECT(menuitem), "activate",			   GTK_SIGNAL_FUNC(log_set_level), (gpointer) 0);	menuitem = gtk_menu_item_new_with_label("INFO");	gtk_widget_show(menuitem);	gtk_menu_append(GTK_MENU(menu), menuitem);	gtk_signal_connect(GTK_OBJECT(menuitem), "activate",			   GTK_SIGNAL_FUNC(log_set_level), (gpointer) 1);	menuitem = gtk_menu_item_new_with_label("MESSAGE");	gtk_widget_show(menuitem);	gtk_menu_append(GTK_MENU(menu), menuitem);	gtk_signal_connect(GTK_OBJECT(menuitem), "activate",			   GTK_SIGNAL_FUNC(log_set_level), (gpointer) 2);	menuitem = gtk_menu_item_new_with_label("WARNING");	gtk_widget_show(menuitem);	gtk_menu_append(GTK_MENU(menu), menuitem);	gtk_signal_connect(GTK_OBJECT(menuitem), "activate",			   GTK_SIGNAL_FUNC(log_set_level), (gpointer) 3);	gtk_option_menu_set_menu(GTK_OPTION_MENU(levelopt), menu);	gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);	gtk_window_set_title(GTK_WINDOW(window), "Logging");	gtk_container_add(GTK_CONTAINER(window), frame);	gtk_container_add(GTK_CONTAINER(frame), vbox);	gtk_box_pack_start(GTK_BOX(hboxtop), label, FALSE, FALSE, 5);	gtk_box_pack_start(GTK_BOX(hboxtop), levelopt, FALSE, FALSE, 10);	gtk_box_pack_start(GTK_BOX(vbox), hboxtop, FALSE, FALSE, 0);	gtk_container_add(GTK_CONTAINER(hboxtext), log_text);	gtk_box_pack_end(GTK_BOX(hboxtext), vscrollbar, FALSE, FALSE, 0);	gtk_container_add(GTK_CONTAINER(vbox), hboxtext);	gtk_box_pack_end(GTK_BOX(vbox), button, FALSE, FALSE, 0);	/* Signals */	gtk_signal_connect(GTK_OBJECT(button), "clicked",			   GTK_SIGNAL_FUNC(log_window_clear), NULL);	gtk_signal_connect(GTK_OBJECT(window), "delete_event",			   GTK_SIGNAL_FUNC(log_window_close), NULL);	log_window=window;	return window;}void log_on(){	gtk_widget_show_all(log_window);}static gbooleanevent_loop_print_text_cb(gpointer text) {		gtk_text_insert(GTK_TEXT(log_text), 				NULL, NULL, NULL, (gchar *) text, -1);		g_free(text); 		return FALSE;}static void log_window_clear(GtkWidget * button){	gtk_text_freeze(GTK_TEXT(log_text));	gtk_text_backward_delete(GTK_TEXT(log_text),				 gtk_text_get_length(GTK_TEXT(log_text)));	gtk_text_thaw(GTK_TEXT(log_text));}static void log_set_level(GtkWidget * item, gpointer data){	loglevel = (gint) data;}static gint log_window_close(GtkWidget * window, gpointer data){	gtk_widget_hide_all(window);	return (TRUE);}voidgsms_log_func(const gchar * log_domain, GLogLevelFlags log_level,	      const gchar * message, gpointer user_data){	gchar *logtext = NULL;	gint level = 0;	switch ((int) log_level) {	case G_LOG_LEVEL_DEBUG:		logtext =		    g_strdup_printf("DEBUG %s: %s\n", log_domain, message);		level = 0;		break;	case G_LOG_LEVEL_INFO:		logtext =		    g_strdup_printf("INFO %s: %s\n", log_domain, message);		level = 1;		break;	case G_LOG_LEVEL_MESSAGE:		logtext =		    g_strdup_printf("MESSAGE %s: %s\n", log_domain,				    message);		level = 2;		break;	case G_LOG_LEVEL_WARNING:		logtext =		    g_strdup_printf("WARNING %s: %s\n", log_domain,				    message);		level = 3;		break;	}	/* we have to do it this way because this functions get called	   through callbacks from g_log and that is called from threads	*/	if (level >= loglevel)		g_idle_add(event_loop_print_text_cb, logtext);	else		g_free(logtext);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -