📄 lod.cc
字号:
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 + -