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

📄 lod.cc

📁 一个功能比较强的下载软件
💻 CC
📖 第 1 页 / 共 4 页
字号:
};void d4xQueueView::popup_columns_visibility_menu(GdkEventButton *event){	GtkWidget *popup_menu=gtk_menu_new();	get_sizes();	GtkWidget *open_row_item=gtk_check_menu_item_new_with_label(_("Status"));	GtkWidget *arr[NOTHING_COL];	gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu),open_row_item);	g_object_set_data(G_OBJECT(open_row_item),			  "d4x_col_num",GINT_TO_POINTER(0));	arr[0]=open_row_item;	for (int i=1;i<NOTHING_COL;i++){		open_row_item=gtk_check_menu_item_new_with_label(_(ListTitles[i]));		g_object_set_data(G_OBJECT(open_row_item),"d4x_col_num",GINT_TO_POINTER(i));		gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu),open_row_item);		arr[i]=open_row_item;	};	for (int i=0;i<NOTHING_COL;i++){		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(arr[prefs.cols[i].type]),					       prefs.cols[i].visible);		g_signal_connect(G_OBJECT(arr[prefs.cols[i].type]),				 "activate",				 G_CALLBACK(_tmp_activate_),this);	};;	gtk_widget_show_all(popup_menu);	gtk_menu_popup(GTK_MENU(popup_menu),NULL,NULL,NULL,NULL,event->button,event->time);};static GdkPixmap *d4x_dnd_icon_pix=NULL;static GdkBitmap *d4x_dnd_icon_bit=NULL;static gboolean _tmp_handler_(GtkWidget *widget,GdkEventButton *event,d4xQueueView *qv){	if (event->type==GDK_BUTTON_RELEASE && event->button==3){		qv->popup_columns_visibility_menu(event);		return(TRUE);	};	return FALSE;};void d4xQueueView::init() {	last_selected=NULL;	list_store = gtk_list_store_new(NOTHING_COL+2,					GDK_TYPE_PIXBUF, //STATUS					G_TYPE_STRING,   // FILE					G_TYPE_STRING,   // FILE_TYPE					G_TYPE_STRING,   // FULL_SIZE					G_TYPE_STRING,   // DOWNLOADED_SIZE					G_TYPE_STRING,   // REMAIN_SIZE					G_TYPE_FLOAT,    // PERCENT					G_TYPE_STRING,   // SPEED					G_TYPE_STRING,   // TIME					G_TYPE_STRING,   // ELAPSED_TIME					G_TYPE_STRING,   // PAUSE					G_TYPE_STRING,   // TREAT					G_TYPE_STRING,   // DESRIPTION					G_TYPE_STRING,   // URL					G_TYPE_POINTER,  // pointer to tDownload					G_TYPE_BOOLEAN); // style changer	ListOfDownloads = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));	gtk_widget_ref(ListOfDownloads);	for (int i=0;i<NOTHING_COL;i++){		GtkCellRenderer *renderer;		GtkTreeViewColumn *col;//		if (prefs.cols[i].type==PERCENT_COL) continue; //FIXME: GTK2//		printf("%i\n",prefs.cols[i].type);		switch (prefs.cols[i].type){		case STATUS_COL:			renderer = gtk_cell_renderer_pixbuf_new();			col=gtk_tree_view_column_new_with_attributes (_(ListTitles[prefs.cols[i].type]),								      renderer,								      "pixbuf",prefs.cols[i].type,								      NULL);			break;		case PERCENT_COL:			renderer = gtk_cell_renderer_progress_new ();			col=gtk_tree_view_column_new_with_attributes (_(ListTitles[prefs.cols[i].type]),								      renderer,								      "percent",prefs.cols[i].type,								      "download",NOTHING_COL,								      NULL);			break;		default:			renderer = gtk_cell_renderer_text_new ();			g_object_set (G_OBJECT (renderer),				      "foreground-gdk", &RED,				      NULL);			col=gtk_tree_view_column_new_with_attributes (_(ListTitles[prefs.cols[i].type]),								      renderer,								      "text",prefs.cols[i].type,								      "foreground_set", NOTHING_COL+1,								      NULL);			break;		};		g_object_set_data(G_OBJECT(col),"d4x_col_num",GINT_TO_POINTER(prefs.cols[i].type));		gtk_tree_view_column_set_reorderable(col,TRUE);		gtk_tree_view_column_set_sizing(col,						GTK_TREE_VIEW_COLUMN_FIXED);		gtk_tree_view_column_set_fixed_width(col,prefs.cols[i].size);		gtk_tree_view_column_set_resizable(col,TRUE);		gtk_tree_view_column_set_visible(col,prefs.cols[i].visible);		gtk_tree_view_column_set_clickable(col,TRUE);		gtk_tree_view_append_column (GTK_TREE_VIEW(ListOfDownloads), col);		g_signal_connect(G_OBJECT(col->button), "event",				 G_CALLBACK(_tmp_handler_),this);	};	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_set_mode (sel,GTK_SELECTION_MULTIPLE);	gtk_tree_selection_set_select_function(sel,select_download,this,NULL);	g_signal_connect(G_OBJECT(ListOfDownloads), "event",			 G_CALLBACK(list_event_callback),this);//	ListOfDownloads = my_gtk_clist_new_with_titles( prefs.cols[NOTHING_COL].enum_index, RealListTitles);#include "pixmaps/dnd.xpm"	if (!d4x_dnd_icon_pix)		d4x_dnd_icon_pix=gdk_pixmap_colormap_create_from_xpm_d(NULL,								       gtk_widget_get_colormap (MainWindow),								       &d4x_dnd_icon_bit,								       NULL,								       dnd_xpm);	gtk_drag_source_set (ListOfDownloads, GdkModifierType(GDK_BUTTON1_MASK | GDK_BUTTON3_MASK),				ltarget_table, ln_targets,				GdkDragAction(GDK_ACTION_COPY | GDK_ACTION_MOVE));	gtk_drag_source_set_icon(ListOfDownloads,gtk_widget_get_colormap (MainWindow),				 d4x_dnd_icon_pix,				 d4x_dnd_icon_bit);	g_signal_connect(G_OBJECT (ListOfDownloads), "drag_data_get",			 G_CALLBACK(source_drag_data_get), NULL);// No need to unref cos it will be freed at exiting//	gdk_pixmap_unref (d4x_dnd_icon_pix);//	gdk_pixmap_unref (d4x_dnd_icon_bit);	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ContainerForCList),	                                GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (ContainerForCList),					    GTK_SHADOW_IN);/*	gtk_clist_set_hadjustment(GTK_CLIST(ListOfDownloads),(GtkAdjustment *)NULL);	gtk_clist_set_vadjustment(GTK_CLIST(ListOfDownloads),(GtkAdjustment *)NULL);	set_column_justification (FULL_SIZE_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (PERCENT_COL, GTK_JUSTIFY_CENTER);	set_column_justification (DOWNLOADED_SIZE_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (REMAIN_SIZE_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (TREAT_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (SPEED_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (ELAPSED_TIME_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (TIME_COL, GTK_JUSTIFY_RIGHT);	set_column_justification (PAUSE_COL, GTK_JUSTIFY_RIGHT);	gtk_clist_set_column_auto_resize(GTK_CLIST(ListOfDownloads),prefs.cols[URL_COL].enum_index,TRUE);	init_sort_buttons();*/};void d4xQueueView::set_pixmap(tDownload *what){	switch (what->owner()) {	default:	case DL_WAIT:{		set_pixmap(what->list_iter,PIX_WAIT);		break;	};	case DL_STOP:{		set_pixmap(what->list_iter,PIX_STOP);		break;	};	case DL_RUN:{		what->update_trigers();		set_run_icon(what);		break;	};	case DL_PAUSE:{		set_pixmap(what->list_iter,PIX_PAUSE);		break;	};	case DL_COMPLETE:{		set_pixmap(what->list_iter,PIX_COMPLETE);	};	};};void d4xQueueView::set_pixmap(GtkTreeIter *iter,int type){	if (type>=PIX_UNKNOWN || iter==NULL) return;	gtk_list_store_set(list_store,iter,STATUS_COL,list_of_downloads_pixbufs[type],-1);};void d4xQueueView::set_pixmap(tDownload *dwn,int type){	if (type>=PIX_UNKNOWN) return;	set_pixmap(dwn->list_iter,type);};void d4xQueueView::unselect_all(){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_unselect_all(sel);};void d4xQueueView::select_all(){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_select_all(sel);};void d4xQueueView::invert_sel(GtkTreeIter *iter){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	if (gtk_tree_selection_iter_is_selected(sel,iter))		gtk_tree_selection_unselect_iter(sel,iter);	else		gtk_tree_selection_select_iter(sel,iter);};static gboolean _foreach_invert_selection_(GtkTreeModel *model,GtkTreePath *path,					   GtkTreeIter *iter,gpointer data){	d4xQueueView *qv=(d4xQueueView *)data;	qv->invert_sel(iter);};void d4xQueueView::invert_selection(){	gtk_tree_model_foreach(GTK_TREE_MODEL(list_store),_foreach_invert_selection_,this);};void d4xQueueView::select(tDownload *dwn){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_unselect_all(sel);	gtk_tree_selection_select_iter(sel,dwn->list_iter);};int d4xQueueView::rows(){	return(ListOfDownloadsWF.count());};/*void d4xQueueView::swap(tDownload *a,tDownload *b){	gint rowa=get_row(a);	gint rowb=get_row(b);	gtk_clist_swap_rows(GTK_CLIST(ListOfDownloads),rowa,rowb);};*//* Various additional functions */static void _foreach_continue_logs_(GtkTreeModel *model,GtkTreePath *path,			     GtkTreeIter *iter,gpointer p){	GValue val={0,};	gtk_tree_model_get_value(model,iter,NOTHING_COL,&val);	tDownload *temp=(tDownload *)g_value_peek_pointer(&val);	g_value_unset(&val);	if (temp) log_window_init(temp);};void d4xQueueView::continue_opening_logs(){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_selected_foreach(sel,_foreach_continue_logs_,NULL);};void d4xQueueView::open_logs() {	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_selected_foreach(sel,_foreach_continue_logs_,NULL);};void d4xQueueView::set_shift(float shift){//	GtkAdjustment *adj=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(ContainerForCList));	GtkAdjustment *adj=gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(ListOfDownloads));	if (adj) gtk_adjustment_set_value(adj,shift);};/* move_to(tDownload *dwn)   shift current view to display dwn */void d4xQueueView::move_to(tDownload *dwn){	GtkTreePath *path=gtk_tree_model_get_path(GTK_TREE_MODEL(list_store),dwn->list_iter);	gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(ListOfDownloads),path,NULL,FALSE,0,0);	gtk_tree_path_free(path);};void d4xQueueView::get_adj(){	GtkAdjustment *adj=gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(ListOfDownloads));	if (adj) current_shift=adj->value;};// manipulating with downloadsstatic void _foreach_stop_(GtkTreeModel *model,GtkTreePath *path,			   GtkTreeIter *iter,gpointer p){	GValue val={0,};	gtk_tree_model_get_value(model,iter,NOTHING_COL,&val);	tDownload *temp=(tDownload *)g_value_peek_pointer(&val);	g_value_unset(&val);	aa.stop_download(temp);};int d4xQueueView::get_row_num(tDownload *dwn){	GtkTreePath *path=gtk_tree_model_get_path(GTK_TREE_MODEL(list_store),dwn->list_iter);	int *a=gtk_tree_path_get_indices(path);	int rval=*a;	gtk_tree_path_free(path);	return(rval);};void d4xQueueView::stop_downloads(){	int olda=aa.set_auto_run(1);	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_selected_foreach(sel,_foreach_stop_,NULL);	aa.set_auto_run(olda);};void d4xQueueView::delete_downloads(int flag){	tQueue q;	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_selected_foreach(sel,					    _foreach_move_down_prepare_,					    &q);	tNode *t=q.last();	while(t){		tDownload *temp=get_download(((tmpIterNode*)t)->iter);		aa.delete_download(temp,flag);		t=t->next;	};};static void _foreach_continue_(GtkTreeModel *model,GtkTreePath *path,			       GtkTreeIter *iter,gpointer p){	GValue val={0,};	gtk_tree_model_get_value(model,iter,NOTHING_COL,&val);	tDownload *temp=(tDownload *)g_value_peek_pointer(&val);	g_value_unset(&val);	if (GPOINTER_TO_INT(p))		temp->restart_from_begin=1;	aa.continue_download(temp);};void d4xQueueView::continue_downloads(int from_begin){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_selected_foreach(sel,_foreach_continue_,GINT_TO_POINTER(from_begin));};static void _foreach_invprot_(GtkTreeModel *model,GtkTreePath *path,			      GtkTreeIter *iter,gpointer p){	GValue val={0,};	gtk_tree_model_get_value(model,iter,NOTHING_COL,&val);	tDownload *temp=(tDownload *)g_value_peek_pointer(&val);	g_value_unset(&val);	temp->protect=!temp->protect;	d4xQueueView *qv=(d4xQueueView *)p;	qv->set_color(temp);};void d4xQueueView::inv_protect_flag(){	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	gtk_tree_selection_selected_foreach(sel,_foreach_invprot_,this);};void d4xQueueView::inherit_settings(d4xQueueView *papa){	for (int i=STATUS_COL;i<=NOTHING_COL;i++){		prefs.cols[i].type=papa->prefs.cols[i].type;		prefs.cols[i].size=papa->prefs.cols[i].size;		prefs.cols[i].visible=papa->prefs.cols[i].visible;	};};void d4xQueueView::save_to_config(int fd){	if (CFG.WITHOUT_FACE==0)		get_sizes();	f_wstr_lf(fd,"QV:");	for (int i=STATUS_COL;i<=NOTHING_COL;i++){		char data[10];		sprintf(data,"%i",prefs.cols[i].type);		f_wstr(fd,data);		if (i!=NOTHING_COL)			f_wstr(fd,",");		else			f_wstr_lf(fd,"");	};	for (int i=STATUS_COL;i<=NOTHING_COL;i++){		char data[10];		sprintf(data,"%i",prefs.cols[i].visible);		f_wstr(fd,data);		if (i!=NOTHING_COL)			f_wstr(fd,",");		else			f_wstr_lf(fd,"");	};			for (int i=STATUS_COL;i<=NOTHING_COL;i++){		char data[10];		sprintf(data,"%i",prefs.cols[i].size);		f_wstr(fd,data);		if (i!=NOTHING_COL)			f_wstr(fd,",");		else			f_wstr_lf(fd,"");	};		};int d4xQueueView::load_from_config(int fd){	char data[1000];	f_rstr(fd,data,1000);	char *tmp=data;	for (int i=STATUS_COL;i<=NOTHING_COL;i++){		if (tmp) sscanf(tmp,"%i",&prefs.cols[i].type);		else prefs.cols[i].type=i;		tmp=tmp?index(tmp,','):NULL;		if (tmp) tmp++;	};	f_rstr(fd,data,1000);	tmp=data;	for (int i=STATUS_COL;i<=NOTHING_COL;i++){		if (tmp) sscanf(tmp,"%i",&prefs.cols[i].visible);		else prefs.cols[i].visible=i;		tmp=tmp?index(tmp,','):NULL;		if (tmp) tmp++;	};	f_rstr(fd,data,1000);	tmp=data;	for (int i=STATUS_COL;i<=NOTHING_COL;i++){		if (tmp) sscanf(tmp,"%i",&prefs.cols[i].size);		else prefs.cols[i].size=10;		tmp=tmp?index(tmp,','):NULL;		if (tmp) tmp++;	};	int check[NOTHING_COL]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};	for (int i=0;i<NOTHING_COL;i++){		check[prefs.cols[i].type]=1;	};	int need_to_reset=0;	for (int i=0;i<NOTHING_COL;i++){		if (check[i]==0){			need_to_reset=1;			break;		};	};	if (need_to_reset){		for (int i=0;i<NOTHING_COL;i++){			prefs.cols[i].type=i;			prefs.cols[i].visible=1;			prefs.cols[i].size=100;		};	};			return(0);};	

⌨️ 快捷键说明

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