📄 gui_main.c
字号:
gui_cfg.logvadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(swin)); gtk_widget_show(gui_cfg.logw); gtk_signal_connect(GTK_OBJECT(gui_cfg.logw), "event", GTK_SIGNAL_FUNC(gui_logw_list_events), NULL); gui_cfg.logw_menu = gtk_menu_new(); gtk_widget_realize(gui_cfg.logw_menu); mi = menu_item(gettext("Select all")); gaccel_bind_widget("logw/select_all", "activate", mi, NULL, gui_cfg.toplevel); gtk_menu_append(GTK_MENU(gui_cfg.logw_menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(logw_select_all), gui_cfg.logw); mi = menu_item(gettext("Clear selection")); gaccel_bind_widget("logw/clear_selection", "activate", mi, NULL, gui_cfg.toplevel); gtk_menu_append(GTK_MENU(gui_cfg.logw_menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(logw_clear_selection), gui_cfg.logw); gui_cfg.logw_copy_me = mi = menu_item(gettext("Copy selection")); gaccel_bind_widget("logw/copy", "activate", mi, NULL, gui_cfg.toplevel); gtk_menu_append(GTK_MENU(gui_cfg.logw_menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(guitl_clist_selection_to_clipboard), gui_cfg.logw); mi = gtk_menu_item_new(); gtk_menu_append(GTK_MENU(gui_cfg.logw_menu), mi); gtk_widget_show(mi); mi = menu_item(gettext("Save log ...")); gaccel_bind_widget("logw/save", "activate", mi, NULL, gui_cfg.toplevel); gtk_menu_append(GTK_MENU(gui_cfg.logw_menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(logw_save_content), NULL); mi = menu_item(gettext("Clear log")); gaccel_bind_widget("logw/clear", "activate", mi, NULL, gui_cfg.toplevel); gtk_menu_append(GTK_MENU(gui_cfg.logw_menu), mi); gtk_widget_show(mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(ClearLog), NULL);}#ifdef HAVE_MTstatic void status_list_resize_column(GtkWidget * w, int col, int width, gpointer fdata){ gprop_set_int(statusbar_col_rec[col].propw, width);}static void build_statusbar(GtkWidget * pane){ GtkWidget *lbox, *frame, *hbox, *par; int i; GtkWidget *swin; par = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(pane), par); gtk_widget_show(par); swin = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(swin, -1, 100); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(par), swin, TRUE, TRUE, 1); gtk_widget_show(swin); /* thrnr, URL, status, size, rate, etime, rtime */ gui_cfg.status_list = gtk_clist_new(7); gtk_widget_set_usize(gui_cfg.status_list, 400, -1); gtk_signal_connect(GTK_OBJECT(gui_cfg.status_list), "resize_column", GTK_SIGNAL_FUNC(status_list_resize_column), NULL); for(i = 0; i < (sizeof(statusbar_col_rec) / sizeof(statusbar_col_rec[0])); i++) { int w; gtk_clist_set_column_title(GTK_CLIST(gui_cfg.status_list), i, gettext(statusbar_col_rec[i].label)); if(!gprop_get_int(statusbar_col_rec[i].propw, &w)) w = statusbar_col_rec[i].width; gtk_clist_set_column_width(GTK_CLIST(gui_cfg.status_list), i, w); } gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.status_list)); gtk_container_add(GTK_CONTAINER(swin), gui_cfg.status_list); gtk_widget_show(gui_cfg.status_list); lbox = gtk_handle_box_new(); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(lbox), GTK_SHADOW_NONE); gtk_box_pack_start(GTK_BOX(par), lbox, FALSE, TRUE, 0); gtk_widget_show(lbox); hbox = gtk_vbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(lbox), hbox); gtk_widget_show(hbox); /*** first status line ***/ lbox = gtk_hbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), lbox, FALSE, TRUE, 1); gtk_widget_show(lbox); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_done = gtk_label_new(gettext("Processed: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_done), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_done); gtk_widget_show(gui_cfg.status_done); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_fail = gtk_label_new(gettext("Failed: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_fail), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_fail); gtk_widget_show(gui_cfg.status_fail); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_queue = gtk_label_new(gettext("Queued: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_queue), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_queue); gtk_widget_show(gui_cfg.status_queue); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_rej = gtk_label_new(gettext("Rejected: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_rej), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_rej); gtk_widget_show(gui_cfg.status_rej); /**** second status line ****/ lbox = gtk_hbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), lbox, FALSE, TRUE, 1); gtk_widget_show(lbox); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_msg = gtk_label_new(" "); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_msg), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_msg); gtk_widget_show(gui_cfg.status_msg);}#else /* HAVE_MT */static void build_statusbar(GtkWidget * par){ GtkWidget *lbox, *frame, *hbox; lbox = gtk_handle_box_new(); gtk_handle_box_set_shadow_type(GTK_HANDLE_BOX(lbox), GTK_SHADOW_NONE); gtk_box_pack_start(GTK_BOX(par), lbox, FALSE, TRUE, 0); gtk_widget_show(lbox); hbox = gtk_vbox_new(FALSE, 1); gtk_container_add(GTK_CONTAINER(lbox), hbox); gtk_widget_show(hbox); /**** first status line ****/ lbox = gtk_hbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), lbox, FALSE, TRUE, 1); gtk_widget_show(lbox); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_size = gtk_label_new(gettext("S: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_size), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_size); gtk_widget_show(gui_cfg.status_size); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_rate = gtk_label_new(gettext("R: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_rate), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_rate); gtk_widget_show(gui_cfg.status_rate); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_et = gtk_label_new(gettext("ET: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_et), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_et); gtk_widget_show(gui_cfg.status_et); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_rt = gtk_label_new(gettext("RT: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_rt), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_rt); gtk_widget_show(gui_cfg.status_rt); /*** second status line ***/ lbox = gtk_hbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), lbox, FALSE, TRUE, 1); gtk_widget_show(lbox); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_done = gtk_label_new(gettext("Processed: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_done), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_done); gtk_widget_show(gui_cfg.status_done); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_fail = gtk_label_new(gettext("Failed: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_fail), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_fail); gtk_widget_show(gui_cfg.status_fail); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_queue = gtk_label_new(gettext("Queued: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_queue), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_queue); gtk_widget_show(gui_cfg.status_queue); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_rej = gtk_label_new(gettext("Rejected: ")); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_rej), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_rej); gtk_widget_show(gui_cfg.status_rej); /**** third status line ****/ lbox = gtk_hbox_new(FALSE, 1); gtk_box_pack_start(GTK_BOX(hbox), lbox, FALSE, TRUE, 1); gtk_widget_show(lbox); frame = gtk_frame_new(NULL); gtk_widget_show(frame); gtk_container_add(GTK_CONTAINER(lbox), frame); gui_cfg.status_msg = gtk_label_new(" "); gtk_misc_set_alignment(GTK_MISC(gui_cfg.status_msg), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(frame), gui_cfg.status_msg); gtk_widget_show(gui_cfg.status_msg);}#endif /* !HAVE_MT */static void toplevel_resize(GtkWidget * w, GtkAllocation * sallocation, gpointer fdata){ char pom[64]; if(resizing) return; if(miniaturized) { snprintf(pom, sizeof(pom), "(%s)-toplevel_m_width", cfg.language ? cfg.language : "C"); gprop_set_int(pom, sallocation->width); snprintf(pom, sizeof(pom), "(%s)-toplevel_m_height", cfg.language ? cfg.language : "C"); gprop_set_int(pom, sallocation->height); } else { snprintf(pom, sizeof(pom), "(%s)-toplevel_n_width", cfg.language ? cfg.language : "C"); gprop_set_int(pom, sallocation->width); snprintf(pom, sizeof(pom), "(%s)-toplevel_n_height", cfg.language ? cfg.language : "C"); gprop_set_int(pom, sallocation->height); }}#ifdef HAVE_MTstatic void pane_resize(GtkWidget * w, GtkAllocation * sallocation, gpointer fdata){ if(resizing || sallocation->height < 2) return; gprop_set_int("logw_height", sallocation->height);}#endif /* HAVE_MT */#define BUILD_SH(sh, build_fnc) \ if (sh) \ {\ gdk_window_get_position(GTK_WIDGET(sh)->window, &x, &y);\ is_up = GTK_WIDGET_VISIBLE (sh);\ gtk_widget_destroy(sh);\ if (is_up)\ {\ build_fnc(TRUE);\ gtk_widget_set_uposition(sh, x, y);\ }\ else sh = NULL;\ _Xt_Serve;\ }static void build_main(void){ gint is_up; bool_t consens = FALSE; bool_t stop_looping; gint x, y, w, h; GtkWidget *col, *sep; char pom[64]; if(gui_cfg.toplevel) { consens = GTK_WIDGET_SENSITIVE(gui_cfg.bt_start); gdk_window_get_position(GTK_WIDGET(gui_cfg.toplevel)->window, &x, &y); is_up = TRUE; gtk_widget_destroy(gui_cfg.toplevel); } else is_up = FALSE; gui_cfg.toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); w = -1; h = -1; snprintf(pom, sizeof(pom), "(%s)-toplevel_n_width", cfg.language ? cfg.language : "C"); gprop_get_int(pom, &w); snprintf(pom, sizeof(pom), "(%s)-toplevel_n_height", cfg.language ? cfg.language : "C"); gprop_get_int(pom, &h); gtk_window_set_default_size(GTK_WINDOW(gui_cfg.toplevel), w, h); gtk_window_set_policy(GTK_WINDOW(gui_cfg.toplevel), TRUE, TRUE, TRUE); /*** DRAG'N'DROP ***/ gtk_drag_dest_set(gui_cfg.toplevel, GTK_DEST_DEFAULT_ALL, dragtypes, NUM_ELEM(dragtypes), GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_signal_connect(GTK_OBJECT(gui_cfg.toplevel), "drag_data_received", GTK_SIGNAL_FUNC(gui_window_drop_url), NULL); gtk_signal_connect(GTK_OBJECT(gui_cfg.toplevel), "destroy", GTK_SIGNAL_FUNC(Quit), NULL); gtk_signal_connect(GTK_OBJECT(gui_cfg.toplevel), "size_allocate", GTK_SIGNAL_FUNC(toplevel_resize), NULL); if(is_up) gtk_widget_set_uposition(gui_cfg.toplevel, x, y); gtk_widget_realize(gui_cfg.toplevel); gtk_container_border_width(GTK_CONTAINER(gui_cfg.toplevel), 0); gtk_window_set_title(GTK_WINDOW(gui_cfg.toplevel), "Pavuk"); col = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(gui_cfg.toplevel), col); gtk_widget_show(col); gui_cfg.main_window_hide = gtk_vbox_new(FALSE, 0);#ifdef HAVE_MT gtk_box_pack_start(GTK_BOX(col), gui_cfg.main_window_hide, FALSE, FALSE, 0);#else gtk_box_pack_start(GTK_BOX(col), gui_cfg.main_window_hide, TRUE, TRUE, 0);#endif gtk_widget_show(gui_cfg.main_window_hide); BUILD_SH(gui_cfg.about_shell, gui_build_about); BUILD_SH(gui_cfg.config_shell, gui_build_config_common); BUILD_SH(gui_cfg.cfg_limits, gui_build_config_limits); BUILD_SH(gui_cfg.scn_load_shell, gui_build_scenario_loader); BUILD_SH(gui_cfg.scn_add_shell, gui_build_scenario_adder); BUILD_SH(gui_cfg.scn_save_shell, gui_build_scenario_saver); BUILD_SH(gui_cfg.cfg_sch, gui_build_scheduler);#ifdef HAVE_MOZJS BUILD_SH(gui_cfg.pjs_console_shell, gui_pjs_console);#endif#ifdef WITH_TREE gui_build_tree_preview(gui_cfg.tree_shell ? GTK_WIDGET_VISIBLE(gui_cfg.tree_shell) : FALSE);#endif sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(gui_cfg.main_window_hide), sep, FALSE, TRUE, 1); gtk_widget_show(sep); build_toolbar(gui_cfg.main_window_hide);#ifdef HAVE_MT build_minitoolbar(col); logw_pane = gtk_vpaned_new(); gtk_box_pack_start(GTK_BOX(col), logw_pane, TRUE, TRUE, 1); gtk_widget_show(logw_pane); build_logw(logw_pane); build_statusbar(logw_pane); if(gprop_get_int("logw_height", &h)) gtk_paned_set_position(GTK_PANED(logw_pane), h); gtk_signal_connect(GTK_OBJECT(GTK_PANED(logw_pane)->child1), "size_allocate", GTK_SIGNAL_FUNC(pane_resize), NULL);#else build_logw(gui_cfg.main_window_hide); build_minitoolbar(col); build_statusbar(col);#endif build_menu(gui_cfg.main_window_hide); gtk_widget_set_sensitive(gui_cfg.bt_start, consens); gtk_widget_set_sensitive(gui_cfg.mea_start, consens); gaccel_window_activate(gui_cfg.accel_group, gui_cfg.toplevel); gtk_signal_connect(GTK_OBJECT(gui_cfg.toplevel), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.toplevel); gtk_widget_show_now(gui_cfg.toplevel); icons_load();#ifdef __CYGWIN__ SendMessage(GDK_WINDOW_XWINDOW(gui_cfg.toplevel->window), WM_SETICON, ICON_SMALL, (struct _HICON *) LoadImage(GetModuleHandle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -