gui_jscons.c
来自「网络爬虫程序」· C语言 代码 · 共 254 行
C
254 行
/***************************************************************************//* This code is part of WWW grabber called pavuk *//* Copyright (c) 1997 - 2001 Stefan Ondrejicka *//* Distributed under GPL 2 or later *//***************************************************************************/#include "config.h"#include "gui.h"#include "jsbind.h"#if defined(GTK_FACE) && defined(HAVE_MOZJS)#include <gdk/gdkkeysyms.h>#include <string.h>#include "icons/cancel.xpm"#include "icons/restart_small.xpm"#include "icons/save.xpm"#include "icons/load.xpm"#include "icons/append.xpm"static GtkWidget *pjs_source_text;static GtkWidget *pjs_file;static GtkWidget *pjs_prompt;static void load_script_file(void){ char *fn; char *fc; fn = gtk_entry_get_text(GTK_ENTRY(pjs_file)); if(!fn || !fn[0]) { gdk_beep(); return; } _free(cfg.js_script_file); cfg.js_script_file = tl_strdup(fn); fc = tl_load_text_file(fn); gtk_text_set_point(GTK_TEXT(pjs_source_text), 0); gtk_text_forward_delete(GTK_TEXT(pjs_source_text), gtk_text_get_length(GTK_TEXT(pjs_source_text))); gtk_text_insert(GTK_TEXT(pjs_source_text), NULL, NULL, NULL, fc, strlen(fc)); _free(fc);}static void save_script_file(void){ char *fn; char *fc; int len; fn = gtk_entry_get_text(GTK_ENTRY(pjs_file)); if(!fn || !fn[0]) { gdk_beep(); return; } _free(cfg.js_script_file); cfg.js_script_file = tl_strdup(fn); len = gtk_text_get_length(GTK_TEXT(pjs_source_text)); fc = gtk_editable_get_chars(GTK_EDITABLE(pjs_source_text), 0, len); if(tl_save_text_file(fn, fc, len)) gdk_beep(); g_free(fc);}static void restart_runtime(void){ char *fn; fn = gtk_entry_get_text(GTK_ENTRY(pjs_file)); _free(cfg.js_script_file); if(fn && fn[0]) cfg.js_script_file = tl_strdup(fn); pjs_destroy(); pjs_init();}static void set_script(void){ int len; char *fc; len = gtk_text_get_length(GTK_TEXT(pjs_source_text)); fc = gtk_editable_get_chars(GTK_EDITABLE(pjs_source_text), 0, len); if(len && fc) { if(pjs_load_script_string(fc)) gdk_beep(); } else gdk_beep();}static void evaluate_script(void){ char *fc; fc = gtk_entry_get_text(GTK_ENTRY(pjs_prompt)); if(fc && fc[0]) { if(!pjs_execute(fc)) gdk_beep(); else gtk_entry_select_region(GTK_ENTRY(pjs_prompt), 0, strlen(fc)); } else gdk_beep();}void gui_pjs_console(int popup){ GtkWidget *col, *row, *button, *sep; GtkWidget *hsb, *vsb; GtkAdjustment *hadj, *vadj; GtkAccelGroup *accel_group; if(gui_cfg.pjs_console_shell) { if(popup) { gtk_widget_show_all(gui_cfg.pjs_console_shell); if(GTK_WIDGET_REALIZED(gui_cfg.pjs_console_shell)) gdk_window_raise(gui_cfg.pjs_console_shell->window); } return; } pjs_init(); gui_cfg.pjs_console_shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(gui_cfg.pjs_console_shell), gettext("Pavuk: JavaScript console")); gtk_container_border_width(GTK_CONTAINER(gui_cfg.pjs_console_shell), 3); gtk_signal_connect(GTK_OBJECT(gui_cfg.pjs_console_shell), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &gui_cfg.pjs_console_shell); col = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(gui_cfg.pjs_console_shell), col); gtk_widget_show(col); row = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); gtk_box_pack_start(GTK_BOX(col), row, FALSE, FALSE, 1); gtk_toolbar_set_button_relief(GTK_TOOLBAR(row), GTK_RELIEF_NONE); gtk_toolbar_set_space_size(GTK_TOOLBAR(row), 10); gtk_widget_show(row); button = guitl_toolbar_button(row, NULL, gettext("Reload script file"), load_xpm, GTK_SIGNAL_FUNC(load_script_file), NULL, NULL); button = guitl_toolbar_button(row, NULL, gettext("Save script to file"), save_xpm, GTK_SIGNAL_FUNC(save_script_file), (gpointer) gui_cfg.pjs_console_shell, NULL); gtk_toolbar_append_space(GTK_TOOLBAR(row)); button = guitl_toolbar_button(row, NULL, gettext("Load script to JavaScript runtime"), append_xpm, GTK_SIGNAL_FUNC(set_script), NULL, NULL); button = guitl_toolbar_button(row, NULL, gettext("Restart JavaScript runtime"), restart_small_xpm, GTK_SIGNAL_FUNC(restart_runtime), NULL, NULL); gtk_toolbar_append_space(GTK_TOOLBAR(row)); button = guitl_toolbar_button(row, NULL, gettext("Close"), cancel_xpm, GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.pjs_console_shell, NULL); accel_group = gtk_accel_group_new(); gtk_widget_add_accelerator(button, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.pjs_console_shell), accel_group); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(col), sep, FALSE, TRUE, 1); gtk_widget_show(sep); row = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(col), row, FALSE, FALSE, 2); gtk_widget_show(row); pjs_prompt = guitl_tab_add_entry(row, gettext("Prompt: "), 0, 0, FALSE); gtk_signal_connect(GTK_OBJECT(pjs_prompt), "activate", GTK_SIGNAL_FUNC(evaluate_script), NULL); sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(col), sep, FALSE, TRUE, 1); gtk_widget_show(sep); row = gtk_table_new(2, 1, FALSE); gtk_box_pack_start(GTK_BOX(col), row, FALSE, FALSE, 2); gtk_widget_show(row); pjs_file = guitl_tab_add_path_entry(row, gettext("JavaScript source file: "), 0, 0, FALSE); gtk_entry_set_text(GTK_ENTRY(pjs_file), cfg.js_script_file ? cfg.js_script_file : ""); row = gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(col), row, TRUE, TRUE, 2); gtk_widget_show(row); hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hsb = gtk_hscrollbar_new(hadj); gtk_table_attach(GTK_TABLE(row), hsb, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(hsb); vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); vsb = gtk_vscrollbar_new(vadj); gtk_table_attach(GTK_TABLE(row), vsb, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(vsb); pjs_source_text = gtk_text_new(hadj, vadj); gtk_widget_set_usize(pjs_source_text, 400, 300); gtk_text_set_editable(GTK_TEXT(pjs_source_text), TRUE); gtk_table_attach(GTK_TABLE(row), pjs_source_text, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(pjs_source_text); if(cfg.js_script_file) load_script_file(); if(popup) { gtk_widget_show(gui_cfg.pjs_console_shell); if(GTK_WIDGET_REALIZED(gui_cfg.pjs_console_shell)) gdk_window_raise(gui_cfg.pjs_console_shell->window); }}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?