--- freeciv_cvs/client/gui-gtk/dialogs.c Mon Feb 11 10:37:49 2002 +++ freeciv/client/gui-gtk/dialogs.c Sun Feb 24 05:06:52 2002 @@ -53,14 +53,13 @@ /******************************************************************/ static GtkWidget *races_dialog_shell=NULL; -static GtkWidget *races_toggles_form; +static GtkWidget *races_list; static GtkWidget *races_sex_toggles_form; static GtkWidget *city_style_toggles_form; static GtkWidget *races_ok_command; /* ok button */ static GtkWidget *races_disc_command=NULL; /* disc button */ static GtkWidget *races_quit_command=NULL; /* quit button */ -static GtkWidget **races_toggles=NULL, /* toggle race */ - *races_sex_toggles[2], /* Male/Female */ +static GtkWidget *races_sex_toggles[2], /* Male/Female */ **city_style_toggles = NULL, *races_name; /* leader name */ static GList *leader_strings = NULL; @@ -101,8 +100,11 @@ static int city_style_get_current(void); static void create_races_dialog (void); +static void select_random_race(void); +static void select_random_leader(void); + +static void races_list_callback(GtkCList *clist, gint row, gint column); static void races_buttons_callback ( GtkWidget *w, gpointer data ); -static void races_toggles_callback(GtkWidget * w, gpointer race_id_p); static void races_sex_toggles_callback ( GtkWidget *w, gpointer data ); static void races_name_callback ( GtkWidget *w, gpointer data ); static void city_style_toggles_callback ( GtkWidget *w, gpointer data ); @@ -1827,6 +1829,9 @@ create_races_dialog (); gtk_widget_show (races_dialog_shell); + + select_random_race(); + select_random_leader(); } /**************************************************************** @@ -1890,18 +1895,19 @@ *****************************************************************/ static void select_random_race(void) { + int row; + /* try to find a free nation */ while(TRUE) { selected_nation = myrand(game.playable_nation_count); - if(GTK_WIDGET_SENSITIVE(races_toggles[g_list_index(sorted_races_list, - GINT_TO_POINTER(selected_nation))])) + row = g_list_index(sorted_races_list, GINT_TO_POINTER(selected_nation)); + if (gtk_clist_get_selectable(GTK_CLIST(races_list), row)) break; } /* initialize nation toggle array */ - gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON( - races_toggles[g_list_index(sorted_races_list, - GINT_TO_POINTER(selected_nation))] ), TRUE ); + gtk_clist_select_row(GTK_CLIST(races_list), row, 0); + gtk_clist_moveto(GTK_CLIST(races_list), row, 0, 0.0, 0.0); /* initialize city style */ selected_city_style = @@ -1917,10 +1923,9 @@ { int per_row = 5; int i; - GSList *group = NULL; GSList *sgroup = NULL; GSList *cgroup = NULL; - GtkWidget *f, *fs, *fa; + GtkWidget *f, *fs, *fa, *scrolled; races_dialog_shell = gtk_dialog_new(); gtk_signal_connect( GTK_OBJECT(races_dialog_shell),"delete_event", @@ -1931,30 +1936,46 @@ f = gtk_frame_new(_("Select nation and name")); gtk_box_pack_start( GTK_BOX( GTK_DIALOG( races_dialog_shell )->vbox ), - f, FALSE, FALSE, 0 ); - - /* ------- nation name toggles ------- */ + f, TRUE, TRUE, 0 ); - races_toggles_form = - gtk_table_new( per_row, ((game.playable_nation_count-1)/per_row)+1, FALSE ); - gtk_container_add( GTK_CONTAINER( f ), races_toggles_form ); + /* ------- nation name list ------- */ - free(races_toggles); - races_toggles = fc_calloc( game.playable_nation_count, sizeof(GtkWidget*) ); + scrolled = gtk_scrolled_window_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(f), scrolled); + gtk_widget_set_usize(scrolled, -1, 200); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); for(i=0; iflag_sprite; + + row = gtk_clist_append(GTK_CLIST(races_list), txt); + gtk_clist_set_pixtext(GTK_CLIST(races_list), row, 0, + nation->name, 0, s->pixmap, s->mask); + + gtk_clist_set_row_height(GTK_CLIST(races_list), s->height); } + gtk_clist_thaw(GTK_CLIST(races_list)); + /* ------- nation leader combo ------- */ @@ -2039,11 +2060,8 @@ races_quit_command, TRUE, TRUE, 0 ); /* ------- connect callback functions ------- */ - - for(i=0; ivbox ); @@ -2099,13 +2114,15 @@ for(i=0; i>=1; } @@ -2114,13 +2131,14 @@ for(i=32; i>=1; } @@ -2144,9 +2162,12 @@ /************************************************************************** ... **************************************************************************/ -static void races_toggles_callback( GtkWidget *w, gpointer race_id_p ) +static void races_list_callback(GtkCList *clist, gint row, gint column) { - selected_nation = GPOINTER_TO_INT(race_id_p); + if (!gtk_clist_get_selectable(GTK_CLIST(races_list), row)) + return; + + selected_nation = GPOINTER_TO_INT(g_list_nth_data(sorted_races_list, row)); select_random_leader();