⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui_tree.c

📁 网络爬虫程序
💻 C
📖 第 1 页 / 共 2 页
字号:
static void DownloadThisURL(GtkObject * object, gpointer func_data){  url *urlp;  if(!TEST_URL_NODE || cfg.processing)  {    gdk_beep();    return;  }  urlp = TREE_GET_URL;#ifdef HAVE_MT  {    pthread_attr_t thrdattr;    pthread_attr_init(&thrdattr);    pthread_attr_setscope(&thrdattr, PTHREAD_SCOPE_SYSTEM);    pthread_attr_setstacksize(&thrdattr, MT_STACK_SIZE);    gui_start_download(TRUE);    if(pthread_create(&cfg.mainthread,        &thrdattr, (void *) download_single_doc, (void *) urlp))    {      xperror("Create downloading thread");      gui_finish_download(TRUE);    }  }#else  download_single_doc(urlp);#endif}gint gui_tree_list_events(GtkWidget * widget, GdkEvent * event){  GdkEventButton *bevent;  url *urlp;  if(!TEST_URL_NODE)    return FALSE;  switch (event->type)  {  case GDK_BUTTON_PRESS:    bevent = (GdkEventButton *) event;    if(bevent->button == 3)    {      urlp = TREE_GET_URL;      if(!urlp)      {        gtk_widget_set_sensitive(gui_cfg.me_disable_url, FALSE);        gtk_widget_set_sensitive(gui_cfg.me_enable_url, FALSE);        gtk_widget_set_sensitive(gui_cfg.me_browse_url, FALSE);        gtk_widget_set_sensitive(gui_cfg.me_prop_url, FALSE);        gtk_widget_set_sensitive(gui_cfg.me_download_url, FALSE);      }      else      {        gtk_widget_set_sensitive(gui_cfg.me_browse_url, TRUE);        gtk_widget_set_sensitive(gui_cfg.me_prop_url, TRUE);        if(urlp->status & URL_PROCESSED          && !(urlp->status & URL_USER_DISABLED))        {          gtk_widget_set_sensitive(gui_cfg.me_disable_url, FALSE);          gtk_widget_set_sensitive(gui_cfg.me_enable_url, FALSE);          gtk_widget_set_sensitive(gui_cfg.me_download_url,            (urlp->status & URL_REJECTED) ||            (urlp->status & URL_TRUNCATED) || (urlp->status & URL_ERR_REC));        }        else        {          gtk_widget_set_sensitive(gui_cfg.me_disable_url,            !(urlp->status & URL_USER_DISABLED));          gtk_widget_set_sensitive(gui_cfg.me_enable_url,            (urlp->status & URL_USER_DISABLED));          gtk_widget_set_sensitive(gui_cfg.me_download_url,            cfg.processing ? FALSE : !(urlp->status & URL_USER_DISABLED));        }      }      gtk_menu_popup(GTK_MENU(gui_cfg.tmenu), NULL, NULL, NULL, NULL, 3,        bevent->time);    }    break;  default:    break;  }  return FALSE;}static void DumpTree(GtkCTree * tree, GtkCTreeNode * node, gpointer data){  url *urlp = (url *) gtk_ctree_node_get_row_data(tree, node);  if(urlp)  {    int i;    char *p;    FILE *f = (FILE *) data;    GtkCTreeRow *row = (GtkCTreeRow *) node->list.data;    for(i = 2; i < row->level; i++)      fprintf(f, "    ");    p = url_to_urlstr(urlp, FALSE);    fprintf(f, "%s\n", p);    _free(p);  }}static void StoreTreeOK(GtkWidget * w, gpointer fdata){  const char *p = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fdata));  FILE *f;  if(!p || !*p)  {    gdk_beep();    return;  }  if(!(f = fopen(p, "wb+")))  {    xperror(p);    return;  }  LOCK_GTKTREE;  gtk_ctree_pre_recursive(GTK_CTREE(gui_cfg.tree_widget), gui_cfg.root,    GTK_CTREE_FUNC(DumpTree), f);  UNLOCK_GTKTREE;  fclose(f);  gtk_widget_destroy(GTK_WIDGET(fdata));}static void StoreTree(void){  static GtkWidget *fsw = NULL;  if(!fsw)  {    fsw = gtk_file_selection_new(gettext("Pavuk: Store tree"));    gtk_signal_connect(GTK_OBJECT(fsw), "destroy",      GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fsw);    gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fsw)->ok_button),      "clicked", GTK_SIGNAL_FUNC(StoreTreeOK), fsw);    gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fsw)->cancel_button),      "clicked", GTK_SIGNAL_FUNC(guitl_PopdownW), fsw);  }  gtk_widget_show(fsw);  if(GTK_WIDGET_REALIZED(fsw))    gdk_window_raise(fsw->window);}static void pane_resize(GtkWidget * widget, GtkAllocation * sallocation){  gprop_set_int("tree_height", sallocation->height);}static void top_resize(GtkWidget * widget, GtkAllocation * sallocation){  gprop_set_int("treeview_width", sallocation->width);  gprop_set_int("treeview_height", sallocation->height);}#if GTK_FACE < 2static void gtk_button_set_label(GtkButton * butt, const char *text){  GList *chlist;  GtkWidget *w;  w = butt->child;  for(chlist = GTK_BOX(w)->children; chlist; chlist = chlist->next)  {    if(GTK_IS_LABEL(((struct _GtkBoxChild *) chlist->data)->widget))    {      gtk_label_set(GTK_LABEL(((struct _GtkBoxChild *) chlist->data)->widget),      text);    }  }}#endifvoid gui_build_tree_preview(int popup){  GtkWidget *col, *swin, *frame, *mi, *bbox, *pane;  GdkFont *font;  int h, w;  static GtkWidget *cbutton = NULL;  static GtkWidget *sbutton = NULL;  GtkAccelGroup *accel_group;  if(gui_cfg.tree_shell)  {    gtk_window_set_title(GTK_WINDOW(gui_cfg.tree_shell),      gettext("Pavuk: URL tree preview"));    gtk_button_set_label(GTK_BUTTON(cbutton), gettext("Cancel"));    gtk_button_set_label(GTK_BUTTON(sbutton), gettext("Store tree ..."));    gtk_button_set_label(GTK_BUTTON(gui_cfg.watch_download),      gettext("Automaticaly watch last processed URLs"));    gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_prop_url)->child),      gettext("Properties"));    gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_browse_url)->child),      gettext("Launch browser"));    gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_disable_url)->child),      gettext("Disable URL"));    gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_enable_url)->child),      gettext("Enable URL"));    gtk_label_set(GTK_LABEL(GTK_BIN(gui_cfg.me_download_url)->child),      gettext("Download URL"));    gtk_label_set(GTK_LABEL(gui_cfg.tree_help), "");    gtk_clist_set_column_title(GTK_CLIST(gui_cfg.tree_widget), 0,      gettext("URL tree"));    if(popup)    {      gtk_widget_show(gui_cfg.tree_shell);      if(GTK_WIDGET_REALIZED(gui_cfg.tree_shell))        gdk_window_raise(gui_cfg.tree_shell->window);    }    return;  }  gui_cfg.tree_shell = gtk_window_new(GTK_WINDOW_TOPLEVEL);  gtk_container_border_width(GTK_CONTAINER(gui_cfg.tree_shell), 3);  gtk_window_set_title(GTK_WINDOW(gui_cfg.tree_shell),    gettext("Pavuk: URL tree preview"));  gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_shell), "delete_event",    GTK_SIGNAL_FUNC(no_destroy), gui_cfg.tree_shell);  w = -1;  h = -1;  gprop_get_int("treeview_height", &h);  gprop_get_int("treeview_width", &w);  gtk_window_set_default_size(GTK_WINDOW(gui_cfg.tree_shell), w, h);  gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_shell), "size_allocate",    GTK_SIGNAL_FUNC(top_resize), NULL);  gtk_window_set_policy(GTK_WINDOW(gui_cfg.tree_shell), FALSE, TRUE, TRUE);  col = gtk_vbox_new(0, 5);  gtk_container_add(GTK_CONTAINER(gui_cfg.tree_shell), col);  gtk_widget_show(col);  gui_cfg.watch_download =    gtk_check_button_new_with_label(gettext    ("Automaticaly watch last processed URLs"));  gtk_box_pack_start(GTK_BOX(col), gui_cfg.watch_download, FALSE, FALSE, 1);  gtk_widget_show(gui_cfg.watch_download);  pane = gtk_vpaned_new();  gtk_box_pack_start(GTK_BOX(col), pane, TRUE, TRUE, 1);  gtk_widget_show(pane);  swin = gtk_scrolled_window_new(NULL, NULL);  if(!gprop_get_int("tree_height", &h))    h = 400;  gtk_widget_set_usize(swin, 500, h);  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);  gtk_widget_show(swin);  gtk_container_add(GTK_CONTAINER(pane), swin);  gui_cfg.tree_widget = gtk_ctree_new(1, 0);  gtk_clist_set_column_title(GTK_CLIST(gui_cfg.tree_widget), 0,    gettext("URL tree"));  gtk_clist_column_titles_show(GTK_CLIST(gui_cfg.tree_widget));#if GTK_FACE < 2  font = gui_cfg.tree_widget->style->font;#else  font = gtk_style_get_font(gui_cfg.tree_widget->style);#endif  gtk_clist_set_row_height(GTK_CLIST(gui_cfg.tree_widget),    TL_MAX(font->ascent + font->descent + 1, MAX_PIX_HEIGHT));  gtk_clist_set_column_width(GTK_CLIST(gui_cfg.tree_widget), 0, 500);  gtk_clist_set_selection_mode(GTK_CLIST(gui_cfg.tree_widget),    GTK_SELECTION_SINGLE);  gtk_clist_set_column_auto_resize(GTK_CLIST(gui_cfg.tree_widget), 0, TRUE);  gtk_ctree_set_line_style(GTK_CTREE(gui_cfg.tree_widget),    GTK_CTREE_LINES_DOTTED);  gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_widget), "button_press_event",    (GtkSignalFunc) gui_tree_list_events, gui_cfg.tree_widget);  gtk_signal_connect(GTK_OBJECT(gui_cfg.tree_widget), "select_row",    (GtkSignalFunc) gui_SelectTreeNode, (gpointer) NULL);  gtk_container_add(GTK_CONTAINER(swin), gui_cfg.tree_widget);  gtk_widget_show(gui_cfg.tree_widget);  swin = gtk_scrolled_window_new(NULL, NULL);  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);  gtk_widget_show(swin);  gtk_container_add(GTK_CONTAINER(pane), swin);  frame = gtk_frame_new(NULL);  gtk_widget_show(frame);  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), frame);  gui_cfg.tree_help = gtk_label_new("   ");  gtk_label_set_justify(GTK_LABEL(gui_cfg.tree_help), GTK_JUSTIFY_LEFT);  gtk_misc_set_alignment(GTK_MISC(gui_cfg.tree_help), 0.0, 0.0);  gtk_misc_set_padding(GTK_MISC(gui_cfg.tree_help), 3, 3);  gtk_widget_show(gui_cfg.tree_help);  gtk_container_add(GTK_CONTAINER(frame), gui_cfg.tree_help);  gtk_signal_connect(GTK_OBJECT(GTK_PANED(pane)->child1), "size_allocate",    GTK_SIGNAL_FUNC(pane_resize), NULL);  bbox = gtk_hbutton_box_new();  gtk_box_pack_start(GTK_BOX(col), bbox, FALSE, FALSE, 0);  gtk_widget_show(bbox);  sbutton = guitl_pixmap_button(save_xpm, NULL, gettext("Store tree ..."));  gtk_container_add(GTK_CONTAINER(bbox), sbutton);  gtk_signal_connect(GTK_OBJECT(sbutton), "clicked",    GTK_SIGNAL_FUNC(StoreTree), (gpointer) NULL);  GTK_WIDGET_SET_FLAGS(sbutton, GTK_CAN_DEFAULT);  gtk_widget_show(sbutton);  cbutton = guitl_pixmap_button(cancel_xpm, NULL, gettext("Cancel"));  accel_group = gtk_accel_group_new();  gtk_widget_add_accelerator(cbutton, "clicked", accel_group,    GDK_Escape, 0, GTK_ACCEL_VISIBLE);  gtk_window_add_accel_group(GTK_WINDOW(gui_cfg.tree_shell), accel_group);  gtk_container_add(GTK_CONTAINER(bbox), cbutton);  gtk_signal_connect(GTK_OBJECT(cbutton), "clicked",    GTK_SIGNAL_FUNC(guitl_PopdownW), (gpointer) gui_cfg.tree_shell);  GTK_WIDGET_SET_FLAGS(cbutton, GTK_CAN_DEFAULT);  gtk_widget_grab_default(cbutton);  gtk_widget_show(cbutton);  gui_cfg.tmenu = gtk_menu_new();  guitl_menu_attach(gui_cfg.tmenu, gui_cfg.tree_shell);  gtk_widget_realize(gui_cfg.tmenu);  gui_cfg.me_prop_url = mi =    gtk_menu_item_new_with_label(gettext("Properties"));  gaccel_bind_widget("tree/properties", "activate", mi, NULL,    gui_cfg.tree_shell);  gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi);  gtk_widget_show(mi);  gtk_signal_connect(GTK_OBJECT(mi), "activate",    GTK_SIGNAL_FUNC(Propert), (gpointer) NULL);  gui_cfg.me_browse_url = mi =    gtk_menu_item_new_with_label(gettext("Launch browser"));  gaccel_bind_widget("tree/launch", "activate", mi, NULL, gui_cfg.tree_shell);  gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi);  gtk_widget_show(mi);  gtk_signal_connect(GTK_OBJECT(mi), "activate",    GTK_SIGNAL_FUNC(LaunchBrowser), (gpointer) NULL);  gui_cfg.me_disable_url = mi =    gtk_menu_item_new_with_label(gettext("Disable URL"));  gaccel_bind_widget("tree/disable", "activate", mi, NULL,    gui_cfg.tree_shell);  gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi);  gtk_widget_show(mi);  gtk_signal_connect(GTK_OBJECT(mi), "activate",    GTK_SIGNAL_FUNC(DisableURL), (gpointer) NULL);  gui_cfg.me_enable_url = mi =    gtk_menu_item_new_with_label(gettext("Enable URL"));  gaccel_bind_widget("tree/enable", "activate", mi, NULL, gui_cfg.tree_shell);  gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi);  gtk_widget_show(mi);  gtk_signal_connect(GTK_OBJECT(mi), "activate",    GTK_SIGNAL_FUNC(EnableURL), (gpointer) NULL);  gui_cfg.me_download_url = mi =    gtk_menu_item_new_with_label(gettext("Download URL"));  gaccel_bind_widget("tree/download", "activate", mi, NULL,    gui_cfg.tree_shell);  gtk_menu_append(GTK_MENU(gui_cfg.tmenu), mi);  gtk_widget_show(mi);  gtk_signal_connect(GTK_OBJECT(mi), "activate",    GTK_SIGNAL_FUNC(DownloadThisURL), (gpointer) NULL);  if(popup)    gtk_widget_show(gui_cfg.tree_shell);}#endif  /*** GTK_FACE ***/#endif /*** WITH_TREE ***/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -