2 * Copyright (C) 2003 Robert Kooima - 2006 Jean Privat
3 * Part of the Neverball Project http://icculus.org/neverball/
5 * NEVERBALL is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published
7 * by the Free Software Foundation; either version 2 of the License,
8 * or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
28 extern struct state st_conf;
29 extern struct state st_null;
31 static char **lang_names;
33 /*---------------------------------------------------------------------------*/
37 static int lang_action(int i)
50 config_set_s(CONFIG_LANG, language_code(i - 1));
59 static int lang_enter(void)
66 back_init("back/gui.png", config_get_d(CONFIG_GEOMETRY));
68 /* Initialize the language selection GUI. */
69 l = language_from_code(config_simple_get_s(CONFIG_LANG));
71 if ((id = gui_harray(0)))
73 if ((jd = gui_varray(id)))
75 if ((kd = gui_harray(jd)))
77 gui_label(kd, _("Language"), GUI_SML, GUI_ALL, 0, 0);
79 gui_start(kd, _("Back"), GUI_SML, LANG_BACK, 0);
82 lang_names = calloc(language_count(), sizeof(char *));
84 gui_state(jd, _(language_name(0)), GUI_SML, 1, (l == 0));
85 for (i = 1; i <= language_count(); i++)
88 ln1 = _(language_name(i));
90 ln2 = _(language_name(i));
91 if (strcmp(ln1, ln2) == 0)
95 ln = malloc(sizeof(char) * (strlen(ln1) + strlen(ln2) + 4));
96 lang_names[i - 1] = ln;
103 gui_state(jd, ln, GUI_SML, i + 1, (l == i));
106 gui_layout(id, 0, 0);
109 audio_music_fade_to(0.5f, "bgm/inter.ogg");
114 static void lang_leave(int id)
118 for (i = 0; i < language_count(); i++)
119 if (lang_names[i] != NULL)
126 static void lang_paint(int id, float st)
128 config_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST);
136 static void lang_timer(int id, float dt)
142 static void lang_point(int id, int x, int y, int dx, int dy)
144 gui_pulse(gui_point(id, x, y), 1.2f);
147 static void lang_stick(int id, int a, int v)
149 if (config_tst_d(CONFIG_JOYSTICK_AXIS_X, a))
150 gui_pulse(gui_stick(id, v, 0), 1.2f);
151 if (config_tst_d(CONFIG_JOYSTICK_AXIS_Y, a))
152 gui_pulse(gui_stick(id, 0, v), 1.2f);
155 static int lang_click(int b, int d)
158 return lang_action(gui_token(gui_click()));
162 static int lang_keybd(int c, int d)
164 return (d && c == SDLK_ESCAPE) ? goto_state(&st_conf) : 1;
167 static int lang_buttn(int b, int d)
171 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
172 return lang_action(gui_token(gui_click()));
173 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_B, b))
174 return goto_state(&st_conf);
175 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
176 return goto_state(&st_conf);
181 /*---------------------------------------------------------------------------*/
184 struct state st_lang = {