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

📄 lod.cc

📁 一个功能比较强的下载软件
💻 CC
📖 第 1 页 / 共 4 页
字号:
	GtkWidget *hbox=gtk_hbutton_box_new();	gtk_box_set_spacing(GTK_BOX(vbox),5);	LoDSelectEntry=gtk_entry_new();	gtk_box_pack_start(GTK_BOX(vbox),LoDSelectEntry,FALSE,FALSE,0);	gtk_box_set_spacing(GTK_BOX(hbox),5);	GtkWidget *ok_button=gtk_button_new_with_label(_("Ok"));	GtkWidget *cancel_button=gtk_button_new_with_label(_("Cancel"));	GTK_WIDGET_SET_FLAGS(ok_button,GTK_CAN_DEFAULT);	GTK_WIDGET_SET_FLAGS(cancel_button,GTK_CAN_DEFAULT);	gtk_box_pack_start(GTK_BOX(hbox),ok_button,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(hbox),cancel_button,FALSE,FALSE,0);	gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);	g_signal_connect(G_OBJECT(ok_button),"clicked",			 G_CALLBACK(_select_ok_),this);	g_signal_connect(G_OBJECT(cancel_button),"clicked",			 G_CALLBACK(_select_cancel_),NULL);	g_signal_connect(G_OBJECT(LoDSelectWindow),"delete_event",			 G_CALLBACK(_select_delete_),NULL);	g_signal_connect(G_OBJECT(LoDSelectEntry), "activate",			 G_CALLBACK(_select_ok_), this);	d4x_eschandler_init(LoDSelectWindow,this);	GtkWidget *frame=(GtkWidget*)NULL;	if (type)		frame=gtk_frame_new(_("Unselect"));	else		frame=gtk_frame_new(_("Select"));	gtk_container_add(GTK_CONTAINER(frame),vbox);	gtk_container_add(GTK_CONTAINER(LoDSelectWindow),frame);	gtk_widget_show_all(LoDSelectWindow);	gtk_window_set_default(GTK_WINDOW(LoDSelectWindow),ok_button);	gtk_widget_grab_focus(LoDSelectEntry);	gtk_window_set_modal (GTK_WINDOW(LoDSelectWindow),TRUE);	gtk_window_set_transient_for (GTK_WINDOW (LoDSelectWindow),				      GTK_WINDOW (MainWindow));};int list_event_callback(GtkTreeView *view,GdkEvent *event,d4xQueueView *qv) {	GtkTreeSelection *sel=gtk_tree_view_get_selection(view);	GdkEventButton *bevent=(GdkEventButton *)event;	if (event->type == GDK_BUTTON_PRESS) {		if (bevent->button==3) {			GtkTreePath *path=NULL;			if (gtk_tree_view_get_path_at_pos(view,int(bevent->x),int(bevent->y),&path,NULL,NULL,NULL)){				GtkTreeIter iter;				GtkTreeModel *model=gtk_tree_view_get_model(view);				gtk_tree_model_get_iter(model,&iter,path);				if (!gtk_tree_selection_iter_is_selected(sel,&iter))					gtk_tree_selection_unselect_all(sel);				gtk_tree_selection_select_iter(sel,&iter);				gtk_tree_path_free(path);			} else {				gtk_tree_selection_unselect_all(sel);			};			gint x,y;			GdkModifierType modmask;			gdk_window_get_pointer((GdkWindow *)NULL,&x,&y, &modmask);			list_menu_prepare();			gtk_menu_popup(GTK_MENU(ListMenu),(GtkWidget *)NULL,(GtkWidget *)NULL,(GtkMenuPositionFunc)NULL,(gpointer)NULL,bevent->button,bevent->time);			return TRUE;		};	};	if (event->type==GDK_2BUTTON_PRESS && bevent->button==1){		GtkTreePath *path=NULL;		if (gtk_tree_view_get_path_at_pos(view,int(bevent->x),int(bevent->y),&path,NULL,NULL,NULL)){			gtk_tree_selection_unselect_all(sel);			gtk_tree_selection_select_path(sel,path);			qv->open_logs();			gtk_tree_path_free(path);		};	};	if (event->type == GDK_KEY_PRESS) {		GdkEventKey *kevent=(GdkEventKey *)event;		switch(kevent->keyval) {		case GDK_Delete:		case GDK_KP_Delete:{			ask_delete_download();			return TRUE;		};		case GDK_KP_Enter:		case GDK_Return:{			qv->open_logs();			return TRUE;		};		case GDK_KP_Add:{			qv->init_select_window();			return TRUE;		};		case GDK_KP_Subtract:{			qv->init_select_window(1);			return TRUE;		};		};		if (kevent->state & GDK_SHIFT_MASK) {			switch (kevent->keyval) {			case GDK_KP_Up:			case GDK_Up:{				qv->move_up();				return TRUE;			};			case GDK_KP_Down:			case GDK_Down:{				qv->move_down();				return TRUE;			};			case GDK_KP_Page_Up:			case GDK_Page_Up:{				qv->move_selected_home();				return TRUE;			};			case GDK_KP_Page_Down:			case GDK_Page_Down:{				qv->move_selected_end();				return TRUE;			};			default:				break;			};		};	};	return FALSE;};/*void d4xQueueView::rebuild_wait(){	if (D4X_QUEUE->count(DL_WAIT)==0) return;	int i=0;	tDList *dlist=new tDList(DL_WAIT);	dlist->init_pixmap(PIX_WAIT);	dlist->init(0);	tDownload *tmp=(tDownload *)gtk_clist_get_row_data(GTK_CLIST(ListOfDownloads),i);	while(tmp){		if (tmp->owner()==DL_WAIT){			D4X_QUEUE->del(tmp);			dlist->insert(tmp);			if (D4X_QUEUE->count(DL_WAIT)==0)				break;		};		i+=1;		tmp=(tDownload *)gtk_clist_get_row_data(GTK_CLIST(ListOfDownloads),i);	};	D4X_QUEUE->replace_list(dlist,DL_WAIT);	if (CFG.WITHOUT_FACE==0)		D4X_QVT->update(D4X_QUEUE);};static int _cmp_bypercent(tDownload *a,tDownload *b){	return( b->Percent>a->Percent?1:-1);};static int _cmp_bysize(tDownload *a,tDownload *b){	return( b->finfo.size - a->finfo.size );};static int _cmp_bydsize(tDownload *a,tDownload *b){	return( b->Size.curent - a->Size.curent );};static int _cmp_byremain(tDownload *a,tDownload *b){	return( b->Remain.curent - a->Remain.curent );};static int _cmp_byspeed(tDownload *a,tDownload *b){	return( b->Speed.curent - a->Speed.curent);};static int _cmp_byfile(tDownload *a,tDownload *b){	if (a->info->file.get() && b->info->file.get())		return(strcmp(a->info->file.get(),			      b->info->file.get()));	if (a->info->file.get()) return(1);	if (b->info->file.get()) return(0);	return(-1);};static int _cmp_whole_size_(GtkCList *clist,			    gconstpointer ptr1,			    gconstpointer ptr2){	GtkCListRow *row1=(GtkCListRow *)ptr1;	GtkCListRow *row2=(GtkCListRow *)ptr2;	if (row1->data && row2->data){		return(_cmp_bysize((tDownload *)(row1->data),				   (tDownload *)(row2->data)));	};	if (row1->data)	return(1);	if (row2->data)	return(0);	return(-1);};#define CLIST_CMP_I(arg) static int arg##i_(GtkCList *clist, \					     gconstpointer ptr1, \					     gconstpointer ptr2){ \   return (arg(clist,ptr2,ptr1)); \}CLIST_CMP_I(_cmp_whole_size_);static int _cmp_whole_percent_(GtkCList *clist,			    gconstpointer ptr1,			    gconstpointer ptr2){	GtkCListRow *row1=(GtkCListRow *)ptr1;	GtkCListRow *row2=(GtkCListRow *)ptr2;	if (row1->data && row2->data){		return(_cmp_bypercent((tDownload *)(row1->data),				      (tDownload *)(row2->data)));	};	if (row1->data)	return(1);	if (row2->data)	return(0);	return(-1);};CLIST_CMP_I(_cmp_whole_percent_);static int _cmp_whole_status_(GtkCList *clist,			      gconstpointer ptr1,			      gconstpointer ptr2){	GtkCListRow *row1=(GtkCListRow *)ptr1;	GtkCListRow *row2=(GtkCListRow *)ptr2;	if (row1->data && row2->data){		int smap[]={0,10,6,8,9,11,7,0};		tDownload *d1=(tDownload *)(row1->data);		tDownload *d2=(tDownload *)(row2->data);		return(smap[d2->owner()]-smap[d1->owner()]);	};	if (row1->data) return(1);	if (row2->data) return(0);	return(-1);};CLIST_CMP_I(_cmp_whole_status_);static int _cmp_whole_file_(GtkCList *clist,			    gconstpointer ptr1,			    gconstpointer ptr2){	GtkCListRow *row1=(GtkCListRow *)ptr1;	GtkCListRow *row2=(GtkCListRow *)ptr2;	if (row1->data && row2->data){		return(_cmp_byfile((tDownload *)(row1->data),				      (tDownload *)(row2->data)));	};	if (row1->data) return(1);	if (row2->data)	return(0);	return(-1);};CLIST_CMP_I(_cmp_whole_file_);void d4xQueueView::sort(int how){	int count=D4X_QUEUE->count(DL_RUN);	int (*cmp_func)(tDownload *,tDownload *)=(int)NULL;	GdkModifierType mask;	gint x,y;	gdk_window_get_pointer(MainWindow->window,&x,&y,&mask);	int whole_list=mask & GDK_SHIFT_MASK;	switch(how){	case FILE_COL:{		if (whole_list){			gtk_clist_set_compare_func(GTK_CLIST(ListOfDownloads),						   LoDSortFlag==FILE_COL?_cmp_whole_file_:_cmp_whole_file_i_);			gtk_clist_sort(GTK_CLIST(ListOfDownloads));			rebuild_wait();			LoDSortFlag=LoDSortFlag==FILE_COL?-FILE_COL:FILE_COL;			return;		};		cmp_func=_cmp_byfile;	};	case STATUS_COL:		if (whole_list){			gtk_clist_set_compare_func(GTK_CLIST(ListOfDownloads),						   LoDSortFlag==PERCENT_COL?_cmp_whole_status_:_cmp_whole_status_i_);			gtk_clist_sort(GTK_CLIST(ListOfDownloads));			rebuild_wait();			LoDSortFlag=LoDSortFlag==PERCENT_COL?-PERCENT_COL:PERCENT_COL;			return;		};		cmp_func=NULL;		break;	case PERCENT_COL:		if (whole_list){			gtk_clist_set_compare_func(GTK_CLIST(ListOfDownloads),						   LoDSortFlag==PERCENT_COL?_cmp_whole_percent_:_cmp_whole_percent_i_);			gtk_clist_sort(GTK_CLIST(ListOfDownloads));			rebuild_wait();			LoDSortFlag=LoDSortFlag==PERCENT_COL?-PERCENT_COL:PERCENT_COL;			return;		};		cmp_func=_cmp_bypercent;		break;	case FULL_SIZE_COL:{		if (whole_list){			gtk_clist_set_compare_func(GTK_CLIST(ListOfDownloads),						   LoDSortFlag==FULL_SIZE_COL?_cmp_whole_size_:_cmp_whole_size_i_);			gtk_clist_sort(GTK_CLIST(ListOfDownloads));			rebuild_wait();			LoDSortFlag=LoDSortFlag==FULL_SIZE_COL?-FULL_SIZE_COL:FULL_SIZE_COL;			return;		};		cmp_func=_cmp_bysize;		break;	};	case DOWNLOADED_SIZE_COL:		cmp_func=_cmp_bydsize;				break;	case REMAIN_SIZE_COL:		cmp_func=_cmp_byremain;				break;	case SPEED_COL:		cmp_func=_cmp_byspeed;				break;	};	if (count<2) return; //nothing todo	if (cmp_func==NULL) return;	freeze();	tDownload *tmp=D4X_QUEUE->last(DL_RUN);	tDownload *cur=(tDownload*)(tmp->next);	int changed;	do{		changed=0;		gint row1=get_row(tmp);		while (cur){			gint row=get_row(cur);			if ((row<row1 && cmp_func(cur,tmp)<0) ||			    (row>row1 && cmp_func(cur,tmp)>0)){				swap(tmp,cur);				row1=row;				changed=1;			};			cur=(tDownload*)(cur->next);		};		if (changed==0){			tmp=(tDownload*)(tmp->next);			changed=1;		};		cur=(tDownload*)(tmp->next);	}while(changed && cur);	unfreeze();	LoDSortFlag=NOTHING_COL;};static void list_of_downloads_sort(GtkWidget *widget,d4xQueueView *qv){	int how=GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(widget)));	qv->sort(how);};void d4xQueueView::set_column_justification (int col, GtkJustification justify){	if (prefs.cols[col].enum_index<prefs.cols[NOTHING_COL].enum_index)		gtk_clist_set_column_justification (GTK_CLIST(ListOfDownloads),						    prefs.cols[col].enum_index,						    justify);};GtkWidget *d4xQueueView::get_column_widget(int col){	if (prefs.cols[col].enum_index<prefs.cols[NOTHING_COL].enum_index)		return (GTK_CLIST(ListOfDownloads)->column[prefs.cols[col].enum_index].button);	return((GtkWidget *)NULL);};void d4xQueueView::init_sort_buttons(){	GtkWidget *button=(GtkWidget *)NULL;	int a[]={PERCENT_COL,		 FILE_COL,		 STATUS_COL,		 DOWNLOADED_SIZE_COL,		 SPEED_COL,		 REMAIN_SIZE_COL,		 FULL_SIZE_COL	};	for (unsigned int i=0;i<sizeof(a)/sizeof(int);i++){		button=get_column_widget(a[i]);		if (button){			gtk_object_set_user_data(GTK_OBJECT(button),						 GINT_TO_POINTER(a[i]));			gtk_signal_connect(GTK_OBJECT(button),					   "clicked",					   GTK_SIGNAL_FUNC(list_of_downloads_sort),					   this);		};	};	};*/static GtkTargetEntry ltarget_table[] = {	{ "d4x/dpointer",     0, 0 }};static guint ln_targets = sizeof(ltarget_table) / sizeof(ltarget_table[0]);static void source_drag_data_get  (GtkWidget          *widget,				   GdkDragContext     *context,				   GtkSelectionData   *selection_data,				   guint               info,				   guint               time,				   gpointer            data){	if (info == 0)		gtk_selection_data_set (selection_data,					selection_data->target,					8, (guchar*)(&widget) ,sizeof(GtkWidget*));	else		gtk_drag_finish (context, TRUE, FALSE, time);}/*static void source_drag_begin(GtkWidget *widget,			      GdkDragContext *context){	if (GTK_CLIST(widget)->selection==NULL){		gdk_drag_status (context, context->suggested_action, time(NULL)); //		gtk_drag_finish (context, FALSE, FALSE, time(NULL));	};};*/void d4xQueueView::toggle_column_visibility(int b){	GList *tmp=gtk_tree_view_get_columns(GTK_TREE_VIEW(ListOfDownloads));	GList *a=tmp;	int i=0;	while (a){		GtkTreeViewColumn *col=GTK_TREE_VIEW_COLUMN(a->data);		gpointer p=g_object_get_data (G_OBJECT (col),					      "d4x_col_num");		if (b==GPOINTER_TO_INT(p)){			if (gtk_tree_view_column_get_visible(col))				gtk_tree_view_column_set_visible(col,FALSE);			else				gtk_tree_view_column_set_visible(col,TRUE);			break;		};		a=a->next;	};};static void _tmp_activate_(GtkWidget *widget,d4xQueueView *qv){	gint a=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget),"d4x_col_num"));	if (a>=0){		qv->toggle_column_visibility(a);	};

⌨️ 快捷键说明

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