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

📄 gtkfilesel.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
  filesel->selection_text = label = gtk_label_new ("");  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);  gtk_box_pack_start (GTK_BOX (entry_vbox), label, FALSE, FALSE, 0);  gtk_widget_show (label);  filesel->selection_entry = gtk_entry_new ();  gtk_signal_connect (GTK_OBJECT (filesel->selection_entry), "key_press_event",		      (GtkSignalFunc) gtk_file_selection_key_press, filesel);  gtk_signal_connect_object (GTK_OBJECT (filesel->selection_entry), "focus_in_event",			     (GtkSignalFunc) gtk_widget_grab_default,			     GTK_OBJECT (filesel->ok_button));  gtk_signal_connect_object (GTK_OBJECT (filesel->selection_entry), "activate",                             (GtkSignalFunc) gtk_button_clicked,                             GTK_OBJECT (filesel->ok_button));  gtk_box_pack_start (GTK_BOX (entry_vbox), filesel->selection_entry, TRUE, TRUE, 0);  gtk_widget_show (filesel->selection_entry);  if (!cmpl_state_okay (filesel->cmpl_state))    {      gchar err_buf[256];      sprintf (err_buf, _("Directory unreadable: %s"), cmpl_strerror (cmpl_errno));      gtk_label_set_text (GTK_LABEL (filesel->selection_text), err_buf);    }  else    {      gtk_file_selection_populate (filesel, "", FALSE);    }  gtk_widget_grab_focus (filesel->selection_entry);}GtkWidget*gtk_file_selection_new (const gchar *title){  GtkFileSelection *filesel;  filesel = gtk_type_new (GTK_TYPE_FILE_SELECTION);  gtk_window_set_title (GTK_WINDOW (filesel), title);  return GTK_WIDGET (filesel);}voidgtk_file_selection_show_fileop_buttons (GtkFileSelection *filesel){  g_return_if_fail (filesel != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (filesel));      /* delete, create directory, and rename */  if (!filesel->fileop_c_dir)     {      filesel->fileop_c_dir = gtk_button_new_with_label (_("Create Dir"));      gtk_signal_connect (GTK_OBJECT (filesel->fileop_c_dir), "clicked",			  (GtkSignalFunc) gtk_file_selection_create_dir, 			  (gpointer) filesel);      gtk_box_pack_start (GTK_BOX (filesel->button_area), 			  filesel->fileop_c_dir, TRUE, TRUE, 0);      gtk_widget_show (filesel->fileop_c_dir);    }	  if (!filesel->fileop_del_file)     {      filesel->fileop_del_file = gtk_button_new_with_label (_("Delete File"));      gtk_signal_connect (GTK_OBJECT (filesel->fileop_del_file), "clicked",			  (GtkSignalFunc) gtk_file_selection_delete_file, 			  (gpointer) filesel);      gtk_box_pack_start (GTK_BOX (filesel->button_area), 			  filesel->fileop_del_file, TRUE, TRUE, 0);      gtk_widget_show (filesel->fileop_del_file);    }  if (!filesel->fileop_ren_file)    {      filesel->fileop_ren_file = gtk_button_new_with_label (_("Rename File"));      gtk_signal_connect (GTK_OBJECT (filesel->fileop_ren_file), "clicked",			  (GtkSignalFunc) gtk_file_selection_rename_file, 			  (gpointer) filesel);      gtk_box_pack_start (GTK_BOX (filesel->button_area), 			  filesel->fileop_ren_file, TRUE, TRUE, 0);      gtk_widget_show (filesel->fileop_ren_file);    }  gtk_widget_queue_resize(GTK_WIDGET(filesel));}void       gtk_file_selection_hide_fileop_buttons (GtkFileSelection *filesel){  g_return_if_fail (filesel != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (filesel));      if (filesel->fileop_ren_file)     {      gtk_widget_destroy (filesel->fileop_ren_file);      filesel->fileop_ren_file = NULL;    }  if (filesel->fileop_del_file)    {      gtk_widget_destroy (filesel->fileop_del_file);      filesel->fileop_del_file = NULL;    }  if (filesel->fileop_c_dir)    {      gtk_widget_destroy (filesel->fileop_c_dir);      filesel->fileop_c_dir = NULL;    }}voidgtk_file_selection_set_filename (GtkFileSelection *filesel,				 const gchar      *filename){  char  buf[MAXPATHLEN];  const char *name, *last_slash;  g_return_if_fail (filesel != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (filesel));  g_return_if_fail (filename != NULL);  last_slash = strrchr (filename, '/');  if (!last_slash)    {      buf[0] = 0;      name = filename;    }  else    {      gint len = MIN (MAXPATHLEN - 1, last_slash - filename + 1);      strncpy (buf, filename, len);      buf[len] = 0;      name = last_slash + 1;    }  gtk_file_selection_populate (filesel, buf, FALSE);  if (filesel->selection_entry)    gtk_entry_set_text (GTK_ENTRY (filesel->selection_entry), name);}gchar*gtk_file_selection_get_filename (GtkFileSelection *filesel){  static char nothing[2] = "";  char *text;  char *filename;  g_return_val_if_fail (filesel != NULL, nothing);  g_return_val_if_fail (GTK_IS_FILE_SELECTION (filesel), nothing);  text = gtk_entry_get_text (GTK_ENTRY (filesel->selection_entry));  if (text)    {      filename = cmpl_completion_fullname (text, filesel->cmpl_state);      return filename;    }  return nothing;}voidgtk_file_selection_complete (GtkFileSelection *filesel,			     const gchar      *pattern){  g_return_if_fail (filesel != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (filesel));  g_return_if_fail (pattern != NULL);  if (filesel->selection_entry)    gtk_entry_set_text (GTK_ENTRY (filesel->selection_entry), pattern);  gtk_file_selection_populate (filesel, (gchar*) pattern, TRUE);}static voidgtk_file_selection_destroy (GtkObject *object){  GtkFileSelection *filesel;  GList *list;  HistoryCallbackArg *callback_arg;  g_return_if_fail (object != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (object));  filesel = GTK_FILE_SELECTION (object);    if (filesel->fileop_dialog)	  gtk_widget_destroy (filesel->fileop_dialog);    if (filesel->history_list)    {      list = filesel->history_list;      while (list)	{	  callback_arg = list->data;	  g_free (callback_arg->directory);	  g_free (callback_arg);	  list = list->next;	}      g_list_free (filesel->history_list);      filesel->history_list = NULL;    }    cmpl_free_state (filesel->cmpl_state);  filesel->cmpl_state = NULL;  if (GTK_OBJECT_CLASS (parent_class)->destroy)    (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);}/* Begin file operations callbacks */static voidgtk_file_selection_fileop_error (GtkFileSelection *fs, gchar *error_message){  GtkWidget *label;  GtkWidget *vbox;  GtkWidget *button;  GtkWidget *dialog;    g_return_if_fail (error_message != NULL);    /* main dialog */  dialog = gtk_dialog_new ();  /*  gtk_signal_connect (GTK_OBJECT (dialog), "destroy",		      (GtkSignalFunc) gtk_file_selection_fileop_destroy, 		      (gpointer) fs);  */  gtk_window_set_title (GTK_WINDOW (dialog), _("Error"));  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);    /* If file dialog is grabbed, make this dialog modal too */  /* When error dialog is closed, file dialog will be grabbed again */  if (GTK_WINDOW(fs)->modal)      gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);  vbox = gtk_vbox_new(FALSE, 0);  gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox,		     FALSE, FALSE, 0);  gtk_widget_show(vbox);  label = gtk_label_new(error_message);  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);  gtk_widget_show(label);  /* yes, we free it */  g_free (error_message);    /* close button */  button = gtk_button_new_with_label (_("Close"));  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",			     (GtkSignalFunc) gtk_widget_destroy, 			     (gpointer) dialog);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),		     button, TRUE, TRUE, 0);  GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);  gtk_widget_grab_default(button);  gtk_widget_show (button);  gtk_widget_show (dialog);}static voidgtk_file_selection_fileop_destroy (GtkWidget *widget, gpointer data){  GtkFileSelection *fs = data;  g_return_if_fail (fs != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (fs));    fs->fileop_dialog = NULL;}static voidgtk_file_selection_create_dir_confirmed (GtkWidget *widget, gpointer data){  GtkFileSelection *fs = data;  gchar *dirname;  gchar *path;  gchar *full_path;  gchar *buf;  CompletionState *cmpl_state;    g_return_if_fail (fs != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (fs));  dirname = gtk_entry_get_text (GTK_ENTRY (fs->fileop_entry));  cmpl_state = (CompletionState*) fs->cmpl_state;  path = cmpl_reference_position (cmpl_state);    full_path = g_strconcat (path, "/", dirname, NULL);  if ( (mkdir (full_path, 0755) < 0) )     {      buf = g_strconcat ("Error creating directory \"", dirname, "\":  ", 			 g_strerror(errno), NULL);      gtk_file_selection_fileop_error (fs, buf);    }  g_free (full_path);    gtk_widget_destroy (fs->fileop_dialog);  gtk_file_selection_populate (fs, "", FALSE);}  static voidgtk_file_selection_create_dir (GtkWidget *widget, gpointer data){  GtkFileSelection *fs = data;  GtkWidget *label;  GtkWidget *dialog;  GtkWidget *vbox;  GtkWidget *button;  g_return_if_fail (fs != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (fs));  if (fs->fileop_dialog)	  return;    /* main dialog */  fs->fileop_dialog = dialog = gtk_dialog_new ();  gtk_signal_connect (GTK_OBJECT (dialog), "destroy",		      (GtkSignalFunc) gtk_file_selection_fileop_destroy, 		      (gpointer) fs);  gtk_window_set_title (GTK_WINDOW (dialog), _("Create Directory"));  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);  /* If file dialog is grabbed, grab option dialog */  /* When option dialog is closed, file dialog will be grabbed again */  if (GTK_WINDOW(fs)->modal)      gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);  vbox = gtk_vbox_new(FALSE, 0);  gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox,		     FALSE, FALSE, 0);  gtk_widget_show(vbox);    label = gtk_label_new(_("Directory name:"));  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);  gtk_widget_show(label);  /*  The directory entry widget  */  fs->fileop_entry = gtk_entry_new ();  gtk_box_pack_start (GTK_BOX (vbox), fs->fileop_entry, 		      TRUE, TRUE, 5);  GTK_WIDGET_SET_FLAGS(fs->fileop_entry, GTK_CAN_DEFAULT);  gtk_widget_show (fs->fileop_entry);    /* buttons */  button = gtk_button_new_with_label (_("Create"));  gtk_signal_connect (GTK_OBJECT (button), "clicked",		      (GtkSignalFunc) gtk_file_selection_create_dir_confirmed, 		      (gpointer) fs);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),		     button, TRUE, TRUE, 0);  GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);  gtk_widget_show(button);    button = gtk_button_new_with_label (_("Cancel"));  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",			     (GtkSignalFunc) gtk_widget_destroy, 			     (gpointer) dialog);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),		     button, TRUE, TRUE, 0);  GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);  gtk_widget_grab_default(button);  gtk_widget_show (button);  gtk_widget_show (dialog);}static voidgtk_file_selection_delete_file_confirmed (GtkWidget *widget, gpointer data){  GtkFileSelection *fs = data;  CompletionState *cmpl_state;  gchar *path;  gchar *full_path;  gchar *buf;    g_return_if_fail (fs != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (fs));  cmpl_state = (CompletionState*) fs->cmpl_state;  path = cmpl_reference_position (cmpl_state);    full_path = g_strconcat (path, "/", fs->fileop_file, NULL);  if ( (unlink (full_path) < 0) )     {      buf = g_strconcat ("Error deleting file \"", fs->fileop_file, "\":  ", 			 g_strerror(errno), NULL);      gtk_file_selection_fileop_error (fs, buf);    }  g_free (full_path);    gtk_widget_destroy (fs->fileop_dialog);  gtk_file_selection_populate (fs, "", FALSE);}static voidgtk_file_selection_delete_file (GtkWidget *widget, gpointer data){  GtkFileSelection *fs = data;  GtkWidget *label;  GtkWidget *vbox;  GtkWidget *button;  GtkWidget *dialog;  gchar *filename;  gchar *buf;    g_return_if_fail (fs != NULL);  g_return_if_fail (GTK_IS_FILE_SELECTION (fs));  if (fs->fileop_dialog)	  return;  filename = gtk_entry_get_text (GTK_ENTRY (fs->selection_entry));  if (strlen(filename) < 1)	  return;  fs->fileop_file = filename;    /* main dialog */  fs->fileop_dialog = dialog = gtk_dialog_new ();  gtk_signal_connect (GTK_OBJECT (dialog), "destroy",		      (GtkSignalFunc) gtk_file_selection_fileop_destroy, 		      (gpointer) fs);  gtk_window_set_title (GTK_WINDOW (dialog), _("Delete File"));  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);  /* If file dialog is grabbed, grab option dialog */  /* When option dialog is closed, file dialog will be grabbed again */  if (GTK_WINDOW(fs)->modal)      gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);    vbox = gtk_vbox_new(FALSE, 0);  gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox,		     FALSE, FALSE, 0);  gtk_widget_show(vbox);  buf = g_strconcat ("Really delete file \"", filename, "\" ?", NULL);  label = gtk_label_new(buf);  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);  gtk_widget_show(label);  g_free(buf);    /* buttons */  button = gtk_button_new_with_label (_("Delete"));  gtk_signal_connect (GTK_OBJECT (button), "clicked",		      (GtkSignalFunc) gtk_file_selection_delete_file_confirmed, 		      (gpointer) fs);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),		     button, TRUE, TRUE, 0);  GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);  gtk_widget_show(button);    button = gtk_button_new_with_label (_("Cancel"));  gtk_signal_connect_object (GTK_OBJECT (button), "clicked",			     (GtkSignalFunc) gtk_widget_destroy, 			     (gpointer) dialog);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),		     button, TRUE, TRUE, 0);  GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);  gtk_widget_grab_default(button);  gtk_widget_show (button);  gtk_widget_show (dialog);}

⌨️ 快捷键说明

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