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

📄 fe_gtk_main.c

📁 站点映像程序
💻 C
📖 第 1 页 / 共 4 页
字号:
  case SITE_NOREMOTEDIR:	 sprintf(errstr, _("Remote directory not specified in site `%s'.\n"), 				current->name );	 break;  case SITE_NOLOCALDIR:	 sprintf(errstr, _("Local directory not specified in site `%s'.\n"), 				current->name );	 break;  case SITE_ACCESSLOCALDIR:	 sprintf( errstr, _("Could not read directory for `%s':\n\t%s\n"), 				 current->name, current->local_root );	 break;  case SITE_INVALIDPORT:	 sprintf(errstr, _("Invalid port used in site `%s'.\n"),				current->name );	 break;  case SITE_NOMAINTAIN:	 sprintf(errstr, _("%s cannot maintain symbolic links (site `%s').\n"),				current->driver->protocol_name, current->name );	 break;  case SITE_NOREMOTEREL:	 sprintf(errstr, _("Cannot use a relative remote directory in %s (site `%s').\n"), current->driver->protocol_name, current->name );	 break;  case SITE_NOPERMS:	 sprintf(errstr, _("The protocol you are attempting to use does\nnot currently support maintaining permissions."));	 break;  case SITE_NOLOCALREL:	 sprintf(errstr, _("Could not find 'relative' local directory"));  }  errstr = realloc(errstr, strlen(errstr) + 1);  errors = g_list_append(errors, errstr);}void fill_tree_from_all_sites(GtkWidget *a_ctree) {   struct site_t *current;   struct ctree_attachment *info_to_add;   gchar tmp[100];   gchar *node_label[1];   int ret;   for (current=all_sites; current != NULL; current = current->next) {      /* This allocates some memory for each site, and stores the fact that       * it is a _site_ plus a void pointer to the relavent data.       * For use in the ctree. Time complexity improvements and all that.       */      info_to_add = malloc (sizeof (struct ctree_attachment));      info_to_add->file_or_site = IS_A_SITE;      info_to_add->info_struct = (void *) current;      /* Make what's displayed next to the site name an option.       * E.g. ftp server, or local dir. Remote dir even maybe? */            sprintf (tmp, "%s  (%s)", current->name, current->local_root_user);      node_label[0] = tmp;      site_item = gtk_ctree_insert_node (GTK_CTREE (the_tree), NULL, NULL, node_label,				     0, NULL, NULL, NULL, NULL, false, false);      gtk_ctree_node_set_row_data (GTK_CTREE (the_tree), site_item,				   (gpointer) info_to_add);      		/* Add any errors with the site to the errors list, so that we can			present the user with all the errors, rather than popping lots of			dialogs on screen at once.		*/		check_site_and_record_errors(current);      /* Read site info */      site_readfiles (current);      /* Output file info onto the tree */      populate_site_node (site_item, current);      /* Colour the site node as required */      color_site_node (GTK_CTREE_NODE (site_item), current);      /* Sort stuff, just for fun */      gtk_ctree_sort_node (GTK_CTREE (the_tree), GTK_CTREE_NODE (site_item));   }}GtkWidget *ctree_create_sites (void) {   the_tree = gtk_ctree_new (1, 0);    gtk_ctree_set_indent (GTK_CTREE (the_tree), 14);   gtk_ctree_set_spacing (GTK_CTREE (the_tree), 4);   gtk_ctree_set_line_style (GTK_CTREE (the_tree), GTK_CTREE_LINES_DOTTED);      gtk_signal_connect (GTK_OBJECT (the_tree), "tree-select-row",		       GTK_SIGNAL_FUNC (select_ctree_cb), NULL);   fill_tree_from_all_sites(the_tree);   gtk_widget_set_usize (the_tree, 150, -1);   gtk_widget_show (the_tree);   gtk_clist_set_column_auto_resize (GTK_CLIST (the_tree), 0, TRUE);   return the_tree;}/* This whole refresh thing works as follows: *  * Clicking on refresh from the toolbar will call 'status_refresh' which * should set the pixmap of each node of the selected site correctly * according to changed status & file/dir status. *  * This should not be confused with the rescan functions which (will) reread * the local directory structure and then refresh the ctree accordingly. *//* This all works apart from one itty bitty bug. It will be commented out as * soon as i find what's causing the bug, or someone sends me a patch. */void refresh_node_pixmap (GtkCTree *tree, GtkCTreeNode *node) {  struct ctree_attachment *attached;  struct site_file_t *file_data;  guint8 spaces;  gchar *node_text;  gboolean is_a_leaf, open;/*  node_text = (gchar *) malloc (100);*/  gtk_ctree_get_node_info (GTK_CTREE (tree),			   GTK_CTREE_NODE (node),			   &node_text, &spaces,			   NULL, NULL, NULL, NULL,			   &is_a_leaf, &open);  DEBUG(DEBUG_GNOME, "node: %s - ", node_text);  node_text = g_strdup(node_text);  attached = malloc (sizeof (struct ctree_attachment));  attached = (struct ctree_attachment *) gtk_ctree_node_get_row_data (GTK_CTREE (tree),					  GTK_CTREE_NODE (node));  if (attached->file_or_site != IS_A_FILE) {    if (attached->file_or_site != IS_A_SITE)      return;    DEBUG(DEBUG_GNOME, "Node is not a file. Uh-oh.\n");    return;  }    file_data = (struct site_file_t *) attached->info_struct;  if (file_data->dir) {    return;  } else {    if (file_data->diff != file_unchanged) {      if (file_data->diff == file_changed) {	gtk_ctree_set_node_info (GTK_CTREE (tree), 				 GTK_CTREE_NODE (node),				 node_text,				 spaces, orange_file, orange_file_map,				 orange_file, orange_file_map,				 is_a_leaf, open);	DEBUG(DEBUG_GNOME, "changed.\n");      } else {	gtk_ctree_set_node_info (GTK_CTREE (tree), 				 GTK_CTREE_NODE (node),				 node_text,				 spaces, red_file, red_file_map,				 red_file, red_file_map,				 is_a_leaf, open);	DEBUG(DEBUG_GNOME, "added, deleted or moved.\n");      }    } else {	gtk_ctree_set_node_info (GTK_CTREE (tree), 				 GTK_CTREE_NODE (node),				 node_text,				 spaces, green_file, green_file_map,				 green_file, green_file_map,				 is_a_leaf, open);	DEBUG(DEBUG_GNOME, "unchanged.\n");    }  }  g_free(node_text);}void refresh_selected (void) {   pixmap_refresh (current_site_node);}void pixmap_refresh (GtkCTreeNode *a_site_node) {   gtk_ctree_post_recursive (GTK_CTREE (the_tree), 			     GTK_CTREE_NODE (a_site_node),			     GTK_CTREE_FUNC (refresh_node_pixmap),			     NULL);}/* GUI making functions. * Most of these were/will be made using Glade. */void make_error_window (void){  GtkWidget *dialog_vbox2;  GtkWidget *label9;  GtkWidget *sc_win;  GtkWidget *label7;  GtkWidget *label8;  GtkWidget *dialog_action_area2;  GtkWidget *cancel;  error_log_window = gnome_dialog_new ("Errors during the recent update", NULL);  gtk_object_set_data (GTK_OBJECT (error_log_window), "error_log_window", error_log_window);  gtk_widget_set_usize (error_log_window, 567, 248);  gtk_window_set_policy (GTK_WINDOW (error_log_window), TRUE, TRUE, FALSE);  dialog_vbox2 = GNOME_DIALOG (error_log_window)->vbox;  gtk_object_set_data (GTK_OBJECT (error_log_window), "dialog_vbox2", dialog_vbox2);  gtk_widget_show (dialog_vbox2);  label9 = gtk_label_new ("There were errors with the following files and/or directories:");  gtk_widget_ref (label9);  gtk_object_set_data_full (GTK_OBJECT (error_log_window), "label9", label9,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label9);  gtk_box_pack_start (GTK_BOX (dialog_vbox2), label9, FALSE, FALSE, 0);  gtk_label_set_justify (GTK_LABEL (label9), GTK_JUSTIFY_LEFT);  gtk_misc_set_alignment (GTK_MISC (label9), 7.45058e-09, 0.5);  sc_win = gtk_scrolled_window_new (NULL, NULL);  gtk_widget_ref (sc_win);  gtk_object_set_data_full (GTK_OBJECT (error_log_window), "sc_win", sc_win,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (sc_win);  gtk_box_pack_start (GTK_BOX (dialog_vbox2), sc_win, TRUE, TRUE, 0);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sc_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);  error_log_list = gtk_clist_new (2);  gtk_widget_ref (error_log_list);  gtk_object_set_data_full (GTK_OBJECT (error_log_window), "error_log_list", error_log_list,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (error_log_list);  gtk_container_add (GTK_CONTAINER (sc_win), error_log_list);  gtk_clist_set_column_width (GTK_CLIST (error_log_list), 0, 265);  gtk_clist_set_column_width (GTK_CLIST (error_log_list), 1, 80);  gtk_clist_column_titles_show (GTK_CLIST (error_log_list));  label7 = gtk_label_new ("File/Directory Name");  gtk_widget_ref (label7);  gtk_object_set_data_full (GTK_OBJECT (error_log_window), "label7", label7,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label7);  gtk_clist_set_column_widget (GTK_CLIST (error_log_list), 0, label7);  label8 = gtk_label_new ("Error code/message");  gtk_widget_ref (label8);  gtk_object_set_data_full (GTK_OBJECT (error_log_window), "label8", label8,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label8);  gtk_clist_set_column_widget (GTK_CLIST (error_log_list), 1, label8);  dialog_action_area2 = GNOME_DIALOG (error_log_window)->action_area;  gtk_object_set_data (GTK_OBJECT (error_log_window), "dialog_action_area2", dialog_action_area2);  gtk_widget_show (dialog_action_area2);  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);  gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area2), 8);  gnome_dialog_append_button (GNOME_DIALOG (error_log_window), GNOME_STOCK_BUTTON_CLOSE);  cancel = g_list_last (GNOME_DIALOG (error_log_window)->buttons)->data;  gtk_widget_ref (cancel);  gtk_object_set_data_full (GTK_OBJECT (error_log_window), "cancel", cancel,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (cancel);  GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT);  gtk_signal_connect_object (GTK_OBJECT (error_log_window), "delete_event",                             GTK_SIGNAL_FUNC (gtk_widget_hide),                             GTK_OBJECT (error_log_window));  gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked",                             GTK_SIGNAL_FUNC (gtk_widget_hide),                             GTK_OBJECT (error_log_window));}   GtkWidget*create_site_errors_dialog (){  GtkWidget *site_errors_dialog;  GtkWidget *dialog_vbox2;  GtkWidget *vbox1;  GtkWidget *label1;  GtkWidget *hseparator1;  GtkWidget *error_output;  GtkWidget *sw;  GtkWidget *dialog_action_area2;  GtkWidget *button2;  GList *current;  site_errors_dialog = gnome_dialog_new (NULL, NULL);  gtk_object_set_data (GTK_OBJECT (site_errors_dialog), "site_errors_dialog", site_errors_dialog);  GTK_WINDOW (site_errors_dialog)->type = GTK_WINDOW_DIALOG;  gtk_window_set_position (GTK_WINDOW (site_errors_dialog), GTK_WIN_POS_CENTER);  gtk_window_set_policy (GTK_WINDOW (site_errors_dialog), FALSE, FALSE, FALSE);  gnome_dialog_set_close (GNOME_DIALOG (site_errors_dialog), TRUE);  dialog_vbox2 = GNOME_DIALOG (site_errors_dialog)->vbox;  gtk_object_set_data (GTK_OBJECT (site_errors_dialog), "dialog_vbox2", dialog_vbox2);  gtk_widget_show (dialog_vbox2);  vbox1 = gtk_vbox_new (FALSE, 0);  gtk_widget_ref (vbox1);  gtk_object_set_data_full (GTK_OBJECT (site_errors_dialog), "vbox1", vbox1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (vbox1);  gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox1, TRUE, TRUE, 0);  label1 = gtk_label_new ("WARNING!\n\nThe following errors were encountered while examining\nyour site definitions. Unless corrected, Xsitecopy may fail\nto function properly.");  gtk_widget_ref (label1);  gtk_object_set_data_full (GTK_OBJECT (site_errors_dialog), "label1", label1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label1);  gtk_box_pack_start (GTK_BOX (vbox1), label1, FALSE, FALSE, 0);  hseparator1 = gtk_hseparator_new ();  gtk_widget_ref (hseparator1);  gtk_object_set_data_full (GTK_OBJECT (site_errors_dialog), "hseparator1", hseparator1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (hseparator1);  gtk_box_pack_start (GTK_BOX (vbox1), hseparator1, TRUE, TRUE, 8);  sw = gtk_scrolled_window_new(NULL, NULL);  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),											GTK_POLICY_NEVER,											GTK_POLICY_AUTOMATIC);  gtk_widget_show(sw);  error_output = gtk_text_new (NULL, NULL);  gtk_widget_ref (error_output);  gtk_object_set_data_full (GTK_OBJECT (site_errors_dialog), "error_output", error_output,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (error_output);  gtk_container_add(GTK_CONTAINER(sw), error_output);  gtk_box_pack_start (GTK_BOX (vbox1), sw, TRUE, TRUE, 0);  dialog_action_area2 = GNOME_DIALOG (site_errors_dialog)->action_area;  gtk_object_set_data (GTK_OBJECT (site_errors_dialog), "dialog_action_area2", dialog_action_area2);  gtk_widget_show (dialog_action_area2);  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_SPREAD);  gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area2), 8);  gnome_dialog_append_button (GNOME_DIALOG (site_errors_dialog), GNOME_STOCK_BUTTON_OK);  button2 = g_list_last (GNOME_DIALOG (site_errors_dialog)->buttons)->data;  gtk_widget_ref (button2);  gtk_object_set_data_full (GTK_OBJECT (site_errors_dialog), "button2", button2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (button2);  GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT);  for (current = errors; current; current=current->next) {	 gtk_text_insert(GTK_TEXT (error_output), 						  NULL, NULL, NULL,						  (const char *) current->data, -1);	 g_free (current->data);  }  gtk_signal_connect_object (GTK_OBJECT (button2), "clicked",                             GTK_SIGNAL_FUNC (gtk_widget_destroy),                             GTK_OBJECT (site_errors_dialog));  errors = NULL;  gtk_widget_grab_default (button2);  return site_errors_dialog;}

⌨️ 快捷键说明

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