#include "geotrace.h"

// vars for main window
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *status_bar;
GtkWidget *file_item;
GtkWidget *file_menu;
GtkWidget *options_item;
GtkWidget *exit_item;
GtkWidget *about_item;
GtkWidget *hbox;
GtkWidget *host_label;
GtkWidget *host_entry;
GtkWidget *host_combo;
GtkWidget *trace_button;
GtkWidget *separator1;
GtkWidget *separator2;
GtkWidget *map_label;
GtkWidget *combo_entry;
GtkWidget *map_combo;
GtkWidget *map_change_button;
GtkWidget *latlon_label;
GtkWidget *latlon_label2;
GtkWidget *vpaned;
GtkWidget *scrolled_window;
GtkWidget *drawing_area;
GtkWidget *scrolled_window2;
GtkWidget *trace_list;
GtkWidget *hop_label;
GtkWidget *ip_label;
GtkWidget *dns_label;
GtkWidget *location_label;
GtkWidget *rtt_label;

// vars for options window
GtkWidget *options_window;
GtkWidget *options_vbox;
GtkWidget *options_apply_button;
GtkWidget *options_cancel_button;
GtkWidget *options_button_box;
// traceroute options notebook
GtkWidget *options_notebook;
GtkWidget *trace_options_vbox;
GtkWidget *traceroute_options_label;
GtkWidget *trace_options_hbox1;
GtkWidget *executable_label;
GtkWidget *trace_path_entry;
GtkWidget *trace_path_button;
GtkWidget *trace_options_hbox2;
GtkWidget *max_ttl_label;
GtkObject *max_ttl_spinbutton_adj;
GtkWidget *max_ttl_spinbutton;
GtkWidget *resolve_checkbox;
GtkWidget *timeout_label;
GtkObject *timeout_spinbutton_adj;
GtkWidget *timeout_spinbutton;
GtkWidget *notebook_trace_label;
GtkWidget *empty_notebook_page;
// map notebook
GtkWidget *map_options_vbox;
GtkWidget *map_options_label;
GtkWidget *map_options_hbox1;
GtkWidget *map_dir_path_label;
GtkWidget *map_dir_path_entry;
GtkWidget *map_dir_path_button;
GtkWidget *map_options_hbox2;
GtkWidget *start_map_label;
GtkWidget *start_map_combo;
GtkWidget *start_map_entry;
GtkWidget *notebook_maps_label;
// display notebook
GtkWidget *display_options_vbox;
GtkWidget *display_options_label;
GtkWidget *display_options_hbox1;
GtkWidget *notebook_display_label;
GtkWidget *display_color_label;
GtkWidget *display_color_label2;
GtkWidget *display_color_select_button;
GtkWidget *line_width_label;
GtkObject *line_width_spinbutton_adj;
GtkWidget *line_width_spinbutton;

// vars for traceroute file selection
GtkWidget*trace_selection_dialog;
GtkWidget*trace_select_ok_button;
GtkWidget*trace_select_cancel_button;

// vars for about window
GtkWidget *about_label;
GtkWidget *about_window;

// vars for popup window
GtkWidget *popup_label;
GtkWidget *popup_window;

// vars for color selection dialog
GtkWidget *color_select_dialog;
GtkWidget *color_select_ok_button;
GtkWidget *color_select_cancel_button;

char *popup_msg;

// creates main window
void create_window(void) {

	// create main window
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size (GTK_WINDOW(window),800,600);
	gtk_window_set_title (GTK_WINDOW(window),GEO_TITLEBAR_STR);
	gtk_signal_connect (GTK_OBJECT(window), "delete_event",
		GTK_SIGNAL_FUNC (delete_event), NULL);
	gtk_signal_connect (GTK_OBJECT(window), "destroy",
		GTK_SIGNAL_FUNC (destroy), NULL);

	// create vbox 
	vbox = gtk_vbox_new (FALSE,0);
	gtk_widget_show (vbox);
	gtk_container_add (GTK_CONTAINER(window),vbox);

	// create menu
	file_menu = gtk_menu_new();
	options_item = gtk_menu_item_new_with_label("Options");
	exit_item = gtk_menu_item_new_with_label("Exit");
	gtk_menu_append(GTK_MENU(file_menu),options_item);
	gtk_menu_append(GTK_MENU(file_menu),exit_item);
	gtk_signal_connect_object(GTK_OBJECT(options_item),"activate",
		GTK_SIGNAL_FUNC(options_clicked),NULL);
	gtk_signal_connect_object(GTK_OBJECT(exit_item),"activate",
		GTK_SIGNAL_FUNC(destroy),NULL);
	gtk_widget_show(options_item);
	gtk_widget_show(exit_item);

	about_item = gtk_menu_item_new_with_label("About");
	gtk_signal_connect_object(GTK_OBJECT(about_item),"activate",
		GTK_SIGNAL_FUNC(about_clicked),NULL);
	gtk_widget_show(about_item);

	menubar = gtk_menu_bar_new();
	gtk_box_pack_start(GTK_BOX(vbox),menubar,FALSE,FALSE,0);
	gtk_widget_show(menubar);

	file_item = gtk_menu_item_new_with_label("File");
	gtk_widget_show(file_item);
	gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item),file_menu);

	gtk_menu_bar_append(GTK_MENU_BAR(menubar),file_item);
	gtk_menu_item_right_justify(GTK_MENU_ITEM (about_item));
	gtk_menu_bar_append(GTK_MENU_BAR(menubar),about_item);

	// create host/trace/maps row
	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);
	gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,TRUE,0);
	gtk_widget_set_usize(hbox,-2,25);

	host_label = gtk_label_new("Host:");
	gtk_widget_show(host_label);
	gtk_box_pack_start(GTK_BOX(hbox),host_label,FALSE,FALSE,5);

	host_combo = gtk_combo_new();
	gtk_widget_show(host_combo);
	gtk_box_pack_start(GTK_BOX(hbox),host_combo,FALSE,FALSE,5);
	gtk_container_set_border_width(GTK_CONTAINER(host_combo),5);
	host_entry = GTK_COMBO(host_combo)->entry;
	gtk_widget_show(host_entry);

	trace_button = gtk_button_new_with_label ("Trace");
	gtk_widget_show(trace_button);
	gtk_box_pack_start(GTK_BOX(hbox),trace_button,FALSE,FALSE,5);
	gtk_container_set_border_width(GTK_CONTAINER(trace_button),3);
	gtk_signal_connect(GTK_OBJECT(trace_button),"clicked",
		GTK_SIGNAL_FUNC(trace_button_clicked),NULL);

	separator1 = gtk_vseparator_new();
	gtk_widget_show(separator1);
	gtk_box_pack_start(GTK_BOX(hbox),separator1,FALSE,TRUE,5);

	map_label = gtk_label_new("Map:");
	gtk_widget_show(map_label);
	gtk_box_pack_start(GTK_BOX(hbox),map_label,FALSE,FALSE,5);

	map_combo = gtk_combo_new();
	gtk_widget_show(map_combo);
	gtk_box_pack_start(GTK_BOX(hbox),map_combo,FALSE,FALSE,5);
	gtk_container_set_border_width(GTK_CONTAINER(map_combo),5);
	map_combo_entry = GTK_COMBO(map_combo)->entry;
	gtk_widget_show(map_combo_entry);
	gtk_entry_set_editable(GTK_ENTRY(map_combo_entry),FALSE);
	gtk_widget_set_sensitive(map_combo_entry,FALSE);

	map_change_button = gtk_button_new_with_label ("Change");
	gtk_widget_show(map_change_button);
	gtk_box_pack_start(GTK_BOX(hbox),map_change_button,FALSE,FALSE,5);
	gtk_container_set_border_width(GTK_CONTAINER(map_change_button),3);
	gtk_signal_connect(GTK_OBJECT(map_change_button),"clicked",
		GTK_SIGNAL_FUNC(map_combo_entry_changed),NULL);

	separator2 = gtk_vseparator_new();
	gtk_widget_show(separator2);
	gtk_box_pack_start(GTK_BOX(hbox),separator2,FALSE,TRUE,5);

	latlon_label2 = gtk_label_new("Lat/Lon:");
	gtk_widget_show(latlon_label2);
	gtk_box_pack_start(GTK_BOX(hbox),latlon_label2,FALSE,FALSE,5);

	latlon_label = gtk_label_new("");
	gtk_widget_show(latlon_label);
	gtk_box_pack_start(GTK_BOX(hbox),latlon_label,FALSE,FALSE,5);


	// create vpane/drawarea
	vpaned = gtk_vpaned_new();
	gtk_widget_show(vpaned);
	gtk_box_pack_start(GTK_BOX(vbox),vpaned,TRUE,TRUE,0);

	scrolled_window = gtk_scrolled_window_new(NULL,NULL);
	gtk_widget_show (scrolled_window);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolled_window),
		GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
	gtk_paned_pack1(GTK_PANED(vpaned),scrolled_window,FALSE,TRUE);
	gtk_widget_set_usize(scrolled_window,800,400);
	
	drawing_area = gtk_drawing_area_new();
	gtk_widget_show(drawing_area);
	gtk_drawing_area_size(GTK_DRAWING_AREA (drawing_area), 792,392);
	gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
		(GtkSignalFunc) expose_event, NULL);
	gtk_signal_connect (GTK_OBJECT (drawing_area),
		"motion_notify_event" ,(GtkSignalFunc) on_mouse_move,NULL);
	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window),
		drawing_area);
	gtk_widget_set_events(drawing_area,GDK_POINTER_MOTION_MASK
                         | GDK_POINTER_MOTION_HINT_MASK);

	scrolled_window2 = gtk_scrolled_window_new(NULL,NULL);
	gtk_widget_show (scrolled_window2);
	gtk_paned_pack2(GTK_PANED(vpaned),scrolled_window2,TRUE,TRUE);
	
	trace_list = gtk_clist_new(5);
	gtk_widget_show(trace_list);
	gtk_container_add(GTK_CONTAINER(scrolled_window2),trace_list);
	gtk_clist_set_column_width(GTK_CLIST(trace_list),0,20);
	gtk_clist_set_column_width(GTK_CLIST(trace_list),1,110);
	gtk_clist_set_column_width(GTK_CLIST(trace_list),2,239);
	gtk_clist_set_column_width(GTK_CLIST(trace_list),3,314);
	gtk_clist_set_column_width(GTK_CLIST(trace_list),4,58);
	gtk_clist_column_titles_show(GTK_CLIST(trace_list));

	hop_label = gtk_label_new("Hop");
	gtk_widget_show(hop_label);
	gtk_clist_set_column_widget(GTK_CLIST(trace_list),0,hop_label);

	ip_label = gtk_label_new("IP");
	gtk_widget_show(ip_label);
	gtk_clist_set_column_widget(GTK_CLIST(trace_list),1,ip_label);

	dns_label = gtk_label_new("DNS");
	gtk_widget_show(dns_label);
	gtk_clist_set_column_widget(GTK_CLIST(trace_list),2,dns_label);

	location_label = gtk_label_new("Location");
	gtk_widget_show(location_label);
	gtk_clist_set_column_widget(GTK_CLIST(trace_list),3,location_label);

	rtt_label = gtk_label_new("RTT (ms)");
	gtk_widget_show(rtt_label);
	gtk_clist_set_column_widget(GTK_CLIST(trace_list),4,rtt_label);
	gtk_clist_column_titles_passive(GTK_CLIST(trace_list));

	status_bar = gtk_statusbar_new();
	gtk_widget_show(status_bar);
	gtk_box_pack_start(GTK_BOX(vbox),status_bar,FALSE,FALSE,0);
}

void create_options_window() {
        options_window = gtk_window_new (GTK_WINDOW_DIALOG);
        gtk_window_set_default_size (GTK_WINDOW(options_window),350,150);
        gtk_window_set_title (GTK_WINDOW(options_window),"Options");
        gtk_signal_connect (GTK_OBJECT(options_window), "destroy",
                GTK_SIGNAL_FUNC (generic_destroy), NULL);

	options_vbox = gtk_vbox_new(FALSE,0);
	gtk_widget_show (options_vbox);
	gtk_container_add(GTK_CONTAINER(options_window),options_vbox);

	// trace options notebook
	options_notebook = gtk_notebook_new();
	gtk_widget_show (options_notebook);
	gtk_container_add(GTK_CONTAINER(options_vbox),options_notebook);

	trace_options_vbox = gtk_vbox_new(FALSE,0);
	gtk_widget_show (trace_options_vbox);
	gtk_container_add(GTK_CONTAINER(options_notebook),trace_options_vbox);

	traceroute_options_label = gtk_label_new("Traceroute Options");
	gtk_widget_show (traceroute_options_label);
	gtk_box_pack_start(GTK_BOX(trace_options_vbox),traceroute_options_label,FALSE,FALSE,0);
	gtk_widget_set_usize(traceroute_options_label,-2,43);

	trace_options_hbox1 = gtk_hbox_new(FALSE,0);
	gtk_widget_show (trace_options_hbox1);
	gtk_box_pack_start(GTK_BOX(trace_options_vbox),trace_options_hbox1,FALSE,FALSE,0);
	gtk_widget_set_usize(trace_options_hbox1,-2,35);

	executable_label = gtk_label_new("Executable:");
	gtk_widget_show(executable_label);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox1),executable_label,FALSE,FALSE,0);

	trace_path_entry = gtk_entry_new();
	gtk_widget_show(trace_path_entry);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox1),trace_path_entry,FALSE,FALSE,5);
	gtk_widget_set_usize(trace_path_entry,201,-2);

	trace_path_button = gtk_button_new_with_label("Browse");
	gtk_widget_show(trace_path_button);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox1),trace_path_button,FALSE,FALSE,5);
	gtk_widget_set_usize(trace_path_button,65,23);
	gtk_container_set_border_width(GTK_CONTAINER(trace_path_button),7);
	gtk_signal_connect(GTK_OBJECT(trace_path_button),"clicked",
		GTK_SIGNAL_FUNC(trace_browse_button_clicked),NULL);
	
	trace_options_hbox2 = gtk_hbox_new(FALSE,0);
	gtk_widget_show (trace_options_hbox2);
	gtk_box_pack_start(GTK_BOX(trace_options_vbox),trace_options_hbox2,FALSE,FALSE,0);
	gtk_widget_set_usize(trace_options_hbox2,-2,35);

	max_ttl_label = gtk_label_new("Max TTL:");
	gtk_widget_show(max_ttl_label);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox2),max_ttl_label,FALSE,FALSE,5);
	
	max_ttl_spinbutton_adj = gtk_adjustment_new(30,1,50,1,10,10);
	max_ttl_spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(max_ttl_spinbutton_adj),1,0);
	gtk_widget_show (max_ttl_spinbutton);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox2),max_ttl_spinbutton,FALSE,FALSE,5);
	gtk_widget_set_usize(max_ttl_spinbutton,-2,22);

	timeout_label = gtk_label_new("Timeout:");
	gtk_widget_show(timeout_label);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox2),timeout_label,FALSE,FALSE,0);
	
	timeout_spinbutton_adj = gtk_adjustment_new(5,2,50,1,10,10);
	timeout_spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(timeout_spinbutton_adj),1,0);
	gtk_widget_show (timeout_spinbutton);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox2),timeout_spinbutton,FALSE,FALSE,5);
	gtk_widget_set_usize(timeout_spinbutton,-2,22);

	resolve_checkbox = gtk_check_button_new_with_label("Resolve name");
	gtk_widget_show (resolve_checkbox);
	gtk_box_pack_start(GTK_BOX(trace_options_hbox2),resolve_checkbox,FALSE,FALSE,5);

	notebook_trace_label = gtk_label_new("Traceroute");
	gtk_widget_show (notebook_trace_label);
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(options_notebook),gtk_notebook_get_nth_page(GTK_NOTEBOOK(options_notebook),0),notebook_trace_label);

	// map options notebook
	map_options_vbox = gtk_vbox_new(FALSE,0);
	gtk_widget_show (map_options_vbox);
	gtk_container_add(GTK_CONTAINER(options_notebook),map_options_vbox);

	map_options_label = gtk_label_new("Map Options");
	gtk_widget_show (map_options_label);
	gtk_box_pack_start(GTK_BOX(map_options_vbox),map_options_label,FALSE,FALSE,0);
	gtk_widget_set_usize(map_options_label,-2,43);

	map_options_hbox1 = gtk_hbox_new(FALSE,0);
	gtk_widget_show (map_options_hbox1);
	gtk_box_pack_start(GTK_BOX(map_options_vbox),map_options_hbox1,FALSE,FALSE,0);
	gtk_widget_set_usize(map_options_hbox1,-2,35);

	map_dir_path_label = gtk_label_new("Maps Dir:");
	gtk_widget_show(map_dir_path_label);
	gtk_box_pack_start(GTK_BOX(map_options_hbox1),map_dir_path_label,FALSE,FALSE,0);

	map_dir_path_entry = gtk_entry_new();
	gtk_widget_show(map_dir_path_entry);
	gtk_box_pack_start(GTK_BOX(map_options_hbox1),map_dir_path_entry,FALSE,FALSE,5);
	gtk_widget_set_usize(map_dir_path_entry,201,-2);

	map_dir_path_button = gtk_button_new_with_label("Browse");
	gtk_widget_show(map_dir_path_button);

	gtk_box_pack_start(GTK_BOX(map_options_hbox1),map_dir_path_button,FALSE,FALSE,5);
	gtk_widget_set_usize(map_dir_path_button,65,23);
	gtk_container_set_border_width(GTK_CONTAINER(map_dir_path_button),7);
	gtk_signal_connect(GTK_OBJECT(map_dir_path_button),"clicked",
		GTK_SIGNAL_FUNC(maps_browse_button_clicked),NULL);

	map_options_hbox2 = gtk_hbox_new(FALSE,0);
	gtk_widget_show (map_options_hbox2);
	gtk_box_pack_start(GTK_BOX(map_options_vbox),map_options_hbox2,FALSE,FALSE,0);
	gtk_widget_set_usize(map_options_hbox2,-2,35);

	start_map_label = gtk_label_new("Start map:");
	gtk_widget_show(start_map_label);
	gtk_box_pack_start(GTK_BOX(map_options_hbox2),start_map_label,FALSE,FALSE,0);

	start_map_combo = gtk_combo_new();
	gtk_widget_show(start_map_combo);
	gtk_box_pack_start(GTK_BOX(map_options_hbox2),start_map_combo,FALSE,FALSE,5);
	gtk_container_set_border_width(GTK_CONTAINER(start_map_combo),5);
	start_map_entry = GTK_COMBO(start_map_combo)->entry;
	gtk_widget_show(start_map_entry);
	gtk_entry_set_editable(GTK_ENTRY(map_combo_entry),FALSE);
	gtk_widget_set_sensitive(start_map_entry,FALSE);

	notebook_maps_label = gtk_label_new("Maps");
	gtk_widget_show (notebook_maps_label);
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(options_notebook),gtk_notebook_get_nth_page(GTK_NOTEBOOK(options_notebook),1),notebook_maps_label);

	// display options notebook
	display_options_vbox = gtk_vbox_new(FALSE,0);
	gtk_widget_show (display_options_vbox);
	gtk_container_add(GTK_CONTAINER(options_notebook),display_options_vbox);

	display_options_label = gtk_label_new("Display Options");
	gtk_widget_show (display_options_label);
	gtk_box_pack_start(GTK_BOX(display_options_vbox),display_options_label,FALSE,FALSE,0);
	gtk_widget_set_usize(display_options_label,-2,43);

	display_options_hbox1 = gtk_hbox_new(FALSE,0);
	gtk_widget_show (display_options_hbox1);
	gtk_box_pack_start(GTK_BOX(display_options_vbox),display_options_hbox1,FALSE,FALSE,0);
	gtk_widget_set_usize(display_options_hbox1,-2,35);

	display_color_label = gtk_label_new("Line color:");
	gtk_widget_show(display_color_label);
	gtk_box_pack_start(GTK_BOX(display_options_hbox1),display_color_label,FALSE,FALSE,0);

	display_color_label2 = gtk_event_box_new();
	gtk_widget_show(display_color_label2);
	gtk_box_pack_start(GTK_BOX(display_options_hbox1),display_color_label2,FALSE,FALSE,5);
	gtk_widget_set_usize(display_color_label2,30,20);

	display_color_select_button = gtk_button_new_with_label("Select");
	gtk_widget_show(display_color_select_button);
	gtk_box_pack_start(GTK_BOX(display_options_hbox1),display_color_select_button,FALSE,FALSE,5);
	gtk_widget_set_usize(display_color_select_button,65,23);
	gtk_container_set_border_width(GTK_CONTAINER(display_color_select_button),7);
	gtk_signal_connect(GTK_OBJECT(display_color_select_button),"clicked",
		GTK_SIGNAL_FUNC(display_color_select_clicked),NULL);
	
	line_width_label = gtk_label_new("Line Width:");
	gtk_widget_show(line_width_label);
	gtk_box_pack_start(GTK_BOX(display_options_hbox1),line_width_label,FALSE,FALSE,5);
	
	line_width_spinbutton_adj = gtk_adjustment_new(1,1,10,1,10,10);
	line_width_spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(line_width_spinbutton_adj),1,0);
	gtk_widget_show (line_width_spinbutton);
	gtk_box_pack_start(GTK_BOX(display_options_hbox1),line_width_spinbutton,FALSE,FALSE,5);
	gtk_widget_set_usize(line_width_spinbutton,-2,22);

	notebook_display_label = gtk_label_new("Display");
	gtk_widget_show (notebook_display_label);
	gtk_notebook_set_tab_label(GTK_NOTEBOOK(options_notebook),gtk_notebook_get_nth_page(GTK_NOTEBOOK(options_notebook),2),notebook_display_label);

	// button box
	options_button_box = gtk_hbox_new(FALSE,0);
	gtk_widget_show (options_button_box);
	gtk_box_pack_start(GTK_BOX(options_vbox),options_button_box,FALSE,FALSE,0);
	gtk_widget_set_usize(options_button_box,-2,35);

	options_apply_button = gtk_button_new_with_label("Apply");
	gtk_widget_show(options_apply_button);
	gtk_box_pack_start(GTK_BOX(options_button_box),options_apply_button,TRUE,FALSE,0);
	gtk_container_set_border_width(GTK_CONTAINER(options_apply_button),5);
	gtk_signal_connect(GTK_OBJECT(options_apply_button),"clicked",
		GTK_SIGNAL_FUNC(options_apply_button_clicked),NULL);

	options_cancel_button = gtk_button_new_with_label("Cancel");
	gtk_widget_show(options_cancel_button);
	gtk_box_pack_start(GTK_BOX(options_button_box),options_cancel_button,TRUE,FALSE,0);
	gtk_container_set_border_width(GTK_CONTAINER(options_cancel_button),5);
	gtk_signal_connect(GTK_OBJECT(options_cancel_button),"clicked",
		GTK_SIGNAL_FUNC(options_cancel_button_clicked),NULL);
}

void create_trace_select_dialog() {
	trace_selection_dialog = gtk_file_selection_new("Select file");
	gtk_container_set_border_width (GTK_CONTAINER(trace_selection_dialog),10);
	trace_select_ok_button = GTK_FILE_SELECTION(trace_selection_dialog)->ok_button;
	gtk_widget_show (trace_select_ok_button);
	gtk_signal_connect(GTK_OBJECT(trace_select_ok_button),"clicked",
		GTK_SIGNAL_FUNC(browse_ok_button_clicked),NULL);
	trace_select_cancel_button = GTK_FILE_SELECTION(trace_selection_dialog)->cancel_button;
	gtk_widget_show (trace_select_cancel_button);	
	gtk_signal_connect(GTK_OBJECT(trace_select_cancel_button),"clicked",
		GTK_SIGNAL_FUNC(browse_cancel_button_clicked),NULL);
}

void create_about_window() {
        about_window = gtk_window_new (GTK_WINDOW_DIALOG);
        gtk_window_set_default_size (GTK_WINDOW(about_window),150,100);
        gtk_window_set_title (GTK_WINDOW(about_window),"About GeoTrace");
        gtk_signal_connect (GTK_OBJECT(about_window), "destroy",
                GTK_SIGNAL_FUNC (generic_destroy), NULL);
        about_label = gtk_label_new(ABOUT_STRING);
        gtk_widget_show(about_label);
        gtk_container_add(GTK_CONTAINER(about_window),about_label);
}

void create_popup_window() {
        popup_window = gtk_window_new (GTK_WINDOW_DIALOG);
        gtk_window_set_default_size (GTK_WINDOW(popup_window),150,50);
        gtk_window_set_title (GTK_WINDOW(popup_window),"Warning");
        gtk_signal_connect (GTK_OBJECT(popup_window), "destroy",
                GTK_SIGNAL_FUNC (generic_destroy), NULL); 
        popup_label = gtk_label_new(popup_msg);
        gtk_widget_show(popup_label);
        gtk_container_add(GTK_CONTAINER(popup_window),popup_label);
}

void create_color_select_dialog() {
	color_select_dialog = gtk_color_selection_dialog_new("Select Color");

	color_select_ok_button = GTK_COLOR_SELECTION_DIALOG(color_select_dialog)->ok_button;
	gtk_widget_show(color_select_ok_button);

	color_select_cancel_button = GTK_COLOR_SELECTION_DIALOG(color_select_dialog)->cancel_button;
	gtk_widget_show(color_select_cancel_button);

	gtk_signal_connect (GTK_OBJECT(color_select_dialog),"destroy",
		GTK_SIGNAL_FUNC (generic_destroy), NULL);
	gtk_signal_connect (GTK_OBJECT(color_select_cancel_button),"clicked",
		GTK_SIGNAL_FUNC (color_select_destroy), NULL);
	gtk_signal_connect (GTK_OBJECT(color_select_ok_button),"clicked",
		GTK_SIGNAL_FUNC (color_select_ok_clicked), NULL);

	gtk_widget_show (color_select_dialog);
}


syntax highlighted by Code2HTML, v. 0.9.1