Index: client/options.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/options.c,v retrieving revision 1.51 diff -u -r1.51 options.c --- client/options.c 2002/03/05 15:46:20 1.51 +++ client/options.c 2002/03/06 16:51:35 @@ -51,25 +51,26 @@ bool auto_turn_done = FALSE; bool meta_accelerators = TRUE; -#define GEN_OPTION(name, desc, type) { #name, desc, type, &name, NULL } +#define GEN_INT_OPTION(name, desc) { #name, desc, COT_BOOL, &name, NULL, NULL } +#define GEN_BOOL_OPTION(name, desc) { #name, desc, COT_INT, NULL, &name, NULL } #define GEN_OPTION_TERMINATOR { NULL, NULL, COT_BOOL, NULL, NULL } client_option options[] = { - GEN_OPTION(solid_color_behind_units, N_("Solid unit background color"), COT_BOOL), - GEN_OPTION(sound_bell_at_new_turn, N_("Sound bell at new turn"), COT_BOOL), - GEN_OPTION(smooth_move_units, N_("Smooth unit moves"), COT_BOOL), - GEN_OPTION(smooth_move_unit_steps, N_("Smooth unit move steps"), COT_INT), - GEN_OPTION(do_combat_animation, N_("Show combat animation"), COT_BOOL), - GEN_OPTION(ai_popup_windows, N_("Popup dialogs in AI Mode"), COT_BOOL), - GEN_OPTION(ai_manual_turn_done, N_("Manual Turn Done in AI Mode"), COT_BOOL), - GEN_OPTION(auto_center_on_unit, N_("Auto Center on Units"), COT_BOOL), - GEN_OPTION(auto_center_on_combat, N_("Auto Center on Combat"), COT_BOOL), - GEN_OPTION(wakeup_focus, N_("Focus on Awakened Units"), COT_BOOL), - GEN_OPTION(draw_diagonal_roads, N_("Draw Diagonal Roads/Rails"), COT_BOOL), - GEN_OPTION(center_when_popup_city, N_("Center map when Popup city"), COT_BOOL), - GEN_OPTION(concise_city_production, N_("Concise City Production"), COT_BOOL), - GEN_OPTION(auto_turn_done, N_("End Turn when done moving"), COT_BOOL), - GEN_OPTION(meta_accelerators, N_("Use Alt/Meta for accelerators (GTK only)"), COT_BOOL), + GEN_BOOL_OPTION(solid_color_behind_units, N_("Solid unit background color")), + GEN_BOOL_OPTION(sound_bell_at_new_turn, N_("Sound bell at new turn")), + GEN_BOOL_OPTION(smooth_move_units, N_("Smooth unit moves")), + GEN_INT_OPTION(smooth_move_unit_steps, N_("Smooth unit move steps")), + GEN_BOOL_OPTION(do_combat_animation, N_("Show combat animation")), + GEN_BOOL_OPTION(ai_popup_windows, N_("Popup dialogs in AI Mode")), + GEN_BOOL_OPTION(ai_manual_turn_done, N_("Manual Turn Done in AI Mode")), + GEN_BOOL_OPTION(auto_center_on_unit, N_("Auto Center on Units")), + GEN_BOOL_OPTION(auto_center_on_combat, N_("Auto Center on Combat")), + GEN_BOOL_OPTION(wakeup_focus, N_("Focus on Awakened Units")), + GEN_BOOL_OPTION(draw_diagonal_roads, N_("Draw Diagonal Roads/Rails")), + GEN_BOOL_OPTION(center_when_popup_city, N_("Center map when Popup city")), + GEN_BOOL_OPTION(concise_city_production, N_("Concise City Production")), + GEN_BOOL_OPTION(auto_turn_done, N_("End Turn when done moving")), + GEN_BOOL_OPTION(meta_accelerators, N_("Use Alt/Meta for accelerators (GTK only)")), GEN_OPTION_TERMINATOR }; @@ -272,8 +273,18 @@ return; for (o=options; o->name; o++) { - *(o->p_value) = - secfile_lookup_int_default(&sf, *(o->p_value), "%s.%s", prefix, o->name); + switch (o->type) { + case COT_BOOL: + *(o->p_bool_value) = + secfile_lookup_bool_default(&sf, *(o->p_bool_value), "%s.%s", + prefix, o->name); + break; + case COT_INT: + *(o->p_int_value) = + secfile_lookup_bool_default(&sf, *(o->p_int_value), "%s.%s", + prefix, o->name); + break; + } } for (v=view_options; v->name; v++) { *(v->p_value) = @@ -328,7 +339,14 @@ secfile_insert_str(&sf, VERSION_STRING, "client.version"); for (o = options; o->name; o++) { - secfile_insert_int(&sf, *(o->p_value), "client.%s", o->name); + switch (o->type) { + case COT_BOOL: + secfile_insert_bool(&sf, *(o->p_bool_value), "client.%s", o->name); + break; + case COT_INT: + secfile_insert_int(&sf, *(o->p_int_value), "client.%s", o->name); + break; + } } for (v = view_options; v->name; v++) { Index: client/options.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/options.h,v retrieving revision 1.12 diff -u -r1.12 options.h --- client/options.h 2002/02/19 16:41:17 1.12 +++ client/options.h 2002/03/06 16:51:35 @@ -37,14 +37,16 @@ COT_BOOL, COT_INT }; + typedef struct { - char *name; - char *description; - enum client_option_type type; - int *p_value; + char *name; + char *description; + enum client_option_type type; + int *p_int_value; + bool *p_bool_value; - /* volatile */ - void *p_gui_data; + /* volatile */ + void *p_gui_data; } client_option; extern client_option options[]; @@ -68,7 +70,7 @@ typedef struct { char *name; - int *p_value; + bool *p_value; } view_option; extern view_option view_options[]; Index: client/gui-gtk/gamedlgs.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/gui-gtk/gamedlgs.c,v retrieving revision 1.22 diff -u -r1.22 gamedlgs.c --- client/gui-gtk/gamedlgs.c 2002/03/02 20:37:11 1.22 +++ client/gui-gtk/gamedlgs.c 2002/03/06 16:51:39 @@ -381,11 +381,11 @@ for (o=options; o->name; ++o) { switch (o->type) { case COT_BOOL: - *(o->p_value) = GTK_TOGGLE_BUTTON(o->p_gui_data)->active; + *(o->p_bool_value) = GTK_TOGGLE_BUTTON(o->p_gui_data)->active; break; case COT_INT: dp = gtk_entry_get_text(GTK_ENTRY(o->p_gui_data)); - sscanf(dp, "%d", o->p_value); + sscanf(dp, "%d", o->p_int_value); break; } } @@ -469,10 +469,11 @@ for (o=options; o->name; ++o) { switch (o->type) { case COT_BOOL: - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(o->p_gui_data), *(o->p_value)); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(o->p_gui_data), + *(o->p_bool_value)); break; case COT_INT: - my_snprintf(valstr, sizeof(valstr), "%d", *(o->p_value)); + my_snprintf(valstr, sizeof(valstr), "%d", *(o->p_int_value)); gtk_entry_set_text(GTK_ENTRY(o->p_gui_data), valstr); break; } Index: client/gui-mui/gamedlgs.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/gui-mui/gamedlgs.c,v retrieving revision 1.8 diff -u -r1.8 gamedlgs.c --- client/gui-mui/gamedlgs.c 2001/02/23 20:50:49 1.8 +++ client/gui-mui/gamedlgs.c 2002/03/06 16:51:40 @@ -295,8 +295,8 @@ Object *obj = (Object *) o->p_gui_data; if (obj) { - if (o->type == COT_BOOL) *(o->p_value) = xget(obj, MUIA_Selected); - else if (o->type == COT_INT) *(o->p_value) = xget(obj, MUIA_String_Integer); + if (o->type == COT_BOOL) *(o->p_bool_value) = xget(obj, MUIA_Selected); + else if (o->type == COT_INT) *(o->p_int_value) = xget(obj, MUIA_String_Integer); } } @@ -369,8 +369,8 @@ Object *obj = (Object *) o->p_gui_data; if (obj) { - if (o->type == COT_BOOL) setcheckmark(obj, *(o->p_value)); - else if (o->type == COT_INT) set(obj,MUIA_String_Integer,*(o->p_value)); + if (o->type == COT_BOOL) setcheckmark(obj, *(o->p_bool_value)); + else if (o->type == COT_INT) set(obj,MUIA_String_Integer,*(o->p_int_value)); } } Index: client/gui-win32/optiondlg.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/gui-win32/optiondlg.c,v retrieving revision 1.4 diff -u -r1.4 optiondlg.c --- client/gui-win32/optiondlg.c 2002/03/02 20:37:13 1.4 +++ client/gui-win32/optiondlg.c 2002/03/06 16:51:40 @@ -47,11 +47,11 @@ for (o=options; o->name; ++o) { switch (o->type) { case COT_BOOL: - *(o->p_value)=(Button_GetCheck((HWND)(o->p_gui_data))==BST_CHECKED); + *(o->p_bool_value)=(Button_GetCheck((HWND)(o->p_gui_data))==BST_CHECKED); break; case COT_INT: GetWindowText((HWND)(o->p_gui_data),dp,sizeof(dp)); - sscanf(dp, "%d", o->p_value); + sscanf(dp, "%d", o->p_int_value); break; } } @@ -124,10 +124,10 @@ switch (o->type) { case COT_BOOL: Button_SetCheck((HWND)(o->p_gui_data), - (*(o->p_value))?BST_CHECKED:BST_UNCHECKED); + (*(o->p_bool_value))?BST_CHECKED:BST_UNCHECKED); break; case COT_INT: - my_snprintf(valstr, sizeof(valstr), "%d", *(o->p_value)); + my_snprintf(valstr, sizeof(valstr), "%d", *(o->p_int_value)); SetWindowText((HWND)(o->p_gui_data), valstr); break; } Index: client/gui-xaw/optiondlg.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/client/gui-xaw/optiondlg.c,v retrieving revision 1.15 diff -u -r1.15 optiondlg.c --- client/gui-xaw/optiondlg.c 2002/03/02 20:37:14 1.15 +++ client/gui-xaw/optiondlg.c 2002/03/06 16:51:41 @@ -70,11 +70,11 @@ for (o=options; o->name; ++o) { switch (o->type) { case COT_BOOL: - XtVaSetValues((Widget) o->p_gui_data, XtNstate, *(o->p_value), - XtNlabel, *(o->p_value) ? _("Yes") : _("No"), NULL); + XtVaSetValues((Widget) o->p_gui_data, XtNstate, *(o->p_bool_value), + XtNlabel, *(o->p_bool_value) ? _("Yes") : _("No"), NULL); break; case COT_INT: - my_snprintf(valstr, sizeof(valstr), "%d", *(o->p_value)); + my_snprintf(valstr, sizeof(valstr), "%d", *(o->p_int_value)); XtVaSetValues((Widget) o->p_gui_data, XtNstring, valstr, NULL); break; } @@ -201,11 +201,11 @@ switch (o->type) { case COT_BOOL: XtVaGetValues((Widget) o->p_gui_data, XtNstate, &b, NULL); - *(o->p_value) = b; + *(o->p_bool_value) = b; break; case COT_INT: XtVaGetValues(o->p_gui_data, XtNstring, &dp, NULL); - sscanf(dp, "%d", o->p_value); + sscanf(dp, "%d", o->p_int_value); break; } }