📄 options_dialog.c
字号:
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, 0); gtk_container_border_width (GTK_CONTAINER (option_data->box), 10); 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){ gftp_proxy_hosts *hosts; char *add_data[2]; int num; hosts = templist->data; if (hosts->domain) { add_data[0] = hosts->domain; add_data[1] = NULL; num = gtk_clist_append (GTK_CLIST (proxy_list), add_data); } else { add_data[0] = g_strdup_printf ("%d.%d.%d.%d", hosts->ipv4_network_address >> 24 & 0xff, hosts->ipv4_network_address >> 16 & 0xff, hosts->ipv4_network_address >> 8 & 0xff, hosts->ipv4_network_address & 0xff); add_data[1] = g_strdup_printf ("%d.%d.%d.%d", hosts->ipv4_netmask >> 24 & 0xff, hosts->ipv4_netmask >> 16 & 0xff, hosts->ipv4_netmask >> 8 & 0xff, hosts->ipv4_netmask & 0xff); num = gtk_clist_append (GTK_CLIST (proxy_list), add_data); g_free (add_data[0]); g_free (add_data[1]); } gtk_clist_set_row_data (GTK_CLIST (proxy_list), num, (gpointer) templist);}static voidadd_ok (GtkWidget * widget, gpointer data){ gftp_proxy_hosts *hosts; const char *edttxt; GList *templist; int num; templist = data; if (templist == NULL) { hosts = g_malloc0 (sizeof (*hosts)); new_proxy_hosts = g_list_append (new_proxy_hosts, hosts); for (templist = new_proxy_hosts; templist->next != NULL; templist = templist->next); } else { num = gtk_clist_find_row_from_data (GTK_CLIST (proxy_list), templist); if (num != -1) gtk_clist_remove (GTK_CLIST (proxy_list), num); hosts = templist->data; } if (hosts->domain) { g_free (hosts->domain); hosts->domain = NULL; } if (GTK_TOGGLE_BUTTON (domain_active)->active) { edttxt = gtk_entry_get_text (GTK_ENTRY (new_proxy_domain)); hosts->domain = g_strdup (edttxt); hosts->ipv4_netmask = hosts->ipv4_network_address = 0; } else { edttxt = gtk_entry_get_text (GTK_ENTRY (network1)); hosts->ipv4_network_address = (strtol (edttxt, NULL, 10) & 0xff) << 24; edttxt = gtk_entry_get_text (GTK_ENTRY (network2)); hosts->ipv4_network_address |= (strtol (edttxt, NULL, 10) & 0xff) << 16; edttxt = gtk_entry_get_text (GTK_ENTRY (network3)); hosts->ipv4_network_address |= (strtol (edttxt, NULL, 10) & 0xff) << 8; edttxt = gtk_entry_get_text (GTK_ENTRY (network4)); hosts->ipv4_network_address |= strtol (edttxt, NULL, 10) & 0xff; edttxt = gtk_entry_get_text (GTK_ENTRY (netmask1)); hosts->ipv4_netmask = (strtol (edttxt, NULL, 10) & 0xff) << 24; edttxt = gtk_entry_get_text (GTK_ENTRY (netmask2)); hosts->ipv4_netmask |= (strtol (edttxt, NULL, 10) & 0xff) << 16; edttxt = gtk_entry_get_text (GTK_ENTRY (netmask3)); hosts->ipv4_netmask |= (strtol (edttxt, NULL, 10) & 0xff) << 8; edttxt = gtk_entry_get_text (GTK_ENTRY (netmask4)); hosts->ipv4_netmask |= strtol (edttxt, NULL, 10) & 0xff; } add_host_to_listbox (templist);}#if GTK_MAJOR_VERSION > 1static voidproxyhosts_action (GtkWidget * widget, gint response, gpointer user_data){ switch (response) { case GTK_RESPONSE_OK: add_ok (widget, user_data); /* no break */ default: gtk_widget_destroy (widget); }}#endifstatic voidadd_toggle (GtkWidget * widget, gpointer data){ gtk_widget_set_sensitive (new_proxy_domain, data != NULL); gtk_widget_set_sensitive (network1, data == NULL); gtk_widget_set_sensitive (network2, data == NULL); gtk_widget_set_sensitive (network3, data == NULL); gtk_widget_set_sensitive (network4, data == NULL); gtk_widget_set_sensitive (netmask1, data == NULL); gtk_widget_set_sensitive (netmask2, data == NULL); gtk_widget_set_sensitive (netmask3, data == NULL); gtk_widget_set_sensitive (netmask4, data == NULL);}static voiddelete_proxy_host (GtkWidget * widget, gpointer data){ GList *templist; int num; gftp_configuration_changed = 1; /* FIXME */ if ((templist = GTK_CLIST (proxy_list)->selection) == NULL) return; num = GPOINTER_TO_INT (templist->data); templist = gtk_clist_get_row_data (GTK_CLIST (proxy_list), num); new_proxy_hosts = g_list_remove_link (new_proxy_hosts, templist); gtk_clist_remove (GTK_CLIST (proxy_list), num);}static voidadd_proxy_host (GtkWidget * widget, gpointer data){ GtkWidget *tempwid, *dialog, *frame, *box, *table; gftp_proxy_hosts *hosts; char *tempstr, *title; GList *templist; gftp_configuration_changed = 1; /* FIXME */ if (data) { if ((templist = GTK_CLIST (proxy_list)->selection) == NULL) return; templist = gtk_clist_get_row_data (GTK_CLIST (proxy_list), GPOINTER_TO_INT (templist->data)); hosts = templist->data; } else { hosts = NULL; templist = NULL; } title = hosts ? _("Edit Host") : _("Add Host");#if GTK_MAJOR_VERSION == 1 dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area), 5); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->action_area), 15); gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dialog)->action_area), TRUE); gtk_grab_add (dialog);#else dialog = gtk_dialog_new_with_buttons (title, NULL, 0, GTK_STOCK_SAVE, GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);#endif gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 10); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2); gtk_window_set_wmclass (GTK_WINDOW(dialog), "hostinfo", "Gftp"); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), frame, TRUE, TRUE, 0); gtk_widget_show (frame); box = gtk_hbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (box), 5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -