Index: client/gui-gtk/helpdlg.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/gui-gtk/helpdlg.c,v retrieving revision 1.28 diff -u -r1.28 helpdlg.c --- helpdlg.c 2000/01/02 11:55:27 1.28 +++ helpdlg.c 2000/01/29 12:26:05 @@ -119,6 +119,12 @@ } return; } +/**************************************************************** +tells whether help dialog is already active +*****************************************************************/ +int popup_help_dialog_active() { + return help_dialog_shell?1:0; +} /**************************************************************** ... @@ -335,7 +341,7 @@ style = gtk_style_new( ); - style->fg[GTK_STATE_NORMAL] = *colors_standard[COLOR_STD_RED]; + /*style->fg[GTK_STATE_NORMAL] = *colors_standard[COLOR_STD_RED];*/ help_itable = gtk_table_new(6, 1, FALSE); Index: client/gui-gtk/repodlgs.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/gui-gtk/repodlgs.c,v retrieving revision 1.23 diff -u -r1.23 repodlgs.c --- repodlgs.c 2000/01/02 11:55:28 1.23 +++ repodlgs.c 2000/01/29 12:26:10 @@ -48,10 +48,11 @@ void create_science_dialog(int make_modal); -void science_close_callback(GtkWidget *widget, gpointer data); -void science_help_callback(GtkWidget *w, gint row, gint column); -void science_change_callback(GtkWidget *widget, gpointer data); -void science_goal_callback(GtkWidget *widget, gpointer data); +static void science_close_callback(GtkWidget *widget, gpointer data); +static void science_help_callback(GtkWidget *w, gint row, gint column); +static void science_help_button_callback(GtkWidget * w); +static void science_change_callback(GtkWidget *widget, gpointer data); +static void science_goal_callback(GtkWidget *widget, gpointer data); /******************************************************************/ @@ -59,7 +60,7 @@ GtkWidget *science_label; GtkWidget *science_current_label, *science_goal_label; GtkWidget *science_change_menu_button, *science_goal_menu_button; -GtkWidget *science_list, *science_help_toggle; +GtkWidget *science_list, *science_help_button; int science_dialog_shell_is_modal; int science_dialog_popupmenu; GtkWidget *popupmenu, *goalmenu; @@ -207,8 +208,8 @@ gtk_box_pack_start( GTK_BOX( hbox ), science_current_label,TRUE, FALSE, 0 ); gtk_widget_set_usize(science_current_label, 0,25); - science_help_toggle = gtk_check_button_new_with_label (_("Help")); - gtk_box_pack_start( GTK_BOX( hbox ), science_help_toggle, TRUE, FALSE, 0 ); + w = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, FALSE, 0); frame = gtk_frame_new( _("Goal")); gtk_box_pack_start( GTK_BOX( GTK_DIALOG(science_dialog_shell)->vbox ), @@ -227,8 +228,8 @@ gtk_box_pack_start( GTK_BOX( hbox ), science_goal_label, TRUE, FALSE, 0 ); gtk_widget_set_usize(science_goal_label, 0,25); - w = gtk_label_new(""); - gtk_box_pack_start( GTK_BOX( hbox ), w,TRUE, FALSE, 0 ); + science_help_button = gtk_button_new_with_label(_("Help")); + gtk_box_pack_start(GTK_BOX(hbox), science_help_button, TRUE, FALSE, 0); science_list = gtk_clist_new(4); gtk_box_pack_start( GTK_BOX( GTK_DIALOG(science_dialog_shell)->vbox ), @@ -246,6 +247,9 @@ gtk_signal_connect(GTK_OBJECT(science_list), "select_row", GTK_SIGNAL_FUNC(science_help_callback), NULL); + gtk_signal_connect(GTK_OBJECT(science_help_button), "clicked", + GTK_SIGNAL_FUNC(science_help_button_callback), NULL); + gtk_widget_show_all( GTK_DIALOG(science_dialog_shell)->vbox ); gtk_widget_show_all( GTK_DIALOG(science_dialog_shell)->action_area ); @@ -261,56 +265,49 @@ /**************************************************************** ... *****************************************************************/ -void science_change_callback(GtkWidget *widget, gpointer data) +void science_change_callback(GtkWidget * widget, gpointer data) { char text[512]; struct packet_player_request packet; size_t to; + int turns; - to=(size_t)data; + to = (size_t) data; - if (GTK_TOGGLE_BUTTON(science_help_toggle)->active) { - popup_help_dialog_typed(advances[to].name, HELP_TECH); - /* Following is to make the menu go back to the current research; - * there may be a better way to do this? --dwp */ - 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); + if (popup_help_dialog_active()) + popup_help_dialog_typed(advances[to].name, HELP_TECH); - packet.tech=to; - send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RESEARCH); - } + turns = tech_turns(game.player_ptr); + my_snprintf(text, sizeof(text), + turns == 1 ? _("%d/%d %d turn") : _("%d/%d %d turns"), + game.player_ptr->research.researched, + research_time(game.player_ptr), + turns); + gtk_set_label(science_current_label, text); + + packet.tech = to; + send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_RESEARCH); } /**************************************************************** ... *****************************************************************/ -void science_goal_callback(GtkWidget *widget, gpointer data) +void science_goal_callback(GtkWidget * widget, gpointer data) { char text[512]; struct packet_player_request packet; size_t to; - to=(size_t)data; + to = (size_t) data; - if (GTK_TOGGLE_BUTTON(science_help_toggle)->active) { + if (popup_help_dialog_active()) popup_help_dialog_typed(advances[to].name, HELP_TECH); - /* Following is to make the menu go back to the current goal; - * there may be a better way to do this? --dwp */ - science_dialog_update(); - } - else { - my_snprintf(text, sizeof(text), _("(%d steps)"), - tech_goal_turns(game.player_ptr, to)); - gtk_set_label(science_goal_label,text); - packet.tech=to; - send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_TECH_GOAL); - } + my_snprintf(text, sizeof(text), _("(%d steps)"), + tech_goal_turns(game.player_ptr, to)); + gtk_set_label(science_goal_label, text); + packet.tech = to; + send_packet_player_request(&aconnection, &packet, PACKET_PLAYER_TECH_GOAL); } /**************************************************************** @@ -326,22 +323,29 @@ } /**************************************************************** -... +opens help dialog to current goal *****************************************************************/ +void science_help_button_callback(GtkWidget * w) +{ + GtkWidget *m = gtk_option_menu_get_menu(GTK_OPTION_MENU(science_goal_menu_button)); + GtkWidget *a = gtk_menu_get_active(GTK_MENU(m)); + gchar *s = gtk_widget_get_name(a); + popup_help_dialog_typed(s, HELP_TECH); +} +/**************************************************************** +... +*****************************************************************/ void science_help_callback(GtkWidget *w, gint row, gint column) { char *s; gtk_clist_get_text(GTK_CLIST(science_list), row, column, &s); - if (GTK_TOGGLE_BUTTON(science_help_toggle)->active) - { - if (*s != '\0') - popup_help_dialog_typed(s, HELP_TECH); - else - popup_help_dialog_string(HELP_TECHS_ITEM); - } + if (*s != '\0') + popup_help_dialog_typed(s, HELP_TECH); + else + popup_help_dialog_string(HELP_TECHS_ITEM); } /**************************************************************** @@ -355,6 +359,7 @@ char *report_title; static char *row [4]; GtkWidget *item; + int turns; if(delay_report_update) return; report_title=get_report_title(_("Science Advisor")); @@ -391,9 +396,13 @@ gtk_widget_destroy(popupmenu); popupmenu = gtk_menu_new(); - my_snprintf(text, sizeof(text), "%d/%d", - game.player_ptr->research.researched, - research_time(game.player_ptr)); + turns = tech_turns(game.player_ptr); + my_snprintf(text, sizeof(text), + turns == 1 ? _("%d/%d %d turn") : _("%d/%d %d turns"), + game.player_ptr->research.researched, + research_time(game.player_ptr), + turns); + gtk_set_label(science_current_label,text); hist=0; @@ -452,6 +461,7 @@ hist=j; item = gtk_menu_item_new_with_label(advances[i].name); + gtk_widget_set_name(item, advances[i].name); gtk_menu_append(GTK_MENU(goalmenu), item); gtk_signal_connect(GTK_OBJECT(item), "activate", Index: client/include/helpdlg_g.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/include/helpdlg_g.h,v retrieving revision 1.5 diff -u -r1.5 helpdlg_g.h --- helpdlg_g.h 1999/12/27 14:09:02 1.5 +++ helpdlg_g.h 2000/01/29 12:26:11 @@ -20,6 +20,7 @@ void popup_help_dialog(int item); void popup_help_dialog_string(char *item); void popup_help_dialog_typed(char *item, enum help_page_type); +int popup_help_dialog_active(); void popdown_help_dialog(void); #define HELP_PLAYING_ITEM "Strategy and tactics" Index: common/tech.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/common/tech.c,v retrieving revision 1.21 diff -u -r1.21 tech.c --- tech.c 2000/01/07 02:12:29 1.21 +++ tech.c 2000/01/29 12:26:13 @@ -107,6 +107,21 @@ return res; } +/************************************************************************** +returns the number of turns to finish currently researched tech. +**************************************************************************/ +int tech_turns(struct player *plr) +{ + int bulbs_left = research_time(plr) - + plr->research.researched; + int science = 0; + + city_list_iterate(plr->cities, pcity) { + science += pcity->science_total; + } city_list_iterate_end; + + return bulbs_left / science + (bulbs_left % science ? 1 : 0); +} /************************************************************************** ...don't use this function directly, call get_next_tech instead. Index: common/tech.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/common/tech.h,v retrieving revision 1.17 diff -u -r1.17 tech.h --- tech.h 2000/01/07 02:04:44 1.17 +++ tech.h 2000/01/29 12:26:13 @@ -71,6 +71,7 @@ void set_invention(struct player *plr, int tech, int value); void update_research(struct player *plr); int tech_goal_turns(struct player *plr, int goal); +int tech_turns(struct player *plr); int get_next_tech(struct player *plr, int goal); int tech_exists(Tech_Type_id id);