⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkui_transfer.c

📁 一个linux下的ftp程序。它是使用文件传输协议的一系列程序的集合。
💻 C
字号:
/*****************************************************************************//*  gtkui_transfer.c - GTK+ UI transfer related functions for gFTP           *//*  Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org>                  *//*                                                                           *//*  This program is free software; you can redistribute it and/or modify     *//*  it under the terms of the GNU General Public License as published by     *//*  the Free Software Foundation; either version 2 of the License, or        *//*  (at your option) any later version.                                      *//*                                                                           *//*  This program is distributed in the hope that it will be useful,          *//*  but WITHOUT ANY WARRANTY; without even the implied warranty of           *//*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *//*  GNU General Public License for more details.                             *//*                                                                           *//*  You should have received a copy of the GNU General Public License        *//*  along with this program; if not, write to the Free Software              *//*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA      *//*****************************************************************************/#include "gftp-gtk.h"static const char cvsid[] = "$Id: gtkui_transfer.c,v 1.8 2004/12/02 22:33:05 masneyb Exp $";voidgftpui_start_current_file_in_transfer (gftp_transfer * tdata){}voidgftpui_update_current_file_in_transfer (gftp_transfer * tdata){}voidgftpui_finish_current_file_in_transfer (gftp_transfer * tdata){}voidgftpui_start_transfer (gftp_transfer * tdata){  /* Not used in GTK+ port. This is polled instead */}voidgftpui_add_file_to_transfer (gftp_transfer * tdata, GList * curfle){  gftpui_common_curtrans_data * transdata;  char *text[2];  gftp_file * fle;  fle = curfle->data;  text[0] = gftpui_gtk_get_utf8_file_pos (fle);  if (fle->transfer_action == GFTP_TRANS_ACTION_SKIP)    text[1] = _("Skipped");  else    text[1] = _("Waiting...");  fle->user_data = gtk_ctree_insert_node (GTK_CTREE (dlwdw),                                          tdata->user_data, NULL, text, 5,                                          NULL, NULL, NULL, NULL,                                          FALSE, FALSE);  transdata = g_malloc (sizeof (*transdata));  transdata->transfer = tdata;  transdata->curfle = curfle;  gtk_ctree_node_set_row_data (GTK_CTREE (dlwdw), fle->user_data, transdata);}static voidgftpui_gtk_trans_selectall (GtkWidget * widget, gpointer data){  gftp_transfer * tdata;  tdata = data;  gtk_clist_select_all (GTK_CLIST (tdata->clist));}static voidgftpui_gtk_trans_unselectall (GtkWidget * widget, gpointer data){  gftp_transfer * tdata;  tdata = data;  gtk_clist_unselect_all (GTK_CLIST (tdata->clist));}static voidgftpui_gtk_set_action (gftp_transfer * tdata, char * transfer_str,                       int transfer_action){  GList * templist, * filelist;  gftp_file * tempfle;  int curpos;  g_static_mutex_lock (&tdata->structmutex);  curpos = 0;  filelist = tdata->files;  templist = GTK_CLIST (tdata->clist)->selection;  while (templist != NULL)    {      templist = get_next_selection (templist, &filelist, &curpos);      tempfle = filelist->data;      tempfle->transfer_action = transfer_action;      gtk_clist_set_text (GTK_CLIST (tdata->clist), curpos, 3, transfer_str);    }  g_static_mutex_unlock (&tdata->structmutex);}static voidgftpui_gtk_overwrite (GtkWidget * widget, gpointer data){  gftpui_gtk_set_action (data, _("Overwrite"), GFTP_TRANS_ACTION_OVERWRITE);}static voidgftpui_gtk_resume (GtkWidget * widget, gpointer data){  gftpui_gtk_set_action (data, _("Resume"), GFTP_TRANS_ACTION_RESUME);}static voidgftpui_gtk_skip (GtkWidget * widget, gpointer data){  gftpui_gtk_set_action (data, _("Skip"), GFTP_TRANS_ACTION_SKIP);}static voidgftpui_gtk_ok (GtkWidget * widget, gpointer data){  gftp_transfer * tdata;  gftp_file * tempfle;  GList * templist;  tdata = data;  g_static_mutex_lock (&tdata->structmutex);  for (templist = tdata->files; templist != NULL; templist = templist->next)    {      tempfle = templist->data;      if (tempfle->transfer_action != GFTP_TRANS_ACTION_SKIP)        break;    }  tdata->ready = 1;  if (templist == NULL)    {      tdata->show = 0;       tdata->done = 1;    }  else    tdata->show = 1;  g_static_mutex_unlock (&tdata->structmutex);}static voidgftpui_gtk_cancel (GtkWidget * widget, gpointer data){  gftp_transfer * tdata;  tdata = data;  g_static_mutex_lock (&tdata->structmutex);  tdata->show = 0;  tdata->done = tdata->ready = 1;  g_static_mutex_unlock (&tdata->structmutex);}#if GTK_MAJOR_VERSION > 1static voidgftpui_gtk_transfer_action (GtkWidget * widget, gint response,                            gpointer user_data){  switch (response)    {      case GTK_RESPONSE_OK:        gftpui_gtk_ok (widget, user_data);        gtk_widget_destroy (widget);        break;      case GTK_RESPONSE_CANCEL:        gftpui_gtk_cancel (widget, user_data);        /* no break */      default:        gtk_widget_destroy (widget);    }}   #endifvoidgftpui_ask_transfer (gftp_transfer * tdata){  char *dltitles[4], *add_data[4] = { NULL, NULL, NULL, NULL },       tempstr[50], temp1str[50], *pos, *utf8_file;  GtkWidget * dialog, * tempwid, * scroll, * hbox;  gftp_file * tempfle;  GList * templist;  size_t len;  int i;  dltitles[0] = _("Filename");  dltitles[1] = tdata->fromreq->hostname;  dltitles[2] = tdata->toreq->hostname;  dltitles[3] = _("Action");#if GTK_MAJOR_VERSION == 1  dialog = gtk_dialog_new ();  gtk_grab_add (dialog);  gtk_window_set_title (GTK_WINDOW (dialog), _("Transfer Files"));  gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area), 5);  gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->action_area), 35);  gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dialog)->action_area), TRUE);  gtk_signal_connect_object (GTK_OBJECT (dialog), "delete_event",                             GTK_SIGNAL_FUNC (gtk_widget_destroy),                             GTK_OBJECT (dialog));#else  dialog = gtk_dialog_new_with_buttons (_("Transfer Files"), NULL, 0,                                         GTK_STOCK_OK,                                        GTK_RESPONSE_OK,                                        GTK_STOCK_CANCEL,                                        GTK_RESPONSE_CANCEL,                                        NULL);#endif  gtk_window_set_wmclass (GTK_WINDOW(dialog), "transfer", "gFTP");  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);  gtk_container_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 10);  gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 5);  tempwid = gtk_label_new (_("The following file(s) exist on both the local and remote computer\nPlease select what you would like to do"));  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), tempwid, FALSE,		      FALSE, 0);  gtk_widget_show (tempwid);  scroll = gtk_scrolled_window_new (NULL, NULL);  gtk_widget_set_size_request (scroll, 450, 200);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),				  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);  tdata->clist = gtk_clist_new_with_titles (4, dltitles);  gtk_container_add (GTK_CONTAINER (scroll), tdata->clist);#if GTK_MAJOR_VERSION == 1  gtk_clist_set_selection_mode (GTK_CLIST (tdata->clist),				GTK_SELECTION_EXTENDED);#else  gtk_clist_set_selection_mode (GTK_CLIST (tdata->clist),				GTK_SELECTION_MULTIPLE);#endif  gtk_clist_set_column_width (GTK_CLIST (tdata->clist), 0, 100);  gtk_clist_set_column_justification (GTK_CLIST (tdata->clist), 1,				      GTK_JUSTIFY_RIGHT);  gtk_clist_set_column_width (GTK_CLIST (tdata->clist), 1, 85);  gtk_clist_set_column_justification (GTK_CLIST (tdata->clist), 2,				      GTK_JUSTIFY_RIGHT);  gtk_clist_set_column_width (GTK_CLIST (tdata->clist), 2, 85);  gtk_clist_set_column_width (GTK_CLIST (tdata->clist), 3, 85);  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), scroll, TRUE, TRUE,		      0);  gtk_widget_show (tdata->clist);  gtk_widget_show (scroll);  for (templist = tdata->files; templist != NULL;        templist = templist->next)    {      tempfle = templist->data;      if (tempfle->startsize == 0 || S_ISDIR (tempfle->st_mode))        {           tempfle->shown = 0;           continue;        }      tempfle->shown = 1;      len = strlen (tdata->toreq->directory);      pos = tempfle->destfile;      if (len == 1 && (*tdata->toreq->directory) == '/')        pos++;      if (strncmp (pos, tdata->toreq->directory, len) == 0)        pos += len + 1;      utf8_file = gftp_string_to_utf8 (tdata->toreq, pos);      add_data[0] = utf8_file != NULL ? utf8_file : pos;      gftp_get_transfer_action (tdata->fromreq, tempfle);      switch (tempfle->transfer_action)        {          case GFTP_TRANS_ACTION_OVERWRITE:            add_data[3] = _("Overwrite");            break;          case GFTP_TRANS_ACTION_SKIP:            add_data[3] = _("Skip");            break;          case GFTP_TRANS_ACTION_RESUME:            add_data[3] = _("Resume");            break;          default:            add_data[3] = _("Error");            break;        }      add_data[1] = insert_commas (tempfle->size, tempstr, sizeof (tempstr));      add_data[2] = insert_commas (tempfle->startsize, temp1str,                                   sizeof (temp1str));      i = gtk_clist_append (GTK_CLIST (tdata->clist), add_data);      gtk_clist_set_row_data (GTK_CLIST (tdata->clist), i, tempfle);      if (utf8_file != NULL)        g_free (utf8_file);    }  gtk_clist_select_all (GTK_CLIST (tdata->clist));  hbox = gtk_hbox_new (TRUE, 20);  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 0);  gtk_widget_show (hbox);  tempwid = gtk_button_new_with_label (_("Overwrite"));  gtk_box_pack_start (GTK_BOX (hbox), tempwid, TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",		      GTK_SIGNAL_FUNC (gftpui_gtk_overwrite), (gpointer) tdata);  gtk_widget_show (tempwid);  tempwid = gtk_button_new_with_label (_("Resume"));  gtk_box_pack_start (GTK_BOX (hbox), tempwid, TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",		      GTK_SIGNAL_FUNC (gftpui_gtk_resume), (gpointer) tdata);  gtk_widget_show (tempwid);  tempwid = gtk_button_new_with_label (_("Skip File"));  gtk_box_pack_start (GTK_BOX (hbox), tempwid, TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",                      GTK_SIGNAL_FUNC (gftpui_gtk_skip), (gpointer) tdata);  gtk_widget_show (tempwid);  hbox = gtk_hbox_new (TRUE, 20);  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 0);  gtk_widget_show (hbox);  tempwid = gtk_button_new_with_label (_("Select All"));  gtk_box_pack_start (GTK_BOX (hbox), tempwid, TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",		      GTK_SIGNAL_FUNC (gftpui_gtk_trans_selectall), (gpointer) tdata);  gtk_widget_show (tempwid);  tempwid = gtk_button_new_with_label (_("Deselect All"));  gtk_box_pack_start (GTK_BOX (hbox), tempwid, TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",		      GTK_SIGNAL_FUNC (gftpui_gtk_trans_unselectall), (gpointer) tdata);  gtk_widget_show (tempwid);#if GTK_MAJOR_VERSION == 1  tempwid = gtk_button_new_with_label (_("OK"));  GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT);  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid,		      TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",                      GTK_SIGNAL_FUNC (gftpui_gtk_ok), (gpointer) tdata);  gtk_signal_connect_object (GTK_OBJECT (tempwid), "clicked",			     GTK_SIGNAL_FUNC (gtk_widget_destroy),			     GTK_OBJECT (dialog));  gtk_widget_grab_default (tempwid);  gtk_widget_show (tempwid);  tempwid = gtk_button_new_with_label (_("  Cancel  "));  GTK_WIDGET_SET_FLAGS (tempwid, GTK_CAN_DEFAULT);  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), tempwid,		      TRUE, TRUE, 0);  gtk_signal_connect (GTK_OBJECT (tempwid), "clicked",		      GTK_SIGNAL_FUNC (gftpui_gtk_cancel), (gpointer) tdata);  gtk_signal_connect_object (GTK_OBJECT (tempwid), "clicked",			     GTK_SIGNAL_FUNC (gtk_widget_destroy),			     GTK_OBJECT (dialog));  gtk_widget_show (tempwid);#else  g_signal_connect (GTK_OBJECT (dialog), "response",                    G_CALLBACK (gftpui_gtk_transfer_action),(gpointer) tdata);#endif  gtk_widget_show (dialog);  dialog = NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -