📄 gftp-gtk.c
字号:
static gintlist_enter (GtkWidget * widget, GdkEventKey * event, gpointer data){ gftp_window_data * wdata; wdata = data; if (!GFTP_IS_CONNECTED (wdata->request)) return (TRUE); if (event->type == GDK_KEY_PRESS && (event->keyval == GDK_KP_Delete || event->keyval == GDK_Delete)) { delete_dialog (wdata); return (FALSE); } else if (IS_ONE_SELECTED (wdata) && event->type == GDK_KEY_PRESS && event->keyval == GDK_Return) { list_doaction (wdata); return (FALSE); } return (TRUE);}static gintlist_dblclick (GtkWidget * widget, GdkEventButton * event, gpointer data){ gftp_window_data * wdata; wdata = data; if (event->button == 3) gtk_item_factory_popup (wdata->ifactory, (guint) event->x_root, (guint) event->y_root, 3, event->time); return (FALSE);}static void select_row_callback (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data){ gftp_window_data * wdata; wdata = data; if (event != NULL && event->type == GDK_2BUTTON_PRESS && event->button == 1 && GFTP_IS_CONNECTED (wdata->request) && IS_ONE_SELECTED (wdata)) list_doaction (wdata);}static GtkWidget *CreateFTPWindow (gftp_window_data * wdata){ const GtkTargetEntry possible_types[] = { {"STRING", 0, 0}, {"text/plain", 0, 0}, {"application/x-rootwin-drop", 0, 1} }; GtkWidget *box, *scroll_list, *parent; intptr_t listbox_file_height, colwidth; char *titles[7], tempstr[50]; titles[0] = ""; titles[1] = _("Filename"); titles[2] = _("Size"); titles[3] = _("User"); titles[4] = _("Group"); titles[5] = _("Date"); titles[6] = _("Attribs"); wdata->request = gftp_request_new (); wdata->request->logging_function = ftp_log; wdata->filespec = g_malloc0 (2); *wdata->filespec = '*'; parent = gtk_frame_new (NULL); gftp_lookup_global_option ("listbox_file_height", &listbox_file_height); g_snprintf (tempstr, sizeof (tempstr), "listbox_%s_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); gtk_widget_set_size_request (parent, colwidth, listbox_file_height); gtk_container_border_width (GTK_CONTAINER (parent), 5); box = gtk_vbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (box), 5); gtk_container_add (GTK_CONTAINER (parent), box); wdata->combo = gtk_combo_new (); gtk_combo_set_case_sensitive (GTK_COMBO (wdata->combo), 1); gtk_box_pack_start (GTK_BOX (box), wdata->combo, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (GTK_COMBO (wdata->combo)->entry), "activate", GTK_SIGNAL_FUNC (chdir_edit), (gpointer) wdata); if (*wdata->history) gtk_combo_set_popdown_strings (GTK_COMBO (wdata->combo), *wdata->history); gtk_combo_disable_activate (GTK_COMBO (wdata->combo)); gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (wdata->combo)->entry), ""); wdata->hoststxt = gtk_label_new (NULL); gtk_misc_set_alignment (GTK_MISC (wdata->hoststxt), 0, 0); gtk_box_pack_start (GTK_BOX (box), wdata->hoststxt, FALSE, FALSE, 0); scroll_list = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_list), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); wdata->listbox = gtk_clist_new_with_titles (7, titles); gtk_container_add (GTK_CONTAINER (scroll_list), wdata->listbox); gtk_drag_source_set (wdata->listbox, GDK_BUTTON1_MASK, possible_types, 3, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_drag_dest_set (wdata->listbox, GTK_DEST_DEFAULT_ALL, possible_types, 2, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_clist_set_selection_mode (GTK_CLIST (wdata->listbox), GTK_SELECTION_EXTENDED); gtk_clist_set_column_width (GTK_CLIST (wdata->listbox), 0, 16); gtk_clist_set_column_justification (GTK_CLIST (wdata->listbox), 0, GTK_JUSTIFY_CENTER); g_snprintf (tempstr, sizeof (tempstr), "%s_file_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); setup_column (wdata->listbox, 1, colwidth); gtk_clist_set_column_justification (GTK_CLIST (wdata->listbox), 2, GTK_JUSTIFY_RIGHT); g_snprintf (tempstr, sizeof (tempstr), "%s_size_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); setup_column (wdata->listbox, 2, colwidth); g_snprintf (tempstr, sizeof (tempstr), "%s_user_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); setup_column (wdata->listbox, 3, colwidth); g_snprintf (tempstr, sizeof (tempstr), "%s_group_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); setup_column (wdata->listbox, 4, colwidth); g_snprintf (tempstr, sizeof (tempstr), "%s_date_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); setup_column (wdata->listbox, 5, colwidth); g_snprintf (tempstr, sizeof (tempstr), "%s_attribs_width", wdata->prefix_col_str); gftp_lookup_global_option (tempstr, &colwidth); setup_column (wdata->listbox, 6, colwidth); gtk_box_pack_start (GTK_BOX (box), scroll_list, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (wdata->listbox), "click_column", GTK_SIGNAL_FUNC (sortrows), (gpointer) wdata); gtk_signal_connect (GTK_OBJECT (wdata->listbox), "drag_data_get", GTK_SIGNAL_FUNC (listbox_drag), (gpointer) wdata); gtk_signal_connect (GTK_OBJECT (wdata->listbox), "drag_data_received", GTK_SIGNAL_FUNC (listbox_get_drag_data), (gpointer) wdata); gtk_signal_connect_after (GTK_OBJECT (wdata->listbox), "key_press_event", GTK_SIGNAL_FUNC (list_enter), (gpointer) wdata); gtk_signal_connect (GTK_OBJECT (wdata->listbox), "select_row", GTK_SIGNAL_FUNC(select_row_callback), (gpointer) wdata); gtk_signal_connect_after (GTK_OBJECT (wdata->listbox), "button_press_event", GTK_SIGNAL_FUNC (list_dblclick), (gpointer) wdata); return (parent);}static gintmenu_mouse_click (GtkWidget * widget, GdkEventButton * event, gpointer data){ GtkItemFactory *mfactory; mfactory = (GtkItemFactory *) data; if (event->button == 3) gtk_item_factory_popup (mfactory, (guint) event->x_root, (guint) event->y_root, 3, event->time); return (FALSE);}static GtkWidget *CreateFTPWindows (GtkWidget * ui){ GtkWidget *box, *dlbox, *winpane, *dlpane, *logpane, *mainvbox, *tempwid; gftp_config_list_vars * tmplistvar; char *dltitles[2]; intptr_t tmplookup;#if GTK_MAJOR_VERSION > 1 GtkTextBuffer * textbuf; GtkTextIter iter; GtkTextTag *tag; GdkColor * fore;#endif memset (&window1, 0, sizeof (window1)); memset (&window2, 0, sizeof (window2)); gftp_lookup_global_option ("localhistory", &tmplistvar); window1.history = &tmplistvar->list; window1.histlen = &tmplistvar->num_items; gftp_lookup_global_option ("remotehistory", &tmplistvar); window2.history = &tmplistvar->list; window2.histlen = &tmplistvar->num_items; mainvbox = gtk_vbox_new (FALSE, 0); tempwid = CreateMenus (ui); gtk_box_pack_start (GTK_BOX (mainvbox), tempwid, FALSE, FALSE, 0); tempwid = CreateConnectToolbar (ui); gtk_box_pack_start (GTK_BOX (mainvbox), tempwid, FALSE, FALSE, 0); tempwid = CreateCommandToolbar (); gtk_box_pack_start (GTK_BOX (mainvbox), tempwid, FALSE, FALSE, 0); winpane = gtk_hpaned_new (); box = gtk_hbox_new (FALSE, 0); window1.prefix_col_str = "local"; local_frame = CreateFTPWindow (&window1); gtk_box_pack_start (GTK_BOX (box), local_frame, TRUE, TRUE, 0); dlbox = gtk_vbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (dlbox), 5); gtk_box_pack_start (GTK_BOX (box), dlbox, FALSE, FALSE, 0);#if GTK_MAJOR_VERSION == 1 tempwid = toolbar_pixmap (ui, "right.xpm");#else tempwid = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_SMALL_TOOLBAR);#endif upload_right_arrow = gtk_button_new (); gtk_box_pack_start (GTK_BOX (dlbox), upload_right_arrow, TRUE, FALSE, 0); gtk_signal_connect_object (GTK_OBJECT (upload_right_arrow), "clicked", GTK_SIGNAL_FUNC (put_files), NULL); gtk_container_add (GTK_CONTAINER (upload_right_arrow), tempwid);#if GTK_MAJOR_VERSION == 1 tempwid = toolbar_pixmap (ui, "left.xpm");#else tempwid = gtk_image_new_from_stock (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_SMALL_TOOLBAR);#endif download_left_arrow = gtk_button_new (); gtk_box_pack_start (GTK_BOX (dlbox), download_left_arrow, TRUE, FALSE, 0); gtk_signal_connect_object (GTK_OBJECT (download_left_arrow), "clicked", GTK_SIGNAL_FUNC (get_files), NULL); gtk_container_add (GTK_CONTAINER (download_left_arrow), tempwid); gtk_paned_pack1 (GTK_PANED (winpane), box, 1, 1); window2.prefix_col_str = "remote"; remote_frame = CreateFTPWindow (&window2); gtk_paned_pack2 (GTK_PANED (winpane), remote_frame, 1, 1); dlpane = gtk_vpaned_new (); gtk_paned_pack1 (GTK_PANED (dlpane), winpane, 1, 1); transfer_scroll = gtk_scrolled_window_new (NULL, NULL); gftp_lookup_global_option ("transfer_height", &tmplookup); gtk_widget_set_size_request (transfer_scroll, -1, tmplookup); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (transfer_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); dltitles[0] = _("Filename"); dltitles[1] = _("Progress"); dlwdw = gtk_ctree_new_with_titles (2, 0, dltitles); gtk_clist_set_selection_mode (GTK_CLIST (dlwdw), GTK_SELECTION_SINGLE); gtk_clist_set_reorderable (GTK_CLIST (dlwdw), 0); gftp_lookup_global_option ("file_trans_column", &tmplookup); if (tmplookup == 0) gtk_clist_set_column_auto_resize (GTK_CLIST (dlwdw), 0, TRUE); else gtk_clist_set_column_width (GTK_CLIST (dlwdw), 0, tmplookup); gtk_container_add (GTK_CONTAINER (transfer_scroll), dlwdw); gtk_signal_connect (GTK_OBJECT (dlwdw), "button_press_event", GTK_SIGNAL_FUNC (menu_mouse_click), (gpointer) dl_factory); gtk_paned_pack2 (GTK_PANED (dlpane), transfer_scroll, 1, 1); logpane = gtk_vpaned_new (); gtk_paned_pack1 (GTK_PANED (logpane), dlpane, 1, 1); log_table = gtk_table_new (1, 2, FALSE); gftp_lookup_global_option ("log_height", &tmplookup); gtk_widget_set_size_request (log_table, -1, tmplookup);#if GTK_MAJOR_VERSION == 1 logwdw = gtk_text_new (NULL, NULL); gtk_text_set_editable (GTK_TEXT (logwdw), FALSE); gtk_text_set_word_wrap (GTK_TEXT (logwdw), TRUE); gtk_table_attach (GTK_TABLE (log_table), logwdw, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0); gtk_signal_connect (GTK_OBJECT (logwdw), "button_press_event", GTK_SIGNAL_FUNC (menu_mouse_click), (gpointer) log_factory); tempwid = gtk_vscrollbar_new (GTK_TEXT (logwdw)->vadj); gtk_table_attach (GTK_TABLE (log_table), tempwid, 1, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); logwdw_vadj = GTK_TEXT (logwdw)->vadj;#else logwdw = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (logwdw), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (logwdw), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (logwdw), GTK_WRAP_WORD); textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logwdw)); tag = gtk_text_buffer_create_tag (textbuf, "send", NULL); gftp_lookup_global_option ("send_color", &fore); g_object_set (G_OBJECT (tag), "foreground_gdk", fore, NULL); tag = gtk_text_buffer_create_tag (textbuf, "recv", NULL); gftp_lookup_global_option ("recv_color", &fore); g_object_set (G_OBJECT (tag), "foreground_gdk", fore, NULL); tag = gtk_text_buffer_create_tag (textbuf, "error", NULL); gftp_lookup_global_option ("error_color", &fore); g_object_set (G_OBJECT (tag), "foreground_gdk", fore, NULL); tag = gtk_text_buffer_create_tag (textbuf, "misc", NULL); gftp_lookup_global_option ("misc_color", &fore); g_object_set (G_OBJECT (tag), "foreground_gdk", &fore, NULL); tempwid = gtk_scrolled_window_new (NULL, NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -