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

📄 lod.cc

📁 一个功能比较强的下载软件
💻 CC
📖 第 1 页 / 共 4 页
字号:
		complete_xpm,		paused_xpm	};	d4xXmlObject *xmlobj=d4x_xml_find_obj(D4X_THEME_DATA,"queue");	for (unsigned int i=0;i<sizeof(xpm_table)/sizeof(char*);i++){		char *file=NULL;		d4xXmlObject *icon=xmlobj?xmlobj->find_obj(xml_names[i]):NULL;		d4xXmlField *fld=icon?icon->get_attr("file"):NULL;		if (fld){			file=sum_strings(CFG.THEMES_DIR,"/",fld->value.get(),NULL);		};		GdkPixbuf *pixbuf;		GError *error=NULL;		if (file && (pixbuf=gdk_pixbuf_new_from_file(file,&error))){			list_of_downloads_pixbufs[i]=pixbuf;		}else			list_of_downloads_pixbufs[i]=gdk_pixbuf_new_from_xpm_data((const char **)xpm_table[i]);		if (error) g_error_free(error);		if (file) delete[] file;	};	/* we will use these pixmaps many times */};void lod_all_redraw(d4xDownloadQueue *q,void *a){	q->qv.redraw_icons();};void lod_theme_changed(){	for (int i=0;i<PIX_UNKNOWN;i++){		gdk_pixbuf_unref(list_of_downloads_pixbufs[i]);		list_of_downloads_pixbufs[i]=NULL;	};	lod_init_pixmaps();	d4x_qtree_for_each(lod_all_redraw,NULL);};gboolean select_download(GtkTreeSelection *sel, GtkTreeModel *model,GtkTreePath *path,			 gboolean is_sel, gpointer data){	d4xQueueView *qv=(d4xQueueView *)data;	gtk_statusbar_pop(GTK_STATUSBAR(MainStatusBar),StatusBarContext);	GtkTreeIter iter;	gtk_tree_model_get_iter(model,&iter,path);	tDownload *tmp=qv->get_download(&iter);	if (!is_sel){		qv->last_selected=tmp;		char *rfile=unparse_percents(tmp->info->file.get());		gtk_statusbar_push(GTK_STATUSBAR(MainStatusBar),				   StatusBarContext,				   rfile);		delete[] rfile;	}else{		if (qv->last_selected==tmp){			qv->last_selected=NULL;			gtk_statusbar_push(GTK_STATUSBAR(MainStatusBar),StatusBarContext,"");		};	};	prepare_buttons();	update_progress_bar();// commented out to avoid WM hangs i.e. enlightenment//	update_mainwin_title();//	if (event && event->type==GDK_2BUTTON_PRESS && event->button==1)	return(TRUE);};gboolean _lod_redraw_icons_(GtkTreeModel *model, GtkTreePath *path,			    GtkTreeIter *iter, gpointer data){	d4xQueueView *qv=(d4xQueueView *)data;	qv->redraw_pixmap(iter);};void d4xQueueView::redraw_pixmap(GtkTreeIter *iter){	//nothing	set_pixmap(get_download(iter));};void d4xQueueView::redraw_icons() {	gtk_tree_model_foreach(GTK_TREE_MODEL(list_store),_lod_redraw_icons_,this);};void d4xQueueView::set_desc(tDownload *what){	if (what->Description.get()){		change_data(what->list_iter,			    DESCRIPTION_COL,			    what->Description.get());	};};void d4xQueueView::set_filename(tDownload *what){	char *file_utf=what->info->file.get();	if (g_utf8_validate(file_utf,-1,NULL)){		change_data(what->list_iter,FILE_COL,file_utf);	}else{		file_utf=g_convert_with_fallback(file_utf,-1,"UTF-8","ISO8859-1",NULL,NULL,NULL,NULL);		change_data(what->list_iter,FILE_COL,file_utf);		g_free(file_utf);	};};void d4xQueueView::set_percent(GtkTreeIter *iter,float percent){	gtk_list_store_set (list_store, iter,			    PERCENT_COL,percent,			    -1);};void d4xQueueView::change_data(GtkTreeIter *iter,int column,gchar *data) {	gtk_list_store_set (list_store, iter,			    column,data,			    -1);};void d4xQueueView::set_color(tDownload *what){	//FIXME: GTK2	gtk_list_store_set (list_store, what->list_iter,			    NOTHING_COL+1,gboolean(what->protect),			    -1);	};void d4xQueueView::update(tDownload *what) {	char *URL=what->info->url();	change_data(what->list_iter,URL_COL,URL);	delete[] URL;	set_desc(what);	set_filename(what);};void d4xQueueView::get_sizes() {	if (!ListOfDownloads) return;	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);		int size=gtk_tree_view_column_get_width(col);		if (size>0) //check for columns which never be drawn			prefs.cols[i].size=size;		gpointer p=g_object_get_data (G_OBJECT (col),					      "d4x_col_num");		prefs.cols[i].type=GPOINTER_TO_INT(p);		prefs.cols[i++].visible=gtk_tree_view_column_get_visible(col);		a=a->next;	};	g_list_free(tmp);};void d4xQueueView::print_size(tDownload *what){	char data1[MAX_LEN];	int NICE_DEC_DIGITALS=what->myowner->PAPA->NICE_DEC_DIGITALS;	if (what->finfo.size>0){		make_number_nice(data1,what->finfo.size,NICE_DEC_DIGITALS);		change_data(what->list_iter,			    FULL_SIZE_COL,			    data1);	};	if (what->Size.curent>0){		make_number_nice(data1,what->Size.curent,NICE_DEC_DIGITALS);		change_data(what->list_iter,			    DOWNLOADED_SIZE_COL,			    data1);	};	if (what->finfo.size>0 && what->Size.curent<=what->finfo.size){		float p=(float(what->Size.curent)*float(100))/float(what->finfo.size);		set_percent(what->list_iter,p);		make_number_nice(data1,what->finfo.size-what->Size.curent,NICE_DEC_DIGITALS);		change_data(what->list_iter,			    REMAIN_SIZE_COL,			    data1);	};};void d4xQueueView::add(tDownload *what) {	add_wf(what);	if (CFG.WITHOUT_FACE) return;	LoDSortFlag=NOTHING_COL;	char *URL=what->info->url_parsed();	GtkTreeIter iter;	gtk_list_store_append(list_store, &iter);	gtk_list_store_set(list_store, &iter,			   URL_COL, URL,			   NOTHING_COL, what,			   DESCRIPTION_COL,what->Description.get(),			   NOTHING_COL+1,gboolean(what->protect),			   -1);	if (what->list_iter) gtk_tree_iter_free(what->list_iter);	what->list_iter=gtk_tree_iter_copy(&iter);	delete[] URL;	print_size(what);	set_filename(what);	set_pixmap(what);};void d4xQueueView::remove(tDownload *what){	remove_wf(what);	if (CFG.WITHOUT_FACE) return;	gtk_list_store_remove(list_store,what->list_iter);	gtk_tree_iter_free(what->list_iter);	what->list_iter=NULL;};void d4xQueueView::set_run_icon(tDownload *what){	int a=int(what->Percent * 0.09);	if (a>9) a=9;	if (a<0) a=0;	switch (what->Status.curent) {	case D_QUERYING:{		set_pixmap(what,PIX_RUN_PART+a);		break;	};	default:	case D_DOWNLOAD:{		set_pixmap(what,PIX_RUN+a);		break;	};	case D_DOWNLOAD_BAD:{		set_pixmap(what,PIX_RUN_BAD+a);		break;	};	};};void d4xQueueView::add_first(tDownload *what) {	add_wf(what);	if (CFG.WITHOUT_FACE) return;	LoDSortFlag=NOTHING_COL;	char *URL=what->info->url_parsed();	GtkTreeIter iter;	gtk_list_store_prepend(list_store, &iter);	gtk_list_store_set(list_store, &iter,			   URL_COL, URL,			   NOTHING_COL, what,			   DESCRIPTION_COL,what->Description.get(),			   NOTHING_COL+1,what->protect,			   -1);	if (what->list_iter) gtk_tree_iter_free(what->list_iter);	what->list_iter=gtk_tree_iter_copy(&iter);	delete[] URL;	set_filename(what);	set_pixmap(what);	print_size(what);};void d4xQueueView::move_download_up(GtkTreeIter *iter){	GtkTreePath *prev=gtk_tree_model_get_path(GTK_TREE_MODEL(list_store),iter);	if (gtk_tree_path_prev(prev)){		GtkTreeIter iter_prev;		gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store),&iter_prev,prev);		tDownload *what=get_download(&iter_prev);		tDownload *what2=get_download(iter);		if (what->owner()==DL_WAIT && what2->owner()==DL_WAIT)			D4X_QUEUE->backward(what);		gtk_tree_model_swap_rows_l(GTK_TREE_MODEL(list_store),iter,&iter_prev);		gtk_tree_iter_free(what->list_iter);		gtk_tree_iter_free(what2->list_iter);		what->list_iter=gtk_tree_iter_copy(iter);		what2->list_iter=gtk_tree_iter_copy(&iter_prev);		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);			gtk_tree_selection_select_iter(sel,&iter_prev);		};	};	gtk_tree_path_free(prev);};void d4xQueueView::move_download_down(GtkTreeIter *iter){	GtkTreeIter *iter_next=gtk_tree_iter_copy(iter);	if (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store),iter_next)){		tDownload *what=get_download(iter);		tDownload *what2=get_download(iter_next);		if (what->owner()==DL_WAIT && what2->owner()==DL_WAIT)			D4X_QUEUE->backward(what);		gtk_tree_model_swap_rows_l(GTK_TREE_MODEL(list_store),iter,iter_next);		gtk_tree_iter_free(what->list_iter);		gtk_tree_iter_free(what2->list_iter);		what->list_iter=gtk_tree_iter_copy(iter_next);		what2->list_iter=gtk_tree_iter_copy(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);			gtk_tree_selection_select_iter(sel,iter_next);		};	}else{		move_success=0;	};	gtk_tree_iter_free(iter_next);};static void _foreach_move_up_(GtkTreeModel *model,GtkTreePath *path,			      GtkTreeIter *iter,gpointer p){	d4xQueueView *qv=(d4xQueueView *)p;	qv->move_download_up(iter);};int d4xQueueView::move_selected_up(){	// move up while first row is not selected	GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));	GtkTreeIter first;	if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store),&first) &&	    !gtk_tree_selection_iter_is_selected(sel,&first)){		gtk_tree_selection_selected_foreach(sel,						    _foreach_move_up_,						    this);	return 1;	};	return 0;};static void _foreach_move_down_prepare_(GtkTreeModel *model,GtkTreePath *path,					GtkTreeIter *iter,gpointer p){	tQueue *q=(tQueue*)p;	tmpIterNode *i=new tmpIterNode(iter);	q->insert(i);};int d4xQueueView::move_selected_down(){	tQueue q;	move_success=1;	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){		move_download_down(((tmpIterNode*)t)->iter);		t=t->next;	};	return(move_success);};void d4xQueueView::move_up(){	move_selected_up();};void d4xQueueView::move_down(){	move_selected_down();};void d4xQueueView::move_selected_home(){	while (move_selected_up());};void d4xQueueView::move_selected_end(){	while (move_selected_down());};tDownload *d4xQueueView::get_download(GtkTreeIter *iter) {	GValue val={0,};	gtk_tree_model_get_value(GTK_TREE_MODEL(list_store),iter,				 NOTHING_COL,&val);	tDownload *what=(tDownload *)g_value_get_pointer(&val);	g_value_unset(&val);	return what;};void d4xQueueView::select_by_wildcard(GtkTreeIter *iter){	tDownload *dwn=get_download(iter);	if (dwn && dwn->info->file.get() &&	    check_mask2(dwn->info->file.get(),wildcard)){		GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));		gtk_tree_selection_select_iter(sel,iter);	};};void d4xQueueView::unselect_by_wildcard(GtkTreeIter *iter){	tDownload *dwn=get_download(iter);	if (dwn && dwn->info->file.get() &&	    check_mask2(dwn->info->file.get(),wildcard)){		GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(ListOfDownloads));		gtk_tree_selection_unselect_iter(sel,iter);	};};static gboolean _real_select_by_wildcard_(GtkTreeModel *model,GtkTreePath *path,					  GtkTreeIter *iter,gpointer data){	d4xQueueView *qv=(d4xQueueView *)data;	qv->select_by_wildcard(iter);};static gboolean _real_unselect_by_wildcard_(GtkTreeModel *model,GtkTreePath *path,					  GtkTreeIter *iter,gpointer data){	d4xQueueView *qv=(d4xQueueView *)data;	qv->unselect_by_wildcard(iter);};void d4xQueueView::real_select(int type,char *w){	if (w==NULL || *w==0) return;	wildcard=w;	if (type){		gtk_tree_model_foreach(GTK_TREE_MODEL(list_store),				       _real_unselect_by_wildcard_,				       this);	}else{		gtk_tree_model_foreach(GTK_TREE_MODEL(list_store),				       _real_select_by_wildcard_,				       this);	};};static void _select_ok_(GtkButton *button,d4xQueueView *qv){	char *w=text_from_combo(LoDSelectEntry);	qv->real_select(LoDSelectType,w);	gtk_widget_destroy(LoDSelectWindow);	LoDSelectWindow=(GtkWidget*)NULL;};static void _select_cancel_(GtkButton *button,gpointer unused){	gtk_widget_destroy(LoDSelectWindow);	LoDSelectWindow=(GtkWidget*)NULL;};static gint _select_delete_(GtkWidget *window,GdkEvent *event,			    gpointer unused) {	gtk_widget_destroy(LoDSelectWindow);	LoDSelectWindow=(GtkWidget*)NULL;	return(TRUE);};/*  void list_of_downloads_select()  this routine bring up a dialog for selecting  items in queue of downloads by wildcart*/void d4xQueueView::init_select_window(int type){	if (LoDSelectWindow){		gdk_window_show(LoDSelectWindow->window);		return;	};	LoDSelectType=type;	LoDSelectWindow= gtk_window_new(GTK_WINDOW_TOPLEVEL);	gtk_window_set_wmclass(GTK_WINDOW(LoDSelectWindow),			       "D4X_SelectDialog","D4X");	gtk_window_set_title(GTK_WINDOW (LoDSelectWindow),			     _("Enter wildcard"));	gtk_window_set_position(GTK_WINDOW(LoDSelectWindow),				GTK_WIN_POS_CENTER);	gtk_container_set_border_width(GTK_CONTAINER(LoDSelectWindow),5);	GtkWidget *vbox=gtk_vbox_new(FALSE,0);

⌨️ 快捷键说明

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