📄 options_dialog.c
字号:
selitem = edititem; } if (selitem == -1) selitem = 0; option_data->tbl_row_num++; gtk_table_resize (GTK_TABLE (option_data->table), option_data->tbl_row_num, 2);#if GTK_MAJOR_VERSION == 1 textwid = gtk_text_new (NULL, NULL); gtk_widget_set_size_request (textwid, -1, 75); gtk_table_attach_defaults (GTK_TABLE (option_data->table), textwid, 0, 2, option_data->tbl_row_num - 1, option_data->tbl_row_num); gtk_widget_show (textwid);#else box = gtk_hbox_new (FALSE, 0); gtk_table_attach_defaults (GTK_TABLE (option_data->table), box, 0, 2, option_data->tbl_row_num - 1, option_data->tbl_row_num); gtk_widget_show (box); tempwid = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); gtk_widget_show (tempwid); tempwid = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (tempwid), 0); gtk_widget_set_size_request (tempwid, -1, 75); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (tempwid), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tempwid), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (box), tempwid, TRUE, TRUE, 0); gtk_widget_show (tempwid); textwid = gtk_text_view_new (); gtk_container_add (GTK_CONTAINER (tempwid), GTK_WIDGET (textwid)); gtk_widget_show (textwid);#endif widdata = g_malloc0 (sizeof (*widdata)); widdata->combo = combo; widdata->text = textwid; widdata->cv = cv; widdata->custom_edit_value = tempstr; gtk_signal_connect (GTK_OBJECT (GTK_COMBO (combo)->list), "select_child", GTK_SIGNAL_FUNC (_textcomboedt_toggle), widdata); 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); tooltip = gtk_tooltips_new (); gtk_tooltips_set_tip (GTK_TOOLTIPS(tooltip), textwid, _(cv->comment), NULL); } return (widdata);}static void_save_option_type_textcomboedt (gftp_config_vars * cv, void *user_data){ gftp_textcomboedt_widget_data * widdata; gftp_options_dialog_data * option_data; char *newstr, *proxy_config; int freeit;#if GTK_MAJOR_VERSION == 1 char tmp[128];#else GtkTextBuffer * textbuf; GtkTextIter iter, iter2; size_t len;#endif option_data = user_data; widdata = cv->user_data;#if GTK_MAJOR_VERSION == 1 /* GTK_TEXT uses wchar_t instead of char in environment of multibyte encoding locale (ex Japanese), so we must convert from wide character to multibyte charator.... Yasuyuki Furukawa (yasu@on.cs.keio.ac.jp) */ if (GTK_TEXT (widdata->text)->use_wchar) { wcstombs (tmp, (wchar_t *) GTK_TEXT (widdata->text)->text.wc, sizeof (tmp)); newstr = tmp; } else newstr = (char *) GTK_TEXT (widdata->text)->text.ch; freeit = 0;#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); newstr = gtk_text_buffer_get_text (textbuf, &iter, &iter2, 0); freeit = 1;#endif proxy_config = _gftp_convert_from_newlines (newstr); if (option_data->bm == NULL) gftp_set_global_option (cv->key, proxy_config); else gftp_set_bookmark_option (option_data->bm, cv->key, proxy_config); g_free (proxy_config); if (freeit) g_free (newstr);}static void *_print_option_type_hidetext (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); gtk_entry_set_visibility (GTK_ENTRY (tempwid), 0); gtk_entry_set_text (GTK_ENTRY (tempwid), (char *) value); return (tempwid);}static void *_print_option_type_int (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; GtkWidget * tempwid; char tempstr[20]; option_data = user_data; tempwid = _gen_input_widget (option_data, cv->description, cv->comment); g_snprintf (tempstr, sizeof (tempstr), "%d", GPOINTER_TO_INT(value)); gtk_entry_set_text (GTK_ENTRY (tempwid), tempstr); return (tempwid);}static void_save_option_type_int (gftp_config_vars * cv, void *user_data){ gftp_options_dialog_data * option_data; const char *tempstr; intptr_t val; option_data = user_data; tempstr = gtk_entry_get_text (GTK_ENTRY (cv->user_data)); val = strtol (tempstr, NULL, 10); if (option_data->bm == NULL) gftp_set_global_option (cv->key, GINT_TO_POINTER(val)); else gftp_set_bookmark_option (option_data->bm, cv->key, GINT_TO_POINTER(val));}static void *_print_option_type_checkbox (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; GtkTooltips * tooltip; GtkWidget * tempwid; option_data = user_data; if (option_data->last_option != gftp_option_type_checkbox) _print_option_type_newtable (NULL, user_data, NULL); if (option_data->tbl_col_num == 0) { option_data->tbl_row_num++; gtk_table_resize (GTK_TABLE (option_data->table), option_data->tbl_row_num + 1, 2); } tempwid = gtk_check_button_new_with_label (_(cv->description)); gtk_table_attach_defaults (GTK_TABLE (option_data->table), tempwid, option_data->tbl_col_num, option_data->tbl_col_num + 1, option_data->tbl_row_num, option_data->tbl_row_num + 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tempwid), GPOINTER_TO_INT(value)); gtk_widget_show (tempwid); option_data->tbl_col_num = (option_data->tbl_col_num + 1) % 2; if (cv->comment != NULL) { tooltip = gtk_tooltips_new (); gtk_tooltips_set_tip (GTK_TOOLTIPS(tooltip), tempwid, _(cv->comment), NULL); } return (tempwid);}static void_save_option_type_checkbox (gftp_config_vars * cv, void *user_data){ gftp_options_dialog_data * option_data; intptr_t val; option_data = user_data; val = GTK_TOGGLE_BUTTON (cv->user_data)->active; if (option_data->bm == NULL) gftp_set_global_option (cv->key, GINT_TO_POINTER (val)); else gftp_set_bookmark_option (option_data->bm, cv->key, GINT_TO_POINTER (val));}static void *_print_option_type_float (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; GtkWidget * tempwid; char tempstr[20]; float f; option_data = user_data; tempwid = _gen_input_widget (option_data, cv->description, cv->comment); memcpy (&f, &value, sizeof (f)); g_snprintf (tempstr, sizeof (tempstr), "%.2f", f); gtk_entry_set_text (GTK_ENTRY (tempwid), tempstr); return (tempwid);}static void_save_option_type_float (gftp_config_vars * cv, void *user_data){ gftp_options_dialog_data * option_data; union { void *ptr; float f; } fv; const char *tempstr; option_data = user_data; tempstr = gtk_entry_get_text (GTK_ENTRY (cv->user_data)); fv.f = strtod (tempstr, NULL); if (option_data->bm == NULL) gftp_set_global_option (cv->key, fv.ptr); else gftp_set_bookmark_option (option_data->bm, cv->key, fv.ptr);}static void *_print_option_type_notebook (gftp_config_vars * cv, void *user_data, void *value){ gftp_options_dialog_data * option_data; GtkWidget * tempwid; option_data = user_data; option_data->box = gtk_vbox_new (FALSE, 6); gtk_container_border_width (GTK_CONTAINER (option_data->box), 12); gtk_widget_show (option_data->box); tempwid = gtk_label_new (_(cv->description)); gtk_widget_show (tempwid); gtk_notebook_append_page (GTK_NOTEBOOK (option_data->notebook), option_data->box, tempwid); _print_option_type_newtable (NULL, user_data, NULL); return (NULL);}static voidclean_old_changes (GtkWidget * widget, gpointer data){ gftp_textcomboedt_widget_data * widdata; gftp_config_vars * cv; GList * templist; int i; for (templist = gftp_options_list; templist != NULL; templist = templist->next) { cv = templist->data; for (i=0; cv[i].key != NULL; i++) { widdata = cv->user_data; if (widdata != NULL) { if (widdata->custom_edit_value != NULL) g_free (widdata->custom_edit_value); g_free (widdata); cv->user_data = NULL; } } } if (new_proxy_hosts != NULL) { gftp_free_proxy_hosts (new_proxy_hosts); new_proxy_hosts = NULL; }}static voidapply_changes (GtkWidget * widget, gpointer data){ gftp_config_list_vars * proxy_hosts; gftp_config_vars * cv; GList * templist; int i; for (templist = gftp_options_list; templist != NULL; templist = templist->next) { cv = templist->data; for (i=0; cv[i].key != NULL; i++) { if (!(cv[i].ports_shown & GFTP_PORT_GTK)) continue; if (gftp_option_types[cv[i].otype].ui_save_function == NULL) continue; gftp_option_types[cv[i].otype].ui_save_function (&cv[i], gftp_option_types[cv[i].otype].user_data); } } gftp_lookup_global_option ("dont_use_proxy", &proxy_hosts); if (proxy_hosts->list != NULL) gftp_free_proxy_hosts (proxy_hosts->list); proxy_hosts->list = new_proxy_hosts; new_proxy_hosts = NULL; gftpui_show_or_hide_command ();}#if GTK_MAJOR_VERSION > 1static voidoptions_action (GtkWidget * widget, gint response, gpointer user_data){ switch (response) { case GTK_RESPONSE_APPLY: apply_changes (widget, NULL); break; case GTK_RESPONSE_OK: apply_changes (widget, NULL); /* no break */ default: clean_old_changes (widget, user_data); gtk_widget_destroy (widget); }}#endifstatic voidadd_host_to_listbox (GList * templist)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -