1 /*
2  *      XSitecopy, for managing remote web sites with a GNOME interface.
3  *      Copyright (C) 2000, Lee Mallabone <lee@fonicmonkey.net>
4  *
5  *      This program is free software; you can redistribute it and/or modify
6  *      it under the terms of the GNU General Public License as published by
7  *      the Free Software Foundation; either version 2 of the License, or
8  *      (at your option) any later version.
9  *
10  *      This program is distributed in the hope that it will be useful,
11  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *      GNU General Public License for more details.
14  *
15  *      You should have received a copy of the GNU General Public License
16  *      along with this program; if not, write to the Free Software
17  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *
19  */
20 
21 #include <unistd.h>
22 
23 #ifdef HAVE_CONFIG_H
24 #include "config.h"
25 #endif
26 
27 #include "new_site.h"
28 
29 GtkWidget *site_druid = NULL;
30 struct site *site_to_add = NULL;
31 
32 extern GtkWidget *the_tree;
33 
34 /* This function taken from Glade's generated 'support.c' file. */
35 
36 GdkImlibImage*
create_image(const gchar * filename)37 create_image                           (const gchar     *filename)
38 {
39   GdkImlibImage *image;
40   gchar *pathname;
41 
42   pathname = gnome_pixmap_file (filename);
43   if (!pathname)
44     {
45       g_warning ("Couldn't find pixmap file: %s", filename);
46       return NULL;
47     }
48 
49   image = gdk_imlib_load_image (pathname);
50   g_free (pathname);
51   return image;
52 }
53 
54 /* After using this function, the info file must still be set before
55  * the site can be used. This only initialises *core* stuff. More should
56  * be done before adding the site to the sites list and/or verifying it.
57  */
58 
default_site(void)59 struct site *default_site(void)
60 {
61     struct site *new_site = g_malloc0(sizeof(struct site));
62     new_site->protocol = siteproto_unknown;
63 /*    new_site->driver = &ftp_driver;*/
64     new_site->server.hostname = g_strdup("remote.site.com");
65     new_site->server.port = 21;
66     new_site->server.username = g_strdup("joe.bloggs");
67     new_site->server.password = g_strdup("password");
68 
69     new_site->local_root_user = g_get_home_dir();
70     new_site->remote_root_user = g_strdup("~/");
71 
72     /* Let's be conservative. If the user wants more exotic options
73      * they have plenty of time to set them for themselves.
74      */
75     new_site->perms = sitep_ignore;
76     new_site->symlinks = sitesym_ignore;
77     new_site->state_method = state_timesize;
78     return new_site;
79 }
80 
add_site(gpointer user_data)81 void add_site(gpointer user_data)
82 {
83     struct site *this_site, *last_site;
84     int mode = 0;
85 
86     this_site = g_malloc0( sizeof( struct site ) );
87     memcpy( this_site, site_to_add, sizeof( struct site ) );
88 
89     if (verifysite_gnome(this_site) != 0)
90       {
91 	 g_assert_not_reached();
92 	  return;
93       }
94 
95     /* Simple case: we have no sites */
96     if (!all_sites)
97       {
98 	  all_sites = this_site;
99       }
100    else
101      {
102 
103 	/* Find the end of the sites list */
104 	for(last_site = all_sites;
105 	    last_site->next != NULL;
106 	    last_site = last_site->next)
107 	  ;
108 
109 	this_site->prev = last_site;
110 	this_site->next = NULL;
111 
112 	if (this_site->prev)
113 	  this_site->prev->next = this_site;
114      }
115 
116     if (GTK_TOGGLE_BUTTON(get_widget(site_druid, "new_init"))->active)
117       {
118 	  printf("Will init the site...\n");
119 	  mode = 1;
120       }
121 
122     else
123       {
124 	  mode = 2;
125 	  printf("will catchup the site...\n");
126       }
127     site_write_stored_state(this_site);
128     if (add_a_site_to_the_tree(this_site, mode) < 0)
129       gnome_error_dialog("There was a problem creating the site");
130     memset(site_to_add, 0, sizeof(struct site));
131     return;
132 }
133 
134 /** PRE: site_to_add should already have been allocated with g_malloc **/
135 
close_druid(void)136 void close_druid(void)
137 {
138 
139     if (site_to_add) {
140 	g_free(site_to_add);
141 	site_to_add = NULL;
142     }
143     gtk_widget_destroy(site_druid);
144     site_druid = NULL;
145 }
146 
147 GtkWidget *
create_site_druid()148  create_site_druid()
149 {
150 /**** Start of glade generated code ****/
151     GtkWidget *new_site_druid;
152     GtkWidget *start_page;
153     GdkColor start_page_logo_bg_color =
154     {0, 6400, 6400, 28672};
155     GtkWidget *general_info;
156     GdkColor general_info_logo_bg_color =
157     {0, 6400, 6400, 28672};
158     GtkWidget *druid_vbox1;
159     GtkWidget *vbox28;
160     GtkWidget *label67;
161     GtkWidget *hseparator5;
162     GtkWidget *table12;
163     GtkWidget *new_url;
164     GtkWidget *label86;
165     GtkWidget *label85;
166     GtkWidget *new_name;
167     GtkWidget *server_info;
168     GdkColor server_info_logo_bg_color =
169     {0, 6400, 6400, 28672};
170     GtkWidget *druid_vbox2;
171     GtkWidget *vbox27;
172     GtkWidget *label66;
173     GtkWidget *hseparator4;
174     GtkWidget *table8;
175     GtkWidget *new_hostname;
176     GtkWidget *hbox16;
177     GSList *new_proto_group = NULL;
178     GtkWidget *new_ftp;
179     GtkWidget *new_http;
180     GtkObject *new_port_adj;
181     GtkWidget *new_port;
182     GtkWidget *new_username;
183     GtkWidget *new_password;
184     GtkWidget *label64;
185     GtkWidget *label63;
186     GtkWidget *label65;
187     GtkWidget *label62;
188     GtkWidget *label61;
189     GtkWidget *directories;
190     GdkColor directories_logo_bg_color =
191     {0, 6400, 6400, 28672};
192     GtkWidget *druid_vbox6;
193     GtkWidget *vbox29;
194     GtkWidget *label68;
195     GtkWidget *hseparator9;
196     GtkWidget *table11;
197     GtkWidget *new_local_fentry;
198     GtkWidget *new_local_entry;
199     GtkWidget *label82;
200     GtkWidget *label81;
201     GtkWidget *new_remote_entry;
202     GtkWidget *file_handling;
203     GdkColor file_handling_logo_bg_color =
204     {0, 6400, 6400, 28672};
205     GtkWidget *druid_vbox3;
206     GtkWidget *vbox30;
207     GtkWidget *label69;
208     GtkWidget *hseparator6;
209     GtkWidget *table9;
210     GtkWidget *label71;
211     GtkWidget *hbox18;
212     GSList *perms_group = NULL;
213     GtkWidget *new_perms_ignore;
214     GtkWidget *new_perms_exec;
215     GtkWidget *new_perms_all;
216     GtkWidget *label72;
217     GtkWidget *hbox17;
218     GSList *sym_link_group = NULL;
219     GtkWidget *new_sym_follow;
220     GtkWidget *new_sym_ignore;
221     GtkWidget *new_sym_maintain;
222     GtkWidget *label73;
223     GtkWidget *hbox19;
224     GSList *state_detector_group = NULL;
225     GtkWidget *new_timesize;
226     GtkWidget *new_checksum;
227     GtkWidget *update_options;
228     GdkColor update_options_logo_bg_color =
229     {0, 6400, 6400, 28672};
230     GtkWidget *druid_vbox4;
231     GtkWidget *vbox31;
232     GtkWidget *label70;
233     GtkWidget *hseparator7;
234     GtkWidget *vbox32;
235     GtkWidget *new_nodelete;
236     GtkWidget *new_checkmoved;
237     GtkWidget *new_nooverwrite;
238     GtkWidget *new_lowercase;
239     GtkWidget *new_safe;
240     GtkWidget *new_pasv;
241     GtkWidget *server_state;
242     GdkColor server_state_logo_bg_color =
243     {0, 6400, 6400, 28672};
244     GtkWidget *druid_vbox5;
245     GtkWidget *vbox33;
246     GtkWidget *label74;
247     GtkWidget *hseparator8;
248     GtkWidget *vbox34;
249     GSList *vbox34_group = NULL;
250     GtkWidget *new_init;
251     GtkWidget *new_catchup;
252     GtkWidget *new_fetch_please;
253     GtkWidget *fetch_a_list;
254     GdkColor fetch_a_list_logo_bg_color =
255     {0, 6400, 6400, 28672};
256     GtkWidget *druid_vbox10;
257     GtkWidget *label91;
258     GtkWidget *hseparator10;
259     GtkWidget *vbox36;
260     GtkWidget *hbox23;
261     GtkWidget *label88;
262     GtkWidget *new_fetch_status;
263     GtkWidget *hbox24;
264     GtkWidget *label90;
265     GtkWidget *fetch_num_files_got;
266     GtkWidget *new_fetch_begin;
267     GtkWidget *hbuttonbox2;
268     GtkWidget *finish_page;
269     GdkColor finish_page_logo_bg_color =
270     {0, 6400, 6400, 28672};
271 
272     site_druid = gtk_window_new(GTK_WINDOW_DIALOG);
273     gtk_object_set_data(GTK_OBJECT(site_druid), "site_druid", site_druid);
274     gtk_window_set_title(GTK_WINDOW(site_druid), "Create a new site definition");
275     gtk_window_set_default_size(GTK_WINDOW(site_druid), 510, 340);
276     gtk_window_set_policy(GTK_WINDOW(site_druid), TRUE, TRUE, FALSE);
277 
278     new_site_druid = gnome_druid_new();
279     gtk_widget_ref(new_site_druid);
280     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_site_druid", new_site_druid,
281 			     (GtkDestroyNotify) gtk_widget_unref);
282     gtk_widget_show(new_site_druid);
283     gtk_container_add(GTK_CONTAINER(site_druid), new_site_druid);
284 
285     start_page = gnome_druid_page_start_new();
286     gtk_widget_ref(start_page);
287     gtk_object_set_data_full(GTK_OBJECT(site_druid), "start_page", start_page,
288 			     (GtkDestroyNotify) gtk_widget_unref);
289     gtk_widget_show(start_page);
290     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(start_page));
291     gnome_druid_set_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(start_page));
292     gnome_druid_page_start_set_logo_bg_color(GNOME_DRUID_PAGE_START(start_page), &start_page_logo_bg_color);
293     gnome_druid_page_start_set_title(GNOME_DRUID_PAGE_START(start_page), "Site Creation Druid");
294     gnome_druid_page_start_set_text(GNOME_DRUID_PAGE_START(start_page), "This Druid will help you to create a new web site definition,\nthat Xsitecopy can then keep track of to ensure your remote\nsite remains in sync with the local copy.\n\nIn order to do that, you need to answer the questions on the\nfollowing pages. If you get stuck at all, be sure to consult the\ninformation available from Xsitecopy's help menu.\n\nNot all the details are mandatory, but you should enter as\nmuch as possible to gain the best performance.");
295     gnome_druid_page_start_set_logo(GNOME_DRUID_PAGE_START(start_page),
296 				    create_image("gnome-networktool.png"));
297 /*    gnome_druid_page_start_set_watermark(GNOME_DRUID_PAGE_START(start_page),
298 				 create_image("xsitecopy/xsc_side.xpm"));
299 */
300     general_info = gnome_druid_page_standard_new_with_vals("", NULL);
301     gtk_widget_ref(general_info);
302     gtk_object_set_data_full(GTK_OBJECT(site_druid), "general_info", general_info,
303 			     (GtkDestroyNotify) gtk_widget_unref);
304     gtk_widget_show_all(general_info);
305     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(general_info));
306     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(general_info), &general_info_logo_bg_color);
307     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(general_info), "General Information");
308     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(general_info),
309 			create_image("gnome-networktool.png"));
310 
311     druid_vbox1 = GNOME_DRUID_PAGE_STANDARD(general_info)->vbox;
312     gtk_widget_ref(druid_vbox1);
313     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox1", druid_vbox1,
314 			     (GtkDestroyNotify) gtk_widget_unref);
315     gtk_widget_show(druid_vbox1);
316 
317     vbox28 = gtk_vbox_new(FALSE, 0);
318     gtk_widget_ref(vbox28);
319     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox28", vbox28,
320 			     (GtkDestroyNotify) gtk_widget_unref);
321     gtk_widget_show(vbox28);
322     gtk_box_pack_start(GTK_BOX(druid_vbox1), vbox28, TRUE, TRUE, 0);
323 
324     label67 = gtk_label_new("First, you should give this site a 'friendly' name to refer to it by. This name is also used by sitecopy (the command line utility) to reference sites.\n\nYou should also enter the root URL of your site. For example, http://www.geocities.com/~xsitecopy-user/\nThis will aid in the generation of web-based reports.");
325     gtk_widget_ref(label67);
326     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label67", label67,
327 			     (GtkDestroyNotify) gtk_widget_unref);
328     gtk_widget_show(label67);
329     gtk_box_pack_start(GTK_BOX(vbox28), label67, TRUE, TRUE, 0);
330     gtk_widget_set_usize(label67, 370, -2);
331     gtk_label_set_justify(GTK_LABEL(label67), GTK_JUSTIFY_FILL);
332     gtk_label_set_line_wrap(GTK_LABEL(label67), TRUE);
333 
334     hseparator5 = gtk_hseparator_new();
335     gtk_widget_ref(hseparator5);
336     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator5", hseparator5,
337 			     (GtkDestroyNotify) gtk_widget_unref);
338     gtk_widget_show(hseparator5);
339     gtk_box_pack_start(GTK_BOX(vbox28), hseparator5, TRUE, TRUE, 0);
340 
341     table12 = gtk_table_new(2, 2, FALSE);
342     gtk_widget_ref(table12);
343     gtk_object_set_data_full(GTK_OBJECT(site_druid), "table12", table12,
344 			     (GtkDestroyNotify) gtk_widget_unref);
345     gtk_widget_show(table12);
346     gtk_box_pack_start(GTK_BOX(vbox28), table12, TRUE, TRUE, 0);
347     gtk_container_set_border_width(GTK_CONTAINER(table12), 5);
348 
349     new_url = gtk_entry_new();
350     gtk_widget_ref(new_url);
351     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_url", new_url,
352 			     (GtkDestroyNotify) gtk_widget_unref);
353     gtk_widget_show(new_url);
354     gtk_table_attach(GTK_TABLE(table12), new_url, 1, 2, 1, 2,
355 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
356 		     (GtkAttachOptions) (0), 0, 0);
357 
358     label86 = gtk_label_new("Root URL: ");
359     gtk_widget_ref(label86);
360     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label86", label86,
361 			     (GtkDestroyNotify) gtk_widget_unref);
362     gtk_widget_show(label86);
363     gtk_table_attach(GTK_TABLE(table12), label86, 0, 1, 1, 2,
364 		     (GtkAttachOptions) (GTK_FILL),
365 		     (GtkAttachOptions) (0), 0, 0);
366     gtk_label_set_justify(GTK_LABEL(label86), GTK_JUSTIFY_LEFT);
367     gtk_misc_set_alignment(GTK_MISC(label86), 0, 0.5);
368 
369     label85 = gtk_label_new("Friendly name: ");
370     gtk_widget_ref(label85);
371     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label85", label85,
372 			     (GtkDestroyNotify) gtk_widget_unref);
373     gtk_widget_show(label85);
374     gtk_table_attach(GTK_TABLE(table12), label85, 0, 1, 0, 1,
375 		     (GtkAttachOptions) (GTK_FILL),
376 		     (GtkAttachOptions) (0), 0, 0);
377     gtk_label_set_justify(GTK_LABEL(label85), GTK_JUSTIFY_LEFT);
378     gtk_misc_set_alignment(GTK_MISC(label85), 0, 0.5);
379 
380     new_name = gtk_entry_new();
381     gtk_widget_ref(new_name);
382     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_name", new_name,
383 			     (GtkDestroyNotify) gtk_widget_unref);
384     gtk_widget_show(new_name);
385     gtk_table_attach(GTK_TABLE(table12), new_name, 1, 2, 0, 1,
386 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
387 		     (GtkAttachOptions) (0), 0, 0);
388 
389     server_info = gnome_druid_page_standard_new_with_vals("", NULL);
390     gtk_widget_ref(server_info);
391     gtk_object_set_data_full(GTK_OBJECT(site_druid), "server_info", server_info,
392 			     (GtkDestroyNotify) gtk_widget_unref);
393     gtk_widget_show_all(server_info);
394     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(server_info));
395     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(server_info), &server_info_logo_bg_color);
396     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(server_info), "Server Information");
397     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(server_info),
398 				       create_image("mc/i-sock.png"));
399 
400     druid_vbox2 = GNOME_DRUID_PAGE_STANDARD(server_info)->vbox;
401     gtk_widget_ref(druid_vbox2);
402     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox2", druid_vbox2,
403 			     (GtkDestroyNotify) gtk_widget_unref);
404     gtk_widget_show(druid_vbox2);
405 
406     vbox27 = gtk_vbox_new(FALSE, 0);
407     gtk_widget_ref(vbox27);
408     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox27", vbox27,
409 			     (GtkDestroyNotify) gtk_widget_unref);
410     gtk_widget_show(vbox27);
411     gtk_box_pack_start(GTK_BOX(druid_vbox2), vbox27, TRUE, TRUE, 0);
412 
413     label66 = gtk_label_new("Now enter details about the remote server that your website is stored on. When selecting the protocol, an appropriate default port number will be provided.\nYour password will not appear on screen.");
414     gtk_widget_ref(label66);
415     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label66", label66,
416 			     (GtkDestroyNotify) gtk_widget_unref);
417     gtk_widget_show(label66);
418     gtk_box_pack_start(GTK_BOX(vbox27), label66, TRUE, TRUE, 0);
419     gtk_widget_set_usize(label66, 370, -2);
420     gtk_label_set_justify(GTK_LABEL(label66), GTK_JUSTIFY_FILL);
421     gtk_label_set_line_wrap(GTK_LABEL(label66), TRUE);
422 
423     hseparator4 = gtk_hseparator_new();
424     gtk_widget_ref(hseparator4);
425     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator4", hseparator4,
426 			     (GtkDestroyNotify) gtk_widget_unref);
427     gtk_widget_show(hseparator4);
428     gtk_box_pack_start(GTK_BOX(vbox27), hseparator4, TRUE, TRUE, 0);
429 
430     table8 = gtk_table_new(5, 2, FALSE);
431     gtk_widget_ref(table8);
432     gtk_object_set_data_full(GTK_OBJECT(site_druid), "table8", table8,
433 			     (GtkDestroyNotify) gtk_widget_unref);
434     gtk_widget_show(table8);
435     gtk_box_pack_start(GTK_BOX(vbox27), table8, TRUE, TRUE, 0);
436     gtk_container_set_border_width(GTK_CONTAINER(table8), 5);
437 
438     new_hostname = gtk_entry_new();
439     gtk_widget_ref(new_hostname);
440     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_hostname", new_hostname,
441 			     (GtkDestroyNotify) gtk_widget_unref);
442     gtk_widget_show(new_hostname);
443     gtk_table_attach(GTK_TABLE(table8), new_hostname, 1, 2, 0, 1,
444 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
445 		     (GtkAttachOptions) (0), 0, 0);
446 
447     hbox16 = gtk_hbox_new(FALSE, 0);
448     gtk_widget_ref(hbox16);
449     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbox16", hbox16,
450 			     (GtkDestroyNotify) gtk_widget_unref);
451     gtk_widget_show(hbox16);
452     gtk_table_attach(GTK_TABLE(table8), hbox16, 1, 2, 1, 2,
453 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
454 		     (GtkAttachOptions) (0), 0, 0);
455 
456     new_ftp = gtk_radio_button_new_with_label(new_proto_group, "FTP");
457     new_proto_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_ftp));
458     gtk_widget_ref(new_ftp);
459     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_ftp", new_ftp,
460 			     (GtkDestroyNotify) gtk_widget_unref);
461     gtk_widget_show(new_ftp);
462     gtk_box_pack_start(GTK_BOX(hbox16), new_ftp, FALSE, FALSE, 0);
463     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(new_ftp), TRUE);
464 
465 #ifdef USE_DAV
466     new_http = gtk_radio_button_new_with_label(new_proto_group, "WebDAV");
467     new_proto_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_http));
468     gtk_widget_ref(new_http);
469     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_http", new_http,
470 			     (GtkDestroyNotify) gtk_widget_unref);
471     gtk_widget_show(new_http);
472     gtk_box_pack_start(GTK_BOX(hbox16), new_http, FALSE, FALSE, 0);
473 #endif				/* USE_DAV */
474 
475     new_port_adj = gtk_adjustment_new(21, 1, 65536, 1, 10, 10);
476     new_port = gtk_spin_button_new(GTK_ADJUSTMENT(new_port_adj), 1, 0);
477     gtk_widget_ref(new_port);
478     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_port", new_port,
479 			     (GtkDestroyNotify) gtk_widget_unref);
480     gtk_widget_show(new_port);
481     gtk_table_attach(GTK_TABLE(table8), new_port, 1, 2, 2, 3,
482 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
483 		     (GtkAttachOptions) (0), 0, 0);
484 
485     new_username = gtk_entry_new();
486     gtk_widget_ref(new_username);
487     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_username", new_username,
488 			     (GtkDestroyNotify) gtk_widget_unref);
489     gtk_widget_show(new_username);
490     gtk_table_attach(GTK_TABLE(table8), new_username, 1, 2, 3, 4,
491 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
492 		     (GtkAttachOptions) (0), 0, 0);
493 
494     new_password = gtk_entry_new();
495     gtk_widget_ref(new_password);
496     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_password", new_password,
497 			     (GtkDestroyNotify) gtk_widget_unref);
498     gtk_widget_show(new_password);
499     gtk_table_attach(GTK_TABLE(table8), new_password, 1, 2, 4, 5,
500 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
501 		     (GtkAttachOptions) (0), 0, 0);
502     gtk_entry_set_visibility(GTK_ENTRY(new_password), FALSE);
503 
504     label64 = gtk_label_new("Username: ");
505     gtk_widget_ref(label64);
506     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label64", label64,
507 			     (GtkDestroyNotify) gtk_widget_unref);
508     gtk_widget_show(label64);
509     gtk_table_attach(GTK_TABLE(table8), label64, 0, 1, 3, 4,
510 		     (GtkAttachOptions) (GTK_FILL),
511 		     (GtkAttachOptions) (0), 0, 0);
512     gtk_label_set_justify(GTK_LABEL(label64), GTK_JUSTIFY_LEFT);
513     gtk_misc_set_alignment(GTK_MISC(label64), 0, 0.5);
514 
515     label63 = gtk_label_new("Port Number: ");
516     gtk_widget_ref(label63);
517     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label63", label63,
518 			     (GtkDestroyNotify) gtk_widget_unref);
519     gtk_widget_show(label63);
520     gtk_table_attach(GTK_TABLE(table8), label63, 0, 1, 2, 3,
521 		     (GtkAttachOptions) (GTK_FILL),
522 		     (GtkAttachOptions) (0), 0, 0);
523 
524     label65 = gtk_label_new("Password: ");
525     gtk_widget_ref(label65);
526     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label65", label65,
527 			     (GtkDestroyNotify) gtk_widget_unref);
528     gtk_widget_show(label65);
529     gtk_table_attach(GTK_TABLE(table8), label65, 0, 1, 4, 5,
530 		     (GtkAttachOptions) (GTK_FILL),
531 		     (GtkAttachOptions) (0), 0, 0);
532     gtk_label_set_justify(GTK_LABEL(label65), GTK_JUSTIFY_LEFT);
533     gtk_misc_set_alignment(GTK_MISC(label65), 0, 0.5);
534 
535     label62 = gtk_label_new("Protocol: ");
536     gtk_widget_ref(label62);
537     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label62", label62,
538 			     (GtkDestroyNotify) gtk_widget_unref);
539     gtk_widget_show(label62);
540     gtk_table_attach(GTK_TABLE(table8), label62, 0, 1, 1, 2,
541 		     (GtkAttachOptions) (GTK_FILL),
542 		     (GtkAttachOptions) (0), 0, 0);
543     gtk_label_set_justify(GTK_LABEL(label62), GTK_JUSTIFY_LEFT);
544     gtk_misc_set_alignment(GTK_MISC(label62), 0, 0.5);
545 
546     label61 = gtk_label_new("Host name: ");
547     gtk_widget_ref(label61);
548     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label61", label61,
549 			     (GtkDestroyNotify) gtk_widget_unref);
550     gtk_widget_show(label61);
551     gtk_table_attach(GTK_TABLE(table8), label61, 0, 1, 0, 1,
552 		     (GtkAttachOptions) (GTK_FILL),
553 		     (GtkAttachOptions) (0), 0, 0);
554     gtk_label_set_justify(GTK_LABEL(label61), GTK_JUSTIFY_LEFT);
555     gtk_misc_set_alignment(GTK_MISC(label61), 0, 0.5);
556 
557     directories = gnome_druid_page_standard_new_with_vals("", NULL);
558     gtk_widget_ref(directories);
559     gtk_object_set_data_full(GTK_OBJECT(site_druid), "directories", directories,
560 			     (GtkDestroyNotify) gtk_widget_unref);
561     gtk_widget_show_all(directories);
562     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(directories));
563     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(directories), &directories_logo_bg_color);
564     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(directories), "Directories");
565     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(directories),
566 			      create_image("mc/i-directory.png"));
567 
568     druid_vbox6 = GNOME_DRUID_PAGE_STANDARD(directories)->vbox;
569     gtk_widget_ref(druid_vbox6);
570     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox6", druid_vbox6,
571 			     (GtkDestroyNotify) gtk_widget_unref);
572     gtk_widget_show(druid_vbox6);
573 
574     vbox29 = gtk_vbox_new(FALSE, 0);
575     gtk_widget_ref(vbox29);
576     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox29", vbox29,
577 			     (GtkDestroyNotify) gtk_widget_unref);
578     gtk_widget_show(vbox29);
579     gtk_box_pack_start(GTK_BOX(druid_vbox6), vbox29, TRUE, TRUE, 0);
580 
581     label68 = gtk_label_new("I now need to know where you store the files that make up your web site; both locally, and on the remote site.\nDirectories must either be absolute (eg. /home/lee/web/), or relative to your login directory, (eg. ~/web/).\n\nAll directories should end with a trailing slash character.");
582     gtk_widget_ref(label68);
583     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label68", label68,
584 			     (GtkDestroyNotify) gtk_widget_unref);
585     gtk_widget_show(label68);
586     gtk_box_pack_start(GTK_BOX(vbox29), label68, TRUE, TRUE, 0);
587     gtk_widget_set_usize(label68, 370, -2);
588     gtk_label_set_justify(GTK_LABEL(label68), GTK_JUSTIFY_FILL);
589     gtk_label_set_line_wrap(GTK_LABEL(label68), TRUE);
590 
591     hseparator9 = gtk_hseparator_new();
592     gtk_widget_ref(hseparator9);
593     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator9", hseparator9,
594 			     (GtkDestroyNotify) gtk_widget_unref);
595     gtk_widget_show(hseparator9);
596     gtk_box_pack_start(GTK_BOX(vbox29), hseparator9, TRUE, TRUE, 0);
597 
598     table11 = gtk_table_new(2, 2, FALSE);
599     gtk_widget_ref(table11);
600     gtk_object_set_data_full(GTK_OBJECT(site_druid), "table11", table11,
601 			     (GtkDestroyNotify) gtk_widget_unref);
602     gtk_widget_show(table11);
603     gtk_box_pack_start(GTK_BOX(vbox29), table11, TRUE, FALSE, 0);
604     gtk_container_set_border_width(GTK_CONTAINER(table11), 5);
605     gtk_table_set_row_spacings(GTK_TABLE(table11), 2);
606     gtk_table_set_col_spacings(GTK_TABLE(table11), 2);
607 
608     new_local_fentry = gnome_file_entry_new(NULL, NULL);
609     gnome_file_entry_set_directory(GNOME_FILE_ENTRY(new_local_fentry), TRUE);
610     gtk_widget_ref(new_local_fentry);
611     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_local_fentry", new_local_fentry,
612 			     (GtkDestroyNotify) gtk_widget_unref);
613     gtk_widget_show(new_local_fentry);
614     gtk_table_attach(GTK_TABLE(table11), new_local_fentry, 1, 2, 0, 1,
615 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
616 		     (GtkAttachOptions) (0), 0, 0);
617 
618     new_local_entry = gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(new_local_fentry));
619     gtk_widget_ref(new_local_entry);
620     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_local_entry", new_local_entry,
621 			     (GtkDestroyNotify) gtk_widget_unref);
622     gtk_widget_show(new_local_entry);
623 
624     label82 = gtk_label_new("Directory for local files: ");
625     gtk_widget_ref(label82);
626     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label82", label82,
627 			     (GtkDestroyNotify) gtk_widget_unref);
628     gtk_widget_show(label82);
629     gtk_table_attach(GTK_TABLE(table11), label82, 0, 1, 0, 1,
630 		     (GtkAttachOptions) (GTK_FILL),
631 		     (GtkAttachOptions) (0), 0, 0);
632     gtk_label_set_justify(GTK_LABEL(label82), GTK_JUSTIFY_LEFT);
633     gtk_misc_set_alignment(GTK_MISC(label82), 0, 0.5);
634 
635     label81 = gtk_label_new("Directory for remote files: ");
636     gtk_widget_ref(label81);
637     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label81", label81,
638 			     (GtkDestroyNotify) gtk_widget_unref);
639     gtk_widget_show(label81);
640     gtk_table_attach(GTK_TABLE(table11), label81, 0, 1, 1, 2,
641 		     (GtkAttachOptions) (GTK_FILL),
642 		     (GtkAttachOptions) (0), 0, 0);
643     gtk_label_set_justify(GTK_LABEL(label81), GTK_JUSTIFY_LEFT);
644     gtk_misc_set_alignment(GTK_MISC(label81), 0, 0.5);
645 
646     new_remote_entry = gtk_entry_new();
647     gtk_widget_ref(new_remote_entry);
648     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_remote_entry", new_remote_entry,
649 			     (GtkDestroyNotify) gtk_widget_unref);
650     gtk_widget_show(new_remote_entry);
651     gtk_table_attach(GTK_TABLE(table11), new_remote_entry, 1, 2, 1, 2,
652 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
653 		     (GtkAttachOptions) (0), 0, 0);
654 
655     file_handling = gnome_druid_page_standard_new_with_vals("", NULL);
656     gtk_widget_ref(file_handling);
657     gtk_object_set_data_full(GTK_OBJECT(site_druid), "file_handling", file_handling,
658 			     (GtkDestroyNotify) gtk_widget_unref);
659     gtk_widget_show_all(file_handling);
660     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(file_handling));
661     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(file_handling), &file_handling_logo_bg_color);
662     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(file_handling), "File Handling");
663     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(file_handling),
664 				 create_image("mc/i-floppy.png"));
665 
666     druid_vbox3 = GNOME_DRUID_PAGE_STANDARD(file_handling)->vbox;
667     gtk_widget_ref(druid_vbox3);
668     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox3", druid_vbox3,
669 			     (GtkDestroyNotify) gtk_widget_unref);
670     gtk_widget_show(druid_vbox3);
671 
672     vbox30 = gtk_vbox_new(FALSE, 0);
673     gtk_widget_ref(vbox30);
674     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox30", vbox30,
675 			     (GtkDestroyNotify) gtk_widget_unref);
676     gtk_widget_show(vbox30);
677     gtk_box_pack_start(GTK_BOX(druid_vbox3), vbox30, TRUE, TRUE, 0);
678 
679     label69 = gtk_label_new("Make a choice from the selections below to denote whether you want any file permissiosn to be maintained. You can also choose the way you would like symbolic links to be treated.\n\nFinally, Xsitecopy can determine local changes by 2 different methods. Checksum is the most accurate, but file size and modification time is quicker for large sites.");
680     gtk_widget_ref(label69);
681     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label69", label69,
682 			     (GtkDestroyNotify) gtk_widget_unref);
683     gtk_widget_show(label69);
684     gtk_box_pack_start(GTK_BOX(vbox30), label69, TRUE, TRUE, 0);
685     gtk_widget_set_usize(label69, 370, -2);
686     gtk_label_set_justify(GTK_LABEL(label69), GTK_JUSTIFY_FILL);
687     gtk_label_set_line_wrap(GTK_LABEL(label69), TRUE);
688 
689     hseparator6 = gtk_hseparator_new();
690     gtk_widget_ref(hseparator6);
691     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator6", hseparator6,
692 			     (GtkDestroyNotify) gtk_widget_unref);
693     gtk_widget_show(hseparator6);
694     gtk_box_pack_start(GTK_BOX(vbox30), hseparator6, TRUE, TRUE, 0);
695 
696     table9 = gtk_table_new(3, 2, FALSE);
697     gtk_widget_ref(table9);
698     gtk_object_set_data_full(GTK_OBJECT(site_druid), "table9", table9,
699 			     (GtkDestroyNotify) gtk_widget_unref);
700     gtk_widget_show(table9);
701     gtk_box_pack_start(GTK_BOX(vbox30), table9, TRUE, TRUE, 0);
702     gtk_container_set_border_width(GTK_CONTAINER(table9), 5);
703     gtk_table_set_row_spacings(GTK_TABLE(table9), 2);
704     gtk_table_set_col_spacings(GTK_TABLE(table9), 2);
705 
706     label71 = gtk_label_new("Permissions mode: ");
707     gtk_widget_ref(label71);
708     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label71", label71,
709 			     (GtkDestroyNotify) gtk_widget_unref);
710     gtk_widget_show(label71);
711     gtk_table_attach(GTK_TABLE(table9), label71, 0, 1, 0, 1,
712 		     (GtkAttachOptions) (GTK_FILL),
713 		     (GtkAttachOptions) (0), 0, 0);
714     gtk_label_set_justify(GTK_LABEL(label71), GTK_JUSTIFY_LEFT);
715     gtk_misc_set_alignment(GTK_MISC(label71), 0, 0.5);
716 
717     hbox18 = gtk_hbox_new(FALSE, 0);
718     gtk_widget_ref(hbox18);
719     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbox18", hbox18,
720 			     (GtkDestroyNotify) gtk_widget_unref);
721     gtk_widget_show(hbox18);
722     gtk_table_attach(GTK_TABLE(table9), hbox18, 1, 2, 0, 1,
723 		     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
724 		     (GtkAttachOptions) (0), 0, 0);
725 
726     new_perms_ignore = gtk_radio_button_new_with_label(perms_group, "Ignore all");
727     perms_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_perms_ignore));
728     gtk_widget_ref(new_perms_ignore);
729     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_perms_ignore", new_perms_ignore,
730 			     (GtkDestroyNotify) gtk_widget_unref);
731     gtk_widget_show(new_perms_ignore);
732     gtk_box_pack_start(GTK_BOX(hbox18), new_perms_ignore, FALSE, FALSE, 0);
733 
734     new_perms_exec = gtk_radio_button_new_with_label(perms_group, "Maintain for Executables only");
735     perms_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_perms_exec));
736     gtk_widget_ref(new_perms_exec);
737     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_perms_exec", new_perms_exec,
738 			     (GtkDestroyNotify) gtk_widget_unref);
739     gtk_widget_show(new_perms_exec);
740     gtk_box_pack_start(GTK_BOX(hbox18), new_perms_exec, FALSE, FALSE, 0);
741     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(new_perms_ignore), TRUE);
742 
743     new_perms_all = gtk_radio_button_new_with_label(perms_group, "Maintain all");
744     perms_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_perms_all));
745     gtk_widget_ref(new_perms_all);
746     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_perms_all", new_perms_all,
747 			     (GtkDestroyNotify) gtk_widget_unref);
748     gtk_widget_show(new_perms_all);
749     gtk_box_pack_start(GTK_BOX(hbox18), new_perms_all, FALSE, FALSE, 0);
750 
751     label72 = gtk_label_new("Symbolic links: ");
752     gtk_widget_ref(label72);
753     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label72", label72,
754 			     (GtkDestroyNotify) gtk_widget_unref);
755     gtk_widget_show(label72);
756     gtk_table_attach(GTK_TABLE(table9), label72, 0, 1, 1, 2,
757 		     (GtkAttachOptions) (GTK_FILL),
758 		     (GtkAttachOptions) (0), 0, 0);
759     gtk_label_set_justify(GTK_LABEL(label72), GTK_JUSTIFY_LEFT);
760     gtk_misc_set_alignment(GTK_MISC(label72), 0, 0.5);
761 
762     hbox17 = gtk_hbox_new(FALSE, 0);
763     gtk_widget_ref(hbox17);
764     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbox17", hbox17,
765 			     (GtkDestroyNotify) gtk_widget_unref);
766     gtk_widget_show(hbox17);
767     gtk_table_attach(GTK_TABLE(table9), hbox17, 1, 2, 1, 2,
768 		     (GtkAttachOptions) (GTK_FILL),
769 		     (GtkAttachOptions) (0), 0, 0);
770 
771     new_sym_follow = gtk_radio_button_new_with_label(sym_link_group, "Follow all");
772     sym_link_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_sym_follow));
773     gtk_widget_ref(new_sym_follow);
774     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_sym_follow", new_sym_follow,
775 			     (GtkDestroyNotify) gtk_widget_unref);
776     gtk_widget_show(new_sym_follow);
777     gtk_box_pack_start(GTK_BOX(hbox17), new_sym_follow, FALSE, FALSE, 0);
778 
779     new_sym_ignore = gtk_radio_button_new_with_label(sym_link_group, "Ignore links");
780     sym_link_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_sym_ignore));
781     gtk_widget_ref(new_sym_ignore);
782     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_sym_ignore", new_sym_ignore,
783 			     (GtkDestroyNotify) gtk_widget_unref);
784     gtk_widget_show(new_sym_ignore);
785     gtk_box_pack_start(GTK_BOX(hbox17), new_sym_ignore, FALSE, FALSE, 0);
786     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(new_sym_ignore), TRUE);
787 
788     new_sym_maintain = gtk_radio_button_new_with_label(sym_link_group, "Maintain links");
789     sym_link_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_sym_maintain));
790     gtk_widget_ref(new_sym_maintain);
791     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_sym_maintain", new_sym_maintain,
792 			     (GtkDestroyNotify) gtk_widget_unref);
793     gtk_widget_show(new_sym_maintain);
794     gtk_box_pack_start(GTK_BOX(hbox17), new_sym_maintain, FALSE, FALSE, 0);
795 
796     label73 = gtk_label_new("Detect changes by: ");
797     gtk_widget_ref(label73);
798     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label73", label73,
799 			     (GtkDestroyNotify) gtk_widget_unref);
800     gtk_widget_show(label73);
801     gtk_table_attach(GTK_TABLE(table9), label73, 0, 1, 2, 3,
802 		     (GtkAttachOptions) (GTK_FILL),
803 		     (GtkAttachOptions) (0), 0, 0);
804     gtk_label_set_justify(GTK_LABEL(label73), GTK_JUSTIFY_LEFT);
805     gtk_misc_set_alignment(GTK_MISC(label73), 0, 0.5);
806 
807     hbox19 = gtk_hbox_new(FALSE, 0);
808     gtk_widget_ref(hbox19);
809     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbox19", hbox19,
810 			     (GtkDestroyNotify) gtk_widget_unref);
811     gtk_widget_show(hbox19);
812     gtk_table_attach(GTK_TABLE(table9), hbox19, 1, 2, 2, 3,
813 		     (GtkAttachOptions) (GTK_FILL),
814 		     (GtkAttachOptions) (0), 0, 0);
815 
816     new_timesize = gtk_radio_button_new_with_label(state_detector_group, "Filesize & modification time");
817     state_detector_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_timesize));
818     gtk_widget_ref(new_timesize);
819     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_timesize", new_timesize,
820 			     (GtkDestroyNotify) gtk_widget_unref);
821     gtk_widget_show(new_timesize);
822     gtk_box_pack_start(GTK_BOX(hbox19), new_timesize, FALSE, FALSE, 0);
823 
824     new_checksum = gtk_radio_button_new_with_label(state_detector_group, "Checksum");
825     state_detector_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_checksum));
826     gtk_widget_ref(new_checksum);
827     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_checksum", new_checksum,
828 			     (GtkDestroyNotify) gtk_widget_unref);
829     gtk_widget_show(new_checksum);
830     gtk_box_pack_start(GTK_BOX(hbox19), new_checksum, FALSE, FALSE, 0);
831     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(new_checksum), TRUE);
832 
833     update_options = gnome_druid_page_standard_new_with_vals("", NULL);
834     gtk_widget_ref(update_options);
835     gtk_object_set_data_full(GTK_OBJECT(site_druid), "update_options", update_options,
836 			     (GtkDestroyNotify) gtk_widget_unref);
837     gtk_widget_show_all(update_options);
838     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(update_options));
839     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(update_options), &update_options_logo_bg_color);
840     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(update_options), "Update Attributes");
841     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(update_options),
842 			create_image("gnome-networktool.png"));
843 
844     druid_vbox4 = GNOME_DRUID_PAGE_STANDARD(update_options)->vbox;
845     gtk_widget_ref(druid_vbox4);
846     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox4", druid_vbox4,
847 			     (GtkDestroyNotify) gtk_widget_unref);
848     gtk_widget_show(druid_vbox4);
849 
850     vbox31 = gtk_vbox_new(FALSE, 0);
851     gtk_widget_ref(vbox31);
852     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox31", vbox31,
853 			     (GtkDestroyNotify) gtk_widget_unref);
854     gtk_widget_show(vbox31);
855     gtk_box_pack_start(GTK_BOX(druid_vbox4), vbox31, TRUE, TRUE, 0);
856 
857     label70 = gtk_label_new("When mirroring your local changes onto the remote site, there are various options available to Xsitecopy. You can control most of them with the check boxes below.");
858     gtk_widget_ref(label70);
859     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label70", label70,
860 			     (GtkDestroyNotify) gtk_widget_unref);
861     gtk_widget_show(label70);
862     gtk_box_pack_start(GTK_BOX(vbox31), label70, TRUE, TRUE, 0);
863     gtk_widget_set_usize(label70, 370, -2);
864     gtk_label_set_justify(GTK_LABEL(label70), GTK_JUSTIFY_FILL);
865     gtk_label_set_line_wrap(GTK_LABEL(label70), TRUE);
866 
867     hseparator7 = gtk_hseparator_new();
868     gtk_widget_ref(hseparator7);
869     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator7", hseparator7,
870 			     (GtkDestroyNotify) gtk_widget_unref);
871     gtk_widget_show(hseparator7);
872     gtk_box_pack_start(GTK_BOX(vbox31), hseparator7, TRUE, TRUE, 0);
873 
874     vbox32 = gtk_vbox_new(FALSE, 0);
875     gtk_widget_ref(vbox32);
876     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox32", vbox32,
877 			     (GtkDestroyNotify) gtk_widget_unref);
878     gtk_widget_show(vbox32);
879     gtk_box_pack_start(GTK_BOX(vbox31), vbox32, TRUE, TRUE, 0);
880     gtk_container_set_border_width(GTK_CONTAINER(vbox32), 5);
881 
882     new_nodelete = gtk_check_button_new_with_label("Delete a file from the server if it is deleted locally");
883     gtk_widget_ref(new_nodelete);
884     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_nodelete", new_nodelete,
885 			     (GtkDestroyNotify) gtk_widget_unref);
886     gtk_widget_show(new_nodelete);
887     gtk_box_pack_start(GTK_BOX(vbox32), new_nodelete, FALSE, FALSE, 0);
888 
889     new_checkmoved = gtk_check_button_new_with_label("Move a remote file if it is moved locally");
890     gtk_widget_ref(new_checkmoved);
891     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_checkmoved", new_checkmoved,
892 			     (GtkDestroyNotify) gtk_widget_unref);
893     gtk_widget_show(new_checkmoved);
894     gtk_box_pack_start(GTK_BOX(vbox32), new_checkmoved, FALSE, FALSE, 0);
895 
896     new_nooverwrite = gtk_check_button_new_with_label("When uploading changed files, first delete them");
897     gtk_widget_ref(new_nooverwrite);
898     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_nooverwrite", new_nooverwrite,
899 			     (GtkDestroyNotify) gtk_widget_unref);
900     gtk_widget_show(new_nooverwrite);
901     gtk_box_pack_start(GTK_BOX(vbox32), new_nooverwrite, FALSE, FALSE, 0);
902 
903     new_lowercase = gtk_check_button_new_with_label("Convert all filenames to lowercase when uploading");
904     gtk_widget_ref(new_lowercase);
905     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_lowercase", new_lowercase,
906 			     (GtkDestroyNotify) gtk_widget_unref);
907     gtk_widget_show(new_lowercase);
908     gtk_box_pack_start(GTK_BOX(vbox32), new_lowercase, FALSE, FALSE, 0);
909 
910     new_safe = gtk_check_button_new_with_label("Use \"safe mode\"");
911     gtk_widget_ref(new_safe);
912     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_safe", new_safe,
913 			     (GtkDestroyNotify) gtk_widget_unref);
914     gtk_widget_show(new_safe);
915     gtk_box_pack_start(GTK_BOX(vbox32), new_safe, FALSE, FALSE, 0);
916 
917     new_pasv = gtk_check_button_new_with_label("Use passive mode FTP");
918     gtk_widget_ref(new_pasv);
919     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_pasv", new_pasv,
920 			     (GtkDestroyNotify) gtk_widget_unref);
921     gtk_widget_show(new_pasv);
922     gtk_box_pack_start(GTK_BOX(vbox32), new_pasv, FALSE, FALSE, 0);
923 
924     server_state = gnome_druid_page_standard_new_with_vals("", NULL);
925     gtk_widget_ref(server_state);
926     gtk_object_set_data_full(GTK_OBJECT(site_druid), "server_state", server_state,
927 			     (GtkDestroyNotify) gtk_widget_unref);
928     gtk_widget_show_all(server_state);
929     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(server_state));
930     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(server_state), &server_state_logo_bg_color);
931     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(server_state), "Current State of The Remote Site");
932     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(server_state),
933 			create_image("gnome-networktool.png"));
934 
935     druid_vbox5 = GNOME_DRUID_PAGE_STANDARD(server_state)->vbox;
936     gtk_widget_ref(druid_vbox5);
937     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox5", druid_vbox5,
938 			     (GtkDestroyNotify) gtk_widget_unref);
939     gtk_widget_show(druid_vbox5);
940 
941     vbox33 = gtk_vbox_new(FALSE, 0);
942     gtk_widget_ref(vbox33);
943     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox33", vbox33,
944 			     (GtkDestroyNotify) gtk_widget_unref);
945     gtk_widget_show(vbox33);
946     gtk_box_pack_start(GTK_BOX(druid_vbox5), vbox33, TRUE, TRUE, 0);
947 
948     label74 = gtk_label_new("Xsitecopy now needs to know the current state of the remote site. If the site is empty or up to date, that is great. If not, it can attempt to connect to the remote server and figure out what is there.");
949     gtk_widget_ref(label74);
950     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label74", label74,
951 			     (GtkDestroyNotify) gtk_widget_unref);
952     gtk_widget_show(label74);
953     gtk_box_pack_start(GTK_BOX(vbox33), label74, TRUE, TRUE, 0);
954     gtk_widget_set_usize(label74, 370, -2);
955     gtk_label_set_justify(GTK_LABEL(label74), GTK_JUSTIFY_FILL);
956     gtk_label_set_line_wrap(GTK_LABEL(label74), TRUE);
957 
958     hseparator8 = gtk_hseparator_new();
959     gtk_widget_ref(hseparator8);
960     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator8", hseparator8,
961 			     (GtkDestroyNotify) gtk_widget_unref);
962     gtk_widget_show(hseparator8);
963     gtk_box_pack_start(GTK_BOX(vbox33), hseparator8, TRUE, TRUE, 0);
964 
965     vbox34 = gtk_vbox_new(FALSE, 0);
966     gtk_widget_ref(vbox34);
967     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox34", vbox34,
968 			     (GtkDestroyNotify) gtk_widget_unref);
969     gtk_widget_show(vbox34);
970     gtk_box_pack_start(GTK_BOX(vbox33), vbox34, TRUE, TRUE, 0);
971     gtk_container_set_border_width(GTK_CONTAINER(vbox34), 4);
972 
973     new_init = gtk_radio_button_new_with_label(vbox34_group, "The remote site is empty.");
974     vbox34_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_init));
975     gtk_widget_ref(new_init);
976     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_init", new_init,
977 			     (GtkDestroyNotify) gtk_widget_unref);
978     gtk_widget_show(new_init);
979     gtk_box_pack_start(GTK_BOX(vbox34), new_init, FALSE, FALSE, 0);
980 
981     new_catchup = gtk_radio_button_new_with_label(vbox34_group, "The remote site has been uploaded.");
982     vbox34_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_catchup));
983     gtk_widget_ref(new_catchup);
984     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_catchup", new_catchup,
985 			     (GtkDestroyNotify) gtk_widget_unref);
986     gtk_widget_show(new_catchup);
987     gtk_box_pack_start(GTK_BOX(vbox34), new_catchup, FALSE, FALSE, 0);
988 
989     new_fetch_please = gtk_radio_button_new_with_label(vbox34_group, "Connect to the remote site and figure out the state automatically.");
990     vbox34_group = gtk_radio_button_group(GTK_RADIO_BUTTON(new_fetch_please));
991     gtk_widget_ref(new_fetch_please);
992     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_fetch_please", new_fetch_please,
993 			     (GtkDestroyNotify) gtk_widget_unref);
994     gtk_widget_show(new_fetch_please);
995     /** Added **/
996     gtk_widget_set_sensitive(new_fetch_please, FALSE);
997     /** End **/
998     gtk_box_pack_start(GTK_BOX(vbox34), new_fetch_please, FALSE, FALSE, 0);
999 
1000     fetch_a_list = gnome_druid_page_standard_new_with_vals("", NULL);
1001     gtk_widget_ref(fetch_a_list);
1002     gtk_object_set_data_full(GTK_OBJECT(site_druid), "fetch_a_list", fetch_a_list,
1003 			     (GtkDestroyNotify) gtk_widget_unref);
1004     gtk_widget_show_all(fetch_a_list);
1005     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(fetch_a_list));
1006     gnome_druid_page_standard_set_logo_bg_color(GNOME_DRUID_PAGE_STANDARD(fetch_a_list), &fetch_a_list_logo_bg_color);
1007     gnome_druid_page_standard_set_title(GNOME_DRUID_PAGE_STANDARD(fetch_a_list), "Ready to download file information");
1008     gnome_druid_page_standard_set_logo(GNOME_DRUID_PAGE_STANDARD(fetch_a_list),
1009 			create_image("gnome-networktool.png"));
1010 
1011     druid_vbox10 = GNOME_DRUID_PAGE_STANDARD(fetch_a_list)->vbox;
1012     gtk_widget_ref(druid_vbox10);
1013     gtk_object_set_data_full(GTK_OBJECT(site_druid), "druid_vbox10", druid_vbox10,
1014 			     (GtkDestroyNotify) gtk_widget_unref);
1015     gtk_widget_show(druid_vbox10);
1016 
1017     vbox36 = gtk_vbox_new(FALSE, 0);
1018     gtk_widget_ref(vbox36);
1019     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox36", vbox36,
1020 			     (GtkDestroyNotify) gtk_widget_unref);
1021     gtk_widget_show(vbox36);
1022     gtk_box_pack_start(GTK_BOX(druid_vbox10), vbox36, TRUE, TRUE, 0);
1023 
1024     label91 = gtk_label_new("When you click on the button below to begin, Xsitecopy will try and establish a connection to the remote server you specified earlier.\n\nIf a connection is made, a file listing will then be obtained. If this fails then you will be asked to initialise or catchup the site for now, and you can attempt another 'fetch' at a later date.");
1025     gtk_widget_ref(label91);
1026     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label91", label91,
1027 			     (GtkDestroyNotify) gtk_widget_unref);
1028     gtk_widget_show(label91);
1029     gtk_box_pack_start(GTK_BOX(vbox36), label91, TRUE, TRUE, 0);
1030     gtk_widget_set_usize(label91, 370, -2);
1031     gtk_label_set_justify(GTK_LABEL(label91), GTK_JUSTIFY_FILL);
1032     gtk_label_set_line_wrap(GTK_LABEL(label91), TRUE);
1033 
1034     hseparator10 = gtk_hseparator_new();
1035     gtk_widget_ref(hseparator10);
1036     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hseparator10", hseparator10,
1037 			     (GtkDestroyNotify) gtk_widget_unref);
1038     gtk_widget_show(hseparator10);
1039     gtk_box_pack_start(GTK_BOX(vbox36), hseparator10, TRUE, FALSE, 0);
1040 
1041     vbox36 = gtk_vbox_new(FALSE, 0);
1042     gtk_widget_ref(vbox36);
1043     gtk_object_set_data_full(GTK_OBJECT(site_druid), "vbox36", vbox36,
1044 			     (GtkDestroyNotify) gtk_widget_unref);
1045     gtk_widget_show(vbox36);
1046     gtk_box_pack_start(GTK_BOX(vbox36), vbox36, FALSE, TRUE, 0);
1047     gtk_container_set_border_width(GTK_CONTAINER(vbox36), 5);
1048 
1049     hbox23 = gtk_hbox_new(FALSE, 0);
1050     gtk_widget_ref(hbox23);
1051     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbox23", hbox23,
1052 			     (GtkDestroyNotify) gtk_widget_unref);
1053     gtk_widget_show(hbox23);
1054     gtk_box_pack_start(GTK_BOX(vbox36), hbox23, FALSE, TRUE, 0);
1055 
1056     label88 = gtk_label_new("Status: ");
1057     gtk_widget_ref(label88);
1058     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label88", label88,
1059 			     (GtkDestroyNotify) gtk_widget_unref);
1060     gtk_widget_show(label88);
1061     gtk_box_pack_start(GTK_BOX(hbox23), label88, FALSE, FALSE, 0);
1062     gtk_label_set_justify(GTK_LABEL(label88), GTK_JUSTIFY_LEFT);
1063     gtk_misc_set_alignment(GTK_MISC(label88), 0, 0.5);
1064 
1065     new_fetch_status = gtk_label_new("Awaiting user input. ");
1066     gtk_widget_ref(new_fetch_status);
1067     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_fetch_status", new_fetch_status,
1068 			     (GtkDestroyNotify) gtk_widget_unref);
1069     gtk_widget_show(new_fetch_status);
1070     gtk_box_pack_start(GTK_BOX(hbox23), new_fetch_status, FALSE, FALSE, 0);
1071 
1072     hbox24 = gtk_hbox_new(FALSE, 0);
1073     gtk_widget_ref(hbox24);
1074     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbox24", hbox24,
1075 			     (GtkDestroyNotify) gtk_widget_unref);
1076     gtk_widget_show(hbox24);
1077     gtk_box_pack_start(GTK_BOX(vbox36), hbox24, TRUE, FALSE, 0);
1078 
1079     label90 = gtk_label_new("Found information about ");
1080     gtk_widget_ref(label90);
1081     gtk_object_set_data_full(GTK_OBJECT(site_druid), "label90", label90,
1082 			     (GtkDestroyNotify) gtk_widget_unref);
1083     gtk_widget_show(label90);
1084     gtk_box_pack_start(GTK_BOX(hbox24), label90, FALSE, FALSE, 0);
1085 
1086     fetch_num_files_got = gtk_label_new("0 files.");
1087     gtk_widget_ref(fetch_num_files_got);
1088     gtk_object_set_data_full(GTK_OBJECT(site_druid), "fetch_num_files_got", fetch_num_files_got,
1089 			     (GtkDestroyNotify) gtk_widget_unref);
1090     gtk_widget_show(fetch_num_files_got);
1091     gtk_box_pack_start(GTK_BOX(hbox24), fetch_num_files_got, FALSE, FALSE, 0);
1092 
1093     new_fetch_begin = gtk_button_new_with_label("Fetch file state");
1094     gtk_widget_ref(new_fetch_begin);
1095     gtk_object_set_data_full(GTK_OBJECT(site_druid), "new_fetch_begin", new_fetch_begin,
1096 			     (GtkDestroyNotify) gtk_widget_unref);
1097     gtk_widget_show(new_fetch_begin);
1098     gtk_box_pack_start(GTK_BOX(vbox36), new_fetch_begin, FALSE, FALSE, 0);
1099     GTK_WIDGET_SET_FLAGS(new_fetch_begin, GTK_CAN_DEFAULT);
1100 
1101     hbuttonbox2 = gtk_hbutton_box_new();
1102     gtk_widget_ref(hbuttonbox2);
1103     gtk_object_set_data_full(GTK_OBJECT(site_druid), "hbuttonbox2", hbuttonbox2,
1104 			     (GtkDestroyNotify) gtk_widget_unref);
1105     gtk_widget_show(hbuttonbox2);
1106     gtk_box_pack_start(GTK_BOX(vbox36), hbuttonbox2, FALSE, FALSE, 0);
1107 
1108     finish_page = gnome_druid_page_finish_new();
1109     gtk_widget_ref(finish_page);
1110     gtk_object_set_data_full(GTK_OBJECT(site_druid), "finish_page", finish_page,
1111 			     (GtkDestroyNotify) gtk_widget_unref);
1112     gtk_widget_show(finish_page);
1113     gnome_druid_append_page(GNOME_DRUID(new_site_druid), GNOME_DRUID_PAGE(finish_page));
1114     gnome_druid_page_finish_set_logo_bg_color(GNOME_DRUID_PAGE_FINISH(finish_page), &finish_page_logo_bg_color);
1115     gnome_druid_page_finish_set_title(GNOME_DRUID_PAGE_FINISH(finish_page), "Creation successful!");
1116     gnome_druid_page_finish_set_text(GNOME_DRUID_PAGE_FINISH(finish_page), "Enough information has now been gathered,\nand a suitable site definition has been created.\nClick finish to close.");
1117     gnome_druid_page_finish_set_logo(GNOME_DRUID_PAGE_FINISH(finish_page),
1118 				     create_image("gnome-networktool.png"));
1119 /*    gnome_druid_page_finish_set_watermark(GNOME_DRUID_PAGE_FINISH(finish_page),
1120 					  create_image("xsitecopy/xsc_side.xpm"));
1121 */
1122     gtk_signal_connect(GTK_OBJECT(site_druid), "delete_event",
1123 		       GTK_SIGNAL_FUNC(on_site_druid_delete_event),
1124 		       NULL);
1125     gtk_signal_connect(GTK_OBJECT(start_page), "cancel",
1126 		       GTK_SIGNAL_FUNC(on_general_info_cancel),
1127 		       NULL);
1128     gtk_signal_connect(GTK_OBJECT(general_info), "next",
1129 		       GTK_SIGNAL_FUNC(verify_name_and_url),
1130 		       NULL);
1131     gtk_signal_connect(GTK_OBJECT(general_info), "cancel",
1132 		       GTK_SIGNAL_FUNC(on_general_info_cancel),
1133 		       NULL);
1134     gtk_signal_connect(GTK_OBJECT(server_info), "next",
1135 		       GTK_SIGNAL_FUNC(verify_server_details),
1136 		       NULL);
1137     gtk_signal_connect(GTK_OBJECT(server_info), "cancel",
1138 		       GTK_SIGNAL_FUNC(on_server_info_cancel),
1139 		       NULL);
1140     gtk_signal_connect(GTK_OBJECT(new_ftp), "toggled",
1141 		       GTK_SIGNAL_FUNC(set_new_port),
1142 		       "ftp");
1143     gtk_signal_connect(GTK_OBJECT(new_http), "toggled",
1144 		       GTK_SIGNAL_FUNC(set_new_port),
1145 		       "http");
1146     gtk_signal_connect(GTK_OBJECT(directories), "next",
1147 		       GTK_SIGNAL_FUNC(verify_directories),
1148 		       NULL);
1149     gtk_signal_connect(GTK_OBJECT(directories), "cancel",
1150 		       GTK_SIGNAL_FUNC(on_directories_cancel),
1151 		       NULL);
1152     gtk_signal_connect(GTK_OBJECT(file_handling), "next",
1153 		       GTK_SIGNAL_FUNC(verify_file_attributes),
1154 		       NULL);
1155     gtk_signal_connect(GTK_OBJECT(file_handling), "cancel",
1156 		       GTK_SIGNAL_FUNC(on_file_handling_cancel),
1157 		       NULL);
1158     gtk_signal_connect(GTK_OBJECT(update_options), "next",
1159 		       GTK_SIGNAL_FUNC(verify_update_options),
1160 		       NULL);
1161     gtk_signal_connect(GTK_OBJECT(update_options), "cancel",
1162 		       GTK_SIGNAL_FUNC(on_update_options_cancel),
1163 		       NULL);
1164     gtk_signal_connect_after(GTK_OBJECT(server_state), "next",
1165 			     GTK_SIGNAL_FUNC(should_we_fetch),
1166 			     NULL);
1167     gtk_signal_connect(GTK_OBJECT(server_state), "next",
1168 		       GTK_SIGNAL_FUNC(set_back_insensitive),
1169 		       NULL);
1170 /*    gtk_signal_connect(GTK_OBJECT(server_state), "next",
1171 		       GTK_SIGNAL_FUNC(make_site_from_druid),
1172 		       NULL);*/
1173     gtk_signal_connect(GTK_OBJECT(server_state), "cancel",
1174 		       GTK_SIGNAL_FUNC(on_server_state_cancel),
1175 		       NULL);
1176     gtk_signal_connect(GTK_OBJECT(fetch_a_list), "next",
1177 		       GTK_SIGNAL_FUNC(check_fetch_worked),
1178 		       NULL);
1179     gtk_signal_connect(GTK_OBJECT(fetch_a_list), "cancel",
1180 		       GTK_SIGNAL_FUNC(on_fetch_a_list_cancel),
1181 		       NULL);
1182     gtk_signal_connect(GTK_OBJECT(new_fetch_begin), "clicked",
1183 		       GTK_SIGNAL_FUNC(begin_first_time_fetch),
1184 		       NULL);
1185     gtk_signal_connect(GTK_OBJECT(finish_page), "finish",
1186 		       GTK_SIGNAL_FUNC(druid_finished),
1187 		       NULL);
1188     gtk_signal_connect(GTK_OBJECT(finish_page), "back",
1189 		       GTK_SIGNAL_FUNC(druid_back),
1190 		       NULL);
1191     gtk_signal_connect(GTK_OBJECT(finish_page), "cancel",
1192 		       GTK_SIGNAL_FUNC(on_finish_page_cancel),
1193 		       NULL);
1194 /**** End glade generated code ****/
1195 
1196     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(new_ftp), TRUE);
1197     return site_druid;
1198 
1199 
1200 }
1201 
start_new_site_wizard(void)1202 void start_new_site_wizard(void)
1203 {
1204 
1205     /* Bring the druid to the front if it already exists */
1206 
1207     NE_DEBUG(DEBUG_GNOME, "started New site druid.\n");
1208     if (site_druid) {
1209 	gdk_window_raise(site_druid->window);
1210 	gdk_window_show(site_druid->window);
1211 	return;
1212     }
1213 
1214     /* Make the bare bones of a site so we can add things to it as the user
1215      * moves along the druid.
1216      */
1217     site_druid = create_site_druid();
1218     site_to_add = default_site();
1219     gtk_widget_show(site_druid);
1220 }
1221 
1222 
1223 /*** Callbacks ***/
1224 
1225 gboolean
on_site_druid_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)1226 on_site_druid_delete_event(GtkWidget * widget,
1227 			   GdkEvent * event,
1228 			   gpointer user_data)
1229 {
1230     NE_DEBUG(DEBUG_GNOME, "Caught delete event for new site druid.\n");
1231    close_druid();
1232     return FALSE;
1233 }
1234 
1235 
1236 gboolean
verify_name_and_url(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1237 verify_name_and_url(GnomeDruidPage * gnomedruidpage,
1238 		    gpointer arg1,
1239 		    gpointer user_data)
1240 {
1241     gchar *name_str;
1242 
1243     NE_DEBUG(DEBUG_GNOME, "Verifying name and URL...\n");
1244 
1245     name_str = grab_druid_entry_into_string("new_name");
1246     if (!name_str)
1247       {
1248 	  gnome_error_dialog("You must enter a sensible name for this site");
1249 	  return TRUE;
1250       }
1251 
1252     site_to_add->name = name_str;
1253     NE_DEBUG(DEBUG_GNOME, "Name is %s.\n", name_str);
1254     site_to_add->url = grab_druid_entry_into_string("new_url");
1255     NE_DEBUG(DEBUG_GNOME, "URL is %s.\n", site_to_add->url);
1256     site_to_add->infofile = g_strconcat(copypath, name_str, NULL);
1257     return FALSE;
1258 }
1259 
1260 
grab_druid_entry_into_string(gchar * widget_name)1261 gchar *grab_druid_entry_into_string(gchar *widget_name)
1262 {
1263     GtkWidget *entry;
1264     gchar *tmp_string;
1265 
1266     g_assert(widget_name != NULL);
1267 
1268     entry = get_widget(site_druid, widget_name);
1269     tmp_string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
1270 
1271     /* If the string didn't get allocated, or something went screwy don't
1272      * return it. Otherwise do. This is horribly double-negated, but hey.
1273      */
1274     if (! ((!tmp_string) || (strlen(tmp_string) < 1)))
1275       {
1276 	  return tmp_string;
1277       }
1278      return NULL;
1279 }
1280 
1281 
1282 gboolean
verify_server_details(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1283 verify_server_details(GnomeDruidPage * gnomedruidpage,
1284 		      gpointer arg1,
1285 		      gpointer user_data)
1286 {
1287     /* Hostname */
1288     {
1289       gchar *host_str = grab_druid_entry_into_string("new_hostname");
1290       if (host_str != NULL)
1291 	site_to_add->server.hostname = host_str;
1292     }
1293 
1294     /* Username */
1295     {
1296       gchar *user_str = grab_druid_entry_into_string("new_username");
1297       if (user_str != NULL)
1298 	site_to_add->server.username = user_str;
1299     }
1300 
1301     /* Password */
1302     {
1303       gchar *pass_str = grab_druid_entry_into_string("new_password");
1304       if (pass_str != NULL)
1305 	site_to_add->server.password = pass_str;
1306     }
1307 
1308     /* Port */
1309     {
1310       GtkWidget *port = get_widget(site_druid, "new_port");
1311       gint port_int = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(port));
1312       if (port_int)
1313 	site_to_add->server.port = port_int;
1314     }
1315 
1316     /* Figure out the protocol to use. */
1317     {
1318       GtkWidget *protocol = get_widget(site_druid, "new_ftp");
1319 
1320       if (GTK_TOGGLE_BUTTON(protocol)->active)
1321 	{
1322 	  /* FTP was selected */
1323 	  site_to_add->protocol = siteproto_ftp;
1324 	}
1325 #ifdef USE_DAV
1326       else
1327 	{
1328 	  /* WebDAV was selected */
1329 	  site_to_add->protocol = siteproto_dav;
1330 	}
1331 #endif	/* USE_DAV */
1332     }
1333 
1334     return FALSE;
1335 }
1336 
1337 
1338 /* Sets an appropriate default port when a new protocol is selected. */
1339 
set_new_port(GtkToggleButton * togglebutton,gpointer user_data)1340 void set_new_port(GtkToggleButton * togglebutton,
1341 		  gpointer user_data)
1342 {
1343     gchar *protocol = (gchar *) user_data;
1344 
1345     NE_DEBUG (DEBUG_GNOME, "Setting an appropriate port number based on the new protocol.\n");
1346     if (strcmp(protocol, "http") == 0) {
1347 	NE_DEBUG (DEBUG_GNOME, "Setting a port for HTTP.\n");
1348 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(get_widget(site_druid, "new_port")),
1349 				  (float) 80);
1350     } else {
1351 	NE_DEBUG (DEBUG_GNOME, "Setting a port for FTP.\n");
1352 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(get_widget(site_druid, "new_port")),
1353 				  (float) 21);
1354     }
1355 }
1356 
1357 
1358 gboolean
verify_directories(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1359 verify_directories(GnomeDruidPage * gnomedruidpage,
1360 		   gpointer arg1,
1361 		   gpointer user_data)
1362 {
1363   /* (todo: If there are many places where we have almost identical code for
1364      local,remote cases, then consider changing local_isrel to isrel[LOCAL] etc.) */
1365 
1366   /* Verify & process local directory. */
1367   {
1368     gchar *local_str = grab_druid_entry_into_string("new_local_entry");
1369     if (local_str)
1370       {
1371 	  NE_DEBUG(DEBUG_GNOME, "Local dir is %s.\n", local_str);
1372 	  site_to_add->local_root_user = local_str;
1373 	  if (*local_str == '~')
1374 	    site_to_add->local_isrel = TRUE;
1375       }
1376     else
1377       {
1378 	  gnome_error_dialog("You must enter a valid local directory for this site");
1379 	  return TRUE;
1380       }
1381   }
1382 
1383   /* Verify & process remote directory. */
1384   {
1385     gchar *remote_str = grab_druid_entry_into_string("new_remote_entry");
1386     if (remote_str)
1387       {
1388 	  NE_DEBUG(DEBUG_GNOME, "Remote dir is %s.\n", remote_str);
1389 	  site_to_add->remote_root_user = remote_str;
1390 	  if (*remote_str == '~')
1391 	    site_to_add->remote_isrel = TRUE;
1392       }
1393     else
1394       {
1395 	  gnome_error_dialog("You must enter a valid remote directory for this site");
1396 	  return TRUE;
1397       }
1398   }
1399 
1400   return FALSE;
1401 }
1402 
1403 
1404 /* Permissions, sym links, state-change method */
1405 
1406 gboolean
verify_file_attributes(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1407 verify_file_attributes(GnomeDruidPage * gnomedruidpage,
1408 		       gpointer arg1,
1409 		       gpointer user_data)
1410 {
1411 
1412     GtkWidget *perms1, *perms2, *perms3;
1413     GtkWidget *links1, *links2, *links3;
1414 
1415     /* Permissions */
1416     perms1 = get_widget(site_druid, "new_perms_all");
1417     perms2 = get_widget(site_druid, "new_perms_exec");
1418     perms3 = get_widget(site_druid, "new_perms_ignore");
1419 
1420     if (GTK_TOGGLE_BUTTON(perms1)->active)
1421       {
1422 	  site_to_add->perms = sitep_all;
1423       }
1424     else if (GTK_TOGGLE_BUTTON(perms2)->active)
1425       {
1426 	  site_to_add->perms = sitep_exec;
1427       }
1428     else
1429       {
1430 	  site_to_add->perms = sitep_ignore;
1431       }
1432 
1433     /* Symbolic links */
1434     links1 = get_widget(site_druid, "new_sym_follow");
1435     links2 = get_widget(site_druid, "new_sym_ignore");
1436     links3 = get_widget(site_druid, "new_sym_maintain");
1437 
1438     if (GTK_TOGGLE_BUTTON(links1)->active)
1439       {
1440 	  site_to_add->symlinks = sitesym_follow;
1441       }
1442     else if (GTK_TOGGLE_BUTTON(links2)->active)
1443       {
1444 	  site_to_add->symlinks = sitesym_ignore;
1445       }
1446     else
1447       {
1448 	  site_to_add->symlinks = sitesym_maintain;
1449       }
1450 
1451     /* File State method */
1452     if (GTK_TOGGLE_BUTTON(get_widget(site_druid, "new_timesize"))->active)
1453       {
1454 	  site_to_add->state_method = state_timesize;
1455       }
1456     else
1457       {
1458 	  site_to_add->state_method = state_checksum;
1459       }
1460 
1461     return FALSE;
1462 }
1463 
1464 
1465 gboolean
verify_update_options(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1466 verify_update_options(GnomeDruidPage * gnomedruidpage,
1467 		      gpointer arg1,
1468 		      gpointer user_data)
1469 {
1470     GtkWidget *del, *move, *change, *lcase, *safe, *pasv;
1471 
1472     del = get_widget(site_druid, "new_nodelete");
1473     move = get_widget(site_druid, "new_checkmoved");
1474     change = get_widget(site_druid, "new_nooverwrite");
1475     lcase = get_widget(site_druid, "new_lowercase");
1476     safe = get_widget(site_druid, "new_safe");
1477     pasv = get_widget(site_druid, "new_pasv");
1478 
1479     site_to_add->nodelete = !(GTK_TOGGLE_BUTTON(del)->active);
1480     site_to_add->checkmoved = GTK_TOGGLE_BUTTON(move)->active;
1481     site_to_add->nooverwrite = GTK_TOGGLE_BUTTON(change)->active;
1482     site_to_add->lowercase = GTK_TOGGLE_BUTTON(lcase)->active;
1483     site_to_add->safemode = GTK_TOGGLE_BUTTON(safe)->active;
1484 
1485     /* Enforce a bit of sanity */
1486     if (site_to_add->safemode)
1487       site_to_add->nooverwrite = FALSE;
1488 
1489     /* If using webdav, let's leave pasv_mode as false */
1490     if (site_to_add->protocol == siteproto_ftp)
1491       site_to_add->ftp_pasv_mode = GTK_TOGGLE_BUTTON(pasv)->active;
1492 
1493     return FALSE;
1494 }
1495 
1496 
1497 gboolean
should_we_fetch(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1498 should_we_fetch(GnomeDruidPage * gnomedruidpage,
1499 		gpointer arg1,
1500 		gpointer user_data)
1501 {
1502     GtkWidget *connect_radio = get_widget(site_druid, "new_fetch_please");
1503 
1504     if (!GTK_TOGGLE_BUTTON(connect_radio)->active) {
1505 	gnome_druid_set_page(GNOME_DRUID(get_widget(site_druid, "new_site_druid")),
1506 			     GNOME_DRUID_PAGE(get_widget(site_druid, "finish_page")));
1507 	return TRUE;
1508     }
1509     return FALSE;
1510 }
1511 
1512 
1513 gboolean
set_back_insensitive(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1514 set_back_insensitive(GnomeDruidPage * gnomedruidpage,
1515 		     gpointer arg1,
1516 		     gpointer user_data)
1517 {
1518     gnome_druid_set_buttons_sensitive(GNOME_DRUID(get_widget(site_druid, "new_site_druid")),
1519 				      FALSE, TRUE, TRUE);
1520     return FALSE;
1521 }
1522 
1523 
1524 /* This isn't implemented until the 'fetch' API is nicer... */
1525 
1526 gboolean
check_fetch_worked(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1527 check_fetch_worked(GnomeDruidPage * gnomedruidpage,
1528 		   gpointer arg1,
1529 		   gpointer user_data)
1530 {
1531 
1532     return FALSE;
1533 }
1534 
1535 
begin_first_time_fetch(GtkButton * button,gpointer user_data)1536 void begin_first_time_fetch(GtkButton * button,
1537 			    gpointer user_data)
1538 {
1539 
1540 }
1541 
druid_back(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1542 gboolean druid_back(GnomeDruidPage * gnomedruidpage,
1543 		    gpointer arg1,
1544 		    gpointer user_data)
1545 {
1546     gnome_druid_set_page(GNOME_DRUID(get_widget(site_druid, "new_site_druid")),
1547 			 GNOME_DRUID_PAGE(get_widget(site_druid, "server_state")));
1548 
1549 }
1550 
1551 /* The user has choosen Finish on the last page
1552    of the wizard */
druid_finished(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1553 void druid_finished(GnomeDruidPage * gnomedruidpage,
1554 		    gpointer arg1,
1555 		    gpointer user_data)
1556 {
1557     add_site(user_data);
1558     close_druid();
1559 }
1560 
1561 
1562 /* This next stuff is pretty lame really, but it was Glade-generated, hence
1563  * took very little work, so I'm not complaining.
1564  */
1565 
1566 gboolean
on_general_info_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1567 on_general_info_cancel(GnomeDruidPage * gnomedruidpage,
1568 		       gpointer arg1,
1569 		       gpointer user_data)
1570 {
1571     close_druid();
1572     return TRUE;
1573 }
1574 
1575 
1576 gboolean
on_server_info_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1577 on_server_info_cancel(GnomeDruidPage * gnomedruidpage,
1578 		      gpointer arg1,
1579 		      gpointer user_data)
1580 {
1581     close_druid();
1582     return TRUE;
1583 }
1584 
1585 
1586 gboolean
on_directories_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1587 on_directories_cancel(GnomeDruidPage * gnomedruidpage,
1588 		      gpointer arg1,
1589 		      gpointer user_data)
1590 {
1591     close_druid();
1592     return TRUE;
1593 }
1594 
1595 
1596 gboolean
on_file_handling_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1597 on_file_handling_cancel(GnomeDruidPage * gnomedruidpage,
1598 			gpointer arg1,
1599 			gpointer user_data)
1600 {
1601     close_druid();
1602     return TRUE;
1603 }
1604 
1605 
1606 gboolean
on_update_options_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1607 on_update_options_cancel(GnomeDruidPage * gnomedruidpage,
1608 			 gpointer arg1,
1609 			 gpointer user_data)
1610 {
1611     close_druid();
1612     return TRUE;
1613 }
1614 
1615 
1616 gboolean
on_server_state_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1617 on_server_state_cancel(GnomeDruidPage * gnomedruidpage,
1618 		       gpointer arg1,
1619 		       gpointer user_data)
1620 {
1621     close_druid();
1622     return TRUE;
1623 }
1624 
1625 
1626 gboolean
on_fetch_a_list_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1627 on_fetch_a_list_cancel(GnomeDruidPage * gnomedruidpage,
1628 		       gpointer arg1,
1629 		       gpointer user_data)
1630 {
1631     close_druid();
1632     return TRUE;
1633 }
1634 
1635 
1636 gboolean
on_finish_page_cancel(GnomeDruidPage * gnomedruidpage,gpointer arg1,gpointer user_data)1637 on_finish_page_cancel(GnomeDruidPage * gnomedruidpage,
1638 		      gpointer arg1,
1639 		      gpointer user_data)
1640 {
1641     close_druid();
1642     return TRUE;
1643 }
1644 
1645 
1646 
1647 
1648 
1649 
1650 
1651 
1652 
1653 
1654 
1655 
1656 
1657