diff -u -X/home/dzinsli/source/freeciv-patches/no.freeciv -r /home/dzinsli/source/freeciv-cvs /home/dzinsli/source/freeciv diff -u -X/home/dzinsli/source/freeciv-patches/no.freeciv -r /home/dzinsli/source/freeciv-cvs/client/gui-gtk/gamedlgs.c /home/dzinsli/source/freeciv/client/gui-gtk/gamedlgs.c --- /home/dzinsli/source/freeciv-cvs/client/gui-gtk/gamedlgs.c Sun Jan 2 12:55:26 2000 +++ /home/dzinsli/source/freeciv/client/gui-gtk/gamedlgs.c Wed Jan 26 21:24:14 2000 @@ -47,6 +47,7 @@ /******************************************************************/ GtkWidget *rates_dialog_shell; GtkWidget *rates_gov_label; +GtkWidget *rates_science_label; GtkWidget *rates_tax_toggle, *rates_lux_toggle, *rates_sci_toggle; GtkWidget *rates_tax_label, *rates_lux_label, *rates_sci_label; GtkObject *rates_tax_adj, *rates_lux_adj, *rates_sci_adj; @@ -55,7 +56,7 @@ /******************************************************************/ int rates_tax_value, rates_lux_value, rates_sci_value; - +int rates_old_tax_value, rates_old_lux_value, rates_old_sci_value; void rates_changed_callback(GtkAdjustment *adj); @@ -167,7 +168,10 @@ **************************************************************************/ void rates_changed_callback(GtkAdjustment *adj) { + char buf[64]; int percent=adj->value; + int turns; + struct packet_player_request packet; if(adj==GTK_ADJUSTMENT(rates_tax_adj)) { int tax_value; @@ -190,6 +194,19 @@ sci_value=MIN(sci_value, 100); rates_set_values(rates_tax_value,0, rates_lux_value,0, sci_value,1); } + + turns = turns_to_research (game.player_ptr); + my_snprintf(buf, sizeof(buf), turns == 1 ? _("Discovery every turn") : + _("Discovery every %d turns"), + turns); + + gtk_set_label(rates_science_label, buf); + + packet.tax=rates_tax_value; + packet.science=rates_sci_value; + packet.luxury=rates_lux_value; + send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RATES); + } @@ -198,15 +215,9 @@ **************************************************************************/ static void rates_ok_command_callback(GtkWidget *widget, gpointer data) { - struct packet_player_request packet; - gtk_widget_set_sensitive(toplevel, TRUE); gtk_widget_destroy(rates_dialog_shell); - packet.tax=rates_tax_value; - packet.science=rates_sci_value; - packet.luxury=rates_lux_value; - send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RATES); } @@ -215,12 +226,20 @@ **************************************************************************/ static void rates_cancel_command_callback(GtkWidget *widget, gpointer data) { + struct packet_player_request packet; + gtk_widget_set_sensitive(toplevel, TRUE); gtk_widget_destroy(rates_dialog_shell); + + packet.tax=rates_old_tax_value; + packet.science=rates_old_sci_value; + packet.luxury=rates_old_lux_value; + send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RATES); } + /**************************************************************** ... *****************************************************************/ @@ -243,6 +262,9 @@ rates_gov_label = gtk_label_new(""); gtk_box_pack_start( GTK_BOX( GTK_DIALOG( rates_dialog_shell )->vbox ), rates_gov_label, TRUE, TRUE, 5 ); + rates_science_label = gtk_label_new(""); + gtk_box_pack_start( GTK_BOX( GTK_DIALOG( rates_dialog_shell )->vbox ), rates_science_label, TRUE, TRUE, 5 ); + frame = gtk_frame_new( _("Tax") ); gtk_box_pack_start( GTK_BOX( GTK_DIALOG( rates_dialog_shell )->vbox ), frame, TRUE, TRUE, 5 ); @@ -342,6 +364,11 @@ rates_set_values( game.player_ptr->economic.tax, 0, game.player_ptr->economic.luxury, 0, game.player_ptr->economic.science, 0 ); + + rates_old_tax_value = game.player_ptr->economic.tax; + rates_old_sci_value = game.player_ptr->economic.science; + rates_old_lux_value = game.player_ptr->economic.luxury; + return; } @@ -354,6 +381,7 @@ void popup_rates_dialog( void ) { char buf[64]; + int turns = 0; gtk_widget_set_sensitive(toplevel, FALSE ); create_rates_dialog(); @@ -362,6 +390,13 @@ get_government_name(game.player_ptr->government), get_government_max_rate(game.player_ptr->government)); gtk_set_label(rates_gov_label, buf); + + turns = turns_to_research (game.player_ptr); + my_snprintf(buf, sizeof(buf), turns == 1 ? _("Discovery every turn") : + _("Discovery every %d turns"), + turns); + + gtk_set_label(rates_science_label, buf); gtk_widget_show( rates_dialog_shell ); } diff -u -X/home/dzinsli/source/freeciv-patches/no.freeciv -r /home/dzinsli/source/freeciv-cvs/client/gui-gtk/repodlgs.c /home/dzinsli/source/freeciv/client/gui-gtk/repodlgs.c --- /home/dzinsli/source/freeciv-cvs/client/gui-gtk/repodlgs.c Sun Jan 2 12:55:28 2000 +++ /home/dzinsli/source/freeciv/client/gui-gtk/repodlgs.c Tue Jan 25 23:02:22 2000 @@ -276,13 +276,15 @@ science_dialog_update(); } else { - my_snprintf(text, sizeof(text), "%d/%d", - game.player_ptr->research.researched, - research_time(game.player_ptr)); - gtk_set_label(science_current_label,text); - - packet.tech=to; - send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RESEARCH); + my_snprintf(text, sizeof(text), _("%d/%d %d turns per research"), + game.player_ptr->research.researched, + research_time(game.player_ptr), + turns_to_research (game.player_ptr)); + + gtk_set_label(science_current_label,text); + + packet.tech=to; + send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RESEARCH); } } @@ -391,9 +393,10 @@ gtk_widget_destroy(popupmenu); popupmenu = gtk_menu_new(); - my_snprintf(text, sizeof(text), "%d/%d", + my_snprintf(text, sizeof(text), _("%d/%d %d turns per research"), game.player_ptr->research.researched, - research_time(game.player_ptr)); + research_time(game.player_ptr), + turns_to_research (game.player_ptr)); gtk_set_label(science_current_label,text); hist=0; diff -u -X/home/dzinsli/source/freeciv-patches/no.freeciv -r /home/dzinsli/source/freeciv-cvs/common/tech.c /home/dzinsli/source/freeciv/common/tech.c --- /home/dzinsli/source/freeciv-cvs/common/tech.c Wed Jan 12 19:08:09 2000 +++ /home/dzinsli/source/freeciv/common/tech.c Tue Jan 25 22:47:04 2000 @@ -213,3 +213,20 @@ return A_LAST; } +/************************************************************************** + Returns number of turns to complete a research +**************************************************************************/ +int turns_to_research ( struct player *pplayer) { + + double res = 0; + + city_list_iterate(pplayer->cities, pcity) + res += pcity->science_total; + city_list_iterate_end; + + if (res <= 0) + return 999; + + return ((research_time(pplayer) + res - 1) / res); + +} diff -u -X/home/dzinsli/source/freeciv-patches/no.freeciv -r /home/dzinsli/source/freeciv-cvs/common/tech.h /home/dzinsli/source/freeciv/common/tech.h --- /home/dzinsli/source/freeciv-cvs/common/tech.h Wed Jan 12 19:08:09 2000 +++ /home/dzinsli/source/freeciv/common/tech.h Tue Jan 25 20:43:02 2000 @@ -80,7 +80,7 @@ enum tech_flag_id tech_flag_from_str(char *s); int find_tech_by_flag( int index, int flag ); - +int turns_to_research ( struct player *pplayer); extern struct advance advances[]; #endif /* FC__TECH_H */