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

📄 interface.c

📁 linux的多线程下载工具。基于gtk界面。
💻 C
📖 第 1 页 / 共 5 页
字号:
GtkWidget *menu_popup_task_remove_task = NULL;GtkWidget *menu_popup_task_open_file = NULL;GtkWidget *menu_popup_task_open_dir = NULL;GtkWidget *menu_popup_task_install = NULL;GtkWidget *menu_popup_task_delete_file = NULL;GtkWidget *menu_popup_window_drop_menu = NULL;GtkWidget *menu_popup_window_drop_show = NULL;GtkWidget *menu_popup_window_drop_new_task = NULL;GtkWidget *menu_popup_window_drop_exit = NULL;GtkWidget *toolbar_main = NULL;GtkWidget *canvas_graph = NULL;GtkWidget *textview_info = NULL;GtkWidget *statusbar_main = NULL;GtkWidget *treeview_tasks = NULL;GtkListStore *treeview_tasks_store = NULL;GtkWidget *treeview_infos = NULL;GtkListStore *treeview_infos_store = NULL;GtkWidget *treeview_dirs = NULL;GtkListStore *treeview_dirs_store = NULL;GtkWidget *treeview_proxys = NULL;GtkListStore *treeview_proxys_store = NULL;GtkWidget *window_drop = NULL;enum {	TARGET_URL,	TARGET_DND_TEXT};GtkTargetEntry download_drop_types[] = {	{ "x-url/http",		0, TARGET_URL},	{ "x-url/ftp",		0, TARGET_URL},	{ "_NETSCAPE_URL",	0, TARGET_URL},	{ "x-url/*",		0, TARGET_URL},	{ "text/uri-list",	0, TARGET_URL},	{ "text/plain",		0, TARGET_DND_TEXT },	{ "text/html", 		0, TARGET_DND_TEXT }};gint n_download_drop_types = sizeof(download_drop_types) / sizeof(download_drop_types[0]);VOID set_widget_dropable(GtkWidget *widget){	gtk_drag_dest_set(GTK_WIDGET(widget),	                  (GtkDestDefaults)(GTK_DEST_DEFAULT_MOTION |	                                    GTK_DEST_DEFAULT_HIGHLIGHT |	                                    GTK_DEST_DEFAULT_DROP),	                  download_drop_types, n_download_drop_types,	                  (GdkDragAction)(GDK_ACTION_COPY|GDK_ACTION_MOVE));			   	gtk_signal_connect (GTK_OBJECT (widget) ,"drag_data_received",			    GTK_SIGNAL_FUNC (on_url_drag_data_received), NULL);}GtkWidget *create_treeview_dirs(){	GtkWidget *treeview_dirs;	GtkCellRenderer *renderer;	GtkTreeViewColumn *column;	GtkTreeSelection   *sel;	treeview_dirs = gtk_tree_view_new();		// Add directory tree model 	treeview_dirs_store = gtk_list_store_new (TREEVIEW_DIRS_COL_N, 								G_TYPE_POINTER,  //TREEVIEW_INFOS_COL_TASKDIR								G_TYPE_STRING,  //TREEVIEW_INFOS_COL_TITLE								G_TYPE_STRING   //TREEVIEW_INFOS_COL_PATH								);		gtk_tree_view_set_model (GTK_TREE_VIEW (treeview_dirs),  GTK_TREE_MODEL(treeview_dirs_store));		renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ("Index", renderer, "text", TREEVIEW_DIRS_COL_TASKDIR, NULL);	gtk_tree_view_column_set_visible(column, FALSE);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_dirs), column);	column = gtk_tree_view_column_new_with_attributes (_("Category"), renderer, "text", TREEVIEW_DIRS_COL_TITLE, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_dirs), column);	column = gtk_tree_view_column_new_with_attributes (_("Save to ..."), renderer, "text", TREEVIEW_DIRS_COL_PATH, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_dirs), column);	sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_dirs));	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);	g_signal_connect(sel, "changed", G_CALLBACK(on_treeview_dirs_selection_changed), treeview_dirs_store);	GtkTreeIter iter;	    gtk_list_store_append (GTK_LIST_STORE (treeview_dirs_store), &iter);		    gtk_list_store_set (GTK_LIST_STORE (treeview_dirs_store), 	                    &iter,                        TREEVIEW_DIRS_COL_TASKDIR, NULL,						TREEVIEW_DIRS_COL_TITLE, _("All Tasks"),						TREEVIEW_DIRS_COL_PATH, "",						-1);	set_widget_dropable(treeview_dirs);		return treeview_dirs;}GtkWidget *create_treeview_infos(){	GtkWidget *treeview_infos;	GtkCellRenderer *renderer;	GtkTreeViewColumn *column;	GtkTreeSelection   *sel;		//treeview_infos = NULL;		treeview_infos = gtk_tree_view_new();		// Add directory tree model 	treeview_infos_store = gtk_list_store_new (TREEVIEW_INFOS_COL_N, 								G_TYPE_POINTER,  //TREEVIEW_INFOS_COL_TASKTHREAD								G_TYPE_STRING  //TREEVIEW_INFOS_COL_TITLE								);			gtk_tree_view_set_model (GTK_TREE_VIEW (treeview_infos),  GTK_TREE_MODEL(treeview_infos_store));		renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ("Thread", renderer, "text", TREEVIEW_INFOS_COL_TASKTHREAD, NULL);	gtk_tree_view_column_set_visible(column, FALSE);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_infos), column);	column = gtk_tree_view_column_new_with_attributes (_("Logs"), renderer, "text", TREEVIEW_INFOS_COL_TITLE, NULL);	//gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_infos), column);	sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_infos));	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);	g_signal_connect(sel, "changed", G_CALLBACK(on_treeview_infos_selection_changed), treeview_infos_store);	return treeview_infos;}GtkWidget *create_treeview_tasks(){	GtkWidget *treeview_tasks;		GtkCellRenderer *renderer;	GtkCellRenderer *imagerenderer;	GtkTreeViewColumn *column;	GtkTreeSelection   *sel;	//	GtkWidget *image;		//if(!window_main) return;	treeview_tasks = gtk_tree_view_new();		/* Load Images ... */	pixbuf_start = gdk_pixbuf_new_from_xpm_data((const char **)xpm_start);	pixbuf_stop = gdk_pixbuf_new_from_xpm_data((const char **)xpm_stop);	pixbuf_error = gdk_pixbuf_new_from_xpm_data((const char **)xpm_error);  	pixbuf_finished = gdk_pixbuf_new_from_xpm_data((const char **)xpm_finished);	pixbuf_queue = gdk_pixbuf_new_from_xpm_data((const char **)xpm_queue);		/* Add directory tree model */	treeview_tasks_store = gtk_list_store_new (TREEVIEW_TASKS_COL_N, 								G_TYPE_POINTER, //TREEVIEW_TASKS_COL_TASK								GDK_TYPE_PIXBUF, //TREEVIEW_TASKS_COL_STATUS,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_FILENAME,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_SIZE,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_RATE,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_SPEED,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_TIME,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_REMING,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_THREADNUMBER,								G_TYPE_STRING, //TREEVIEW_TASKS_COL_URL,								G_TYPE_STRING  //TREEVIEW_TASKS_COL_COMMENT								);			gtk_tree_view_set_model (GTK_TREE_VIEW (treeview_tasks),  GTK_TREE_MODEL(treeview_tasks_store));		/* Add directory tree view columns */	renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ("Task", renderer, "text", TREEVIEW_TASKS_COL_TASK, NULL);	gtk_tree_view_column_set_visible(column, FALSE);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	imagerenderer = gtk_cell_renderer_pixbuf_new();	column = gtk_tree_view_column_new_with_attributes (_(" S "), imagerenderer, "pixbuf", TREEVIEW_TASKS_COL_STATUS, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("File"), renderer, "text", TREEVIEW_TASKS_COL_FILENAME, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("Rate"), renderer, "text", TREEVIEW_TASKS_COL_RATE, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("Speed"), renderer, "text", TREEVIEW_TASKS_COL_SPEED, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("Size"), renderer, "text", TREEVIEW_TASKS_COL_SIZE, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("Time"), renderer, "text", TREEVIEW_TASKS_COL_TIME, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_column_set_visible(column, FALSE);    // we don't use Time now ...	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);			column = gtk_tree_view_column_new_with_attributes (_("Remaining"), renderer, "text", TREEVIEW_TASKS_COL_REMAINING, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("Threads"), renderer, "text", TREEVIEW_TASKS_COL_THREADNUMBER, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("URL"), renderer, "text", TREEVIEW_TASKS_COL_URL, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);	column = gtk_tree_view_column_new_with_attributes (_("Comment"), renderer, "text", TREEVIEW_TASKS_COL_COMMENT, NULL);	gtk_tree_view_column_set_resizable(column, TRUE);	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview_tasks), column);		sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_tasks));	//gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);	gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE);	g_signal_connect(sel, "changed", G_CALLBACK(on_treeview_tasks_selection_changed), treeview_tasks_store);  	gtk_widget_set_events(treeview_tasks,			      gtk_widget_get_events(treeview_tasks) |			      GDK_BUTTON_PRESS_MASK );				  	g_signal_connect(G_OBJECT (treeview_tasks), "button_press_event",			 G_CALLBACK (on_treeview_tasks_button_press), NULL);	set_widget_dropable(treeview_tasks);		return treeview_tasks;	}GtkWidget*create_textview_info(){	GtkWidget *textview ;	GtkTextBuffer *buffer;		textview = gtk_text_view_new ();	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(textview));		gtk_text_buffer_create_tag(buffer, "info", 						"foreground", "black",						"scale", PANGO_SCALE_LARGE,						NULL);	gtk_text_buffer_create_tag(buffer, "error", 						"foreground", "red",						"scale", PANGO_SCALE_LARGE,						NULL);							gtk_text_buffer_create_tag(buffer, "send", 						"scale", PANGO_SCALE_LARGE,						"foreground", "blue", 						NULL);	gtk_text_buffer_create_tag(buffer, "recv", 						"scale", PANGO_SCALE_LARGE,						"foreground", "green", 						NULL);	gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE);		return textview;}static GtkWidget *add_submenu_with_data(GtkWidget *parentmenu, gchar *name, gchar *title, gchar *stockicon, GtkSignalFunc cbfunc, gpointer data){  GtkWidget *menu, *image;		if(name)	{				image = gtk_image_new_from_stock (stockicon, GTK_ICON_SIZE_MENU);		gtk_widget_show(image);		menu = gtk_image_menu_item_new_with_mnemonic (title);		gtk_widget_set_name (menu, name);		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu), image);		gtk_widget_show (menu);		gtk_container_add (GTK_CONTAINER (parentmenu), menu);		g_signal_connect ((gpointer) menu, "activate",						G_CALLBACK (cbfunc),						data);			}	else	{		menu  = gtk_separator_menu_item_new();		gtk_widget_show (menu);		gtk_container_add (GTK_CONTAINER (parentmenu), menu);			}  return menu;	}static GtkWidget *add_submenu(GtkWidget *parentmenu, gchar *name, gchar *title, gchar *stockicon, GtkSignalFunc cbfunc){	/*  GtkWidget *menu, *image;		if(name)	{				image = gtk_image_new_from_stock (stockicon, GTK_ICON_SIZE_MENU);		gtk_widget_show(image);		menu = gtk_image_menu_item_new_with_mnemonic (title);		gtk_widget_set_name (menu, name);		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu), image);		gtk_widget_show (menu);		gtk_container_add (GTK_CONTAINER (parentmenu), menu);		g_signal_connect ((gpointer) menu, "activate",						G_CALLBACK (cbfunc),						NULL);			}	else	{		menu  = gtk_separator_menu_item_new();		gtk_widget_show (menu);		gtk_container_add (GTK_CONTAINER (parentmenu), menu);			}	  return menu;*/	return add_submenu_with_data(parentmenu, name, title, stockicon,  cbfunc,  NULL);}static GtkWidget *add_toolbar_button(GtkToolbar *toolbar, gchar *name, gchar *title, gchar *tooltip, gchar *stockicon, GtkSignalFunc cbfunc){  GtkWidget *button, *image;	if(name)	{  		image = gtk_image_new_from_stock (stockicon, GTK_ICON_SIZE_SMALL_TOOLBAR);  		gtk_widget_show(image);	  		button = gtk_toolbar_append_item(toolbar, title, tooltip, tooltip, image, cbfunc, NULL);  		gtk_widget_set_name (button, name);	}	else	{

⌨️ 快捷键说明

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