📄 gftp-gtk.c
字号:
menus = menu_items; accel_group = gtk_accel_group_new (); factory = item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group, NULL); i = 0; len = 11; /* FTP Menu */ create_item_factory (factory, len, menu_items, &window2); i += len; /* Local Menu */ local_start = i; local_len = 21; create_item_factory (factory, local_len, menu_items + i, &window1); i += local_len; /* Remote Menu */ remote_start = i; remote_len = 21; create_item_factory (factory, remote_len, menu_items + i, &window2); i += remote_len; len = 5; /* Bookmarks Menu */ create_item_factory (factory, len, menu_items + i, &window2); i += len; /* Transfers Menu */ trans_start = i; trans_len = 12; create_item_factory (factory, trans_len, menu_items + i, NULL); i += trans_len; /* Logging Menu */ log_start = i; log_len = 5; create_item_factory (factory, log_len, menu_items + i, NULL); i += log_len; /* Tools Menu */ tools_start = i; tools_len = 4; create_item_factory (factory, tools_len, menu_items + i, NULL); i += tools_len; /* Help Menu */ create_item_factory (factory, 3, menu_items + i, NULL); build_bookmarks_menu (); gtk_window_add_accel_group (GTK_WINDOW (parent), accel_group); gftp_lookup_global_option ("ascii_transfers", &ascii_transfers); if (ascii_transfers) { tempwid = gtk_item_factory_get_widget (factory, menu_items[5].path); gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (tempwid), TRUE); } else { tempwid = gtk_item_factory_get_widget (factory, menu_items[6].path); gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (tempwid), TRUE); } tempwid = gtk_item_factory_get_widget (factory, menu_items[3].path); gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (tempwid), TRUE); window1.ifactory = item_factory_new (GTK_TYPE_MENU, "<local>", NULL, "/Local"); create_item_factory (window1.ifactory, local_len - 2, menu_items + local_start + 2, &window1); window2.ifactory = item_factory_new (GTK_TYPE_MENU, "<remote>", NULL, "/Remote"); create_item_factory (window2.ifactory, remote_len - 2, menu_items + remote_start + 2, &window2); log_factory = item_factory_new (GTK_TYPE_MENU, "<log>", NULL, "/Logging"); create_item_factory (log_factory, log_len - 2, menu_items + log_start + 2, NULL); dl_factory = item_factory_new (GTK_TYPE_MENU, "<download>", NULL, "/Transfers"); create_item_factory (dl_factory, trans_len - 2, menu_items + trans_start + 2, NULL); return (factory->widget);}static GtkWidget *CreateConnectToolbar (GtkWidget * parent){ const GtkTargetEntry possible_types[] = { {"STRING", 0, 0}, {"text/plain", 0, 0}, {"application/x-rootwin-drop", 0, 1} }; GtkWidget *toolbar, *box, *tempwid; gftp_config_list_vars * tmplistvar; char *default_protocol, *tempstr; int i, num; toolbar = gtk_handle_box_new (); box = gtk_hbox_new (FALSE, 4); gtk_container_add (GTK_CONTAINER (toolbar), box); gtk_container_border_width (GTK_CONTAINER (box), 5); openurl_tooltip = gtk_tooltips_new (); tempwid = toolbar_pixmap (parent, "connect.xpm"); openurl_btn = gtk_button_new (); gtk_container_add (GTK_CONTAINER (openurl_btn), tempwid); gtk_signal_connect_object (GTK_OBJECT (openurl_btn), "clicked", GTK_SIGNAL_FUNC (tb_openurl_dialog), NULL); gtk_signal_connect (GTK_OBJECT (openurl_btn), "drag_data_received", GTK_SIGNAL_FUNC (openurl_get_drag_data), NULL); gtk_drag_dest_set (openurl_btn, GTK_DEST_DEFAULT_ALL, possible_types, 2, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_container_border_width (GTK_CONTAINER (openurl_btn), 1); gtk_box_pack_start (GTK_BOX (box), openurl_btn, FALSE, FALSE, 0);#if GTK_MAJOR_VERSION == 1 tempwid = gtk_label_new (_("Host: "));#else tempwid = gtk_label_new_with_mnemonic (_("_Host: "));#endif gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); hostedit = gtk_combo_new (); gtk_combo_set_case_sensitive (GTK_COMBO (hostedit), 1); gtk_widget_set_size_request (hostedit, 130, -1); gtk_signal_connect (GTK_OBJECT (GTK_COMBO (hostedit)->entry), "activate", GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); gftp_lookup_global_option ("hosthistory", &tmplistvar); if (tmplistvar->list) gtk_combo_set_popdown_strings (GTK_COMBO (hostedit), tmplistvar->list); gtk_combo_disable_activate (GTK_COMBO (hostedit)); gftp_lookup_global_option ("host_value", &tempstr); gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (hostedit)->entry), tempstr);#if GTK_MAJOR_VERSION > 1 gtk_label_set_mnemonic_widget (GTK_LABEL (tempwid), GTK_COMBO (hostedit)->entry);#endif gtk_box_pack_start (GTK_BOX (box), hostedit, TRUE, TRUE, 0); tempwid = gtk_label_new (_("Port: ")); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); portedit = gtk_combo_new (); gtk_combo_set_case_sensitive (GTK_COMBO (portedit), 1); gtk_widget_set_size_request (portedit, 50, -1); gtk_signal_connect (GTK_OBJECT (GTK_COMBO (portedit)->entry), "activate", GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); gftp_lookup_global_option ("porthistory", &tmplistvar); if (tmplistvar->list) gtk_combo_set_popdown_strings (GTK_COMBO (portedit), tmplistvar->list); gtk_combo_disable_activate (GTK_COMBO (portedit)); gftp_lookup_global_option ("port_value", &tempstr); gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (portedit)->entry), tempstr); gtk_box_pack_start (GTK_BOX (box), portedit, FALSE, FALSE, 0);#if GTK_MAJOR_VERSION == 1 tempwid = gtk_label_new (_("User: "));#else tempwid = gtk_label_new_with_mnemonic (_("_User: "));#endif gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); useredit = gtk_combo_new (); gtk_combo_set_case_sensitive (GTK_COMBO (useredit), 1); gtk_widget_set_size_request (useredit, 75, -1); gtk_signal_connect (GTK_OBJECT (GTK_COMBO (useredit)->entry), "activate", GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); gftp_lookup_global_option ("userhistory", &tmplistvar); if (tmplistvar->list) gtk_combo_set_popdown_strings (GTK_COMBO (useredit), tmplistvar->list); gtk_combo_disable_activate (GTK_COMBO (useredit)); gftp_lookup_global_option ("user_value", &tempstr); gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (useredit)->entry), tempstr);#if GTK_MAJOR_VERSION > 1 gtk_label_set_mnemonic_widget (GTK_LABEL (tempwid), GTK_COMBO (useredit)->entry);#endif gtk_box_pack_start (GTK_BOX (box), useredit, TRUE, TRUE, 0); tempwid = gtk_label_new (_("Pass: ")); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); passedit = gtk_entry_new (); gtk_widget_set_size_request (passedit, 55, -1); gtk_entry_set_visibility (GTK_ENTRY (passedit), FALSE); gtk_signal_connect (GTK_OBJECT (passedit), "activate", GTK_SIGNAL_FUNC (toolbar_hostedit), NULL); gtk_box_pack_start (GTK_BOX (box), passedit, FALSE, FALSE, 0); tempwid = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); optionmenu = gtk_option_menu_new (); gtk_box_pack_start (GTK_BOX (tempwid), optionmenu, TRUE, FALSE, 0); num = 0; gftp_lookup_global_option ("default_protocol", &default_protocol); protocol_menu = gtk_menu_new (); for (i = 0; gftp_protocols[i].name; i++) { if (!gftp_protocols[i].shown) continue; if (default_protocol != NULL && strcmp (gftp_protocols[i].name, default_protocol) == 0) num = i; tempwid = gtk_menu_item_new_with_label (gftp_protocols[i].name); gtk_object_set_user_data (GTK_OBJECT (tempwid), GINT_TO_POINTER(i)); gtk_menu_append (GTK_MENU (protocol_menu), tempwid); gtk_widget_show (tempwid); } gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), protocol_menu); gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), num);#if GTK_MAJOR_VERSION == 1 tempwid = toolbar_pixmap (parent, "stop.xpm");#else tempwid = gtk_image_new_from_stock (GTK_STOCK_STOP, GTK_ICON_SIZE_LARGE_TOOLBAR);#endif stop_btn = gtk_button_new (); gtk_container_add (GTK_CONTAINER (stop_btn), tempwid); gtk_widget_set_sensitive (stop_btn, 0); gtk_signal_connect_object (GTK_OBJECT (stop_btn), "clicked", GTK_SIGNAL_FUNC (stop_button), NULL); gtk_container_border_width (GTK_CONTAINER (stop_btn), 1); gtk_box_pack_start (GTK_BOX (box), stop_btn, FALSE, FALSE, 0); gtk_widget_grab_focus (GTK_COMBO (hostedit)->entry); return (toolbar);}static GtkWidget *CreateCommandToolbar (void){ GtkWidget * box, * tempwid; gftpui_command_toolbar = gtk_handle_box_new (); box = gtk_hbox_new (FALSE, 4); gtk_container_add (GTK_CONTAINER (gftpui_command_toolbar), box); gtk_container_border_width (GTK_CONTAINER (box), 5); tempwid = gtk_label_new (_("Command: ")); gtk_box_pack_start (GTK_BOX (box), tempwid, FALSE, FALSE, 0); gftpui_command_widget = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (box), gftpui_command_widget, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (gftpui_command_widget), "activate", GTK_SIGNAL_FUNC (gftpui_run_command), NULL); return (gftpui_command_toolbar);}static voidsetup_column (GtkWidget * listbox, int column, int width){ if (width == 0) gtk_clist_set_column_auto_resize (GTK_CLIST (listbox), column, TRUE); else if (width == -1) gtk_clist_set_column_visibility (GTK_CLIST (listbox), column, FALSE); else gtk_clist_set_column_width (GTK_CLIST (listbox), column, width);}static voidlist_doaction (gftp_window_data * wdata){ intptr_t list_dblclk_action; GList *templist, *filelist; gftp_file *tempfle; int num, success; char *directory; gftp_lookup_request_option (wdata->request, "list_dblclk_action", &list_dblclk_action); filelist = wdata->files; templist = gftp_gtk_get_list_selection (wdata); num = 0; templist = get_next_selection (templist, &filelist, &num); tempfle = (gftp_file *) filelist->data; if (check_reconnect (wdata) < 0) return; if (S_ISLNK (tempfle->st_mode) || S_ISDIR (tempfle->st_mode)) { directory = gftp_build_path (wdata->request, wdata->request->directory, tempfle->file, NULL); success = gftpui_run_chdir (wdata, directory); g_free (directory); } else success = 0; if (!S_ISDIR (tempfle->st_mode) && !success) { switch (list_dblclk_action) { case 0: view_dialog (wdata); break; case 1: edit_dialog (wdata); break; case 2: if (wdata == &window2) get_files (wdata); else put_files (wdata); break; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -