📄 list.cc
字号:
};gint ask_exit2() { if (CFG.WINDOW_LOWER)// gdk_window_lower(MainWindow->window); main_window_iconify(); else ask_exit(); return TRUE;};static void a_delete_downloads(GtkWidget *widget, gpointer data){ CFG.CONFIRM_DELETE=!(GTK_TOGGLE_BUTTON(AskDelete->check)->active); delete_downloads(GPOINTER_TO_INT(data));};void ask_delete_download(...) { GdkModifierType mask; gint x,y; gdk_window_get_pointer(MainWindow->window,&x,&y,&mask); if (CFG.CONFIRM_DELETE) { if (!AskDelete) AskDelete=new tConfirmedDialog; if (AskDelete->init(_("Delete selected downloads?"),_("Delete?"))) g_signal_connect(G_OBJECT(AskDelete->ok_button), "clicked", G_CALLBACK(a_delete_downloads), GINT_TO_POINTER(mask & GDK_SHIFT_MASK)); AskDelete->set_modal(MainWindow); } else delete_downloads(mask & GDK_SHIFT_MASK);};static void _ask_delete_completed_check_(GtkWidget *widget, tConfirmedDialog *parent){ CFG.CONFIRM_DELETE_COMPLETED=!(GTK_TOGGLE_BUTTON(parent->check)->active); del_completed_downloads();};void ask_delete_completed_downloads(...) { if (CFG.CONFIRM_DELETE_COMPLETED) { if (!AskDeleteCompleted) AskDeleteCompleted=new tConfirmedDialog; if (AskDeleteCompleted->init(_("Do you wish delete completed downloads?"),_("Delete?"))) g_signal_connect(G_OBJECT(AskDeleteCompleted->ok_button), "clicked", G_CALLBACK(_ask_delete_completed_check_), AskDeleteCompleted); AskDeleteCompleted->set_modal(MainWindow); } else del_completed_downloads();};static void _ask_delete_failed_check_(GtkWidget *widget, tConfirmedDialog *parent){ CFG.CONFIRM_DELETE_FATALED=!(GTK_TOGGLE_BUTTON(parent->check)->active); del_fataled_downloads();};void ask_delete_fataled_downloads(...) { if (CFG.CONFIRM_DELETE_FATALED) { if (!AskDeleteFataled) AskDeleteFataled=new tConfirmedDialog; if (AskDeleteFataled->init(_("Do you wish delete failed downloads?"),_("Delete?"))) g_signal_connect(G_OBJECT(AskDeleteFataled->ok_button), "clicked", G_CALLBACK(_ask_delete_failed_check_), AskDeleteFataled); AskDeleteFataled->set_modal(MainWindow); } else del_fataled_downloads();};void delete_downloads(gint flag) { D4X_QUEUE->qv.delete_downloads(flag); if (AskDelete) AskDelete->done(); aa.try_to_run_wait(D4X_QUEUE);};void continue_downloads(...) { GdkModifierType mask; gint x,y; gdk_window_get_pointer(MainWindow->window,&x,&y,&mask); D4X_QUEUE->qv.continue_downloads(mask & GDK_SHIFT_MASK); prepare_buttons();};/* ******************************************************************** *//* ******************************************************************** */void init_status_bar() { ProgressBarValues = (GtkAdjustment *) gtk_adjustment_new (0, 1, 0 , 0, 0, 0); ProgressOfDownload = gtk_progress_bar_new(); /* Set the format of the string that can be displayed in the * trough of the progress bar: * %p - percentage * %v - value * %l - lower range value * %u - upper range value */ gtk_widget_set_size_request(ProgressOfDownload,-1,-1); MainStatusBar=gtk_statusbar_new(); gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(MainStatusBar),FALSE); ReadedBytesStatusBar=gtk_statusbar_new(); StatusBarContext=gtk_statusbar_get_context_id( GTK_STATUSBAR(MainStatusBar),"Main window context"); RBStatusBarContext=gtk_statusbar_get_context_id( GTK_STATUSBAR(ReadedBytesStatusBar),"Readed Bytes"); gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(ReadedBytesStatusBar),FALSE); gtk_statusbar_push(GTK_STATUSBAR(MainStatusBar),StatusBarContext,_("Ready to go ????")); gtk_statusbar_push(GTK_STATUSBAR(ReadedBytesStatusBar),RBStatusBarContext,"0"); gtk_widget_set_size_request(ReadedBytesStatusBar,150,-1);};void update_progress_bar() { if (!D4X_QUEUE) return; tDownload *temp=D4X_QUEUE->qv.last_selected; char data[MAX_LEN]; if(temp && (temp->finfo.size>0 || temp->Size.curent>0)){ char b[100]; d4x_percent_str(temp->Percent, b, sizeof(b)); sprintf(data, "%s%(%lli/%lli)",b,temp->Size.curent,temp->finfo.size); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressOfDownload),temp->Percent/100.0); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressOfDownload),data); }else{ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressOfDownload),1); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressOfDownload),NULL); }; gtk_widget_show(ProgressOfDownload); char data1[MAX_LEN]; make_number_nicel(data,GVARS.READED_BYTES,D4X_QUEUE->NICE_DEC_DIGITALS); sprintf(data1,"%s(%iB/s)",data,GlobalMeter->last_speed()); gtk_statusbar_pop(GTK_STATUSBAR(ReadedBytesStatusBar),RBStatusBarContext); gtk_statusbar_push(GTK_STATUSBAR(ReadedBytesStatusBar),RBStatusBarContext,data1);};/* ******************************************************************** */void d4x_normalize_coords(gint *x,gint *y,gint width,gint heigh){ int temp,w,h; gdk_window_get_geometry((GdkWindow *)NULL,&temp,&temp,&w,&h,&temp); if (*x+width<w && *y+heigh<h && *x+width>0 && *y+width>0) return; if (*x<0){ while (*x<0) *x+=w; }else{ while (*x>w) *x-=w; }; if (*y<0){ while (*y<0) *y+=h; }else{ while (*y>h) *y-=h; };};static void cb_page_size( GtkAdjustment *get) { if (get==NULL) return; if (main_log_value==get->value && get->value<get->upper-get->page_size) { //added 0.01 to prevent interface lockups get->value=get->upper-get->page_size; main_log_value=get->value; g_signal_emit_by_name(G_OBJECT (get), "value_changed"); } else main_log_value=get->value;}/****************************************************************** This part of code for DnD (Drag-n-Drop) support added by Justin Bradford ******************************************************************/// for drag-drop support// drop handler// define a target entry listing the mime-types we'll acknowledgeGtkTargetEntry download_drop_types[] = { { "x-url/http", 0, TARGET_URL}, { "x-url/ftp", 0, TARGET_URL}, { "_NETSCAPE_URL", 0, TARGET_URL}, { "x-url/*", 0, TARGET_URL}, { "text/uri-list", 0, TARGET_URL}, { "text/plain", 0, TARGET_DND_TEXT }, { "text/html", 0, TARGET_DND_TEXT }};// calculate the number of mime-types listedgint n_download_drop_types = sizeof(download_drop_types) / sizeof(download_drop_types[0]);/********************************************************************* End of first part of DnD's code *********************************************************************//********************************************************** Handler for DnD event **********************************************************/// this the drag-drop even handler// just add the url, and assume default download locationvoid list_dnd_drop_internal(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time) { g_return_if_fail(widget!=NULL); switch (info) { // covers all single URLs // a uri-list mime-type will need special handling case TARGET_DND_TEXT: case TARGET_URL:{ // make sure our url (in selection_data->data) is good /* printf("%s\n",gdk_atom_name(selection_data->type)); printf("%s\n",gdk_atom_name(selection_data->target)); printf("%s\n",gdk_atom_name(selection_data->selection)); */ if (selection_data->data != NULL) { int is_dnd_basket=0; if (!GTK_IS_SCROLLED_WINDOW(widget)){ dnd_trash_animation(); is_dnd_basket=1; }; SOUND_SERVER->add_event(SND_DND_DROP); int len = strlen((char*)selection_data->data); if (len && selection_data->data[len-1] == '\n') selection_data->data[len-1] = 0; // add the new download char *str = (char*)selection_data->data; int sbd=0;//should be deleted flag char *ent=index(str,'\n'); if (ent) *ent=0; unsigned char *a=(unsigned char *)str; while (*a){ // to avoid invalid signs if (*a<' '){ *a=0; break; }; a++; }; /* check for gmc style URL */ const char *gmc_url="file:/#ftp:"; if (begin_string((char*)selection_data->data,gmc_url)){ str = sum_strings("ftp://", (char*)selection_data->data + strlen(gmc_url), (char*)NULL); sbd=1; }; char *desc=ent?ent+1:(char *)NULL; char *desc_utf=desc?g_convert(desc,-1,"UTF-8",LOCALE_CODEPAGE,NULL,NULL,NULL):NULL; d4xDownloadQueue *tmpq=D4X_QUEUE; if (is_dnd_basket && dnd_trash_target_queue) D4X_QUEUE=dnd_trash_target_queue; if (CFG.NEED_DIALOG_FOR_DND){ init_add_dnd_window(str,desc_utf); }else{ aa.add_downloading(str, (char*)NULL,(char*)NULL,desc_utf); }; if (desc_utf) g_free(desc_utf); D4X_QUEUE=tmpq; if (sbd) delete[] str; } } }}/********************************************************** End of handler for DnD **********************************************************/void list_of_downloads_allocation(GtkWidget *paned,GtkAllocation *allocation){ if (MAIN_PANED_HEIGHT && allocation->height!=MAIN_PANED_HEIGHT){//FIXME: GTK2 float ratio=(float)CFG.WINDOW_CLIST_HEIGHT/(float)(MAIN_PANED_HEIGHT);//-GTK_PANED(MAIN_PANED)->gutter_size); CFG.WINDOW_CLIST_HEIGHT=int(ratio*(float)(allocation->height));//-GTK_PANED(MAIN_PANED)->gutter_size)); lod_set_height(); }; MAIN_PANED_HEIGHT=allocation->height; lod_get_height();};void init_main_log(){ GtkListStore *list_store = gtk_list_store_new(ML_COL_LAST+1, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); MainLogList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(MainLogList),FALSE); for (int i=0;i<ML_COL_LAST;i++){ GtkCellRenderer *renderer; GtkTreeViewColumn *col; renderer = gtk_cell_renderer_text_new (); col=gtk_tree_view_column_new_with_attributes ("Tittle", renderer, "text",i, "foreground",ML_COL_LAST, NULL); gtk_tree_view_column_set_resizable(col,FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(MainLogList),col); };/* MainLogList=gtk_clist_new(ML_COL_LAST); gtk_clist_set_column_width (GTK_CLIST(MainLogList),ML_COL_NUM,1); gtk_clist_set_column_width (GTK_CLIST(MainLogList),ML_COL_TIME,100); gtk_clist_set_column_width (GTK_CLIST(MainLogList),ML_COL_STRING,800); for (int i=0;i<ML_COL_LAST;i++) gtk_clist_set_column_auto_resize(GTK_CLIST(MainLogList),i,TRUE); gtk_clist_set_column_justification (GTK_CLIST(MainLogList), ML_COL_NUM, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification (GTK_CLIST(MainLogList), ML_COL_TIME, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification (GTK_CLIST(MainLogList), ML_COL_DATE, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification (GTK_CLIST(MainLogList), ML_COL_STRING, GTK_JUSTIFY_LEFT);*/};void init_main_window() { GtkWidget *hbox=gtk_hbox_new(FALSE,1); MainHBox=hbox; gtk_box_pack_start (GTK_BOX (hbox), MainStatusBar, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), ProgressOfDownload, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), ReadedBytesStatusBar, FALSE, FALSE, 0); gtk_widget_set_size_request(hbox,-1,21); init_main_log(); FSearchView=fs_list_init(); ContainerForCList=gtk_scrolled_window_new((GtkAdjustment *)NULL,(GtkAdjustment *)NULL); GtkWidget *hpaned=gtk_vpaned_new(); GtkWidget *vpaned=gtk_hpaned_new(); MAIN_PANED=hpaned; MAIN_PANED1=gtk_hpaned_new(); MAIN_PANED2=vpaned; main_log_adj = (GtkAdjustment *)gtk_adjustment_new (0.0, 0.0, 0.0, 0.1, 1.0, 1.0); main_log_value=0.0; g_signal_connect(G_OBJECT (main_log_adj), "changed", G_CALLBACK (cb_page_size), NULL); GtkWidget *scroll_window=gtk_scrolled_window_new((GtkAdjustment *)NULL,main_log_adj); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_window), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(scroll_window),MainLogList); GtkWidget *scroll_window2=gtk_scrolled_window_new((GtkAdjustment *)NULL,(GtkAdjustment *)NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window2), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); D4X_QVT=new d4xQsTree; D4X_QVT->init(); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_window2), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(scroll_window2),GTK_WIDGET(D4X_QVT->view)); gtk_paned_add1(GTK_PANED(MAIN_PANED1),scroll_window2); gtk_paned_add2(GTK_PANED(MAIN_PANED1),ContainerForCList); gtk_paned_add1(GTK_PANED(hpaned),MAIN_PANED1); gtk_paned_add2(GTK_PANED(hpaned),vpaned); gtk_paned_add1(GTK_PANED(vpaned),scroll_window); GtkWidget *scroll_window1=gtk_scrolled_window_new((GtkAdjustment *)NULL,(GtkAdjustment *)NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window1), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_window1), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(scroll_window1),(GtkWidget *)FSearchView); gtk_paned_add2(GTK_PANED(vpaned),scroll_window1); GtkWidget *TEMP=my_gtk_graph_new();//gtk_statusbar_new(); GLOBAL_GRAPH=(MyGtkGraph *)TEMP; gtk_widget_set_size_request(TEMP,104,-1); gtk_box_pack_end (GTK_BOX (hbox), TEMP, FALSE, FALSE, 0); GtkWidget *vbox=gtk_vbox_new(FALSE,1); gtk_box_pack_start (GTK_BOX (vbox), MainMenu, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), ButtonsBar, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0); gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(MainWindow),vbox); gtk_widget_show(MainStatusBar); gtk_widget_show(ProgressOfDownload); gtk_widget_show(TEMP); gtk_widget_show(ReadedBytesStatusBar); gtk_progress_bar_set_fraction((GtkProgressBar *)ProgressOfDownload,1); gtk_widget_show(ContainerForCList); gtk_widget_show(MainLogList); gtk_widget_show((GtkWidget *)FSearchView); gtk_widget_show(scroll_window); gtk_widget_show(scroll_window1); gtk_widget_show_all(scroll_window2); gtk_widget_show(MAIN_PANED1); gtk_widget_show(hpaned); gtk_widget_show(vpaned); gtk_widget_show(MainMenu); gtk_widget_show(hbox); gtk_widget_show(vbox); gtk_widget_show(MainWindow); if (!CFG.DONOTSET_WINPOS) gdk_window_move_resize(MainWindow->window, gint(CFG.WINDOW_X_POSITION), gint(CFG.WINDOW_Y_POSITION), gint(CFG.WINDOW_WIDTH), gint(CFG.WINDOW_HEIGHT)); g_signal_connect(G_OBJECT (MAIN_PANED), "size_allocate", G_CALLBACK (list_of_downloads_allocation), NULL); g_signal_connect(G_OBJECT (MAIN_PANED2), "size_allocate",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -