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

📄 utilops.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
}static void file_util_rename_multiple_preview_adj_cb(GtkWidget *spin, gpointer data){	RenameDataMult *rd = data;	file_util_rename_multiple_preview_update(rd);}static void file_util_rename_mulitple_auto_toggle(GtkWidget *widget, gpointer data){	RenameDataMult *rd = data;	GtkTreeViewColumn *column;	rd->rename_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rd->button_auto));	if (rd->rename_auto)		{		if (GTK_WIDGET_VISIBLE(rd->rename_box)) gtk_widget_hide(rd->rename_box);		if (!GTK_WIDGET_VISIBLE(rd->auto_box)) gtk_widget_show(rd->auto_box);		file_util_rename_multiple_preview_update(rd);		}	else		{		if (GTK_WIDGET_VISIBLE(rd->auto_box)) gtk_widget_hide(rd->auto_box);		if (!GTK_WIDGET_VISIBLE(rd->rename_box)) gtk_widget_show(rd->rename_box);		}	column = gtk_tree_view_get_column(GTK_TREE_VIEW(rd->listview), RENAME_COLUMN_PREVIEW - 1);	gtk_tree_view_column_set_visible(column, rd->rename_auto);}static GtkWidget *furm_simple_vlabel(GtkWidget *box, const gchar *text, gint expand){	GtkWidget *vbox;	GtkWidget *label;	vbox = gtk_vbox_new(FALSE, 0);	gtk_box_pack_start(GTK_BOX(box), vbox, expand, expand, 0);	gtk_widget_show(vbox);	label = gtk_label_new(text);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);	gtk_widget_show(label);	return vbox;}static GtkTreeViewColumn *file_util_rename_multiple_add_column(RenameDataMult *rd, const gchar *text, gint n){	GtkTreeViewColumn *column;	GtkCellRenderer *renderer;	column = gtk_tree_view_column_new();        gtk_tree_view_column_set_title(column, text);        gtk_tree_view_column_set_min_width(column, 4);        gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY);        renderer = gtk_cell_renderer_text_new();        gtk_tree_view_column_pack_start(column, renderer, TRUE);        gtk_tree_view_column_add_attribute(column, renderer, "text", n);        gtk_tree_view_append_column(GTK_TREE_VIEW(rd->listview), column);	return column;}static void file_util_rename_multiple_destroy_cb(GtkWidget *widget, gpointer data){	RenameDataMult *rd = data;	if (rd->update_idle_id != -1) g_source_remove(rd->update_idle_id);	g_free(rd);}static void file_util_rename_multiple_do(GList *source_list, GtkWidget *parent){	RenameDataMult *rd;	GtkWidget *pane;	GtkWidget *scrolled;	GtkListStore *store;	GtkTreeSelection *selection;	GtkTreeViewColumn *column;	GtkWidget *hbox;	GtkWidget *vbox;	GtkWidget *box2;	GtkWidget *table;	GtkWidget *combo;	GList *work;	const gchar *name;	rd = g_new0(RenameDataMult, 1);	rd->fd = file_util_file_dlg(_("Rename - GQview"),				    "GQview", "dlg_rename", parent,				    file_util_rename_multiple_close_cb, rd);	generic_dialog_add_message(GENERIC_DIALOG(rd->fd), NULL, _("Rename multiple files"), NULL);	file_dialog_add_button(rd->fd, GTK_STOCK_OK, _("_Rename"), file_util_rename_multiple_cb, TRUE);	rd->fd->source_path = g_strdup(source_list->data);	rd->fd->dest_path = NULL;	rd->update_idle_id = -1;	vbox = GENERIC_DIALOG(rd->fd)->vbox;	pane = gtk_hpaned_new();	gtk_box_pack_start(GTK_BOX(vbox), pane, TRUE, TRUE, 0);	gtk_widget_show(pane);		scrolled = gtk_scrolled_window_new(NULL, NULL);	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled),				       GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);	gtk_paned_pack1(GTK_PANED(pane), scrolled, TRUE, TRUE);	gtk_widget_show(scrolled);	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);	rd->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));	g_object_unref(store);	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(rd->listview), TRUE);	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(rd->listview), FALSE);	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(rd->listview));	gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_SINGLE);	gtk_tree_selection_set_select_function(selection, file_util_rename_multiple_select_cb, rd, NULL);	file_util_rename_multiple_add_column(rd, _("Original Name"), RENAME_COLUMN_NAME);	column = file_util_rename_multiple_add_column(rd, _("Preview"), RENAME_COLUMN_PREVIEW);	gtk_tree_view_column_set_visible(column, FALSE);		gtk_tree_view_set_reorderable(GTK_TREE_VIEW(rd->listview), TRUE);	g_signal_connect(G_OBJECT(store), "row_changed",			 G_CALLBACK(file_util_rename_multiple_preview_order_cb), rd);	gtk_widget_set_size_request(rd->listview, 250, 150);	gtk_container_add(GTK_CONTAINER(scrolled), rd->listview);	gtk_widget_show(rd->listview);	work = source_list;	while (work)		{		gchar *path = work->data;		GtkTreeIter iter;		gtk_list_store_append(store, &iter);		gtk_list_store_set(store, &iter, RENAME_COLUMN_PATH, path, RENAME_COLUMN_NAME, filename_from_path(path), -1);		work = work->next;		}	path_list_free(source_list);	rd->imd = image_new(TRUE);	gtk_widget_set_size_request(rd->imd->widget, DIALOG_DEF_IMAGE_DIM_X, DIALOG_DEF_IMAGE_DIM_Y);	gtk_paned_pack2(GTK_PANED(pane), rd->imd->widget, FALSE, TRUE);	gtk_widget_show(rd->imd->widget);	hbox = gtk_hbox_new(FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);	gtk_widget_show(hbox);	rd->button_auto = gtk_check_button_new_with_label(_("Auto rename"));	g_signal_connect(G_OBJECT(rd->button_auto), "clicked",			 G_CALLBACK(file_util_rename_mulitple_auto_toggle), rd);	gtk_box_pack_end(GTK_BOX(hbox), rd->button_auto, FALSE, FALSE, 0);	gtk_widget_show(rd->button_auto);	rd->rename_box = pref_box_new(vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0);	table = pref_table_new(rd->rename_box, 2, 2, FALSE, FALSE);	pref_table_label(table, 0, 0, _("Original name:"), 1.0);	rd->rename_label = pref_table_label(table, 1, 0, filename_from_path(rd->fd->source_path), 0.0);	pref_table_label(table, 0, 1, _("New name:"), 1.0);	rd->rename_entry = gtk_entry_new();	gtk_table_attach(GTK_TABLE(table), rd->rename_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, FALSE, 0, 0);	generic_dialog_attach_default(GENERIC_DIALOG(rd->fd), rd->rename_entry);	gtk_widget_grab_focus(rd->rename_entry);	name = filename_from_path(rd->fd->source_path);	gtk_entry_set_text(GTK_ENTRY(rd->rename_entry), name);	gtk_editable_select_region(GTK_EDITABLE(rd->rename_entry), 0, filename_base_length(name));	gtk_widget_show(rd->rename_entry);	rd->auto_box = gtk_vbox_new(FALSE, PREF_PAD_GAP);	gtk_box_pack_start(GTK_BOX(vbox), rd->auto_box, FALSE, FALSE, 0);	/* do not show it here */	hbox = pref_box_new(rd->auto_box, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);	box2 = furm_simple_vlabel(hbox, _("Begin text"), TRUE);	combo = history_combo_new(&rd->auto_entry_front, "", "numerical_rename_prefix", -1);	g_signal_connect(G_OBJECT(rd->auto_entry_front), "changed",			 G_CALLBACK(file_util_rename_multiple_preview_entry_cb), rd);	gtk_box_pack_start(GTK_BOX(box2), combo, TRUE, TRUE, 0);	gtk_widget_show(combo);		box2 = furm_simple_vlabel(hbox, _("Start #"), FALSE);	rd->auto_spin_start = pref_spin_new(box2, NULL, NULL,					    0.0, 1000000.0, 1.0, 0, 0.0,					    G_CALLBACK(file_util_rename_multiple_preview_adj_cb), rd);	box2 = furm_simple_vlabel(hbox, _("End text"), TRUE);	combo = history_combo_new(&rd->auto_entry_end, "", "numerical_rename_suffix", -1);	g_signal_connect(G_OBJECT(rd->auto_entry_end), "changed",			 G_CALLBACK(file_util_rename_multiple_preview_entry_cb), rd);	gtk_box_pack_start(GTK_BOX(box2), combo, TRUE, TRUE, 0);	gtk_widget_show(combo);	rd->auto_spin_pad = pref_spin_new(rd->auto_box, _("Padding:"), NULL,					  1.0, 8.0, 1.0, 0, 1.0,					  G_CALLBACK(file_util_rename_multiple_preview_adj_cb), rd);	image_change_path(rd->imd, rd->fd->source_path, 0.0);	g_signal_connect(G_OBJECT(GENERIC_DIALOG(rd->fd)->dialog), "destroy",			 G_CALLBACK(file_util_rename_multiple_destroy_cb), rd);	gtk_widget_show(GENERIC_DIALOG(rd->fd)->dialog);}/* * rename single file */static void file_util_rename_single(FileDataSingle *fds);static void file_util_rename_single_ok_cb(GenericDialog *gd, gpointer data){	FileDataSingle *fds = data;	fds->confirmed = TRUE;	file_util_rename_single(fds);}static void file_util_rename_single_cancel_cb(GenericDialog *gd, gpointer data){	FileDataSingle *fds = data;	file_data_single_free(fds);}static void file_util_rename_single(FileDataSingle *fds){	if (isfile(fds->dest) && !fds->confirmed)		{		GenericDialog *gd;		gd = file_util_gen_dlg(_("Overwrite file"), "GQview", "dlg_confirm",					NULL, TRUE,					file_util_rename_single_cancel_cb, fds);		generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION,					   _("Overwrite file?"),					   _("Replace existing file by renaming new file."));		pref_spacer(gd->vbox, 0);		generic_dialog_add_button(gd, GTK_STOCK_OK, _("_Overwrite"), file_util_rename_single_ok_cb, TRUE);		generic_dialog_add_image(gd, fds->dest, _("Existing file"), fds->source, _("New file"), TRUE);		gtk_widget_show(gd->dialog);		return;		}	else		{		if (!rename_file(fds->source, fds->dest))			{			gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), filename_from_path(fds->source), filename_from_path(fds->dest));			file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL);			g_free(text);			}		else			{			file_maint_renamed(fds->source, fds->dest);			}		}	file_data_single_free(fds);}static void file_util_rename_single_cb(FileDialog *fd, gpointer data){	const gchar *name;	gchar *path;	name = gtk_entry_get_text(GTK_ENTRY(fd->entry));	path = concat_dir_and_file(fd->dest_path, name);	if (strlen(name) == 0 || strcmp(fd->source_path, path) == 0)		{		g_free(path);		return;		}	file_util_rename_single(file_data_single_new(fd->source_path, path, fd->type));	g_free(path);	file_dialog_close(fd);}static void file_util_rename_single_close_cb(FileDialog *fd, gpointer data){	file_dialog_close(fd);}static void file_util_rename_single_do(const gchar *source_path, GtkWidget *parent){	FileDialog *fd;	GtkWidget *table;	const gchar *name;	fd = file_util_file_dlg(_("Rename - GQview"), "GQview", "dlg_rename", parent,			     file_util_rename_single_close_cb, NULL);	generic_dialog_add_message(GENERIC_DIALOG(fd), NULL, _("Rename file"), NULL);	generic_dialog_add_image(GENERIC_DIALOG(fd), source_path, NULL, NULL, NULL, FALSE);	file_dialog_add_button(fd, GTK_STOCK_OK, _("_Rename"), file_util_rename_single_cb, TRUE);	fd->source_path = g_strdup(source_path);	fd->dest_path = remove_level_from_path(source_path);	table = pref_table_new(GENERIC_DIALOG(fd)->vbox, 2, 2, FALSE, FALSE);	pref_table_label(table, 0, 0, _("Original name:"), 1.0);	pref_table_label(table, 1, 0, filename_from_path(fd->source_path), 0.0);	pref_table_label(table, 0, 1, _("New name:"), 1.0);	fd->entry = gtk_entry_new();	gtk_table_attach(GTK_TABLE(table), fd->entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, FALSE, 0, 0);	generic_dialog_attach_default(GENERIC_DIALOG(fd), fd->entry);	gtk_widget_grab_focus(fd->entry);	name = filename_from_path(fd->source_path);	gtk_entry_set_text(GTK_ENTRY(fd->entry), name);	gtk_editable_select_region(GTK_EDITABLE(fd->entry), 0, filename_base_length(name));	gtk_widget_show(fd->entry);	gtk_widget_show(GENERIC_DIALOG(fd)->dialog);}void file_util_rename(const gchar *source_path, GList *source_list, GtkWidget *parent){	if (!source_path && !source_list) return;	if (source_path)		{		file_util_rename_single_do(source_path, parent);		}	else if (!source_list->next)		{		file_util_rename_single_do(source_list->data, parent);		path_list_free(source_list);		}	else		{		file_util_rename_multiple_do(source_list, parent);		}}/* *-------------------------------------------------------------------------- * Create directory routines *-------------------------------------------------------------------------- */static void file_util_create_dir_do(const gchar *base, const gchar *name){	gchar *path;	path = concat_dir_and_file(base, name);	if (isdir(path))		{		gchar *text = g_strdup_printf(_("The folder:\n%s\nalready exists."), name);		file_util_warning_dialog(_("Folder exists"), text, GTK_STOCK_DIALOG_INFO, NULL);		g_free(text);		}	else if (isname(path))		{		gchar *text = g_strdup_printf(_("The path:\n%s\nalready exists as a file."), name);		file_util_warning_dialog(_("Could not create folder"), text, GTK_STOCK_DIALOG_INFO, NULL);		g_free(text);		}	else		{		if (!mkdir_utf8(path, 0755))			{			gchar *text = g_strdup_printf(_("Unable to create folder:\n%s"), name);			file_util_warning_dialog(_("Error creating folder"), text, GTK_STOCK_DIALOG_ERROR, NULL);			g_free(text);			}		}	g_free(path);}static void file_util_create_dir_cb(FileDialog *fd, gpointer data){	const gchar *name;	name = gtk_entry_get_text(GTK_ENTRY(fd->entry));	if (strlen(name) == 0) return;	if (name[0] == '/')		{		gchar *buf;		buf  = remove_level_from_path(name);		file_util_create_dir_do(buf, filename_from_path(name));		g_free(buf);		}	else		{		file_util_create_dir_do(fd->dest_path, name);		}	file_dialog_close(fd);}static void file_util_create_dir_close_cb(FileDialog *fd, gpointer data){	file_dialog_close(fd);}void file_util_create_dir(const gchar *path, GtkWidget *parent){	FileDialog *fd;	gchar *text;	if (!isdir(path)) return;	fd = file_util_file_dlg(_("New folder - GQview"), "GQview", "dlg_newdir", parent,			     file_util_create_dir_close_cb, NULL);	text = g_strdup_printf(_("Create folder in:\n%s\nnamed:"), path);	generic_dialog_add_message(GENERIC_DIALOG(fd), NULL, NULL, text);	g_free(text);	file_dialog_add_button(fd, GTK_STOCK_OK, NULL, file_util_create_dir_cb, TRUE);	fd->dest_path = g_strdup(path);	fd->entry = gtk_entry_new();	gtk_box_pack_start(GTK_BOX(GENERIC_DIALOG(fd)->vbox), fd->entry, FALSE, FALSE, 0);	generic_dialog_attach_default(GENERIC_DIALOG(fd), fd->entry);	gtk_widget_grab_focus(fd->entry);	gtk_widget_show(fd->entry);	gtk_widget_show(GENERIC_DIALOG(fd)->dialog);}gint file_util_rename_dir(const gchar *old_path, const gchar *new_path, GtkWidget *parent){	const gchar *old_name;	const gchar *new_name;	if (!old_path || !new_path || !isdir(old_path)) return FALSE;	old_name = filename_from_path(old_path);	new_name = filename_from_path(new_path);	if (isdir(new_path))		{		gchar *text = g_strdup_printf(_("The folder:\n%s\nalready exists."), new_name);		file_util_warning_dialog(_("Folder exists"), text, GTK_STOCK_DIALOG_INFO, parent);		g_free(text);		return FALSE;		}	if (isname(new_path))		{		gchar *text = g_strdup_printf(_("The path:\n%s\nalready exists as a file."), new_name);		file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_INFO,parent);		g_free(text);		return FALSE;		}	if (!rename_file(old_path, new_path))		{		gchar *text = g_strdup_printf(_("Failed to rename %s to %s."), old_name, new_name);		file_util_warning_dialog("Rename failed", text, GTK_STOCK_DIALOG_ERROR, parent);		g_free(text);		return FALSE;		}	return TRUE;}

⌨️ 快捷键说明

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