📄 bookmarks.c
字号:
gtk_widget_show (tempwid); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), table, tempwid); tempwid = gtk_label_new (_("Description:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 0, 1); gtk_widget_show (tempwid); bm_pathedit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_pathedit, 1, 2, 0, 1); if ((pos = strrchr (entry->path, '/')) == NULL) pos = entry->path; else pos++; if (pos) gtk_entry_set_text (GTK_ENTRY (bm_pathedit), pos); gtk_widget_show (bm_pathedit); tempwid = gtk_label_new (_("Hostname:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 1, 2); gtk_widget_show (tempwid); bm_hostedit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_hostedit, 1, 2, 1, 2); if (entry->isfolder) gtk_widget_set_sensitive (bm_hostedit, 0); else if (entry->hostname) gtk_entry_set_text (GTK_ENTRY (bm_hostedit), entry->hostname); gtk_widget_show (bm_hostedit); tempwid = gtk_label_new (_("Port:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 2, 3); gtk_widget_show (tempwid); bm_portedit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_portedit, 1, 2, 2, 3); if (entry->isfolder) gtk_widget_set_sensitive (bm_portedit, 0); else if (entry->port) { pos = g_strdup_printf ("%d", entry->port); gtk_entry_set_text (GTK_ENTRY (bm_portedit), pos); g_free (pos); } gtk_widget_show (bm_portedit); tempwid = gtk_label_new (_("Protocol:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 3, 4); gtk_widget_show (tempwid); menu = gtk_option_menu_new (); gtk_table_attach_defaults (GTK_TABLE (table), menu, 1, 2, 3, 4); gtk_widget_show (menu); num = 0; bm_protocol = gtk_menu_new (); for (i = 0; gftp_protocols[i].name; i++) { tempwid = gtk_menu_item_new_with_label (gftp_protocols[i].name); gtk_object_set_user_data (GTK_OBJECT (tempwid), gftp_protocols[i].name); gtk_menu_append (GTK_MENU (bm_protocol), tempwid); gtk_widget_show (tempwid); if (entry->protocol && strcmp (gftp_protocols[i].name, entry->protocol) == 0) num = i; } gtk_option_menu_set_menu (GTK_OPTION_MENU (menu), bm_protocol); gtk_option_menu_set_history (GTK_OPTION_MENU (menu), num); tempwid = gtk_label_new (_("Remote Directory:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 4, 5); gtk_widget_show (tempwid); bm_remotediredit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_remotediredit, 1, 2, 4, 5); if (entry->isfolder) gtk_widget_set_sensitive (bm_remotediredit, 0); else if (entry->remote_dir) gtk_entry_set_text (GTK_ENTRY (bm_remotediredit), entry->remote_dir); gtk_widget_show (bm_remotediredit); tempwid = gtk_label_new (_("Local Directory:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 5, 6); gtk_widget_show (tempwid); bm_localdiredit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_localdiredit, 1, 2, 5, 6); if (entry->isfolder) gtk_widget_set_sensitive (bm_localdiredit, 0); else if (entry->local_dir) gtk_entry_set_text (GTK_ENTRY (bm_localdiredit), entry->local_dir); gtk_widget_show (bm_localdiredit); tempwid = gtk_hseparator_new (); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 2, 7, 8); gtk_widget_show (tempwid); tempwid = gtk_label_new (_("Username:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 8, 9); gtk_widget_show (tempwid); bm_useredit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_useredit, 1, 2, 8, 9); if (entry->isfolder) gtk_widget_set_sensitive (bm_useredit, 0); else if (entry->user) gtk_entry_set_text (GTK_ENTRY (bm_useredit), entry->user); gtk_widget_show (bm_useredit); tempwid = gtk_label_new (_("Password:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 9, 10); gtk_widget_show (tempwid); bm_passedit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_passedit, 1, 2, 9, 10); gtk_entry_set_visibility (GTK_ENTRY (bm_passedit), FALSE); if (entry->isfolder) gtk_widget_set_sensitive (bm_passedit, 0); else if (entry->pass) gtk_entry_set_text (GTK_ENTRY (bm_passedit), entry->pass); gtk_widget_show (bm_passedit); tempwid = gtk_label_new (_("Account:")); gtk_misc_set_alignment (GTK_MISC (tempwid), 1, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), tempwid, 0, 1, 10, 11); gtk_widget_show (tempwid); bm_acctedit = gtk_entry_new (); gtk_table_attach_defaults (GTK_TABLE (table), bm_acctedit, 1, 2, 10, 11); gtk_entry_set_visibility (GTK_ENTRY (bm_acctedit), FALSE); if (entry->isfolder) gtk_widget_set_sensitive (bm_acctedit, 0); else if (entry->acct) gtk_entry_set_text (GTK_ENTRY (bm_acctedit), entry->acct); gtk_widget_show (bm_acctedit); anon_chk = gtk_check_button_new_with_label (_("Log in as ANONYMOUS")); gtk_table_attach_defaults (GTK_TABLE (table), anon_chk, 0, 2, 11, 12); if (entry->isfolder) gtk_widget_set_sensitive (anon_chk, 0); else { gtk_signal_connect (GTK_OBJECT (anon_chk), "toggled", GTK_SIGNAL_FUNC (set_userpass_visible), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (anon_chk), entry->user && strcmp (entry->user, "anonymous") == 0); } gtk_widget_show (anon_chk);#if GTK_MAJOR_VERSION == 1 tempwid = gtk_button_new_with_label (_("OK")); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (bm_dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (entry_apply_changes), (gpointer) entry); gtk_signal_connect_object (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (entry_close_dialog), NULL); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_widget_show (tempwid); tempwid = gtk_button_new_with_label (_(" Cancel ")); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (bm_dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (entry_close_dialog), NULL); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_widget_grab_focus (tempwid); gtk_widget_show (tempwid); tempwid = gtk_button_new_with_label (_("Apply")); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (bm_dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (entry_apply_changes), (gpointer) entry); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_widget_show (tempwid);#else g_signal_connect (GTK_OBJECT (bm_dialog), "response", G_CALLBACK (bmedit_action), (gpointer) entry);#endif gftp_gtk_setup_bookmark_options (notebook, entry); gtk_widget_show (bm_dialog);}static gintbm_enter (GtkWidget * widget, GdkEventKey * event, gpointer data){ if (event->type == GDK_KEY_PRESS) { if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) { edit_entry (NULL); return (FALSE); } else if (event->keyval == GDK_KP_Delete || event->keyval == GDK_Delete) { delete_entry (NULL); return (FALSE); } } return (TRUE);}static inline gboolean move_possible (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent, GtkCTreeNode *sibling){ return (parent != NULL && sibling != NULL);}static voidafter_move (GtkCTree * ctree, GtkCTreeNode * child, GtkCTreeNode * parent, GtkCTreeNode * sibling, gpointer data){ gftp_bookmarks_var * childentry, * siblingentry, * parententry, * tempentry; char *tempstr, *pos, *stpos; childentry = gtk_ctree_node_get_row_data (ctree, child); parententry = gtk_ctree_node_get_row_data (ctree, parent); siblingentry = gtk_ctree_node_get_row_data (ctree, sibling); tempentry = childentry->prev->children; if (tempentry == childentry) childentry->prev->children = childentry->prev->children->next; else { while (tempentry->next != childentry) tempentry = tempentry->next; tempentry->next = childentry->next; } childentry->prev = parententry; if (!parententry->isfolder) { childentry->next = parententry->children; parententry->children = childentry; gtk_ctree_move (ctree, child, parententry->prev->cnode, parententry->cnode); } else { if (siblingentry == NULL || parententry->children == siblingentry) { childentry->next = parententry->children; parententry->children = childentry; } else { tempentry = parententry->children; while (tempentry->next != siblingentry) tempentry = tempentry->next; childentry->next = tempentry->next; tempentry->next = childentry; } tempentry = childentry; while (tempentry != NULL) { g_hash_table_remove (new_bookmarks_htable, tempentry->path); if ((pos = strrchr (tempentry->path, '/')) == NULL) pos = tempentry->path; else pos++; tempstr = g_strdup_printf ("%s/%s", tempentry->prev->path, pos); for (stpos = tempstr; *stpos == '/'; stpos++); g_free (tempentry->path); tempentry->path = g_strdup (stpos); g_free (tempstr); g_hash_table_insert (new_bookmarks_htable, tempentry->path, tempentry); if (tempentry->children != NULL) tempentry = tempentry->children; else { if (tempentry->next == NULL) { if (tempentry->prev == childentry) break; else { while (tempentry->next == NULL && tempentry->prev != NULL) tempentry = tempentry->prev; } } tempentry = tempentry->next; } } }}static gintbm_dblclick (GtkWidget * widget, GdkEventButton * event, gpointer data){ if (event->button == 3) gtk_item_factory_popup (edit_factory, (guint) event->x_root, (guint) event->y_root, 1, 0); else if (event->type == GDK_2BUTTON_PRESS) { edit_entry (NULL); return (FALSE); } return (TRUE);}voidedit_bookmarks (gpointer data){ GtkItemFactory * ifactory; GtkWidget * scroll; GtkItemFactoryEntry menu_items[] = { {N_("/_File"), NULL, 0, 0, MN_("<Branch>")}, {N_("/File/tearoff"), NULL, 0, 0, MN_("<Tearoff>")}, {N_("/File/New Folder..."), NULL, new_folder_entry, 0, MN_(NULL)}, {N_("/File/New Item..."), NULL, new_item_entry, 0, MS_(GTK_STOCK_NEW)}, {N_("/File/Delete"), NULL, delete_entry, 0, MS_(GTK_STOCK_DELETE)}, {N_("/File/Properties..."), NULL, edit_entry, 0, MS_(GTK_STOCK_PROPERTIES)}, {N_("/File/sep"), NULL, 0, 0, MN_("<Separator>")}, {N_("/File/Close"), NULL, gtk_widget_destroy, 0, MS_(GTK_STOCK_CLOSE)} };#if GTK_MAJOR_VERSION == 1 GtkWidget * tempwid;#endif if (edit_bookmarks_dialog != NULL) { gtk_widget_grab_focus (edit_bookmarks_dialog); return; } new_bookmarks = copy_bookmarks (gftp_bookmarks); new_bookmarks_htable = build_bookmarks_hash_table (new_bookmarks);#if GTK_MAJOR_VERSION == 1 edit_bookmarks_dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (edit_bookmarks_dialog), _("Edit Bookmarks")); gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (edit_bookmarks_dialog)->action_area), 15);#else edit_bookmarks_dialog = gtk_dialog_new_with_buttons (_("Edit Bookmarks"), NULL, 0, GTK_STOCK_SAVE, GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);#endif gtk_window_set_wmclass (GTK_WINDOW(edit_bookmarks_dialog), "Edit Bookmarks", "gFTP"); gtk_window_set_position (GTK_WINDOW (edit_bookmarks_dialog), GTK_WIN_POS_MOUSE); gtk_widget_realize (edit_bookmarks_dialog); if (gftp_icon != NULL) { gdk_window_set_icon (edit_bookmarks_dialog->window, NULL, gftp_icon->pixmap, gftp_icon->bitmap); gdk_window_set_icon_name (edit_bookmarks_dialog->window, gftp_version); } ifactory = item_factory_new (GTK_TYPE_MENU_BAR, "<bookmarks>", NULL, NULL); create_item_factory (ifactory, 7, menu_items, NULL); create_item_factory (ifactory, 1, menu_items + 7, edit_bookmarks_dialog); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (edit_bookmarks_dialog)->vbox), ifactory->widget, FALSE, FALSE, 0); gtk_widget_show (ifactory->widget); scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (scroll, 150, 200); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (edit_bookmarks_dialog)->vbox), scroll, TRUE, TRUE, 0); gtk_container_border_width (GTK_CONTAINER (scroll), 3); gtk_widget_show (scroll); edit_factory = item_factory_new (GTK_TYPE_MENU, "<edit_bookmark>", NULL, "/File"); create_item_factory (edit_factory, 6, menu_items + 2, edit_bookmarks_dialog); tree = gtk_ctree_new (1, 0); gtk_clist_set_selection_mode (GTK_CLIST (tree), GTK_SELECTION_BROWSE); gtk_clist_set_reorderable (GTK_CLIST (tree), 1); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll), tree); gtk_signal_connect_after (GTK_OBJECT (tree), "key_press_event", GTK_SIGNAL_FUNC (bm_enter), (gpointer) tree); gtk_signal_connect_after (GTK_OBJECT (tree), "tree_move", GTK_SIGNAL_FUNC (after_move), NULL); gtk_signal_connect_after (GTK_OBJECT (tree), "button_press_event", GTK_SIGNAL_FUNC (bm_dblclick), (gpointer) tree); gtk_ctree_set_drag_compare_func (GTK_CTREE(tree), &move_possible); gtk_widget_show (tree);#if GTK_MAJOR_VERSION == 1 tempwid = gtk_button_new_with_label (_("OK")); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (edit_bookmarks_dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (bm_apply_changes), NULL); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (bm_close_dialog), (gpointer) edit_bookmarks_dialog); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_widget_show (tempwid); tempwid = gtk_button_new_with_label (_(" Cancel ")); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (edit_bookmarks_dialog)->action_area), tempwid, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (tempwid), "clicked", GTK_SIGNAL_FUNC (bm_close_dialog), (gpointer) edit_bookmarks_dialog); GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT); gtk_widget_grab_focus (tempwid); gtk_widget_show (tempwid);#else g_signal_connect (GTK_OBJECT (edit_bookmarks_dialog), "response", G_CALLBACK (editbm_action), NULL);#endif gtk_widget_show (edit_bookmarks_dialog); build_bookmarks_tree ();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -