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

📄 fe_gtk_main.c

📁 站点映像程序
💻 C
📖 第 1 页 / 共 4 页
字号:
   extra_info = malloc (sizeof (struct ctree_attachment));   extra_info->file_or_site = IS_A_SITE;   extra_info->info_struct = (void *) site_to_add;   gtk_ctree_node_set_row_data (GTK_CTREE (the_tree), site_im_adding,				(gpointer) extra_info);   /* Colour it to reflect status */   /*   color_site_node (GTK_CTREE_NODE (site_im_adding), site_to_add);*/   gtk_ctree_select (GTK_CTREE (the_tree), GTK_CTREE_NODE (site_im_adding));   if (GTK_TOGGLE_BUTTON (widgets->catchup_choice)->active) {     catchup_selected(GNOME_YES, NULL);   } else {     initialize_selected(GNOME_YES, NULL);   }   DEBUG(DEBUG_GNOME, "Our work here is done.\n");   rcfile_saved = false;   /*gtk_widget_hide (popup_win);*/   close_wizard();   return;}void select_ctree_cb (GtkCTree *ctree, GtkCTreeNode *node, gpointer data) {   GtkCTreeNode *parent;   struct site_t *current_site;   struct site_file_t *current_file;   void *data_to_get;   struct ctree_attachment *actual_data;      /* Make sure that any changes have been confirmed on the selected site,    * before selected_site gets changed. This seems to get automatically done    * by the signal handler.    */   current_site = malloc (sizeof (struct site_t));   if (GTK_CTREE_ROW (node)->parent == NULL) {   /* We're at the top level */      if ( (data_to_get = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), GTK_CTREE_NODE (node))) == NULL) {	 DEBUG(DEBUG_GNOME, "\"Data get\" returned NULL. Oh dear.\n");      }      actual_data = (struct ctree_attachment *) data_to_get;      if (actual_data->file_or_site != IS_A_SITE)	 DEBUG(DEBUG_GNOME, "Somehow you've clicked on a site, but ended up with file data!\n");      current_site = (struct site_t *) actual_data->info_struct;      /* Make the data shared */      selected_site = current_site;      current_site_node = node;            gtk_container_remove (GTK_CONTAINER (main_area_box), area_data);      area_data = make_site_info_area (current_site);      gtk_container_add (GTK_CONTAINER (main_area_box), area_data);   } else if (GTK_CTREE_ROW (node)->parent != NULL) {      parent = GTK_CTREE_ROW (node)->parent;      /* Grab the file data from that row */      if ( (data_to_get = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), GTK_CTREE_NODE (node))) == NULL) {	 DEBUG(DEBUG_GNOME, "\"Data get\" for the file returned NULL. Oh dear.\n");      }      actual_data = (struct ctree_attachment *) data_to_get;      if (actual_data->file_or_site != IS_A_FILE)	 DEBUG(DEBUG_GNOME, "Somehow you've clicked on a file, but ended up with site data!\n");      current_file = (struct site_file_t *) actual_data->info_struct;      /* Grab the site data from the file's parent */      while (GTK_CTREE_ROW (parent)->parent != NULL) {	 parent = GTK_CTREE_ROW(parent)->parent;	 DEBUG(DEBUG_GNOME, "Assigned parent to node->parent.\n");      }      if ( (data_to_get = gtk_ctree_node_get_row_data (GTK_CTREE (ctree), GTK_CTREE_NODE (parent))) == NULL) {	 DEBUG(DEBUG_GNOME, "\"Data get\" for the file's parent returned NULL. Oh dear.\n");      }      actual_data = (struct ctree_attachment *) data_to_get;      if (actual_data->file_or_site != IS_A_SITE)	 DEBUG(DEBUG_GNOME, "Somehow you've clicked on a file, but it's parent was a file too!?\n");      current_site = (struct site_t *) actual_data->info_struct;      selected_site = current_site;      current_site_node = parent;            if (current_file == NULL) {	 fe_status ("Unable to access info about the selected file.");      } else {	 gtk_container_remove (GTK_CONTAINER (main_area_box), area_data);	 area_data = make_file_info_area (current_file);	 gtk_container_add (GTK_CONTAINER (main_area_box), area_data);      }   } else {      g_print ("If you got to here, something is really buggered, quite frankly.\n");   }}GtkWidget *create_default_main_area (void) {   GtkWidget *vbox, *label;      vbox = gtk_vbox_new (FALSE, 5);   label = gtk_label_new ("No site is currently selected.\n\nPlease choose one from the tree view\non the left before proceeding with any more operations.");   gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 10);   gtk_widget_show (label);      gtk_widget_show (vbox);   return vbox;}GtkWidget *create_initial_main_area (void) {   GtkWidget *vbox, *label;   gchar *summary;   gint num_that_need_updates = 0;   struct site_t *tmp_site;      vbox = gtk_vbox_new (FALSE, 10);   /* TODO: Add some checking to see if this is the first time they've run sitecopy,    * change greeting accordingly.     */   label = gtk_label_new ("\nWelcome to XSitecopy!\n\n");   gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 10);   gtk_widget_show (label);      for (tmp_site = all_sites; tmp_site != NULL; tmp_site = tmp_site->next) {      if (tmp_site->is_different) {	 summary = (char *) malloc (strlen (tmp_site->name) + 32);	 sprintf (summary, "The site '%s' requires an update.", tmp_site->name);	 label = gtk_label_new (summary);	 gtk_widget_show (label);	 free (summary);	 gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 1);	 num_that_need_updates++;      }   }   if (all_sites == NULL) {      label = gtk_label_new ("Click on \"New site\" to begin using the program.");      gtk_widget_show (label);      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);         } else if (num_that_need_updates == 0) {      label = gtk_label_new ("All local sites are fully synchronized with the remote sites.");      gtk_widget_show (label);      gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);   }   gtk_widget_show (vbox);   return vbox;}void site_report (void) {   gtk_container_remove (GTK_CONTAINER (main_area_box), area_data);   area_data = create_initial_main_area ();   gtk_container_add (GTK_CONTAINER (main_area_box), area_data);}void site_web_report (void) {   gchar lee[BUFSIZ];   gchar *command_to_exec;      if (selected_site == NULL) {      fe_status ("For a report to be generated, a site must be selected.");      return;   }   /* FIXME: path */   sprintf (lee, "sitecopy -ll %s | awk -f changes.awk > /tmp/xsitecopy_report.html",	    selected_site->name);   command_to_exec = (gchar *) malloc (strlen (lee) + 1);   /* Using snprintf to maybe try and add just a teeny bit of security? */   snprintf (command_to_exec, (strlen(lee) + 1), lee);   system (command_to_exec);   system ("gnome-moz-remote --newwin /tmp/xsitecopy_report.html");}void redraw_main_area (void) {   gtk_container_remove (GTK_CONTAINER (main_area_box), area_data);   area_data = make_site_info_area (selected_site);   gtk_container_add (GTK_CONTAINER (main_area_box), area_data);}void clear_main_area (void) {   selected_site = NULL;   gtk_container_remove (GTK_CONTAINER (main_area_box), area_data);   area_data = create_default_main_area();   gtk_container_add (GTK_CONTAINER (main_area_box), area_data);}void populate_site_node (GtkCTreeNode *site_node, struct site_t *current) {   struct ctree_attachment *file_info_to_add;   struct site_file_t *current_file;   gchar *node_label[1];   GtkCTreeNode *file_im_adding;   extern gboolean fancy_tree;      for (current_file = current->files; current_file != NULL; current_file = current_file->next ) {          file_info_to_add = malloc (sizeof (struct ctree_attachment));     file_info_to_add->file_or_site = IS_A_FILE;     file_info_to_add->sorted_yet = MESSY;     file_info_to_add->info_struct = (void *) current_file;     node_label[0] = current_file->rel_local + 1;     if (current_file->dir) {       file_im_adding = gtk_ctree_insert_node (GTK_CTREE (the_tree), 					       GTK_CTREE_NODE (site_node), NULL,					       node_label, 3, closed_dir, 					       dir1_map, open_dir, dir2_map,					       false, false);     } else {       if (current_file->diff != file_unchanged) {	 if (current_file->diff == file_changed) {	   file_im_adding = gtk_ctree_insert_node (GTK_CTREE (the_tree), 						   GTK_CTREE_NODE (site_node), NULL, node_label, 3,						   orange_file, orange_file_map, 						   orange_file, orange_file_map, 						   FALSE, FALSE);	 } else {	   file_im_adding = gtk_ctree_insert_node (GTK_CTREE (the_tree), 						   GTK_CTREE_NODE (site_node), NULL, node_label, 3,						   red_file, red_file_map, 						   red_file, red_file_map, 						   FALSE, FALSE);	 }       } else { 	 file_im_adding = gtk_ctree_insert_node (GTK_CTREE (the_tree), 						 GTK_CTREE_NODE (site_node), NULL, node_label, 3,						 green_file, green_file_map, 						 green_file, green_file_map, 						 FALSE, FALSE);       }     }     gtk_ctree_node_set_row_data (GTK_CTREE (the_tree), file_im_adding,				  (gpointer) file_info_to_add);     file_item = file_im_adding;     if (fancy_tree) {	 if (current_file->dir) {	   gtk_ctree_post_recursive (GTK_CTREE (the_tree), site_node,				     GTK_CTREE_FUNC (check_dir), 				     (gpointer) file_item);	 }     } /* fancy_tree */   } /* for loop */}  /* This is all a bit hacky, and the growth rate is god awful */int check_dir (GtkCTree *bler, GtkCTreeNode *node, gpointer data) {   struct ctree_attachment *folder, *files, *info_to_add;   GtkCTreeNode *tmp1, *just_moved;   struct site_file_t *tmpy1, *tmpy2;   char *folder_name;   gchar *node_label2[1];      /*folder = malloc (sizeof (struct ctree_attachment));*/   tmp1 = GTK_CTREE_NODE (data);      files = malloc (sizeof (struct ctree_attachment));      files = (struct ctree_attachment *) gtk_ctree_node_get_row_data (GTK_CTREE (the_tree), GTK_CTREE_NODE (node));   folder = (struct ctree_attachment *) gtk_ctree_node_get_row_data (GTK_CTREE (the_tree), GTK_CTREE_NODE (tmp1));   if (files == NULL) {      return 0;   } else {      if (files->sorted_yet == ORGANIZED) 	return 2;      if ( (tmpy1 = (struct site_file_t *) files->info_struct) == NULL)	return 1;   }   if (folder == NULL) {      return 0;   } else {      if ( (tmpy2 = (struct site_file_t *) folder->info_struct) == NULL)	return 1;   }   /* ********************************    * This is just not working when a port is specified in the rcfile.    * It's madness, sheer madness....     */      /* Okay, so they're directories not folders. */   folder_name = malloc (BUFSIZ);   memset (folder_name, 0, BUFSIZ);   if (tmpy2->rel_local == NULL)     return 2;   strcpy (folder_name, tmpy2->rel_local);    /* The 'tree' is the directory we're testing this file against, so the name    * of tmpy2 (ie tmpy2->rel_local) is in fact the folder name. */       folder_name = realloc (folder_name, strlen(folder_name) + 2);   folder_name++;    /* Directories have a trailing slash, file names don't, so i add one. */   strcat (folder_name, "/");    /* debugging */   DEBUG(DEBUG_GNOME, "About to compare folder name (%s) with file's directory (%s).\n",	 folder_name, tmpy1->directory);   DEBUG(DEBUG_GNOME, "Folder's filename is: %s\n", tmpy2->rel_local);      /* 'node' is the current node we're looking at from the post-recursion */   if ( (tmpy1 != NULL) && (tmpy1->directory != NULL) && (folder_name != NULL) ) {      if (strcmp (tmpy1->directory, folder_name) == 0) {	 	 /*      gtk_ctree_move (GTK_CTREE (the_tree), node, tmp1, NULL);*/	 node_label2[0] = tmpy1->filename;	 gtk_ctree_remove_node (GTK_CTREE (the_tree), node);	 info_to_add = malloc (sizeof (struct ctree_attachment));	 info_to_add->file_or_site = IS_A_FILE;	 info_to_add->sorted_yet = ORGANIZED;	 info_to_add->info_struct = (void *) tmpy1;	 /* I want to set a different pixmap depending on file status, 	  * so I do a quick comparison. */	 if (tmpy1->diff != file_unchanged) {	   if (tmpy1->diff == file_changed) {	    just_moved = gtk_ctree_insert_node (GTK_CTREE (the_tree), 						GTK_CTREE_NODE (file_item), NULL, node_label2, 3,						orange_file, orange_file_map, 						orange_file, orange_file_map, 						FALSE, FALSE);	   } else {	     just_moved = gtk_ctree_insert_node (GTK_CTREE (the_tree), 						 GTK_CTREE_NODE (file_item), NULL, node_label2, 3,						 red_file, red_file_map, 						 red_file, red_file_map, 						 FALSE, FALSE);	   }	 } else { 	   just_moved = gtk_ctree_insert_node (GTK_CTREE (the_tree), 					       GTK_CTREE_NODE (file_item), NULL, node_label2, 3,					       green_file, green_file_map, 					       green_file, green_file_map, 					       FALSE, FALSE);	 }	 gtk_ctree_node_set_row_data (GTK_CTREE (the_tree), GTK_CTREE_NODE (just_moved),				      (gpointer) info_to_add);      }   }    folder_name--;    free (folder_name);   return 2;}void check_site_and_record_errors(struct site_t *current) {  char *errstr;  int ret = rc_verifysite( current );  if (!ret)	 return;  errstr = (char *) malloc (BUFSIZ);  switch( ret ) {	 /* Everything was fine */  case 0:	 return;  case SITE_NOSERVER:	 sprintf(errstr, _("Server not specified in site `%s'.\n"), 				current->name );	 break;  case SITE_NOUSERNAME:	 sprintf(errstr, _("Username not specified in site `%s'.\n"), 				current->name );	 break;  case SITE_NOPASSWORD:	 sprintf(errstr, _("Password not specified in site `%s'.\n"), 				current->name );	 break;

⌨️ 快捷键说明

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