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

📄 callbacks.c

📁 linux的多线程下载工具。基于gtk界面。
💻 C
📖 第 1 页 / 共 3 页
字号:
/* callbacks.c (for interface) * * Copyright (C) 2004-2004 Wang Xiaoguang (Chice) <chice_wxg@hotmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * * Authors: Wang Xiaoguang (Chice) <chice_wxg@hotmail.com> */#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <gtk/gtk.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include "pkginstaller.h"#include "../dld_task.h"#include "../dld_taskdir.h"#include "../dld_taskmgr.h"#include "../dld_proxy.h"#include "../dld_proxymgr.h"#include "../dld_config.h"#include "../dld_ui_callback.h"#include "../dld_language.h"#include "dld_ui.h"#include "tray.h"typedef INT (* DLD_GTKUI_SELECTED_TASK_CALLBACK)(DldTask *task);static VOID exit_dld(){	tray_destroy();	dld_set_ui_callback(NULL);	gtk_main_quit();}VOID on_selected_task_foreach(DLD_GTKUI_SELECTED_TASK_CALLBACK callback){	GtkTreeIter iter;	GtkTreeModel *model;	gint count;	GtkTreeSelection *sel;	LIST *seltasklist = NULL;	gpointer p;		sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_tasks));			count = gtk_tree_selection_count_selected_rows(sel);	dprintf("[on_selected_task_foreach] count = %d\n", count);	if (count > 0)	{		GList *list, *l;				list = gtk_tree_selection_get_selected_rows (sel, &model);		for(l = list; l != NULL; l = g_list_next(l))		{			gtk_tree_model_get_iter (model, &iter, l->data);			gtk_tree_model_get (model, &iter, TREEVIEW_TASKS_COL_TASK, &p, -1);			dprintf("[on_selected_task_foreach] taskstr = %d\n", p);			if (p)				seltasklist = list_append(seltasklist, p);		}				g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL);		g_list_free (list);	}	while(seltasklist)	{		callback((DldTask *)seltasklist->data);		seltasklist = list_remove_nth(seltasklist, 0);	}}	/*===========================DLD Main Window Callbacks===========================*/	gbooleanon_canvas_graph_expose_event           (GtkWidget       *widget,                                        GdkEventExpose  *event,                                        gpointer         user_data){	dld_gtkui_draw_blocks(g_ui_curtask);  	return FALSE;}gbooleanon_window_main_delete_event            (GtkWidget       *widget,                                        GdkEvent        *event,                                        gpointer         user_data){	gtk_widget_hide(window_main);	return TRUE;}void on_window_main_state_event            (GtkWidget       *widget,gpointer event,gpointer         user_data){	//dprintf("[on_window_main_resize_event]\n");	if(gdk_window_get_state (window_main->window) &      (GDK_WINDOW_STATE_WITHDRAWN | GDK_WINDOW_STATE_ICONIFIED))	{		gtk_widget_hide(window_main);	}}voidon_menu_download_new_task_activate     (GtkMenuItem     *menuitem,                                        gpointer         user_data){	GtkWidget *dlg;		dlg = create_dialog_taskprop(NULL);	gtk_widget_show(dlg);}voidon_menu_download_modify_task_activate   (GtkMenuItem     *menuitem,  										gpointer         user_data){	GtkWidget *dlg;	if( !g_ui_curtask ) return;	if( (g_ui_curtask->status != DLD_TASK_STOPPED && g_ui_curtask->status != DLD_TASK_ERROR) || (g_ui_curtask->finishedsize >= g_ui_curtask->filesize && g_ui_curtask->filesize!=0)) 	{		quick_message(window_main, _("You can only modify a stopped task."));		return;	}	dlg = create_dialog_taskprop(g_ui_curtask);	gtk_widget_show(dlg);	//gtk_dialog_run(GTK_DIALOG(dlg));	gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);	}voidon_menu_download_start_task_activate   (GtkMenuItem     *menuitem,                                        gpointer         user_data){	on_selected_task_foreach(dld_task_start);}voidon_menu_download_stop_task_activate    (GtkMenuItem     *menuitem,                                        gpointer         user_data){	on_selected_task_foreach(dld_task_stop);}voidon_menu_download_remove_task_activate  (GtkMenuItem     *menuitem,  gpointer         user_data){	on_selected_task_foreach(dld_taskmgr_remove_task);}voidon_menu_download_delete_file_activate  (GtkMenuItem     *menuitem,  gpointer         user_data){	if(quick_question(window_main, _("Are you sure to delete the file(s) of the selected task(s)?")) == GTK_RESPONSE_YES)	{		on_selected_task_foreach(dld_taskmgr_delete_file);	}}voidon_menu_download_start_all_activate  (GtkMenuItem     *menuitem,  gpointer         user_data){	dld_taskmgr_start_all_tasks();}voidon_menu_download_stop_all_activate  (GtkMenuItem     *menuitem,  gpointer         user_data){	dld_taskmgr_stop_all_tasks();}voidon_menu_download_copy_url_activate  (GtkMenuItem     *menuitem,  gpointer         user_data){				gchar *url = NULL;		if(g_ui_curtask != NULL)	{		//Copy URL		GtkClipboard *cb;		cb = gtk_clipboard_get(GDK_NONE);		if(!g_utf8_validate(g_ui_curtask->url->str, strlen(g_ui_curtask->url->str), NULL))		{			url = g_locale_to_utf8(g_ui_curtask->url->str,-1,NULL,NULL,NULL);			gtk_clipboard_set_text(cb, url, strlen(url));			g_free(url);		}		else		{			gtk_clipboard_set_text(cb, g_ui_curtask->url->str, strlen(g_ui_curtask->url->str));		}	}}voidon_menu_download_restart_task_activate  (GtkMenuItem     *menuitem,  gpointer         user_data){	if(GTK_RESPONSE_YES == quick_question(window_main, _("This action will re-download the file(s) of the selected task(s).\nAnd only non-running tasks can be restarted.\nDo you want to continue?")))	{		on_selected_task_foreach(dld_task_restart);	}}voidon_menu_category_new_dir_activate     (GtkMenuItem     *menuitem,                                        gpointer         user_data){	GtkWidget *dlg;		dlg = create_dialog_newdir();	gtk_widget_show(dlg);}voidon_menu_category_remove_dir_activate     (GtkMenuItem     *menuitem,                                        gpointer         user_data){	dld_taskdir_remove_dir(g_ui_curtaskdir);	}voidon_menu_language_item_activate     (GtkMenuItem     *menuitem,                                        gpointer         user_data){	dld_language_set((char *)user_data);	quick_message(window_main, _("You should restart DLD in order to apply the language."));}voidon_menu_options_system_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	GtkWidget *dlg;	dlg = create_dialog_options();	gtk_widget_show(dlg);	gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);	}voidon_menu_options_proxy_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	GtkWidget *dlg;	dlg = create_dialog_proxy_settings();	gtk_widget_show(dlg);	gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);}voidon_menu_options_shell_programs_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	GtkWidget *dlg;	dlg = create_dialog_shell_programs();	gtk_widget_show(dlg);	gtk_window_set_modal(GTK_WINDOW(dlg), TRUE);}voidon_menu_help_content_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	gchar cmd[1000];	snprintf(cmd, sizeof(cmd), g_shellprograms.browser->str, "http://vbf.yeah.net/");		quick_message(window_main, _("DLD will use web browser to open http://vbf.yeah.net/ for help.\nIf your web browser does not work correctly, \nplease open the URL manually."));	async_system(cmd, FALSE);}voidon_menu_help_report_bugs_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	quick_message(window_main, _("Please report bugs to chice_wxg@hotmail.com. Thank you!"));}voidon_menu_help_url_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){//	dprintf("[OPEN URL] %s\n", user_data);	gchar cmd[1000];	snprintf(cmd, sizeof(cmd), g_shellprograms.browser->str, user_data);	async_system(cmd, FALSE);	}voidon_menu_help_about_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	quick_message(window_main, _("DLD Loves Downloading 0.2\nCopyright(c) Wang Xiaoguang(Chice) <chice_wxg@hotmail.com>"));}voidon_menu_popup_window_drop_show_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	if(!GTK_WIDGET_VISIBLE(window_main))	{		gtk_widget_show(window_main);		gtk_window_present (GTK_WINDOW (window_main));		}	else	{		gtk_widget_hide(window_main);	}	}voidon_menu_task_popup_open_file_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	if(!g_ui_curtask) return;	if(!g_ui_curtask->status == DLD_TASK_FINISHED) return;			gchar cmd[1000];	snprintf(cmd, sizeof(cmd), g_shellprograms.filemanager->str, g_ui_curtask->localfile->str);	async_system(cmd, FALSE);}voidon_menu_task_popup_open_dir_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	if(!g_ui_curtask) return;			gchar cmd[1000];	STRING *localpath = os_extract_path(g_ui_curtask->localfile->str);		snprintf(cmd, sizeof(cmd), g_shellprograms.filemanager->str, localpath->str);		async_system(cmd, FALSE);		localpath = string_free(localpath);}voidon_menu_task_popup_install_activate     (GtkMenuItem     *menuitem,  gpointer         user_data){	//TODO	//Install the package !!!!!!!!	if(!g_ui_curtask) return;			gchar cmd[1000];	gchar consolecmd[1000];	/*	strcpy(cmd, "");		if(os_file_has_ext(g_ui_curtask->localfile->str, ".rpm"))	{		snprintf(consolecmd, sizeof(consolecmd), "rpm -i %s", g_ui_curtask->localfile->str);		snprintf(cmd, sizeof(cmd), g_shellprograms.terminal->str, consolecmd);		async_system(cmd, FALSE);	}		if(os_file_has_ext(g_ui_curtask->localfile->str, ".deb"))	{		snprintf(consolecmd, sizeof(consolecmd), "dpkg -i %s", g_ui_curtask->localfile->str);		snprintf(cmd, sizeof(cmd), g_shellprograms.terminal->str, consolecmd);		async_system(cmd, FALSE);	}	*/		if(os_file_has_ext(g_ui_curtask->localfile->str, ".gz") || os_file_has_ext(g_ui_curtask->localfile->str, ".bz2"))	{		strcpy(consolecmd, "");		if(generate_dldinst_script("/tmp/dldinst/dldinst") != DLD_ERR_OK)		{			quick_message(window_main, _("Can't generate DLD installer shell."));		}		else		{			if(os_file_has_ext(g_ui_curtask->localfile->str, ".bz2"))			{				snprintf(consolecmd, sizeof(consolecmd), "/tmp/dldinst/dldinst \"%s\" bzip2", g_ui_curtask->localfile->str);			}			if(os_file_has_ext(g_ui_curtask->localfile->str, ".gz"))			{				snprintf(consolecmd, sizeof(consolecmd), "/tmp/dldinst/dldinst \"%s\" gzip", g_ui_curtask->localfile->str);			}			snprintf(cmd, sizeof(cmd), g_shellprograms.terminal->str, consolecmd);			async_system(cmd, FALSE);		}	}}voidon_menu_popup_window_drop_exit_activate     (GtkMenuItem     *menuitem,  gpointer         user_data)

⌨️ 快捷键说明

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