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

📄 misc-gtk.c

📁 一个linux下的ftp程序。它是使用文件传输协议的一系列程序的集合。
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************//*  misc-gtk.c - misc stuff for the gtk+ 1.2 port of 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., 675 Mass Ave, Cambridge, MA 02139, USA.                *//*****************************************************************************/#include "gftp-gtk.h"static const char cvsid[] = "$Id: misc-gtk.c,v 1.56 2005/01/25 02:34:19 masneyb Exp $";static GtkWidget * statuswid;voidremove_files_window (gftp_window_data * wdata){  wdata->show_selected = 0;  gtk_clist_freeze (GTK_CLIST (wdata->listbox));  gtk_clist_clear (GTK_CLIST (wdata->listbox));  free_file_list (wdata->files);  wdata->files = NULL;  gtk_clist_thaw (GTK_CLIST (wdata->listbox));}voidftp_log (gftp_logging_level level, gftp_request * request,          const char *string, ...){  uintptr_t max_log_window_size;  int upd, free_logstr;  gftp_log * newlog;  gint delsize;  char *logstr;  va_list argp;  size_t len;#if GTK_MAJOR_VERSION == 1  gftp_color * color;  GdkColor fore;#else  GtkTextBuffer * textbuf;  GtkTextIter iter, iter2;  const char *descr;  char *utf8_str;#endif  va_start (argp, string);  if (strcmp (string, "%s") == 0)    {      logstr = va_arg (argp, char *);      free_logstr = 0;    }  else    {      logstr = g_strdup_vprintf (string, argp);      free_logstr = 1;    }  va_end (argp);#if GTK_MAJOR_VERSION > 1  if ((utf8_str = gftp_string_to_utf8 (request, logstr)) != NULL)    {      if (free_logstr)        g_free (logstr);      else        free_logstr = 1;      logstr = utf8_str;    }#endif  if (pthread_self () != main_thread_id)    {      newlog = g_malloc0 (sizeof (*newlog));      newlog->type = level;      if (free_logstr)        newlog->msg = logstr;      else        newlog->msg = g_strdup (logstr);      pthread_mutex_lock (&log_mutex);      gftp_file_transfer_logs = g_list_append (gftp_file_transfer_logs, newlog);      pthread_mutex_unlock (&log_mutex);      return;    }  if (gftp_logfd != NULL && level != gftp_logging_misc_nolog)    {      if (fwrite (logstr, strlen (logstr), 1, gftp_logfd) != 1)        {          fclose (gftp_logfd);          gftp_logfd = NULL;        }      else        {          fflush (gftp_logfd);          if (ferror (gftp_logfd))            {              fclose (gftp_logfd);              gftp_logfd = NULL;            }        }    }  upd = logwdw_vadj->upper - logwdw_vadj->page_size == logwdw_vadj->value;  gftp_lookup_global_option ("max_log_window_size", &max_log_window_size);#if GTK_MAJOR_VERSION == 1  switch (level)    {      case gftp_logging_send:        gftp_lookup_global_option ("send_color", &color);        break;      case gftp_logging_recv:        gftp_lookup_global_option ("recv_color", &color);        break;      case gftp_logging_error:        gftp_lookup_global_option ("error_color", &color);        break;      default:        gftp_lookup_global_option ("misc_color", &color);        break;    }  memset (&fore, 0, sizeof (fore));  fore.red = color->red;  fore.green = color->green;  fore.blue = color->blue;  gtk_text_freeze (GTK_TEXT (logwdw));  gtk_text_insert (GTK_TEXT (logwdw), NULL, &fore, NULL, logstr, -1);  len = gtk_text_get_length (GTK_TEXT (logwdw));  if (max_log_window_size > 0 && len > max_log_window_size)    {      delsize = len - max_log_window_size;      gtk_text_set_point (GTK_TEXT (logwdw), delsize);      gtk_text_backward_delete (GTK_TEXT (logwdw), delsize);      len = max_log_window_size;    }  gtk_text_set_point (GTK_TEXT (logwdw), len);  gtk_text_thaw (GTK_TEXT (logwdw));  if (upd)    gtk_adjustment_set_value (logwdw_vadj, logwdw_vadj->upper);#else  switch (level)    {      case gftp_logging_send:        descr = "send";        break;      case gftp_logging_recv:        descr = "recv";        break;      case gftp_logging_error:        descr = "error";        break;      default:        descr = "misc";        break;    }  textbuf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (logwdw));  len = gtk_text_buffer_get_char_count (textbuf);  gtk_text_buffer_get_iter_at_offset (textbuf, &iter, len);  gtk_text_buffer_insert_with_tags_by_name (textbuf, &iter, logstr, -1,                                             descr, NULL);  if (upd)    {      gtk_text_buffer_move_mark (textbuf, logwdw_textmark, &iter);      gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (logwdw), logwdw_textmark,                                     0, 1, 1, 1);    }  if (max_log_window_size > 0)    {      delsize = len + g_utf8_strlen (logstr, -1) - max_log_window_size;      if (delsize > 0)        {          gtk_text_buffer_get_iter_at_offset (textbuf, &iter, 0);          gtk_text_buffer_get_iter_at_offset (textbuf, &iter2, delsize);          gtk_text_buffer_delete (textbuf, &iter, &iter2);        }    }#endif  if (free_logstr)    g_free (logstr);}voidupdate_window_info (void){  char *tempstr, empty[] = "";  GtkWidget * tempwid;  unsigned int port;  int i;  if (current_wdata->request != NULL)    {      if (GFTP_IS_CONNECTED (current_wdata->request))        {          if ((tempstr = current_wdata->request->hostname) == NULL)            tempstr = empty;          gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (hostedit)->entry), tempstr);              if ((tempstr = current_wdata->request->username) == NULL)            tempstr = empty;          gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (useredit)->entry), tempstr);              if ((tempstr = current_wdata->request->password) == NULL)            tempstr = empty;          gtk_entry_set_text (GTK_ENTRY (passedit), tempstr);              port = gftp_protocol_default_port (current_wdata->request);          if (current_wdata->request->port != 0 &&              port != current_wdata->request->port)            {              tempstr = g_strdup_printf ("%d", current_wdata->request->port);              gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (portedit)->entry), tempstr);              g_free (tempstr);            }          else            gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (portedit)->entry), "");              for (i=0; gftp_protocols[i].init != NULL; i++)            {              if (current_wdata->request->init == gftp_protocols[i].init)                {                  gtk_option_menu_set_history (GTK_OPTION_MENU (optionmenu), i);                  break;                }            }          gtk_tooltips_set_tip (GTK_TOOLTIPS(openurl_tooltip), openurl_btn,                                _("Disconnect from the remote server"), NULL);        }      else        gtk_tooltips_set_tip (GTK_TOOLTIPS(openurl_tooltip), openurl_btn,                              _("Connect to the site specified in the host entry. If the host entry is blank, then a dialog is presented that will allow you to enter a URL."), NULL);    }  update_window (&window1);  update_window (&window2);  tempwid = gtk_item_factory_get_widget (factory, menus[tools_start+2].path);  gtk_widget_set_sensitive (tempwid, GFTP_IS_CONNECTED (window1.request) 			    && GFTP_IS_CONNECTED (window2.request));}static voidset_menu_sensitive (gftp_window_data * wdata, char *path, int sensitive){  GtkWidget * tempwid;  char * pos;  tempwid = NULL;  if (factory != NULL)    tempwid = gtk_item_factory_get_widget (factory, path);  if (tempwid)    gtk_widget_set_sensitive (tempwid, sensitive);  if (wdata != NULL)    {      if ((pos = strchr (path + 1, '/')) == NULL)        pos = path;          if (wdata->ifactory)        tempwid = gtk_item_factory_get_widget (wdata->ifactory, pos);      if (tempwid)        gtk_widget_set_sensitive (tempwid, sensitive);    }}voidupdate_window (gftp_window_data * wdata){  char *dir, *tempstr, *temp1str, *fspec, *utf8_directory;  int connected, start;  connected = GFTP_IS_CONNECTED (wdata->request);  if (connected)    {      fspec = wdata->show_selected ? "Selected" : strcmp (wdata->filespec, "*") == 0 ?  _("All Files") : wdata->filespec;      if ((temp1str = wdata->request->hostname) == NULL ||          wdata->request->protonum == GFTP_LOCAL_NUM)	temp1str = "";      tempstr = g_strconcat (temp1str, *temp1str == '\0' ? "[" : " [",		     gftp_protocols[wdata->request->protonum].name,		     wdata->request->cached ? _("] (Cached) [") : "] [",                     fspec, "]", current_wdata == wdata ? "*" : "", NULL);      gtk_label_set (GTK_LABEL (wdata->hoststxt), tempstr);      g_free (tempstr);      utf8_directory = NULL;      if ((dir = wdata->request->directory) == NULL)        temp1str = "";      else        {          utf8_directory = gftp_string_to_utf8 (wdata->request,                                                 wdata->request->directory);          if (utf8_directory != NULL)            temp1str = utf8_directory;          else            temp1str = dir;        }      gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (wdata->combo)->entry),temp1str);      if (utf8_directory != NULL)        g_free (utf8_directory);    }  else if (wdata->hoststxt != NULL)    {      tempstr = g_strconcat (_("Not connected"),                              current_wdata == wdata ? "*" : "", NULL);      gtk_label_set (GTK_LABEL (wdata->hoststxt), tempstr);      g_free (tempstr);      gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (wdata->combo)->entry), "");    }  if (wdata == &window1)    start = local_start;  else    start = remote_start;  set_menu_sensitive (wdata, menus[start + 3].path, connected &&                       strcmp (wdata->request->url_prefix, "file") != 0);  set_menu_sensitive (wdata, menus[start + 5].path, connected);  set_menu_sensitive (wdata, menus[start + 6].path, connected);  set_menu_sensitive (wdata, menus[start + 7].path, connected);  set_menu_sensitive (wdata, menus[start + 8].path, connected);  set_menu_sensitive (wdata, menus[start + 9].path, connected);  set_menu_sensitive (wdata, menus[start + 11].path, connected);  set_menu_sensitive (wdata, menus[start + 12].path, connected &&                      wdata->request->site != NULL);  set_menu_sensitive (wdata, menus[start + 13].path, connected &&                      wdata->request->chdir!= NULL);  set_menu_sensitive (wdata, menus[start + 14].path, connected &&                      wdata->request->chmod != NULL);  set_menu_sensitive (wdata, menus[start + 15].path, connected &&                      wdata->request->mkdir != NULL);  set_menu_sensitive (wdata, menus[start + 16].path, connected &&                      wdata->request->rename != NULL);  set_menu_sensitive (wdata, menus[start + 17].path, connected &&                      wdata->request->rmdir != NULL &&                      wdata->request->rmfile != NULL);  set_menu_sensitive (wdata, menus[start + 18].path, connected &&                      wdata->request->get_file != NULL);  set_menu_sensitive (wdata, menus[start + 19].path, connected &&                      wdata->request->get_file != NULL);  set_menu_sensitive (wdata, menus[start + 20].path, connected);  connected = GFTP_IS_CONNECTED (window1.request) && GFTP_IS_CONNECTED (window2.request);  start = trans_start;  set_menu_sensitive (NULL, menus[start + 2].path, connected);  set_menu_sensitive (NULL, menus[start + 3].path, connected);  set_menu_sensitive (NULL, menus[start + 5].path, connected);  set_menu_sensitive (NULL, menus[start + 6].path, connected);  set_menu_sensitive (NULL, menus[start + 7].path, connected);  set_menu_sensitive (NULL, menus[start + 8].path, connected);  set_menu_sensitive (NULL, menus[start + 10].path, connected);  set_menu_sensitive (NULL, menus[start + 11].path, connected);  gtk_widget_set_sensitive (download_left_arrow, connected);  gtk_widget_set_sensitive (upload_right_arrow, connected);}  GtkWidget *toolbar_pixmap (GtkWidget * widget, char *filename){  gftp_graphic * graphic;  GtkWidget *pix;  if (filename == NULL || *filename == '\0')    return (NULL);  graphic = open_xpm (widget, filename);  if (graphic == NULL)    return (NULL);      if ((pix = gtk_pixmap_new (graphic->pixmap, graphic->bitmap)) == NULL)    return (NULL);  gtk_widget_show (pix);  return (pix);}gftp_graphic *open_xpm (GtkWidget * widget, char *filename){  gftp_graphic * graphic;  GtkStyle *style;  char *exfile;  if ((graphic = g_hash_table_lookup (graphic_hash_table, filename)) != NULL)    return (graphic);  style = gtk_widget_get_style (widget);  if ((exfile = get_xpm_path (filename, 0)) == NULL)    return (NULL);  graphic = g_malloc0 (sizeof (*graphic));  graphic->pixmap = gdk_pixmap_create_from_xpm (widget->window, 

⌨️ 快捷键说明

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