📄 gui_common.c
字号:
/***************************************************************************//* 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 + -