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.
29 extern struct state st_conf;
30 extern struct state st_null;
34 /*---------------------------------------------------------------------------*/
38 static int lang_action(int i)
51 config_set_s(CONFIG_LANG, language_get_code(i-1));
61 static int lang_enter(void)
66 char * ln, * ln1, * ln2;
68 back_init("back/gui.png", config_get_d(CONFIG_GEOMETRY));
70 /* Initialize the language selection GUI. */
71 l = language_from_code(config_simple_get_s(CONFIG_LANG));
73 if ((id = gui_harray(0)))
75 if ((jd = gui_varray(id)))
77 if ((kd = gui_harray(jd)))
79 gui_label(kd, _("Language"), GUI_SML, GUI_ALL, 0, 0);
81 gui_start(kd, _("Back"), GUI_SML, LANG_BACK, 0);
84 lang_names = calloc(language_count(), sizeof(char*));
86 gui_state(jd, _(language_get_name(0)), GUI_SML, 1, (l==0));
87 for(i=1; i<=language_count(); i++)
90 ln1 = _(language_get_name(i));
92 ln2 = _(language_get_name(i));
93 if (strcmp(ln1, ln2) == 0)
97 ln = malloc(sizeof(char)*(strlen(ln1)+strlen(ln2)+4));
105 gui_state(jd, ln, GUI_SML, i+1, (l==i));
108 gui_layout(id, 0, 0);
111 audio_music_fade_to(0.5f, "bgm/inter.ogg");
116 static void lang_leave(int id)
119 for(i=0;i<language_count();i++)
120 if (lang_names[i] != NULL)
127 static void lang_paint(int id, float st)
129 config_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST);
137 static void lang_timer(int id, float dt)
143 static void lang_point(int id, int x, int y, int dx, int dy)
145 gui_pulse(gui_point(id, x, y), 1.2f);
148 static void lang_stick(int id, int a, int v)
150 if (config_tst_d(CONFIG_JOYSTICK_AXIS_X, a))
151 gui_pulse(gui_stick(id, v, 0), 1.2f);
152 if (config_tst_d(CONFIG_JOYSTICK_AXIS_Y, a))
153 gui_pulse(gui_stick(id, 0, v), 1.2f);
156 static int lang_click(int b, int d)
159 return lang_action(gui_token(gui_click()));
163 static int lang_keybd(int c, int d)
165 return (d && c == SDLK_ESCAPE) ? goto_state(&st_conf) : 1;
168 static int lang_buttn(int b, int d)
172 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b))
173 return lang_action(gui_token(gui_click()));
174 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_B, b))
175 return goto_state(&st_conf);
176 if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
177 return goto_state(&st_conf);
182 /*---------------------------------------------------------------------------*/
185 struct state st_lang = {