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

📄 utilops.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
	generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION,				   _("Overwrite file?"),				   _("Replace existing file with new file."));	pref_spacer(gd->vbox, 0);	generic_dialog_add_button(gd, GTK_STOCK_YES, _("_Overwrite"), file_util_move_multiple_ok_cb, TRUE);	fdm->yes_all_button = generic_dialog_add_button(gd, NULL, _("Overwrite _all"),							file_util_move_multiple_all_cb, FALSE);	generic_dialog_add_button(gd, GTK_STOCK_GOTO_LAST, _("S_kip all"), file_util_move_multiple_skip_all_cb, FALSE);	generic_dialog_add_button(gd, GTK_STOCK_GO_FORWARD, _("_Skip"), file_util_move_multiple_skip_cb, FALSE);	generic_dialog_add_image(gd, fdm->dest, _("Existing file"), fdm->source, _("New file"), TRUE);	/* rename option */	fdm->rename = FALSE;	fdm->rename_all = FALSE;	fdm->rename_auto = FALSE;	hbox = pref_box_new(gd->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);	fdm->rename_auto_box = gtk_check_button_new_with_label(_("Auto rename"));	g_signal_connect(G_OBJECT(fdm->rename_auto_box), "clicked",			 G_CALLBACK(file_util_move_multiple_rename_auto_cb), gd);	gtk_box_pack_start(GTK_BOX(hbox), fdm->rename_auto_box, FALSE, FALSE, 0);	gtk_widget_show(fdm->rename_auto_box);	hbox = pref_box_new(gd->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);	fdm->rename_box = gtk_check_button_new_with_label(_("Rename"));	g_signal_connect(G_OBJECT(fdm->rename_box), "clicked",			 G_CALLBACK(file_util_move_multiple_rename_cb), gd);	gtk_box_pack_start(GTK_BOX(hbox), fdm->rename_box, FALSE, FALSE, 0);	gtk_widget_show(fdm->rename_box);	fdm->rename_entry = gtk_entry_new();	gtk_entry_set_text(GTK_ENTRY(fdm->rename_entry), filename_from_path(fdm->dest));	gtk_widget_set_sensitive(fdm->rename_entry, FALSE);	gtk_box_pack_start(GTK_BOX(hbox), fdm->rename_entry, TRUE, TRUE, 0);	gtk_widget_show(fdm->rename_entry);	return gd;}static void file_util_move_multiple(FileDataMult *fdm){	while (fdm->dest || fdm->source_next)		{		gint success = FALSE;		gint skip_file = FALSE;		if (!fdm->dest)			{			GList *work = fdm->source_next;			fdm->source = work->data;			fdm->dest = concat_dir_and_file(fdm->dest_base, filename_from_path(fdm->source));			fdm->source_next = work->next;			fdm->confirmed = FALSE;			}		if (fdm->dest && fdm->source && strcmp(fdm->dest, fdm->source) == 0)			{			if (!fdm->confirmed)				{				GenericDialog *gd;				const gchar *title;				gchar *text;				if (fdm->copy)					{					title = _("Source to copy matches destination");					text = g_strdup_printf(_("Unable to copy file:\n%s\nto itself."), fdm->dest);					}				else					{					title = _("Source to move matches destination");					text = g_strdup_printf(_("Unable to move file:\n%s\nto itself."), fdm->dest);					}				gd = file_util_gen_dlg(title, "GQview", "dlg_confirm",							NULL, TRUE,							file_util_move_multiple_cancel_cb, fdm);				generic_dialog_add_message(gd, GTK_STOCK_DIALOG_WARNING, title, text);				g_free(text);				generic_dialog_add_button(gd, GTK_STOCK_GO_FORWARD, _("Co_ntinue"),							 file_util_move_multiple_continue_cb, TRUE);				gtk_widget_show(gd->dialog);				return;				}			skip_file = TRUE;			}		else if (isfile(fdm->dest))			{			if (!fdm->confirmed && !fdm->confirm_all)				{				GenericDialog *gd;				gd = file_util_move_multiple_confirm_dialog(fdm);				gtk_widget_show(gd->dialog);				return;				}			if (fdm->skip) skip_file = TRUE;			}		if (skip_file)			{			success = TRUE;			if (!fdm->confirm_all) fdm->skip = FALSE;			}		else			{			gint try = TRUE;			if (fdm->confirm_all && fdm->rename_all && isfile(fdm->dest))				{				gchar *buf;				buf = unique_filename_simple(fdm->dest);				if (buf)					{					g_free(fdm->dest);					fdm->dest = buf;					}				else					{					try = FALSE;					}				}			if (try)				{				if (fdm->copy)					{					if (copy_file(fdm->source, fdm->dest))						{						success = TRUE;						file_maint_copied(fdm->source, fdm->dest);						}					}				else					{					if (move_file(fdm->source, fdm->dest))						{						success = TRUE;						file_maint_moved(fdm->source, fdm->dest, fdm->source_list);						}					}				}			}		if (!success)			{			GenericDialog *gd;			const gchar *title;			gchar *text;			if (fdm->copy)				{				title = _("Error copying file");				text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s\nduring multiple file copy."), fdm->source, fdm->dest);				}			else				{				title = _("Error moving file");				text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s\nduring multiple file move."), fdm->source, fdm->dest);				}			gd = file_util_gen_dlg(title, "GQview", "dlg_confirm",						NULL, TRUE,						file_util_move_multiple_cancel_cb, fdm);			generic_dialog_add_message(gd, GTK_STOCK_DIALOG_WARNING, title, text);			g_free(text);			generic_dialog_add_button(gd, GTK_STOCK_GO_FORWARD, _("Co_ntinue"),						  file_util_move_multiple_continue_cb, TRUE);			gtk_widget_show(gd->dialog);			}		g_free(fdm->dest);		fdm->dest = NULL;		if (!success) return;		}	file_data_multiple_free(fdm);}/* * Single file move */static FileDataSingle *file_data_single_new(const gchar *source, const gchar *dest, gint copy){	FileDataSingle *fds = g_new0(FileDataSingle, 1);	fds->confirmed = FALSE;	fds->source = g_strdup(source);	fds->dest = g_strdup(dest);	fds->copy = copy;	return fds;}static void file_data_single_free(FileDataSingle *fds){	g_free(fds->source);	g_free(fds->dest);	g_free(fds);}static void file_util_move_single(FileDataSingle *fds);static void file_util_move_single_ok_cb(GenericDialog *gd, gpointer data){	FileDataSingle *fds = data;	fds->confirmed = TRUE;	if (fds->rename_auto)		{		gchar *buf;		buf = unique_filename_simple(fds->dest);		if (buf)			{			g_free(fds->dest);			fds->dest = buf;			}		else			{			/* unique failed? well, return to the overwrite prompt :( */			fds->confirmed = FALSE;			}		}	else if (fds->rename)		{		const gchar *name;		name = gtk_entry_get_text(GTK_ENTRY(fds->rename_entry));		if (strlen(name) == 0 ||		    strcmp(name, filename_from_path(fds->source)) == 0)			{			fds->confirmed = FALSE;			}		else			{			gchar *base;			base = remove_level_from_path(fds->dest);			g_free(fds->dest);			fds->dest = concat_dir_and_file(base, name);			fds->confirmed = !isname(fds->dest);			g_free(base);			}		}	file_util_move_single(fds);}static void file_util_move_single_cancel_cb(GenericDialog *gd, gpointer data){	FileDataSingle *fds = data;	file_data_single_free(fds);}static void file_util_move_single_rename_auto_cb(GtkWidget *widget, gpointer data){	GenericDialog *gd = data;	FileDataSingle *fds;	fds = gd->data;	fds->rename_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));	gtk_widget_set_sensitive(fds->rename_box, !fds->rename_auto);	gtk_widget_set_sensitive(fds->rename_entry, (!fds->rename_auto && fds->rename));	if (fds->rename_auto)		{		gchar *preview;		preview = unique_filename_simple(fds->dest);		if (preview) gtk_entry_set_text(GTK_ENTRY(fds->rename_entry), filename_from_path(preview));		g_free(preview);		}}static void file_util_move_single_rename_cb(GtkWidget *widget, gpointer data){	GenericDialog *gd = data;	FileDataSingle *fds;	fds = gd->data;	fds->rename = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));	gtk_widget_set_sensitive(fds->rename_entry, fds->rename);	if (fds->rename)		{		const gchar *name;		gtk_widget_grab_focus(fds->rename_entry);		name = gtk_entry_get_text(GTK_ENTRY(fds->rename_entry));		gtk_editable_select_region(GTK_EDITABLE(fds->rename_entry), 0, filename_base_length(name));		}}static void file_util_move_single(FileDataSingle *fds){	if (fds->dest && fds->source && strcmp(fds->dest, fds->source) == 0)		{		file_util_warning_dialog(_("Source matches destination"),					 _("Source and destination are the same, operation cancelled."),					 GTK_STOCK_DIALOG_INFO, NULL);		}	else if (isfile(fds->dest) && !fds->confirmed)		{		GenericDialog *gd;		GtkWidget *hbox;		gd = file_util_gen_dlg(_("Overwrite file"), "GQview", "dlg_confirm",					NULL, TRUE,					file_util_move_single_cancel_cb, fds);		generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION,					   _("Overwrite file?"),					   _("Replace existing file with new file."));		pref_spacer(gd->vbox, 0);		generic_dialog_add_button(gd, GTK_STOCK_OK, _("_Overwrite"), file_util_move_single_ok_cb, TRUE);		generic_dialog_add_image(gd, fds->dest, _("Existing file"), fds->source, _("New file"), TRUE);		/* rename option */		fds->rename = FALSE;		fds->rename_auto = FALSE;		hbox = pref_box_new(gd->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);		fds->rename_auto_box = gtk_check_button_new_with_label(_("Auto rename"));		g_signal_connect(G_OBJECT(fds->rename_auto_box), "clicked",				 G_CALLBACK(file_util_move_single_rename_auto_cb), gd);		gtk_box_pack_start(GTK_BOX(hbox), fds->rename_auto_box, FALSE, FALSE, 0);		gtk_widget_show(fds->rename_auto_box);		hbox = pref_box_new(gd->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_GAP);		fds->rename_box = gtk_check_button_new_with_label(_("Rename"));		g_signal_connect(G_OBJECT(fds->rename_box), "clicked",				 G_CALLBACK(file_util_move_single_rename_cb), gd);		gtk_box_pack_start(GTK_BOX(hbox), fds->rename_box, FALSE, FALSE, 0);		gtk_widget_show(fds->rename_box);		fds->rename_entry = gtk_entry_new();		gtk_entry_set_text(GTK_ENTRY(fds->rename_entry), filename_from_path(fds->dest));		gtk_widget_set_sensitive(fds->rename_entry, FALSE);		gtk_box_pack_start(GTK_BOX(hbox), fds->rename_entry, TRUE, TRUE, 0);		gtk_widget_show(fds->rename_entry);		gtk_widget_show(gd->dialog);		return;		}	else		{		gint success = FALSE;		if (fds->copy)			{			if (copy_file(fds->source, fds->dest))				{				success = TRUE;				file_maint_copied(fds->source, fds->dest);				}			}		else			{			if (move_file(fds->source, fds->dest))				{				success = TRUE;				file_maint_moved(fds->source, fds->dest, NULL);				}			}		if (!success)			{			gchar *title;			gchar *text;			if (fds->copy)				{				title = _("Error copying file");				text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s"), fds->source, fds->dest);				}			else				{				title = _("Error moving file");				text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s"), fds->source, fds->dest);				}			file_util_warning_dialog(title, text, GTK_STOCK_DIALOG_ERROR, NULL);			g_free(text);			}		}	file_data_single_free(fds);}/* * file move dialog */static void file_util_move_do(FileDialog *fd){	file_dialog_sync_history(fd, TRUE);	if (fd->multiple_files)		{		file_util_move_multiple(file_data_multiple_new(fd->source_list, fd->dest_path, fd->type));		fd->source_list = NULL;		}	else		{		if (isdir(fd->dest_path))			{			gchar *buf = concat_dir_and_file(fd->dest_path, filename_from_path(fd->source_path));			gtk_entry_set_text(GTK_ENTRY(fd->entry), buf);			g_free(buf);			}		file_util_move_single(file_data_single_new(fd->source_path, fd->dest_path, fd->type));		}	file_dialog_close(fd);}static void file_util_move_check(FileDialog *fd){	if (fd->dest_path && strcmp(fd->dest_path, "~") == 0)		{		gtk_entry_set_text(GTK_ENTRY(fd->entry), homedir());		}	if (fd->multiple_files && !isdir(fd->dest_path))		{		if (isfile(fd->dest_path))			{			file_util_warning_dialog(_("Invalid destination"),						 _("When operating with multiple files, please select\na folder, not a file."),						 GTK_STOCK_DIALOG_INFO, NULL);			}		else			file_util_warning_dialog(_("Invalid folder"),						 _("Please select an existing folder."),						 GTK_STOCK_DIALOG_INFO, NULL);		return;		}	if (!fd->dest_path || fd->dest_path[0] != '/')		{		if (fd->source_path)			{			gchar *base;			gchar *path;			base = remove_level_from_path(fd->source_path);			path = concat_dir_and_file(base, fd->dest_path);			gtk_entry_set_text(GTK_ENTRY(fd->entry), path);			g_free(path);			g_free(base);			}		return;		}	file_util_move_do(fd);}static void file_util_move_cb(FileDialog *fd, gpointer data){	file_util_move_check(fd);}static void file_util_move_cancel_cb(FileDialog *fd, gpointer data){	file_dialog_close(fd);}static void real_file_util_move(const gchar *source_path, GList *source_list,				const gchar *dest_path, gint copy, GtkWidget *parent){	FileDialog *fd;	GtkWidget *label;	gchar *path = NULL;	gint multiple;	const gchar *text;	const gchar *title;	const gchar *op_text;	const gchar *stock_id;	if (!source_path && !source_list) return;	if (source_path)		{		path = g_strdup(source_path);		multiple = FALSE;		}

⌨️ 快捷键说明

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