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

📄 fsface.cc

📁 一个功能比较强的下载软件
💻 CC
字号:
/*	WebDownloader for X-Window *	Copyright (C) 1999-2002 Koshelev Maxim *	This Program is free but not GPL!!! You can't modify it *	without agreement with author. You can't distribute modified *	program but you can distribute unmodified program. * *	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. */#include "fsface.h"#include "lod.h"#include "list.h"#include "log.h"#include "addd.h"#include "../ntlocale.h"#include "../var.h"#include "misc.h"static GtkWidget *fs_list_menu_to_destroy=(GtkWidget *)NULL;void fs_list_menu_hide(GtkWidget *widget){	if (fs_list_menu_to_destroy){		gtk_widget_destroy(fs_list_menu_to_destroy);	};	fs_list_menu_to_destroy=widget;};extern tMain aa;void fs_list_delete(GtkWidget *widget,tDownload *what){	aa.ftp_search_remove(what);};void fs_list_reping(GtkWidget *widget,tDownload *what){	what->Status.curent=0;	aa.ftp_search_reping(what);};void fs_list_cumulative_reping(GtkWidget *widget,tDownload *what){	what->Status.curent=1;	aa.ftp_search_reping(what);};void fs_list_add_download(GtkWidget *widget,tDownload *what){	char *url=what->info->url();	init_add_dnd_window(url,what->info->host.get());	delete[] url;};void fs_list_prepare_menu(tDownload *what,GdkEventButton *bevent){	GtkWidget *menu=gtk_menu_new();	GtkWidget *menu_item;	g_signal_connect(G_OBJECT(menu),"hide",G_CALLBACK(fs_list_menu_hide),NULL);	if (what->status==DOWNLOAD_COMPLETE){		tDownload *tmp=what->DIR==NULL?(tDownload *)NULL:what->DIR->last();		if (tmp){			while (tmp){				char a[MAX_LEN];				char b[100];				float p=tmp->Percent/tmp->Attempt.curent;				d4x_percent_str(p,b,sizeof(b));				if (what->finfo.size>0){					sprintf(a,"%s%% %s",b,tmp->info->host.get());				}else{					char size[100];					make_number_nice(size,tmp->finfo.size,D4X_QUEUE->NICE_DEC_DIGITALS);					sprintf(a,"%s%% %s [%s %s]",b,tmp->info->host.get(),						tmp->finfo.size>0?size:"???",_("bytes"));				};				menu_item=gtk_menu_item_new_with_label(a);//				menu_item=gtk_menu_item_new_with_label(tmp->info->host.get());				gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);				g_signal_connect(G_OBJECT(menu_item),						 "activate",						 G_CALLBACK(fs_list_add_download),						 tmp);				tmp=what->DIR->next();			};		}else{			menu_item=gtk_menu_item_new_with_label(_("nothing found"));			gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);		};	}else{		menu_item=gtk_menu_item_new_with_label(_("searching"));		gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);	};		menu_item=gtk_menu_item_new();	gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);	if (what->status==DOWNLOAD_COMPLETE && what->owner()==DL_FS_STOP	    && what->DIR && what->DIR->count()>0){		menu_item=gtk_menu_item_new_with_label(_("reping"));		gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);		g_signal_connect(G_OBJECT(menu_item),"activate",				 G_CALLBACK(fs_list_reping),what);		menu_item=gtk_menu_item_new_with_label(_("cumulative reping"));		gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);		g_signal_connect(G_OBJECT(menu_item),"activate",				 G_CALLBACK(fs_list_cumulative_reping),what);	};	menu_item=gtk_menu_item_new_with_label(_("remove"));	gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);	g_signal_connect(G_OBJECT(menu_item),"activate",			 G_CALLBACK(fs_list_delete),what);			gtk_widget_show_all(menu);		gtk_menu_popup(GTK_MENU(menu),(GtkWidget *)NULL,		       (GtkWidget *)NULL,(GtkMenuPositionFunc)NULL,		       (gpointer)NULL,bevent->button,bevent->time);};gint fs_list_event_callback(GtkWidget *widget,GdkEvent *event){	GtkTreeView *view=GTK_TREE_VIEW(widget);	GdkEventButton *bevent=(GdkEventButton *)event;	GtkTreeSelection *sel=gtk_tree_view_get_selection(view);	GtkTreePath *path=NULL;	GtkTreeIter iter;	if (event->type==GDK_BUTTON_PRESS && bevent->button==3) {		gtk_tree_selection_unselect_all(sel);		int selected=0;		if (gtk_tree_view_get_path_at_pos(view,gint(bevent->x),gint(bevent->y),&path,NULL,NULL,NULL)){			selected=0;			gtk_tree_selection_select_path(sel,path);			GtkTreeModel *model=gtk_tree_view_get_model(view);			gtk_tree_model_get_iter(model,&iter,path);			gtk_tree_path_free(path);			GValue val={0,};			gtk_tree_model_get_value(model,&iter,						 FS_COL_LAST,&val);			tDownload *what=(tDownload *)g_value_peek_pointer(&val);			g_value_unset(&val);			fs_list_prepare_menu(what,bevent);		};		return(TRUE);	};	if (event->type==GDK_2BUTTON_PRESS && bevent->button==1){		gtk_tree_selection_unselect_all(sel);		if (gtk_tree_view_get_path_at_pos(view,gint(bevent->x),gint(bevent->y),&path,NULL,NULL,NULL)){			gtk_tree_selection_select_path(sel,path);			GtkTreeModel *model=gtk_tree_view_get_model(view);			gtk_tree_model_get_iter(model,&iter,path);			GValue val={0,};			gtk_tree_model_get_value(model,&iter,						 FS_COL_LAST,&val);			tDownload *what=(tDownload *)g_value_peek_pointer(&val);			g_value_unset(&val);			if (what) log_window_init(what);		};	};	return(FALSE);};GtkTreeView *fs_list_init(){	GtkListStore *list_store = gtk_list_store_new(FS_COL_LAST+1,						      GDK_TYPE_PIXBUF,						      G_TYPE_STRING,						      G_TYPE_STRING,						      G_TYPE_POINTER);	GtkTreeView *view = (GtkTreeView *)gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));	gtk_tree_view_set_headers_visible(view,FALSE);	GtkCellRenderer *renderer;	GtkTreeViewColumn *col;	renderer = gtk_cell_renderer_pixbuf_new();	col=gtk_tree_view_column_new_with_attributes ("Status",						      renderer,						      "pixbuf",FS_COL_ICON,						      NULL);	gtk_tree_view_append_column(view,col);	for (int i=FS_COL_NAME;i<FS_COL_LAST;i++){		renderer = gtk_cell_renderer_text_new ();		col=gtk_tree_view_column_new_with_attributes ("Tittle",							      renderer,							      "text",i,							      NULL);		gtk_tree_view_column_set_resizable(col,FALSE);		gtk_tree_view_append_column(view,col);	};/*	GtkCList *clist=(GtkCList *)gtk_clist_new(FS_COL_LAST);	gtk_clist_set_row_height(clist,16);	gtk_clist_set_column_width (clist,FS_COL_ICON,20);	gtk_clist_set_column_width (clist,FS_COL_NAME,180);	gtk_clist_set_column_width (clist,FS_COL_SIZE,100);	gtk_clist_set_column_auto_resize(clist,FS_COL_NAME,TRUE);	gtk_clist_set_column_auto_resize(clist,FS_COL_SIZE,TRUE);*/	g_signal_connect(G_OBJECT(view), "event",			 G_CALLBACK(fs_list_event_callback),NULL);	return(view);};void fs_list_set_icon(GtkTreeView *view,tDownload *what,int icon){	GtkListStore *store=(GtkListStore *)gtk_tree_view_get_model(view);	gtk_list_store_set(store,what->list_iter,			   FS_COL_ICON,list_of_downloads_pixbufs[icon],			   -1);};void fs_list_add(GtkTreeView *view,tDownload *what){	char data[10];	if (what->finfo.size>0)		sprintf(data,"%li",what->finfo.size);	else		sprintf(data,"???");	GtkTreeIter iter;	GtkListStore *store=(GtkListStore *)gtk_tree_view_get_model(view);	gtk_list_store_append(store, &iter);	gtk_list_store_set(store, &iter,			   FS_COL_ICON, list_of_downloads_pixbufs[PIX_WAIT],			   FS_COL_SIZE, data,			   FS_COL_NAME, what->info->file.get(),			   FS_COL_LAST, what,			   -1);	if (what->list_iter) gtk_tree_iter_free(what->list_iter);	what->list_iter=gtk_tree_iter_copy(&iter);};void fs_list_remove(GtkTreeView *view,tDownload *what){	GtkListStore *store=(GtkListStore *)gtk_tree_view_get_model(view);	gtk_list_store_remove(store,what->list_iter);	gtk_tree_iter_free(what->list_iter);	what->list_iter=NULL;};static gint fs_list_status=0;static gint MAIN_PANED_WIDTH=0;void fs_list_hide(){	fs_list_status=0;	if (MAIN_PANED2 &&	    MAIN_PANED2->allocation.width > GTK_PANED(MAIN_PANED2)->child1_size){		gtk_paned_set_position(GTK_PANED(MAIN_PANED2),				       MAIN_PANED2->allocation.width);	};};void fs_list_show(){	fs_list_status=1;	fs_list_set_size();};void fs_list_set_size(){	if (MAIN_PANED2){		if (fs_list_status)			gtk_paned_set_position(GTK_PANED(MAIN_PANED2),					       MAIN_PANED2->allocation.width-					       gint(CFG.WINDOW_CLIST_WIDTH));		else{			fs_list_hide();		};	};};void fs_list_get_size(){	if (MAIN_PANED2 && fs_list_status)		CFG.WINDOW_CLIST_WIDTH=MAIN_PANED2->allocation.width-			GTK_PANED(MAIN_PANED2)->child1_size;};void fs_list_allocation(GtkWidget *paned,GtkAllocation *allocation){	if (MAIN_PANED_WIDTH && allocation->width!=MAIN_PANED_WIDTH){		int temp=CFG.WINDOW_CLIST_WIDTH;		float ratio=(float)CFG.WINDOW_CLIST_WIDTH/(float)(MAIN_PANED_WIDTH);		CFG.WINDOW_CLIST_WIDTH=int(ratio*(float)(allocation->width));		fs_list_set_size();		if (!fs_list_status)			CFG.WINDOW_CLIST_WIDTH=temp;	};	MAIN_PANED_WIDTH=allocation->width;	if (fs_list_status){		fs_list_get_size();	};};

⌨️ 快捷键说明

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