📄 prefs.cc
字号:
}#define SND_LABEL_INIT(a){ \ label=gtk_label_new(_(a)); \ gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0); \}void d4x_prefs_sounds(){ GtkWidget *vbox=d4x_prefs_child_destroy(_("Sounds")); GtkWidget *hbox=gtk_hbox_new(FALSE,0); D4XPWS.snd_enable=gtk_check_button_new_with_label(_("enable sounds")); GTK_TOGGLE_BUTTON(D4XPWS.snd_enable)->active=TMPCFG.ENABLE_SOUNDS; gtk_box_pack_start(GTK_BOX(hbox),D4XPWS.snd_enable,FALSE,FALSE,0);#ifdef HAVE_ESD D4XPWS.esd_sound=gtk_check_button_new_with_label(_("output via ESD")); GTK_TOGGLE_BUTTON(D4XPWS.esd_sound)->active=TMPCFG.ESD_SOUND; gtk_box_pack_start(GTK_BOX(hbox),D4XPWS.esd_sound,FALSE,FALSE,0);#endif// HAVE_ESD gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); GtkWidget *label; SND_LABEL_INIT(_("Startup")); SND_ENTRY_INIT(D4XPWS.snd_startup,TMPCFG.SOUND_STARTUP); SND_LABEL_INIT(_("Adding a download")); SND_ENTRY_INIT(D4XPWS.snd_add,TMPCFG.SOUND_ADD); SND_LABEL_INIT(_("Downloading completed")); SND_ENTRY_INIT(D4XPWS.snd_complete,TMPCFG.SOUND_COMPLETE); SND_LABEL_INIT(_("Downloading failed")); SND_ENTRY_INIT(D4XPWS.snd_fail,TMPCFG.SOUND_FAIL); SND_LABEL_INIT(_("Downloading of queue is completed")); SND_ENTRY_INIT(D4XPWS.snd_queue_finish,TMPCFG.SOUND_QUEUE_FINISH); SND_LABEL_INIT(_("Drag'n'Drop event")); SND_ENTRY_INIT(D4XPWS.snd_dnd_drop,TMPCFG.SOUND_DND_DROP); gtk_widget_show_all(vbox);};static gboolean d4x_prefs_themes_select_row(GtkTreeSelection *sel, GtkTreeModel *model, GtkTreePath *path,gboolean is_sel, gpointer data){ GtkTextIter start,end; gtk_text_buffer_get_bounds(D4XPWS.theme_text,&start,&end); gtk_text_buffer_delete(D4XPWS.theme_text,&start,&end); GtkTreeIter iter; if (is_sel==0 && gtk_tree_model_get_iter(model,&iter,path)){ GValue value={0,}; gtk_tree_model_get_value(model,&iter,0,&value); const char *text=g_value_get_string(&value); char *path=sum_strings(TMPCFG.THEMES_DIR,"/",text,".xml",NULL); tQueue *q=d4x_xml_parse_file(path); delete[] path; d4xXmlObject *info=d4x_xml_find_obj(q,"info"); if (info && info->value.get()){ d4xXmlField *fld=info->get_attr("author"); if (fld && fld->value.get()){ gtk_text_buffer_insert(D4XPWS.theme_text,&start,"Author: ",strlen("Author: ")); gtk_text_buffer_insert(D4XPWS.theme_text,&start,fld->value.get(),strlen(fld->value.get())); fld=info->get_attr("email"); if (fld && fld->value.get()){ gtk_text_buffer_insert(D4XPWS.theme_text,&start," <",strlen(" <")); gtk_text_buffer_insert(D4XPWS.theme_text,&start,fld->value.get(),strlen(fld->value.get())); gtk_text_buffer_insert(D4XPWS.theme_text,&start,">",strlen(">")); }; gtk_text_buffer_insert(D4XPWS.theme_text,&start,"\n",strlen("\n")); }; gtk_text_buffer_insert(D4XPWS.theme_text,&start,info->value.get(),strlen(info->value.get())); }else gtk_text_buffer_insert(D4XPWS.theme_text,&start, _("No info about this theme."), strlen(_("No info about this theme."))); if (q) delete(q); if (TMPCFG.THEME_FILE) delete[] TMPCFG.THEME_FILE; TMPCFG.THEME_FILE=copy_string(text); TMPCFG.USE_THEME=1; g_value_unset(&value); }; return TRUE;};static int d4x_themes_rescan(){ if (TMPCFG.THEMES_DIR) delete[] TMPCFG.THEMES_DIR; TMPCFG.THEMES_DIR=copy_string(text_from_combo(MY_GTK_FILESEL(D4XPWS.themes_dir)->combo)); ALL_HISTORIES[THEMES_HISTORY]->add(TMPCFG.THEMES_DIR); char *path=sum_strings(TMPCFG.THEMES_DIR,"/",NULL); GtkListStore *list_store=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(D4XPWS.themes_list))); GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(D4XPWS.themes_list)); gtk_list_store_clear(list_store); GtkTreeIter iter; gtk_list_store_append(list_store,&iter); gtk_list_store_set(list_store,&iter,0,_("Default theme"),-1); DIR *d=opendir(path); if (d){ struct dirent *de=NULL; while((de=readdir(d))){ if (de->d_name && strlen(de->d_name)>4 && string_ended(".xml",de->d_name)==0){ char *tmppath=sum_strings(path,"/",de->d_name,NULL); struct stat s; stat(tmppath,&s); if (S_ISREG(s.st_mode)){ char *a=rindex(de->d_name,'.'); if (a) *a=0; gtk_list_store_append(list_store,&iter); gtk_list_store_set(list_store,&iter,0,de->d_name,-1); if (CFG.THEME_FILE && equal(CFG.THEME_FILE,de->d_name)) gtk_tree_selection_select_iter(sel,&iter); if (a) *a='.'; }; delete[] tmppath; }; }; closedir(d); }; delete[] path; return(0);};void d4x_prefs_themes(){ GtkWidget *vbox=d4x_prefs_child_destroy(_("Themes")); char *titles[]={"Name"}; D4XPWS.themes_dir=my_gtk_filesel_new(ALL_HISTORIES[THEMES_HISTORY]); MY_GTK_FILESEL(D4XPWS.themes_dir)->only_dirs=TRUE; MY_GTK_FILESEL(D4XPWS.themes_dir)->modal=GTK_WINDOW(d4x_prefs_window); text_to_combo(MY_GTK_FILESEL(D4XPWS.themes_dir)->combo,TMPCFG.THEMES_DIR); GtkWidget *themes_dir_label=gtk_label_new(_("Themes' directory")); GtkWidget *themes_rescan=gtk_button_new_with_label(_("Rescan")); g_signal_connect(G_OBJECT(themes_rescan),"clicked",G_CALLBACK(d4x_themes_rescan),NULL); gtk_box_pack_start(GTK_BOX(D4XPWS.themes_dir),themes_rescan,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),themes_dir_label,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(vbox),D4XPWS.themes_dir,FALSE,FALSE,0); GtkListStore *list_store = gtk_list_store_new(1,G_TYPE_STRING); D4XPWS.themes_list=gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); GtkCellRenderer *renderer=gtk_cell_renderer_text_new (); GtkTreeViewColumn *col=gtk_tree_view_column_new_with_attributes (_("Name"), renderer, "text",0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(D4XPWS.themes_list), col); GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(D4XPWS.themes_list)); gtk_tree_selection_set_select_function(sel,d4x_prefs_themes_select_row,NULL,NULL); gtk_box_pack_start(GTK_BOX(vbox),D4XPWS.themes_list,TRUE,TRUE,0); D4XPWS.theme_info=gtk_text_view_new(); D4XPWS.theme_text=gtk_text_view_get_buffer(GTK_TEXT_VIEW(D4XPWS.theme_info)); GtkWidget *sw=gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(vbox),sw,TRUE,FALSE,0); gtk_widget_set_size_request(D4XPWS.theme_info,-1,100); gtk_container_add(GTK_CONTAINER(sw),D4XPWS.theme_info); gtk_text_view_set_editable(GTK_TEXT_VIEW(D4XPWS.theme_info),FALSE); d4x_themes_rescan(); if (CFG.USE_THEME==0){ GtkTreeIter iter; gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store),&iter); gtk_tree_selection_select_iter(sel,&iter); }; gtk_widget_show_all(vbox);};gboolean d4x_prefs_select_func(GtkTreeSelection *sel, GtkTreeModel *model,GtkTreePath *path, gboolean is_sel, gpointer data){ if (is_sel) return(TRUE); int depth=gtk_tree_path_get_depth(path); int *a=gtk_tree_path_get_indices(path); switch(a[0]){ case 0:{ if (depth==1) d4x_prefs_download(); else{ switch(a[1]){ case 0: d4x_prefs_download_limits(); break; case 1: d4x_prefs_download_ftp(); break; case 2: d4x_prefs_download_http(); break; case 3: d4x_prefs_proxy(); break; }; }; break; }; case 1:{ if (depth==1) d4x_prefs_interface(); else{ switch(a[1]){ case 0: d4x_prefs_mwin(); break; case 1: d4x_prefs_confirm(); break; case 2: d4x_prefs_graph(); break; case 3: d4x_prefs_sounds(); break; case 4: d4x_prefs_themes(); }; }; break; }; case 2:{ if (depth==1) d4x_prefs_integration(); else{ switch(a[1]){ case 0: d4x_prefs_clipboard(); }; }; break; }; case 3:{ if (depth==1) d4x_prefs_main(); else{ switch(a[1]){ case 0: d4x_prefs_main_log(); break; case 1: d4x_prefs_search(); break; }; break; }; }; }; return(TRUE);};static int d4x_prefs_w=0,d4x_prefs_h=0;static void d4x_prefs_allocate(GtkWidget *widget,GtkAllocation *a,gpointer p){// printf("A:%ix%i\n",a->width,a->height); if (d4x_prefs_w<a->width) d4x_prefs_w=a->width; else a->width=d4x_prefs_w; if (d4x_prefs_h<a->height) d4x_prefs_h=a->height; else a->height=d4x_prefs_h;};static void d4x_prefs_size_request(GtkWidget *widget,GtkRequisition *a,gpointer p){// printf("R:%ix%i\n",a->width,a->height); if (d4x_prefs_w<a->width) d4x_prefs_w=a->width; else a->width=d4x_prefs_w; if (d4x_prefs_h<a->height) d4x_prefs_h=a->height; else a->height=d4x_prefs_h;};void d4x_prefs_init_pre(){ if (d4x_prefs_window) { gtk_window_present(GTK_WINDOW(d4x_prefs_window)); return; }; var_copy_cfg(&TMPCFG,&CFG); /* create preferences window */ d4x_prefs_window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_wmclass(GTK_WINDOW(d4x_prefs_window), "D4X_Preferences","D4X"); gtk_window_set_resizable(GTK_WINDOW(d4x_prefs_window),FALSE); gtk_window_set_position(GTK_WINDOW(d4x_prefs_window),GTK_WIN_POS_NONE); gtk_window_set_title(GTK_WINDOW(d4x_prefs_window),_("Options")); gtk_window_set_default_size(GTK_WINDOW(d4x_prefs_window),500,350); gtk_widget_set_size_request(d4x_prefs_window,550,400); g_signal_connect(G_OBJECT(d4x_prefs_window), "key_press_event", (GtkSignalFunc)d4x_prefs_esc_handler, NULL); g_signal_connect(G_OBJECT(d4x_prefs_window),"delete_event", G_CALLBACK(d4x_prefs_cancel), NULL); g_signal_connect(G_OBJECT(d4x_prefs_window),"size_allocate", G_CALLBACK(d4x_prefs_allocate), NULL); g_signal_connect(G_OBJECT(d4x_prefs_window),"size_request", G_CALLBACK(d4x_prefs_size_request), NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -