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

📄 gui_common.c

📁 网络爬虫程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************//*    This code is part of WWW grabber called pavuk                        *//*    Copyright (c) 1997 - 2001 Stefan Ondrejicka                          *//*    Distributed under GPL 2 or later                                     *//***************************************************************************/#include "config.h"#ifdef GTK_FACE#include "gui.h"#include <gdk/gdkkeysyms.h>#include <string.h>#include "uconfig.h"#include "lfname.h"#include "lang.h"#include "charset.h"#include "form.h"#include "http.h"#include "ftp.h"#include "html.h"#include "jstrans.h"#include "icons/append.xpm"#include "icons/modify.xpm"#include "icons/clear.xpm"#include "icons/delete.xpm"#include "icons/ok.xpm"#include "icons/apply.xpm"#include "icons/limit.xpm"#include "icons/cancel.xpm"static void CfgCommon(GtkObject * object, gpointer func_data){  if(!xget_cfg_values_comm())  {    if(cfg.use_prefs)      cfg_dump_pref();  }}/*** URL ***/struct cfg_url_dlg_t{  GtkWidget *url_list;  GtkWidget *url_entry;  GtkWidget *localname_entry;  GtkWidget *ext_sw;  GtkWidget *ext_frame;  GtkWidget *method;  GtkWidget *encoding;  GtkWidget *field_list;  GtkWidget *field_type;  GtkWidget *field_name;  GtkWidget *field_value_l;  GtkWidget *field_value_t;  GtkWidget *field_value_f;  GtkWidget *tab;};static url_info *cfg_url_dlg_get_url_info(struct cfg_url_dlg_t *urldlg){  url_info *ui;  char *p;  int row;  p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->url_entry));  ui = url_info_new(p);  ui->type = URLI_FORM;  if(urldlg->localname_entry)  {    p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->localname_entry));    if(p && *p)      ui->localname = tl_strdup(p);  }  if(urldlg->method)    ui->method = GTK_OPTION_MENU(urldlg->method)->menu_item ?      (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg->          method)->menu_item)) : FORM_M_GET;  if(urldlg->encoding)    ui->encoding = GTK_OPTION_MENU(urldlg->encoding)->menu_item ?      (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg->          encoding)->menu_item)) : FORM_E_URLENCODED;  for(row = 0; row < GTK_CLIST(urldlg->field_list)->rows; row++)  {    form_field *ff;    ff = _malloc(sizeof(form_field));    ff->type =      (int) gtk_clist_get_row_data(GTK_CLIST(urldlg->field_list), row);    gtk_clist_get_text(GTK_CLIST(urldlg->field_list), row, 1, &p);    ff->name = form_decode_urlencoded_str(p, strlen(p));    gtk_clist_get_text(GTK_CLIST(urldlg->field_list), row, 2, &p);    ff->value = form_decode_urlencoded_str(p, strlen(p));    ui->fields = dllist_append(ui->fields, (dllist_t) ff);  }  return ui;}static void cfg_url_dlg_append(GtkWidget * w, struct cfg_url_dlg_t *urldlg){  char *p, *s, *ln;  char *pp[2];  bool_t ok = TRUE;  int row;  p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->url_entry));  if(p && *p)  {    url_info *ui = NULL;    protocol pt = URLT_UNKNOWN;    s = url_parse_scheme(p);    if(s)    {      pt = url_scheme_to_schemeid(s);      ok = prottable[pt].supported;      _free(s);    }    else      pt = URLT_HTTP;    if(!ok)    {      /* unsupported URL type */      gdk_beep();      return;    }    if((urldlg->ext_sw && GTK_TOGGLE_BUTTON(urldlg->ext_sw)->active) ||      !urldlg->ext_sw)    {      if(pt != URLT_HTTP && pt != URLT_HTTPS)      {        /* extended request supported only with HTTP */        gdk_beep();        return;      }      ui = cfg_url_dlg_get_url_info(urldlg);      ln = ui->localname;    }    else      ln = NULL;    if(!ui && urldlg->localname_entry)    {      ln = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->localname_entry));      if(ln && *ln)      {        ui = url_info_new(p);        ui->type = URLI_NORMAL;        ui->localname = tl_strdup(ln);      }    }    gtk_clist_freeze(GTK_CLIST(urldlg->url_list));    pp[0] = p;    pp[1] = ln;    row = gtk_clist_append(GTK_CLIST(urldlg->url_list), pp);    gtk_clist_set_row_data_full(GTK_CLIST(urldlg->url_list), row, ui,      (GtkDestroyNotify) url_info_free);    gtk_clist_thaw(GTK_CLIST(urldlg->url_list));    gtk_clist_select_row(GTK_CLIST(urldlg->url_list), row, 0);  }  else    gdk_beep();}static void cfg_url_dlg_modify(GtkWidget * w, struct cfg_url_dlg_t *urldlg){  char *p, *s, *ln;  bool_t ok = TRUE;  int row;  if(!GTK_CLIST(urldlg->url_list)->selection)  {    gdk_beep();    return;  }  row = GPOINTER_TO_INT(GTK_CLIST(urldlg->url_list)->selection->data);  p = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->url_entry));  if(p && *p)  {    url_info *ui = NULL;    protocol pt = URLT_UNKNOWN;    s = url_parse_scheme(p);    if(s)    {      pt = url_scheme_to_schemeid(s);      ok = prottable[pt].supported;      _free(s);    }    else      pt = URLT_HTTP;    if(!ok)    {      /* unsupported URL type !!! */    }/*    ui = (url_info *) gtk_clist_get_row_data(GTK_CLIST(urldlg->url_list), row);    if (ui)      url_info_free(ui);    ui = NULL;*/    if((urldlg->ext_sw && GTK_TOGGLE_BUTTON(urldlg->ext_sw)->active) ||      !urldlg->ext_sw)    {      if(pt != URLT_HTTP && pt != URLT_HTTPS)      {        /* extended request supported only with HTTP */        gdk_beep();        return;      }      ui = cfg_url_dlg_get_url_info(urldlg);      ln = ui->localname;    }    else      ln = NULL;    if(!ui && urldlg->localname_entry)    {      ln = (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->localname_entry));      if(ln && *ln)      {        ui = url_info_new(p);        ui->type = URLI_NORMAL;        ui->localname = tl_strdup(ln);      }      gtk_clist_set_text(GTK_CLIST(urldlg->url_list), row, 1, ln);    }    gtk_clist_set_text(GTK_CLIST(urldlg->url_list), row, 1, ln);    gtk_clist_set_text(GTK_CLIST(urldlg->url_list), row, 0, p);    gtk_clist_set_row_data_full(GTK_CLIST(urldlg->url_list), row, ui,      (GtkDestroyNotify) url_info_free);    gtk_clist_select_row(GTK_CLIST(urldlg->url_list), row, 0);  }  else    gdk_beep();}static void cfg_url_dlg_einfo_clear(struct cfg_url_dlg_t *urldlg){  guitl_ListClear(NULL, urldlg->field_list);}static void cfg_url_dlg_switch(GtkObject * w, int row, int col,  GdkEvent * event, struct cfg_url_dlg_t *urldlg){  if(GTK_CLIST(w)->selection)  {    url_info *ui;    char *p;    ui =      (url_info *) gtk_clist_get_row_data(GTK_CLIST(urldlg->url_list), row);    if(urldlg->ext_sw)    {      gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(urldlg->ext_sw),        ui ? (ui->type != URLI_NORMAL) : FALSE);      gtk_widget_set_sensitive(urldlg->ext_frame,        ui ? (ui->type != URLI_NORMAL) : FALSE);    }    gtk_clist_get_text(GTK_CLIST(urldlg->url_list), row, 0, &p);    gtk_entry_set_text(GTK_ENTRY(urldlg->url_entry), p);    if(urldlg->localname_entry)    {      p = "";      gtk_clist_get_text(GTK_CLIST(urldlg->url_list), row, 1, &p);      gtk_entry_set_text(GTK_ENTRY(urldlg->localname_entry), p);    }    if(ui && ui->type != URLI_NORMAL)    {      dllist *ptr;      if(urldlg->method)        gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->method),          ui->method);      if(urldlg->encoding)        gtk_option_menu_set_history(GTK_OPTION_MENU(urldlg->encoding),          ui->encoding);      gtk_clist_clear(GTK_CLIST(urldlg->field_list));      ptr = ui->fields;      while(ptr)      {        char *p3[3];        int row;        form_field *ff = (form_field *) ptr->data;        switch (ff->type)        {        case FORM_T_FILE:          p3[0] = "FILE";          break;        case FORM_T_TEXTAREA:          p3[0] = "LONG TEXT";          break;        default:          p3[0] = "TEXT";        }        p3[1] = form_encode_urlencoded_str(ff->name);        p3[2] = form_encode_urlencoded_str(ff->value);        row = gtk_clist_append(GTK_CLIST(urldlg->field_list), p3);        gtk_clist_set_row_data(GTK_CLIST(urldlg->field_list),          row, (gpointer) ff->type);        _free(p3[1]);        _free(p3[2]);        ptr = ptr->next;      }      if(ui->fields)        gtk_clist_select_row(GTK_CLIST(urldlg->field_list), 0, 0);    }    else      cfg_url_dlg_einfo_clear(urldlg);  }  else  {    gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(urldlg->ext_sw), FALSE);    gtk_widget_set_sensitive(urldlg->ext_frame, FALSE);    gtk_entry_set_text(GTK_ENTRY(urldlg->url_entry), "");    if(urldlg->localname_entry)      gtk_entry_set_text(GTK_ENTRY(urldlg->localname_entry), "");    cfg_url_dlg_einfo_clear(urldlg);  }}static void cfg_url_dlg_field_append(GtkWidget * w,  struct cfg_url_dlg_t *urldlg){  char *p3[3];  int type;  type = GTK_OPTION_MENU(urldlg->field_type)->menu_item ?    (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(urldlg->        field_type)->menu_item)) : 0;  switch (type)  {  case FORM_T_FILE:    p3[0] = "FILE";    p3[2] = form_encode_urlencoded_str(      (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->field_value_f)));    break;  case FORM_T_TEXTAREA:    {      int len;      char *p;      p3[0] = "LONG TEXT";#if GTK_FACE < 2      len = gtk_text_get_length(GTK_TEXT(urldlg->field_value_t));#else      len = gtk_text_buffer_get_char_count(          gtk_text_view_get_buffer(GTK_TEXT_VIEW(urldlg->field_value_t)));#endif      p = gtk_editable_get_chars(GTK_EDITABLE(urldlg->field_value_t), 0, len);      p3[2] = form_encode_urlencoded_str(p);      g_free(p);    }    break;  default:    p3[0] = "TEXT";    p3[2] = form_encode_urlencoded_str(      (gchar *) gtk_entry_get_text(GTK_ENTRY(urldlg->field_value_l)));

⌨️ 快捷键说明

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