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