📄 qtree.cc
字号:
drop_to_row=row_to_color=NULL; gtk_drag_dest_set (GTK_WIDGET(view), (GtkDestDefaults)(GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP), ltarget_table, ln_targets, (GdkDragAction)(GDK_ACTION_COPY|GDK_ACTION_MOVE)); g_signal_connect(G_OBJECT (view), "drag_leave", G_CALLBACK (target_drag_leave), this); g_signal_connect(G_OBJECT (view), "drag_drop", G_CALLBACK (target_drag_drop), this); g_signal_connect(G_OBJECT (view), "drag_data_received", G_CALLBACK (target_drag_data_received), this); g_signal_connect(G_OBJECT (view), "drag_motion", G_CALLBACK (target_drag_motion), this); g_signal_connect(G_OBJECT(view), "event", G_CALLBACK(_event_queue_),this); menu1=menu2=dialog=prefs=NULL;};void d4xQsTree::add(d4xDownloadQueue *what,d4xDownloadQueue *papa){ what->inserted=1; if (papa){ gtk_tree_store_append(store,&(what->tree_iter),&(papa->tree_iter)); GtkTreePath *path=gtk_tree_model_get_path(GTK_TREE_MODEL(store),&(papa->tree_iter)); gtk_tree_view_expand_row(view,path,TRUE); gtk_tree_path_free(path); }else gtk_tree_store_append(store,&(what->tree_iter),NULL); char data[100]; sprintf(data,"%i/%i",what->count(DL_RUN),what->MAX_ACTIVE); gtk_tree_store_set(store,&(what->tree_iter), QROW_NAME,what->name.get(), QROW_TOTAL,what->count(), QROW_WAIT,what->count(DL_WAIT), QROW_RUN,data, QROW_QUEUE,what, QROW_LAST,FALSE, -1);};void d4xQsTree::del(d4xDownloadQueue *what){ gtk_tree_store_remove(store,&(what->tree_iter)); what->inserted=0;};void d4xQsTree::update(d4xDownloadQueue *what){ if (store==NULL) return; char data[100]; sprintf(data,"%i/%i",what->count(DL_RUN),what->MAX_ACTIVE); gtk_tree_store_set(store,&(what->tree_iter), QROW_NAME,what->name.get(), QROW_TOTAL,what->count(), QROW_WAIT,what->count(DL_WAIT), QROW_RUN,data, -1);};void d4xQsTree::switch_remote(d4xDownloadQueue *what){ if (store && what->inserted){ GtkTreeSelection *sel=gtk_tree_view_get_selection(view); gtk_tree_selection_select_iter(sel,&(what->tree_iter)); };};void d4xQsTree::switch_to(d4xDownloadQueue *what){ if (D4X_QUEUE==what) return; if (D4X_QUEUE){ D4X_QUEUE->reset_empty_func(); D4X_QUEUE->qv.get_adj();// gtk_widget_hide(D4X_QUEUE->qv.ListOfDownloads); gtk_container_remove(GTK_CONTAINER(ContainerForCList),D4X_QUEUE->qv.ListOfDownloads); }; gtk_container_add(GTK_CONTAINER(ContainerForCList),what->qv.ListOfDownloads); gtk_widget_show(what->qv.ListOfDownloads); what->set_defaults(); D4X_QUEUE=what; D4X_QUEUE->qv.set_shift(D4X_QUEUE->qv.current_shift); prepare_buttons();};void d4xQsTree::select_row(GtkTreeIter *iter){ GValue val={0,}; gtk_tree_model_get_value(GTK_TREE_MODEL(store),iter, QROW_QUEUE,&val); d4xDownloadQueue *q=(d4xDownloadQueue *)g_value_peek_pointer(&val); g_value_unset(&val); if (q) switch_to(q);};void d4xQsTree::init_menus() { GtkItemFactoryEntry menu_items1[] = { {_("/Create new queue"), (gchar *)NULL, (GtkItemFactoryCallback)_menu_event_, 0, (gchar *)NULL}, {_("/Create new subqueue"), (gchar *)NULL, (GtkItemFactoryCallback)_menu_event_, 1, (gchar *)NULL}, {_("/Delete queue"), (gchar *)NULL, (GtkItemFactoryCallback)_menu_event_, 2,(gchar *)NULL}, {_("/Properties"), (gchar *)NULL, (GtkItemFactoryCallback)_menu_event_, 3, (gchar *)NULL} }; GtkItemFactoryEntry menu_items2[] = { {_("/Create new queue"), (gchar *)NULL, (GtkItemFactoryCallback)_menu_event_, 0, (gchar *)NULL} }; int nmenu_items1 = sizeof(menu_items1) / sizeof(menu_items1[0]); int nmenu_items2 = sizeof(menu_items2) / sizeof(menu_items2[0]); GtkAccelGroup *accel_group = gtk_accel_group_new(); GtkItemFactory *item_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>",accel_group); gtk_item_factory_create_items(item_factory, nmenu_items1, menu_items1, this); menu1 = gtk_item_factory_get_widget(item_factory, "<main>"); accel_group = gtk_accel_group_new(); item_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>",accel_group); gtk_item_factory_create_items(item_factory, nmenu_items2, menu_items2, this); menu2 = gtk_item_factory_get_widget(item_factory, "<main>");};void d4xQsTree::popup_menu(GdkEvent *event,int selected){ if (menu1==NULL) init_menus(); GdkEventButton *bevent=(GdkEventButton *)event; if (selected) gtk_menu_popup(GTK_MENU(menu1), (GtkWidget *)NULL, (GtkWidget *)NULL, (GtkMenuPositionFunc)NULL, (gpointer)NULL, bevent->button,bevent->time); else gtk_menu_popup(GTK_MENU(menu2), (GtkWidget *)NULL, (GtkWidget *)NULL, (GtkMenuPositionFunc)NULL, (gpointer)NULL, bevent->button,bevent->time);};d4xDownloadQueue *d4xQsTree::selected(){ GtkTreeSelection *sel=gtk_tree_view_get_selection(view); GtkTreeIter iter; if (gtk_tree_selection_get_selected(sel,NULL,&iter)){ GValue val={0,}; gtk_tree_model_get_value(GTK_TREE_MODEL(store),&iter, QROW_QUEUE,&val); d4xDownloadQueue *q=(d4xDownloadQueue *)g_value_peek_pointer(&val); g_value_unset(&val); return(q); }; return(NULL);};void d4xQsTree::delete_queue(){ d4xDownloadQueue *q=selected(); if (q==NULL) return; if (q->count() || q->child.count()) return; //remove all downloads if (q->prev==NULL && q->next==NULL && q->parent==NULL) return; //last queue if (D4X_QUEUE==q){ if (q->parent) switch_to(q->parent); else{ d4xDownloadQueue *sw=(d4xDownloadQueue *)(q->next?q->next:q->prev); switch_to(sw); }; }; if (q->parent) q->parent->subq_del(q); else D4X_QTREE.del(q); del(q); delete(q);};static void _prefs_cancel_(GtkButton *button,d4xQsTree *qt){ qt->prefs_cancel();};static void _prefs_ok_(GtkWidget *widget,d4xQsTree *qt){ qt->prefs_ok();};static void _prefs_delete_(GtkWidget *window,GdkEvent *event,d4xQsTree *qt){ qt->prefs_cancel();};void d4xQsTree::prefs_init(){ d4xDownloadQueue *q=selected(); if (q==NULL) return; if (prefs){ gdk_window_show(prefs->window); return; }; GtkWidget *vbox=gtk_vbox_new(FALSE,0); gtk_box_set_spacing(GTK_BOX(vbox),5); prefs = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_wmclass(GTK_WINDOW(prefs), "D4X_QueuePrefs","D4X"); gtk_window_set_title(GTK_WINDOW (prefs), _("Queue properties")); gtk_window_set_position(GTK_WINDOW(prefs), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(prefs),5); GtkWidget *prefs_limits_tbox=gtk_hbox_new(FALSE,0); gtk_box_set_spacing(GTK_BOX(prefs_limits_tbox),5); GtkAdjustment *adj = (GtkAdjustment *) gtk_adjustment_new (q->MAX_ACTIVE, 0, 50.0, 1.0, 3.0, 0.0);// max_threads=my_gtk_entry_new_with_max_length(3,q->MAX_ACTIVE); max_threads = gtk_spin_button_new (adj, 0, 0); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (max_threads), TRUE); gtk_box_pack_start(GTK_BOX(prefs_limits_tbox),max_threads,FALSE,FALSE,0); GtkWidget *prefs_limits_tlabel=gtk_label_new(_("Maximum active downloads")); gtk_box_pack_start(GTK_BOX(prefs_limits_tbox),prefs_limits_tlabel,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),prefs_limits_tbox,FALSE,FALSE,0); del_completed=gtk_check_button_new_with_label(_("Automatically delete completed downloads")); del_fataled=gtk_check_button_new_with_label(_("Automatically delete failed downloads")); GTK_TOGGLE_BUTTON(del_completed)->active=q->AUTODEL_COMPLETED; GTK_TOGGLE_BUTTON(del_fataled)->active=q->AUTODEL_FAILED; gtk_box_pack_start(GTK_BOX(vbox),del_completed,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),del_fataled,FALSE,FALSE,0); path_entry=my_gtk_filesel_new(ALL_HISTORIES[PATH_HISTORY]); MY_GTK_FILESEL(path_entry)->modal=GTK_WINDOW(prefs); MY_GTK_FILESEL(path_entry)->only_dirs=TRUE; text_to_combo(MY_GTK_FILESEL(path_entry)->combo,q->save_path.get()); GtkWidget *path_label=gtk_label_new(_("Default folder to save downloaded files")); GtkWidget *path_vbox=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(path_vbox),path_label,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(path_vbox),path_entry,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),path_vbox,FALSE,FALSE,0); GtkWidget *columns_hbox=gtk_hbox_new(FALSE,0); gtk_box_set_spacing(GTK_BOX(columns_hbox),5); GtkWidget *columns_frame1=gtk_frame_new(_("Size format")); GtkWidget *columns_frame2=gtk_frame_new(_("Time format")); gtk_container_set_border_width(GTK_CONTAINER(columns_frame1),5); gtk_container_set_border_width(GTK_CONTAINER(columns_frame2),5); GtkWidget *columns_vbox1=gtk_vbox_new(FALSE,0); GtkWidget *columns_vbox2=gtk_vbox_new(FALSE,0); columns_nums1=gtk_radio_button_new_with_label((GSList *)NULL,"123456"); gtk_box_pack_start(GTK_BOX(columns_vbox1),columns_nums1,FALSE,FALSE,0); GSList *columns_group1=gtk_radio_button_get_group(GTK_RADIO_BUTTON(columns_nums1)); columns_nums2=gtk_radio_button_new_with_label(columns_group1,"123 456"); gtk_box_pack_start(GTK_BOX(columns_vbox1),columns_nums2,FALSE,FALSE,0); columns_nums3=gtk_radio_button_new_with_label( gtk_radio_button_get_group(GTK_RADIO_BUTTON(columns_nums2)),"123K"); gtk_box_pack_start(GTK_BOX(columns_vbox1),columns_nums3,FALSE,FALSE,0); columns_nums4=gtk_radio_button_new_with_label( gtk_radio_button_get_group(GTK_RADIO_BUTTON(columns_nums3)),"123'456"); gtk_box_pack_start(GTK_BOX(columns_vbox1),columns_nums4,FALSE,FALSE,0); switch(q->NICE_DEC_DIGITALS) { case 1: { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(columns_nums2),TRUE); break; }; case 2:{ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(columns_nums3),TRUE); break; }; case 3: { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(columns_nums4),TRUE); break; }; default: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(columns_nums1),TRUE); }; columns_time1=gtk_radio_button_new_with_label((GSList *)NULL,"12:34:56"); gtk_box_pack_start(GTK_BOX(columns_vbox2),columns_time1,FALSE,FALSE,0); GSList *columns_group2=gtk_radio_button_get_group(GTK_RADIO_BUTTON(columns_time1)); columns_time2=gtk_radio_button_new_with_label(columns_group2,"12:34"); gtk_box_pack_start(GTK_BOX(columns_vbox2),columns_time2,FALSE,FALSE,0); if (q->TIME_FORMAT) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(columns_time2),TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(columns_time1),TRUE); gtk_container_add(GTK_CONTAINER(columns_frame1),columns_vbox1); GtkWidget *columns_vbox11=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(columns_vbox11),columns_frame1,FALSE,FALSE,0); GtkWidget *columns_vbox12=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(columns_vbox11),columns_vbox12,FALSE,FALSE,0); gtk_container_add(GTK_CONTAINER(columns_frame2),columns_vbox2); GtkWidget *columns_vbox21=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(columns_vbox21),columns_frame2,FALSE,FALSE,0); GtkWidget *columns_vbox22=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(columns_vbox21),columns_vbox22,FALSE,FALSE,0); gtk_box_set_spacing(GTK_BOX(columns_hbox),5); gtk_box_pack_start(GTK_BOX(columns_hbox),columns_vbox11,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(columns_hbox),columns_vbox21,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),columns_hbox,FALSE,FALSE,0); GtkWidget *prefs_tbox=gtk_hbox_new(FALSE,0); gtk_box_set_spacing(GTK_BOX(prefs_tbox),5); name=gtk_entry_new(); text_to_combo(name,q->name.get()); GtkWidget *prefs_tlabel=gtk_label_new(_("Name of the queue")); gtk_box_pack_start(GTK_BOX(prefs_tbox),prefs_tlabel,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(prefs_tbox),name,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),prefs_tbox,FALSE,FALSE,0); GtkWidget *hbbox=gtk_hbutton_box_new(); gtk_box_set_spacing(GTK_BOX(hbbox),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_end(GTK_BOX(hbbox),ok_button,FALSE,FALSE,0); gtk_box_pack_end(GTK_BOX(hbbox),cancel_button,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),hbbox,FALSE,FALSE,0); g_signal_connect(G_OBJECT(ok_button),"clicked", G_CALLBACK(_prefs_ok_),this); g_signal_connect(G_OBJECT(cancel_button),"clicked", G_CALLBACK(_prefs_cancel_),this); g_signal_connect(G_OBJECT(prefs),"delete_event", G_CALLBACK(_prefs_delete_),this); d4x_eschandler_init(prefs,this); gtk_container_add(GTK_CONTAINER(prefs),vbox); gtk_widget_show_all(prefs); gtk_window_set_default(GTK_WINDOW(prefs),ok_button); gtk_window_set_modal (GTK_WINDOW(prefs),TRUE); gtk_window_set_transient_for(GTK_WINDOW (prefs), GTK_WINDOW (MainWindow));};void d4xQsTree::prefs_cancel(){ gtk_widget_destroy(prefs); prefs=NULL;};void d4xQsTree::prefs_ok(){ d4xDownloadQueue *q=selected(); q->NICE_DEC_DIGITALS=(GTK_TOGGLE_BUTTON(columns_nums2)->active?1:0)+ (GTK_TOGGLE_BUTTON(columns_nums3)->active?2:0)+ (GTK_TOGGLE_BUTTON(columns_nums4)->active?3:0); q->TIME_FORMAT=GTK_TOGGLE_BUTTON(columns_time2)->active; q->name.set(text_from_combo(name)); char *path=normalize_path_full(text_from_combo(MY_GTK_FILESEL(path_entry)->combo)); q->save_path.set(path); delete[] path; q->update();// sscanf(gtk_entry_get_text(GTK_ENTRY(max_threads)),"%u",&(q->MAX_ACTIVE)); q->MAX_ACTIVE=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON (max_threads)); if (q->MAX_ACTIVE<0) q->MAX_ACTIVE=0; if (q->MAX_ACTIVE>50) q->MAX_ACTIVE=50; q->AUTODEL_FAILED=GTK_TOGGLE_BUTTON(del_fataled)->active; q->AUTODEL_COMPLETED=GTK_TOGGLE_BUTTON(del_completed)->active; if (q->AUTODEL_COMPLETED) aa.del_completed(q); if (q->AUTODEL_FAILED) aa.del_fataled(q); update(q); aa.try_to_run_wait(q); prefs_cancel();};void d4xQsTree::move_to(tDownload *where){ if (where->myowner==NULL || where->myowner->PAPA==NULL) return; switch_to(where->myowner->PAPA); D4X_QUEUE->qv.move_to(where); D4X_QUEUE->qv.select(where);};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -