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

📄 preferences.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 3 页
字号:
		thumb_max_width_c = thumb_max_width;		thumb_max_height_c = thumb_max_height;		}}static void add_thumb_size_menu(GtkWidget *table, gint column, gint row, gchar *text){	GtkWidget *combo;	gint current;	gint last_w, last_h;	gint i;	gint c;	thumb_max_width_c = thumb_max_width;	thumb_max_height_c = thumb_max_height;	pref_table_label(table, column, row, text, 0.0);	combo = gtk_combo_box_new_text();	last_w = last_h = 0;	current = -1;	i = 0;	c = TRUE;	while (c)		{		gint w, h;		w = thumb_size_list[i].w;		h = thumb_size_list[i].h;		if ( w > 0 && h > 0)			{			gchar *buf;			buf = g_strdup_printf("%d x %d", w, h);			gtk_combo_box_append_text(GTK_COMBO_BOX(combo), buf);			g_free(buf);			if (w == thumb_max_width && h == thumb_max_height) current = i;			last_w = w;			last_h = h;			}		else			{			c = FALSE;			}		i++;		}	if (current == -1)		{		gchar *buf;		buf = g_strdup_printf("%s %d x %d", _("Custom"), thumb_max_width, thumb_max_height);		gtk_combo_box_append_text(GTK_COMBO_BOX(combo), buf);		g_free(buf);		current = i - 1;		}	gtk_combo_box_set_active(GTK_COMBO_BOX(combo), current);	g_signal_connect(G_OBJECT(combo), "changed",			 G_CALLBACK(thumb_size_menu_cb), NULL);	gtk_table_attach(GTK_TABLE(table), combo, column + 1, column + 2, row, row + 1,			 GTK_EXPAND | GTK_FILL, FALSE, 0, 0);	gtk_widget_show(combo);}static void filter_store_populate(void){	GList *work;	if (!filter_store) return;	gtk_list_store_clear(filter_store);	work = filter_get_list();	while (work)		{		FilterEntry *fe;		GtkTreeIter iter;		fe = work->data;		work = work->next;		gtk_list_store_append(filter_store, &iter);		gtk_list_store_set(filter_store, &iter, 0, fe, -1);		}}static void filter_store_ext_edit_cb(GtkCellRendererText *cell, gchar *path_str,				     gchar *new_text, gpointer data){	GtkWidget *model = data;	FilterEntry *fe = data;	GtkTreePath *tpath;	GtkTreeIter iter;	if (!new_text || strlen(new_text) < 1) return;	tpath = gtk_tree_path_new_from_string(path_str);	gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);	g_free(fe->extensions);	fe->extensions = g_strdup(new_text);	gtk_tree_path_free(tpath);	filter_rebuild();}static void filter_store_desc_edit_cb(GtkCellRendererText *cell, gchar *path_str,				      gchar *new_text, gpointer data){	GtkWidget *model = data;	FilterEntry *fe;	GtkTreePath *tpath;	GtkTreeIter iter;	if (!new_text || strlen(new_text) < 1) return;	tpath = gtk_tree_path_new_from_string(path_str);	gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);	g_free(fe->description);	fe->description = g_strdup(new_text);	gtk_tree_path_free(tpath);}static void filter_store_enable_cb(GtkCellRendererToggle *renderer,				   gchar *path_str, gpointer data){	GtkWidget *model = data;	FilterEntry *fe;	GtkTreePath *tpath;	GtkTreeIter iter;	tpath = gtk_tree_path_new_from_string(path_str);	gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);	fe->enabled = !fe->enabled;	gtk_tree_path_free(tpath);	filter_rebuild();}static void filter_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,			    GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data){	FilterEntry *fe;	gtk_tree_model_get(tree_model, iter, 0, &fe, -1);	switch(GPOINTER_TO_INT(data))		{		case FE_ENABLE:			g_object_set(GTK_CELL_RENDERER(cell),				     "active", fe->enabled, NULL);			break;		case FE_EXTENSION:			g_object_set(GTK_CELL_RENDERER(cell),				     "text", fe->extensions, NULL);			break;		case FE_DESCRIPTION:			g_object_set(GTK_CELL_RENDERER(cell),				     "text", fe->description, NULL);			break;		}}static void filter_add_cb(GtkWidget *widget, gpointer data){	filter_add_unique("description", ".new", TRUE);	filter_store_populate();	/* FIXME: implement the scroll to/select row stuff for tree view */}static void filter_remove_cb(GtkWidget *widget, gpointer data){	GtkWidget *filter_view = data;	GtkTreeSelection *selection;	GtkTreeIter iter;	FilterEntry *fe;	if (!filter_store) return;       	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_view));	if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) return;	gtk_tree_model_get(GTK_TREE_MODEL(filter_store), &iter, 0, &fe, -1);	if (!fe) return;	filter_remove_entry(fe);	filter_rebuild();	filter_store_populate();}static void filter_default_ok_cb(GenericDialog *gd, gpointer data){	filter_reset();	filter_add_defaults();	filter_rebuild();	filter_store_populate();}static void dummy_cancel_cb(GenericDialog *gd, gpointer data){	/* no op, only so cancel button appears */}static void filter_default_cb(GtkWidget *widget, gpointer data){	GenericDialog *gd;	gd = generic_dialog_new(_("Reset filters"),				"GQview", "reset_filter", widget, TRUE,				dummy_cancel_cb, NULL);	generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION, _("Reset filters"),				   _("This will reset the file filters to the defaults.\nContinue?"));	generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, filter_default_ok_cb, TRUE);	gtk_widget_show(gd->dialog);}static void filter_disable_cb(GtkWidget* widget, gpointer data){	GtkWidget *frame = data;	gtk_widget_set_sensitive(frame,				 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));}static void editor_default_ok_cb(GenericDialog *gd, gpointer data){	gint i;	editor_reset_defaults();	if (!configwindow) return;	for (i = 0; i < GQVIEW_EDITOR_SLOTS; i++)		{		gtk_entry_set_text(GTK_ENTRY(editor_name_entry[i]),				   (editor_name[i]) ? editor_name[i] : "");		gtk_entry_set_text(GTK_ENTRY(editor_command_entry[i]),				   (editor_command[i]) ? editor_command[i] : "");		}}static void editor_default_cb(GtkWidget *widget, gpointer data){	GenericDialog *gd;	gd = generic_dialog_new(_("Reset editors"),				"GQview", "reset_filter", widget, TRUE,				dummy_cancel_cb, NULL);	generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION, _("Reset editors"),				   _("This will reset the edit commands to the defaults.\nContinue?"));	generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, editor_default_ok_cb, TRUE);	gtk_widget_show(gd->dialog);}static void editor_help_cb(GtkWidget *widget, gpointer data){	help_window_show("editors");}static void safe_delete_view_cb(GtkWidget* widget, gpointer data){	layout_set_path(NULL, gtk_entry_get_text(GTK_ENTRY(safe_delete_path_entry)));}static void safe_delete_clear_ok_cb(GenericDialog *gd, gpointer data){	file_util_trash_clear();}static void safe_delete_clear_cb(GtkWidget* widget, gpointer data){	GenericDialog *gd;	GtkWidget *entry;	gd = generic_dialog_new(_("Clear trash"),				"GQview", "clear_trash", widget, TRUE,				dummy_cancel_cb, NULL);	generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION, _("Clear trash"),				    _("This will remove the trash contents."));	generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, safe_delete_clear_ok_cb, TRUE);	entry = gtk_entry_new();	GTK_WIDGET_UNSET_FLAGS(entry, GTK_CAN_FOCUS);	gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);	if (safe_delete_path) gtk_entry_set_text(GTK_ENTRY(entry), safe_delete_path);	gtk_box_pack_start(GTK_BOX(gd->vbox), entry, FALSE, FALSE, 0);	gtk_widget_show(entry);	gtk_widget_show(gd->dialog);}static void config_window_create(void){	GtkWidget *win_vbox;	GtkWidget *hbox;	GtkWidget *notebook;	GtkWidget *frame;	GtkWidget *label;	GtkWidget *vbox;	GtkWidget *group;	GtkWidget *subgroup;	GtkWidget *button;	GtkWidget *tabcomp;	GtkWidget *ct_button;	GtkWidget *table;	GtkWidget *spin;	GtkWidget *scrolled;	GtkWidget *viewport;	GtkWidget *filter_view;	GtkCellRenderer *renderer;	GtkTreeSelection *selection;	GtkTreeViewColumn *column;	gint i;	configwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);	gtk_window_set_type_hint(GTK_WINDOW(configwindow), GDK_WINDOW_TYPE_HINT_DIALOG);	g_signal_connect(G_OBJECT (configwindow), "delete_event",			 G_CALLBACK(config_window_delete), NULL);	gtk_window_set_resizable(GTK_WINDOW(configwindow), FALSE);	gtk_window_set_title(GTK_WINDOW(configwindow), _("GQview Preferences"));	gtk_window_set_wmclass(GTK_WINDOW(configwindow), "config", "GQview");	gtk_container_set_border_width(GTK_CONTAINER(configwindow), PREF_PAD_BORDER);	window_set_icon(configwindow, (const gchar **)config_xpm, NULL);	win_vbox = gtk_vbox_new(FALSE, PREF_PAD_SPACE);	gtk_container_add(GTK_CONTAINER(configwindow), win_vbox);	gtk_widget_show(win_vbox);	hbox = gtk_hbutton_box_new();	gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);	gtk_box_set_spacing(GTK_BOX(hbox), PREF_PAD_BUTTON_GAP);	gtk_box_pack_end(GTK_BOX(win_vbox), hbox, FALSE, FALSE, 0);	gtk_widget_show(hbox);	button = pref_button_new(NULL, GTK_STOCK_OK, NULL, FALSE,				 G_CALLBACK(config_window_ok_cb), NULL);	gtk_container_add(GTK_CONTAINER(hbox), button);	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);	gtk_widget_grab_default(button);	gtk_widget_show(button);	ct_button = button;	button = pref_button_new(NULL, GTK_STOCK_APPLY, NULL, FALSE,				 G_CALLBACK(config_window_apply_cb), NULL);	gtk_container_add(GTK_CONTAINER(hbox), button);	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);	gtk_widget_show(button);	button = pref_button_new(NULL, GTK_STOCK_CANCEL, NULL, FALSE,				 G_CALLBACK(config_window_close_cb), NULL);	gtk_container_add(GTK_CONTAINER(hbox), button);	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);	gtk_widget_show(button);	if (!generic_dialog_get_alternative_button_order(configwindow))		{		gtk_box_reorder_child(GTK_BOX(hbox), ct_button, -1);		}	notebook = gtk_notebook_new();	gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP);	gtk_box_pack_start(GTK_BOX(win_vbox), notebook, TRUE, TRUE, 0);	/* general options tab */	vbox = gtk_vbox_new(FALSE, 0);	gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);	gtk_widget_show(vbox);	label = gtk_label_new(_("General"));	gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, label);	group = pref_group_new(vbox, FALSE, _("Startup"), GTK_ORIENTATION_VERTICAL);	button = pref_checkbox_new_int(group, _("Change to folder:"),				       startup_path_enable, &startup_path_enable_c);	hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);	pref_checkbox_link_sensitivity(button, hbox);	tabcomp = tab_completion_new(&startup_path_entry, startup_path, NULL, NULL);	tab_completion_add_select_button(startup_path_entry, NULL, TRUE);	gtk_box_pack_start(GTK_BOX(hbox), tabcomp, TRUE, TRUE, 0);	gtk_widget_show(tabcomp);	button = pref_button_new(hbox, NULL, _("Use current"), FALSE,				 G_CALLBACK(startup_path_set_current), NULL);	group = pref_group_new(vbox, FALSE, _("Thumbnails"), GTK_ORIENTATION_VERTICAL);	table = pref_table_new(group, 2, 2, FALSE, FALSE);	add_thumb_size_menu(table, 0, 0, _("Size:"));	add_quality_menu(table, 0, 1, _("Quality:"), thumbnail_quality, &thumbnail_quality_c);	ct_button = pref_checkbox_new_int(group, _("Cache thumbnails"),					  enable_thumb_caching, &enable_thumb_caching_c);	subgroup = pref_box_new(group, FALSE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);	pref_checkbox_link_sensitivity(ct_button, subgroup);	button = pref_checkbox_new_int(subgroup, _("Use shared thumbnail cache"),				       thumbnail_spec_standard, &thumbnail_spec_standard_c);	subgroup = pref_box_new(subgroup, FALSE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);	pref_checkbox_link_sensitivity_swap(button, subgroup);	pref_checkbox_new_int(subgroup, _("Cache thumbnails into .thumbnails"),			      enable_thumb_dirs, &enable_thumb_dirs_c);#if 0	pref_checkbox_new_int(subgroup, _("Use xvpics thumbnails when found (read only)"),			      use_xvpics_thumbnails, &use_xvpics_thumbnails_c);#endif	pref_checkbox_new_int(group, _("Faster jpeg thumbnailing (may reduce quality)"),			      thumbnail_fast, &thumbnail_fast_c);	group = pref_group_new(vbox, FALSE, _("Slide show"), GTK_ORIENTATION_VERTICAL);	slideshow_delay_c = slideshow_delay;	spin = pref_spin_new(group, _("Delay between image change:"), _("seconds"),			     SLIDESHOW_MIN_SECONDS, SLIDESHOW_MAX_SECONDS, 1.0, 1,			     slideshow_delay ? (double)slideshow_delay / SLIDESHOW_SUBSECOND_PRECISION : 10.0,			     G_CALLBACK(slideshow_delay_cb), NULL);	gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(spin), GTK_UPDATE_ALWAYS);	pref_checkbox_new_int(group, _("Random"), slideshow_random, &slideshow_random_c);	pref_checkbox_new_int(group, _("Repeat"), slideshow_repeat, &slideshow_repeat_c);	/* image tab */	vbox = gtk_vbox_new(FALSE, 0);	gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);	gtk_widget_show(vbox);	label = gtk_label_new(_("Image"));	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);	group = pref_group_new(vbox, FALSE, _("Zoom"), GTK_ORIENTATION_VERTICAL);#if 0	add_dither_menu(dither_quality, &dither_quality_c, _("Dithering method:"), group);#endif

⌨️ 快捷键说明

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