diff -Nur -Xfreeciv/diff_ignore freeciv/client/gui-gtk/cityrep.c test-cityrep2/client/gui-gtk/cityrep.c --- freeciv/client/gui-gtk/cityrep.c Mon Feb 25 18:35:38 2002 +++ test-cityrep2/client/gui-gtk/cityrep.c Wed Mar 13 23:07:58 2002 @@ -283,48 +283,56 @@ /**************************************************************** ... *****************************************************************/ -static void -append_impr_or_unit_to_menu(GtkWidget *menu, - gboolean change_prod, - gboolean append_improvements, - gboolean append_units, - TestCityFunc test_func) +static void append_impr_or_unit_to_menu(GtkWidget *menu, char *label, + gboolean change_prod, + gboolean append_improvements, + gboolean append_units, + gboolean append_wonders, + TestCityFunc test_func) { + GtkWidget *item = gtk_menu_item_new_with_label(label); + GtkWidget *submenu = gtk_menu_new(); + + gtk_menu_append(GTK_MENU(menu), item); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); + if (append_improvements) { /* Add all buildings */ - append_impr_or_unit_to_menu_sub(menu, _("No Buildings Available"), + append_impr_or_unit_to_menu_sub(submenu, _("No Buildings Available"), FALSE, FALSE, change_prod, (gboolean(*)(struct city *, gint)) test_func, select_impr_or_unit_callback); /* Add a separator */ - gtk_menu_append(GTK_MENU(menu), gtk_menu_item_new()); + if (append_units || append_wonders) { + gtk_menu_append(GTK_MENU(submenu), gtk_menu_item_new()); + } } if (append_units) { /* Add all units */ - append_impr_or_unit_to_menu_sub(menu, _("No Units Available"), + append_impr_or_unit_to_menu_sub(submenu, _("No Units Available"), TRUE, FALSE, change_prod, test_func, select_impr_or_unit_callback); } - if (append_improvements) { + if (append_wonders) { /* Add a separator */ if (append_units) { - gtk_menu_append(GTK_MENU(menu), gtk_menu_item_new()); + gtk_menu_append(GTK_MENU(submenu), gtk_menu_item_new()); } /* Add all wonders */ - append_impr_or_unit_to_menu_sub(menu, _("No Wonders Available"), + append_impr_or_unit_to_menu_sub(submenu, _("No Wonders Available"), FALSE, TRUE, change_prod, (gboolean(*)(struct city *, gint)) test_func, select_impr_or_unit_callback); } - gtk_object_set_data(GTK_OBJECT(menu), "freeciv_test_func", test_func); - gtk_object_set_data(GTK_OBJECT(menu), "freeciv_change_prod", + gtk_object_set_data(GTK_OBJECT(submenu), "freeciv_test_func", test_func); + gtk_object_set_data(GTK_OBJECT(submenu), "freeciv_change_prod", GINT_TO_POINTER(change_prod)); } @@ -478,8 +486,7 @@ /**************************************************************** ... *****************************************************************/ -static gint -city_change_callback(GtkWidget *w, GdkEvent *event, gpointer data) +static gint city_change_callback(GtkWidget *w, GdkEvent *event, gpointer data) { static GtkWidget* menu = NULL; GtkWidget* submenu = NULL; @@ -490,7 +497,7 @@ if ( event->type != GDK_BUTTON_PRESS ) return FALSE; - /* This migth happen, whenever a selection is still in progress, while + /* This might happen, whenever a selection is still in progress, while "Changed" is pressed (e.g. when holding the shift key) */ if(!GTK_CLIST(city_list)->selection) return FALSE; @@ -498,24 +505,27 @@ if (menu) gtk_widget_destroy(menu); - menu=gtk_menu_new(); + menu = gtk_menu_new(); - item=gtk_menu_item_new_with_label( _("CMA") ); + append_impr_or_unit_to_menu(menu, _("Buildings"), TRUE, TRUE, FALSE, FALSE, + city_can_build_impr_or_unit); + + append_impr_or_unit_to_menu(menu, _("Units"), TRUE, FALSE, TRUE, FALSE, + city_can_build_impr_or_unit); + + append_impr_or_unit_to_menu(menu, _("Wonders"), TRUE, FALSE, FALSE, TRUE, + city_can_build_impr_or_unit); + + item = gtk_menu_item_new_with_label(_("CMA")); gtk_menu_append(GTK_MENU(menu), item); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); append_cma_to_menu(submenu, TRUE); - /* Add a separator */ - gtk_menu_append(GTK_MENU(menu),gtk_menu_item_new ()); - - append_impr_or_unit_to_menu(menu, TRUE, TRUE, TRUE, - city_can_build_impr_or_unit); - gtk_widget_show_all(menu); - gtk_menu_popup(GTK_MENU(menu), - NULL,NULL,NULL,NULL,bevent->button,bevent->time); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, + bevent->button, bevent->time); return TRUE; } @@ -818,37 +828,29 @@ /* Add a separator */ gtk_menu_append(GTK_MENU(menu),gtk_menu_item_new ()); - item=gtk_menu_item_new_with_label( _("CMA") ); - gtk_menu_append(GTK_MENU(menu),item); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - append_cma_to_menu(submenu, FALSE); + append_impr_or_unit_to_menu(menu, _("Supported Units"), FALSE, FALSE, + TRUE, FALSE, city_unit_supported); - item=gtk_menu_item_new_with_label( _("Supported Units") ); - gtk_menu_append(GTK_MENU(menu),item); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - append_impr_or_unit_to_menu(submenu, FALSE, FALSE, TRUE, city_unit_supported); + append_impr_or_unit_to_menu(menu, _("Units Present"), FALSE, FALSE, + TRUE, FALSE, city_unit_present); - item=gtk_menu_item_new_with_label( _("Units Present") ); - gtk_menu_append(GTK_MENU(menu),item); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - append_impr_or_unit_to_menu(submenu, FALSE, FALSE, TRUE, city_unit_present); + append_impr_or_unit_to_menu(menu, _("Improvements in City"), FALSE, TRUE, + FALSE, TRUE, city_got_building); - item=gtk_menu_item_new_with_label( _("Available To Build") ); - gtk_menu_append(GTK_MENU(menu),item); - submenu = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - append_impr_or_unit_to_menu(submenu, FALSE, TRUE, TRUE, - city_can_build_impr_or_unit); + append_impr_or_unit_to_menu(menu, _("Available Buildings"), FALSE, TRUE, + FALSE, FALSE, city_can_build_impr_or_unit); - item=gtk_menu_item_new_with_label( _("Improvements in City") ); + append_impr_or_unit_to_menu(menu, _("Available Units"), FALSE, FALSE, + TRUE, FALSE, city_can_build_impr_or_unit); + + append_impr_or_unit_to_menu(menu, _("Available Wonders"), FALSE, FALSE, + FALSE, TRUE, city_can_build_impr_or_unit); + + item=gtk_menu_item_new_with_label( _("CMA") ); gtk_menu_append(GTK_MENU(menu),item); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - append_impr_or_unit_to_menu(submenu, FALSE, TRUE, FALSE, - city_got_building); + append_cma_to_menu(submenu, FALSE); gtk_widget_show_all(menu);