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

📄 gconf.c

📁 busybox最新版的源码:学习和应用的好东东,多的不说了,大家看后再说吧
💻 C
📖 第 1 页 / 共 3 页
字号:
/* Hey EMACS -*- linux-c -*- *//* * * Copyright (C) 2002-2003 Romain Lievin <roms@tilp.info> * Released under the terms of the GNU GPL v2.0. * */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include "lkc.h"#include "images.c"#include <glade/glade.h>#include <gtk/gtk.h>#include <glib.h>#include <gdk/gdkkeysyms.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <time.h>#include <stdlib.h>//#define DEBUGenum {	SINGLE_VIEW, SPLIT_VIEW, FULL_VIEW};static gint view_mode = FULL_VIEW;static gboolean show_name = TRUE;static gboolean show_range = TRUE;static gboolean show_value = TRUE;static gboolean show_all = FALSE;static gboolean show_debug = FALSE;static gboolean resizeable = FALSE;static gboolean config_changed = FALSE;static char nohelp_text[] =    N_("Sorry, no help available for this option yet.\n");GtkWidget *main_wnd = NULL;GtkWidget *tree1_w = NULL;	// left  frameGtkWidget *tree2_w = NULL;	// right frameGtkWidget *text_w = NULL;GtkWidget *hpaned = NULL;GtkWidget *vpaned = NULL;GtkWidget *back_btn = NULL;GtkTextTag *tag1, *tag2;GdkColor color;GtkTreeStore *tree1, *tree2, *tree;GtkTreeModel *model1, *model2;static GtkTreeIter *parents[256];static gint indent;static struct menu *current; // current node for SINGLE viewstatic struct menu *browsed; // browsed node for SPLIT viewenum {	COL_OPTION, COL_NAME, COL_NO, COL_MOD, COL_YES, COL_VALUE,	COL_MENU, COL_COLOR, COL_EDIT, COL_PIXBUF,	COL_PIXVIS, COL_BTNVIS, COL_BTNACT, COL_BTNINC, COL_BTNRAD,	COL_NUMBER};static void display_list(void);static void display_tree(struct menu *menu);static void display_tree_part(void);static void update_tree(struct menu *src, GtkTreeIter * dst);static void set_node(GtkTreeIter * node, struct menu *menu, gchar ** row);static gchar **fill_row(struct menu *menu);/* Helping/Debugging Functions */const char *dbg_print_stype(int val){	static char buf[256];	memset(buf, 0, 256);	if (val == S_UNKNOWN)		strcpy(buf, "unknown");	if (val == S_BOOLEAN)		strcpy(buf, "boolean");	if (val == S_TRISTATE)		strcpy(buf, "tristate");	if (val == S_INT)		strcpy(buf, "int");	if (val == S_HEX)		strcpy(buf, "hex");	if (val == S_STRING)		strcpy(buf, "string");	if (val == S_OTHER)		strcpy(buf, "other");#ifdef DEBUG	printf("%s", buf);#endif	return buf;}const char *dbg_print_flags(int val){	static char buf[256];	memset(buf, 0, 256);	if (val & SYMBOL_YES)		strcat(buf, "yes/");	if (val & SYMBOL_MOD)		strcat(buf, "mod/");	if (val & SYMBOL_NO)		strcat(buf, "no/");	if (val & SYMBOL_CONST)		strcat(buf, "const/");	if (val & SYMBOL_CHECK)		strcat(buf, "check/");	if (val & SYMBOL_CHOICE)		strcat(buf, "choice/");	if (val & SYMBOL_CHOICEVAL)		strcat(buf, "choiceval/");	if (val & SYMBOL_PRINTED)		strcat(buf, "printed/");	if (val & SYMBOL_VALID)		strcat(buf, "valid/");	if (val & SYMBOL_OPTIONAL)		strcat(buf, "optional/");	if (val & SYMBOL_WRITE)		strcat(buf, "write/");	if (val & SYMBOL_CHANGED)		strcat(buf, "changed/");	if (val & SYMBOL_NEW)		strcat(buf, "new/");	if (val & SYMBOL_AUTO)		strcat(buf, "auto/");	buf[strlen(buf) - 1] = '\0';#ifdef DEBUG	printf("%s", buf);#endif	return buf;}const char *dbg_print_ptype(int val){	static char buf[256];	memset(buf, 0, 256);	if (val == P_UNKNOWN)		strcpy(buf, "unknown");	if (val == P_PROMPT)		strcpy(buf, "prompt");	if (val == P_COMMENT)		strcpy(buf, "comment");	if (val == P_MENU)		strcpy(buf, "menu");	if (val == P_DEFAULT)		strcpy(buf, "default");	if (val == P_CHOICE)		strcpy(buf, "choice");#ifdef DEBUG	printf("%s", buf);#endif	return buf;}void replace_button_icon(GladeXML * xml, GdkDrawable * window,			 GtkStyle * style, gchar * btn_name, gchar ** xpm){	GdkPixmap *pixmap;	GdkBitmap *mask;	GtkToolButton *button;	GtkWidget *image;	pixmap = gdk_pixmap_create_from_xpm_d(window, &mask,					      &style->bg[GTK_STATE_NORMAL],					      xpm);	button = GTK_TOOL_BUTTON(glade_xml_get_widget(xml, btn_name));	image = gtk_image_new_from_pixmap(pixmap, mask);	gtk_widget_show(image);	gtk_tool_button_set_icon_widget(button, image);}/* Main Window Initialization */void init_main_window(const gchar * glade_file){	GladeXML *xml;	GtkWidget *widget;	GtkTextBuffer *txtbuf;	char title[256];	GtkStyle *style;	xml = glade_xml_new(glade_file, "window1", NULL);	if (!xml)		g_error(_("GUI loading failed !\n"));	glade_xml_signal_autoconnect(xml);	main_wnd = glade_xml_get_widget(xml, "window1");	hpaned = glade_xml_get_widget(xml, "hpaned1");	vpaned = glade_xml_get_widget(xml, "vpaned1");	tree1_w = glade_xml_get_widget(xml, "treeview1");	tree2_w = glade_xml_get_widget(xml, "treeview2");	text_w = glade_xml_get_widget(xml, "textview3");	back_btn = glade_xml_get_widget(xml, "button1");	gtk_widget_set_sensitive(back_btn, FALSE);	widget = glade_xml_get_widget(xml, "show_name1");	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,				       show_name);	widget = glade_xml_get_widget(xml, "show_range1");	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,				       show_range);	widget = glade_xml_get_widget(xml, "show_data1");	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,				       show_value);	style = gtk_widget_get_style(main_wnd);	widget = glade_xml_get_widget(xml, "toolbar1");#if 0	/* Use stock Gtk icons instead */	replace_button_icon(xml, main_wnd->window, style,			    "button1", (gchar **) xpm_back);	replace_button_icon(xml, main_wnd->window, style,			    "button2", (gchar **) xpm_load);	replace_button_icon(xml, main_wnd->window, style,			    "button3", (gchar **) xpm_save);#endif	replace_button_icon(xml, main_wnd->window, style,			    "button4", (gchar **) xpm_single_view);	replace_button_icon(xml, main_wnd->window, style,			    "button5", (gchar **) xpm_split_view);	replace_button_icon(xml, main_wnd->window, style,			    "button6", (gchar **) xpm_tree_view);#if 0	switch (view_mode) {	case SINGLE_VIEW:		widget = glade_xml_get_widget(xml, "button4");		g_signal_emit_by_name(widget, "clicked");		break;	case SPLIT_VIEW:		widget = glade_xml_get_widget(xml, "button5");		g_signal_emit_by_name(widget, "clicked");		break;	case FULL_VIEW:		widget = glade_xml_get_widget(xml, "button6");		g_signal_emit_by_name(widget, "clicked");		break;	}#endif	txtbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));	tag1 = gtk_text_buffer_create_tag(txtbuf, "mytag1",					  "foreground", "red",					  "weight", PANGO_WEIGHT_BOLD,					  NULL);	tag2 = gtk_text_buffer_create_tag(txtbuf, "mytag2",					  /*"style", PANGO_STYLE_OBLIQUE, */					  NULL);	sprintf(title, _("BusyBox %s Configuration"),		getenv("KERNELVERSION"));	gtk_window_set_title(GTK_WINDOW(main_wnd), title);	gtk_widget_show(main_wnd);}void init_tree_model(void){	gint i;	tree = tree2 = gtk_tree_store_new(COL_NUMBER,					  G_TYPE_STRING, G_TYPE_STRING,					  G_TYPE_STRING, G_TYPE_STRING,					  G_TYPE_STRING, G_TYPE_STRING,					  G_TYPE_POINTER, GDK_TYPE_COLOR,					  G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,					  G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,					  G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,					  G_TYPE_BOOLEAN);	model2 = GTK_TREE_MODEL(tree2);	for (parents[0] = NULL, i = 1; i < 256; i++)		parents[i] = (GtkTreeIter *) g_malloc(sizeof(GtkTreeIter));	tree1 = gtk_tree_store_new(COL_NUMBER,				   G_TYPE_STRING, G_TYPE_STRING,				   G_TYPE_STRING, G_TYPE_STRING,				   G_TYPE_STRING, G_TYPE_STRING,				   G_TYPE_POINTER, GDK_TYPE_COLOR,				   G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,				   G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,				   G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,				   G_TYPE_BOOLEAN);	model1 = GTK_TREE_MODEL(tree1);}void init_left_tree(void){	GtkTreeView *view = GTK_TREE_VIEW(tree1_w);	GtkCellRenderer *renderer;	GtkTreeSelection *sel;	GtkTreeViewColumn *column;	gtk_tree_view_set_model(view, model1);	gtk_tree_view_set_headers_visible(view, TRUE);	gtk_tree_view_set_rules_hint(view, FALSE);	column = gtk_tree_view_column_new();	gtk_tree_view_append_column(view, column);	gtk_tree_view_column_set_title(column, _("Options"));	renderer = gtk_cell_renderer_toggle_new();	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),					renderer, FALSE);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer,					    "active", COL_BTNACT,					    "inconsistent", COL_BTNINC,					    "visible", COL_BTNVIS,					    "radio", COL_BTNRAD, NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),					renderer, FALSE);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer,					    "text", COL_OPTION,					    "foreground-gdk",					    COL_COLOR, NULL);	sel = gtk_tree_view_get_selection(view);	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);	gtk_widget_realize(tree1_w);}static void renderer_edited(GtkCellRendererText * cell,			    const gchar * path_string,			    const gchar * new_text, gpointer user_data);static void renderer_toggled(GtkCellRendererToggle * cellrenderertoggle,			     gchar * arg1, gpointer user_data);void init_right_tree(void){	GtkTreeView *view = GTK_TREE_VIEW(tree2_w);	GtkCellRenderer *renderer;	GtkTreeSelection *sel;	GtkTreeViewColumn *column;	gint i;	gtk_tree_view_set_model(view, model2);	gtk_tree_view_set_headers_visible(view, TRUE);	gtk_tree_view_set_rules_hint(view, FALSE);	column = gtk_tree_view_column_new();	gtk_tree_view_append_column(view, column);	gtk_tree_view_column_set_title(column, _("Options"));	renderer = gtk_cell_renderer_pixbuf_new();	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),					renderer, FALSE);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer,					    "pixbuf", COL_PIXBUF,					    "visible", COL_PIXVIS, NULL);	renderer = gtk_cell_renderer_toggle_new();	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),					renderer, FALSE);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer,					    "active", COL_BTNACT,					    "inconsistent", COL_BTNINC,					    "visible", COL_BTNVIS,					    "radio", COL_BTNRAD, NULL);	/*g_signal_connect(G_OBJECT(renderer), "toggled",	   G_CALLBACK(renderer_toggled), NULL); */	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),					renderer, FALSE);	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),					    renderer,					    "text", COL_OPTION,					    "foreground-gdk",					    COL_COLOR, NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(view, -1,						    _("Name"), renderer,						    "text", COL_NAME,						    "foreground-gdk",						    COL_COLOR, NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(view, -1,						    "N", renderer,						    "text", COL_NO,						    "foreground-gdk",						    COL_COLOR, NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(view, -1,						    "M", renderer,						    "text", COL_MOD,						    "foreground-gdk",						    COL_COLOR, NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(view, -1,						    "Y", renderer,						    "text", COL_YES,						    "foreground-gdk",						    COL_COLOR, NULL);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(view, -1,						    _("Value"), renderer,						    "text", COL_VALUE,						    "editable",						    COL_EDIT,						    "foreground-gdk",						    COL_COLOR, NULL);	g_signal_connect(G_OBJECT(renderer), "edited",			 G_CALLBACK(renderer_edited), NULL);	column = gtk_tree_view_get_column(view, COL_NAME);	gtk_tree_view_column_set_visible(column, show_name);	column = gtk_tree_view_get_column(view, COL_NO);	gtk_tree_view_column_set_visible(column, show_range);	column = gtk_tree_view_get_column(view, COL_MOD);	gtk_tree_view_column_set_visible(column, show_range);	column = gtk_tree_view_get_column(view, COL_YES);	gtk_tree_view_column_set_visible(column, show_range);	column = gtk_tree_view_get_column(view, COL_VALUE);	gtk_tree_view_column_set_visible(column, show_value);	if (resizeable) {		for (i = 0; i < COL_VALUE; i++) {			column = gtk_tree_view_get_column(view, i);			gtk_tree_view_column_set_resizable(column, TRUE);		}	}	sel = gtk_tree_view_get_selection(view);	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);}/* Utility Functions */static void text_insert_help(struct menu *menu){	GtkTextBuffer *buffer;	GtkTextIter start, end;	const char *prompt = menu_get_prompt(menu);	gchar *name;	const char *help = _(nohelp_text);	if (!menu->sym)		help = "";	else if (menu->sym->help)		help = _(menu->sym->help);	if (menu->sym && menu->sym->name)		name = g_strdup_printf(_(menu->sym->name));	else		name = g_strdup("");	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));	gtk_text_buffer_get_bounds(buffer, &start, &end);	gtk_text_buffer_delete(buffer, &start, &end);	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15);	gtk_text_buffer_get_end_iter(buffer, &end);	gtk_text_buffer_insert_with_tags(buffer, &end, prompt, -1, tag1,					 NULL);	gtk_text_buffer_insert_at_cursor(buffer, " ", 1);	gtk_text_buffer_get_end_iter(buffer, &end);	gtk_text_buffer_insert_with_tags(buffer, &end, name, -1, tag1,					 NULL);	gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);	gtk_text_buffer_get_end_iter(buffer, &end);	gtk_text_buffer_insert_with_tags(buffer, &end, help, -1, tag2,					 NULL);}static void text_insert_msg(const char *title, const char *message){	GtkTextBuffer *buffer;	GtkTextIter start, end;	const char *msg = message;	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));	gtk_text_buffer_get_bounds(buffer, &start, &end);	gtk_text_buffer_delete(buffer, &start, &end);	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15);	gtk_text_buffer_get_end_iter(buffer, &end);	gtk_text_buffer_insert_with_tags(buffer, &end, title, -1, tag1,					 NULL);	gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);	gtk_text_buffer_get_end_iter(buffer, &end);	gtk_text_buffer_insert_with_tags(buffer, &end, msg, -1, tag2,					 NULL);}/* Main Windows Callbacks */void on_save1_activate(GtkMenuItem * menuitem, gpointer user_data);gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,				 gpointer user_data){	GtkWidget *dialog, *label;	gint result;	if (config_changed == FALSE)		return FALSE;	dialog = gtk_dialog_new_with_buttons(_("Warning !"),					     GTK_WINDOW(main_wnd),					     (GtkDialogFlags)					     (GTK_DIALOG_MODAL |					      GTK_DIALOG_DESTROY_WITH_PARENT),					     GTK_STOCK_OK,					     GTK_RESPONSE_YES,					     GTK_STOCK_NO,					     GTK_RESPONSE_NO,					     GTK_STOCK_CANCEL,					     GTK_RESPONSE_CANCEL, NULL);	gtk_dialog_set_default_response(GTK_DIALOG(dialog),					GTK_RESPONSE_CANCEL);	label = gtk_label_new(_("\nSave configuration ?\n"));	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);	gtk_widget_show(label);

⌨️ 快捷键说明

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