📄 options_dialog.c
字号:
/*****************************************************************************//* menu-items.c - menu callbacks *//* Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org> *//* *//* This program is free software; you can redistribute it and/or modify *//* it under the terms of the GNU General Public License as published by *//* the Free Software Foundation; either version 2 of the License, or *//* (at your option) any later version. *//* *//* This program is distributed in the hope that it will be useful, *//* but WITHOUT ANY WARRANTY; without even the implied warranty of *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *//* GNU General Public License for more details. *//* *//* You should have received a copy of the GNU General Public License *//* along with this program; if not, write to the Free Software *//* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//*****************************************************************************/#include "gftp-gtk.h"static const char cvsid[] = "$Id: options_dialog.c,v 1.25 2004/12/02 22:22:31 masneyb Exp $";static GtkWidget * proxy_list, * new_proxy_domain, * network1, * network2, * network3, * network4, * netmask1, * netmask2, * netmask3, * netmask4, * domain_active, * domain_label, * network_label, * netmask_label, * edit_button, * delete_button;static gftp_options_dialog_data * gftp_option_data;static GList * new_proxy_hosts = NULL;static void_setup_option (gftp_option_type_enum otype, gftp_options_dialog_data * option_data, void * (*ui_print_function) (gftp_config_vars * cv, void *user_data, void *value), void (*ui_save_function) (gftp_config_vars * cv, void *user_data), void (*ui_cancel_function) (gftp_config_vars * cv, void *user_data)){ gftp_option_types[otype].user_data = option_data; gftp_option_types[otype].ui_print_function = ui_print_function; gftp_option_types[otype].ui_save_function = ui_save_function; gftp_option_types[otype].ui_cancel_function = ui_cancel_function;}static void *_gen_input_widget (gftp_options_dialog_data * option_data, char *label, char *tiptxt){ GtkTooltips * tooltip; GtkWidget * tempwid; option_data->tbl_row_num++; gtk_table_resize (GTK_TABLE (option_data->table), option_data->tbl_row_num, 2); tempwid = gtk_label_new (_(label)); gtk_misc_set_alignment (GTK_MISC (tempwid), 0, 0.5); gtk_table_attach (GTK_TABLE (option_data->table), tempwid, 0, 1, option_data->tbl_row_num - 1, option_data->tbl_row_num, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_show (tempwid); tempwid = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (option_data->table), tempwid, 1, 2, option_data->tbl_row_num - 1, option_data->tbl_row_num); gtk_widget_show (tempwid); if (tiptxt != NULL) { tooltip = gtk_tooltips_new (); gtk_tooltips_set_tip (GTK_TOOLTIPS(tooltip), tempwid, _(tiptxt), NULL); } return (tempwid);}static void *_print_option_type_newtable (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; option_data = user_data; option_data->table = gtk_table_new (1, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (option_data->table), 6); gtk_table_set_col_spacings (GTK_TABLE (option_data->table), 12); gtk_box_pack_start (GTK_BOX (option_data->box), option_data->table, FALSE, FALSE, 0); gtk_widget_show (option_data->table); option_data->tbl_row_num = 0; option_data->tbl_col_num = 0; return (NULL);}static void *_print_option_type_text (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; GtkWidget * tempwid; option_data = user_data; tempwid = _gen_input_widget (option_data, cv->description, cv->comment); if (value != NULL) gtk_entry_set_text (GTK_ENTRY (tempwid), (char *) value); return (tempwid);}static void_save_option_type_text (gftp_config_vars * cv, void *user_data){ gftp_options_dialog_data * option_data; const char *tempstr; option_data = user_data; tempstr = gtk_entry_get_text (GTK_ENTRY (cv->user_data)); if (option_data->bm == NULL) gftp_set_global_option (cv->key, tempstr); else gftp_set_bookmark_option (option_data->bm, cv->key, tempstr);}static GtkWidget *_gen_combo_widget (gftp_options_dialog_data * option_data, char *label){ GtkWidget * tempwid, * combo; option_data->tbl_row_num++; gtk_table_resize (GTK_TABLE (option_data->table), option_data->tbl_row_num, 2); tempwid = gtk_label_new (_(label)); gtk_misc_set_alignment (GTK_MISC (tempwid), 0, 0.5); gtk_table_attach (GTK_TABLE (option_data->table), tempwid, 0, 1, option_data->tbl_row_num - 1, option_data->tbl_row_num, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_show (tempwid); combo = gtk_combo_new (); gtk_table_attach_defaults (GTK_TABLE (option_data->table), combo, 1, 2, option_data->tbl_row_num - 1, option_data->tbl_row_num); return (combo);}static void *_print_option_type_textcombo (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; GtkWidget * tempwid, * combo; GList * widget_list; GtkTooltips * tooltip; int selitem, i; char **clist; option_data = user_data; combo = _gen_combo_widget (option_data, cv->description); if (cv->listdata != NULL) { selitem = 0; widget_list = NULL; clist = cv->listdata; for (i=0; clist[i] != NULL; i++) { if (value != NULL && strcasecmp ((char *) value, clist[i]) == 0) selitem = i; tempwid = gtk_list_item_new_with_label (clist[i]); gtk_widget_show (tempwid); widget_list = g_list_append (widget_list, tempwid); } gtk_list_prepend_items (GTK_LIST (GTK_COMBO (combo)->list), widget_list); gtk_list_select_item (GTK_LIST (GTK_COMBO (combo)->list), selitem); } gtk_widget_show (combo); if (cv->comment != NULL) { tooltip = gtk_tooltips_new (); gtk_tooltips_set_tip (GTK_TOOLTIPS(tooltip), combo, _(cv->comment), NULL); } return (combo);}static void_save_option_type_textcombo (gftp_config_vars * cv, void *user_data){ gftp_options_dialog_data * option_data; const char *tempstr; option_data = user_data; tempstr = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (cv->user_data)->entry)); if (option_data->bm == NULL) gftp_set_global_option (cv->key, tempstr); else gftp_set_bookmark_option (option_data->bm, cv->key, tempstr);}static void_textcomboedt_toggle (GtkList * list, GtkWidget * child, gpointer data){ gftp_textcomboedt_widget_data * widdata; gftp_textcomboedt_data * tedata; char *insert_text; int num, isedit;#if GTK_MAJOR_VERSION > 1 GtkTextIter iter, iter2; GtkTextBuffer * textbuf; guint len;#endif widdata = data; tedata = widdata->cv->listdata; num = gtk_list_child_position (list, child); isedit = tedata[num].flags & GFTP_TEXTCOMBOEDT_EDITABLE;#if GTK_MAJOR_VERSION == 1 gtk_text_set_editable (GTK_TEXT (widdata->text), isedit);#else gtk_text_view_set_editable (GTK_TEXT_VIEW (widdata->text), isedit);#endif if (isedit) insert_text = widdata->custom_edit_value; else insert_text = tedata[num].text;#if GTK_MAJOR_VERSION == 1 gtk_text_set_point (GTK_TEXT (widdata->text), 0); gtk_text_forward_delete (GTK_TEXT (widdata->text), gtk_text_get_length (GTK_TEXT (widdata->text))); gtk_text_insert (GTK_TEXT (widdata->text), NULL, NULL, NULL, insert_text, -1);#else textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widdata->text)); len = gtk_text_buffer_get_char_count (textbuf); gtk_text_buffer_get_iter_at_offset (textbuf, &iter, 0); gtk_text_buffer_get_iter_at_offset (textbuf, &iter2, len); gtk_text_buffer_delete (textbuf, &iter, &iter2); len = gtk_text_buffer_get_char_count (textbuf); gtk_text_buffer_get_iter_at_offset (textbuf, &iter, len); gtk_text_buffer_insert (textbuf, &iter, insert_text, -1);#endif}static char *_gftp_convert_to_newlines (char *str){ char *stpos, *endpos, *ret, savechar; size_t len; ret = g_strdup (""); len = 0; for (stpos = str; (endpos = strstr (stpos, "%n")) != NULL; stpos = endpos + 2) { savechar = *endpos; *endpos = '\0'; len += strlen (stpos) + 1; ret = g_realloc (ret, len + 1); strcat (ret, stpos); strcat (ret, "\n"); *endpos = savechar; } if (stpos != NULL && *stpos != '\0') { len += strlen (stpos); ret = g_realloc (ret, len + 1); strcat (ret, stpos); } return (ret);}static char *_gftp_convert_from_newlines (char *str){ char *stpos, *endpos, *ret, savechar; size_t len; ret = g_strdup (""); len = 0; for (stpos = str; (endpos = strchr (stpos, '\n')) != NULL; stpos = endpos + 1) { savechar = *endpos; *endpos = '\0'; len += strlen (stpos) + 2; ret = g_realloc (ret, len + 1); strcat (ret, stpos); strcat (ret, "%n"); *endpos = savechar; } if (stpos != NULL && *stpos != '\0') { len += strlen (stpos); ret = g_realloc (ret, len + 1); strcat (ret, stpos); } return (ret);}static void *_print_option_type_textcomboedt (gftp_config_vars * cv, void *user_data, void *value){ gftp_textcomboedt_widget_data * widdata; GtkWidget * box, * combo, * textwid, * tempwid; gftp_options_dialog_data * option_data; gftp_textcomboedt_data * tedata; int i, selitem, edititem; GtkTooltips * tooltip; GList * widget_list; char *tempstr; option_data = user_data; combo = _gen_combo_widget (option_data, cv->description); tempstr = NULL; if (value != NULL) tempstr = _gftp_convert_to_newlines (value); if (tempstr == NULL) tempstr = g_strdup (""); edititem = selitem = -1; if (cv->listdata != NULL) { widget_list = NULL; tedata = cv->listdata; for (i=0; tedata[i].description != NULL; i++) { if (tedata[i].flags & GFTP_TEXTCOMBOEDT_EDITABLE) edititem = i; if (selitem == -1 && strcasecmp (tempstr, tedata[i].text) == 0) selitem = i; tempwid = gtk_list_item_new_with_label (tedata[i].description); gtk_widget_show (tempwid); widget_list = g_list_append (widget_list, tempwid); } gtk_list_prepend_items (GTK_LIST (GTK_COMBO (combo)->list), widget_list); if (selitem == -1 && edititem != -1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -