1 /* -*- Mode: C++; c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil -*-
2  *
3  * Quadra, an action puzzle game
4  * Copyright (C) 1998-2000  Ludus Design
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20 
21 #ifndef _HEADER_MENU
22 #define _HEADER_MENU
23 
24 #include <vector>
25 
26 #include "sound.h"
27 #include "sprite.h"
28 #include "inter.h"
29 #include "listbox.h"
30 #include "zone_list.h"
31 #include "stats.h"
32 #include "net_stuff.h"
33 #include "menu_base.h"
34 #include "score.h"
35 #include "highscores.h"
36 #include "game.h"
37 
38 class Pane_option;
39 class Pane_info;
40 
41 class Menu_do_nothing: public Menu {
42 public:
43 	//It actually does something:
44 	//  wait for quitting==true and then ret()
45 	virtual void step();
46 };
47 
48 class Menu_intro: public Menu {
49 	int warning;
50 	Font *font2;
51 	bool once;
52 public:
53 	Menu_intro();
54 	virtual ~Menu_intro();
55 	virtual void init();
56 	virtual void step();
57 };
58 
59 class Menu_main: public Menu {
60 	Zone_bitmap *z_back;
61 	Zone *b_single, *b_multi, *b_setup, *b_help, *b_quit;
62 	Zone *b_tut, *b_option, *b_logo, *b_demo;
63 	int delay;
64 	int old_language;
65 	bool version_warning;
66 	void reset_delay();
67 	void redraw();
68 public:
69 	Menu_main();
70 	virtual void init();
71 	virtual void step();
72 };
73 
74 class Menu_quitgame: public Menu_standard {
75 	Font *font2;
76 public:
77 	Menu_quitgame();
78 	virtual ~Menu_quitgame();
79 	virtual void init();
80 	virtual void step();
81 };
82 
83 class Menu_help: public Menu_standard {
84 	Font *font2;
85 	Zone *b_quit;
86 	Zone *b_www, *b_email, *b_online;
87 	void call_internet(const char *s);
88 public:
89 	Menu_help();
90 	virtual void init();
91 	virtual void step();
92 };
93 
94 class Menu_option: public Menu_standard {
95 	Bitmap *bit;
96 	Font *font2;
97 	Zone *b_quit;
98 	int old_language,old_music,old_port;
99 	char old_server[256];
100 	char old_proxy[128];
101 public:
102 	Menu_option();
103 	virtual ~Menu_option();
104 	virtual void step();
105 };
106 
107 class Zone_color_select;
108 class Zone_set_key;
109 
110 class Menu_setup: public Menu_standard {
111 	Zone *b_quit, *b_player, *b_all_key;
112 	Zone_text_input *z_nameinput;
113 	Zone_text_input *z_passwdinput;
114 	Zone_text_input *z_tnameinput;
115 	Zone_text_input *z_tpasswdinput;
116 	Zone_state_text *z_continuousdown;
117 	Zone_state_text *z_h_repeat;
118 	Zone_state_text *z_v_repeat;
119 	Zone_state_text *z_shadow;
120 	Zone_state_text *z_smooth;
121 	Zone_set_key* z_key[7];
122 	Zone* b_key[7];
123 	Bitmap *bit;
124 public:
125 	Menu_setup();
126 	virtual ~Menu_setup();
127 	virtual void step();
128 };
129 
130 class Menu_setup_all_key: public Menu {
131 	Zone_set_key **key;
132 	Bitmap *bit;
133 	Zone_text *z_text;
134 	int quel;
135 public:
136 	Menu_setup_all_key(Inter *in, Zone_set_key *k[]);
137 	virtual void step();
138 };
139 
140 class Menu_setup_key: public Menu {
141 	Zone_set_key *key;
142 public:
143 	Menu_setup_key(Inter *in, Zone_set_key *k, const char *t);
144 	Menu_setup_key(Inter *in, Zone_set_key *k);
145 	virtual void init();
146 	virtual void step();
147 };
148 
149 class Menu_single: public Menu_standard {
150 	Zone* normal, *sprint, *cancel;
151 	Bitmap *bit;
152 	Font *font2;
153 public:
154 	Menu_single();
155 	virtual ~Menu_single();
156 	virtual void step();
157 };
158 
159 class Menu_multi: public Menu_standard {
160 	Zone* local, *net_lan, *net_internet, *cancel;
161 	Bitmap *bit;
162 	Font *font2;
163 public:
164 	Menu_multi();
165 	virtual ~Menu_multi();
166 	virtual void step();
167 };
168 
169 class Menu_multi_join: public Menu, Net_callable {
170 	friend class Menu_multi_refresh;
171 	friend class Menu_multi_internet;
172 	Zone *b_create, *b_refresh, *b_join, *cancel, *b_info, *b_book;
173 	Zone *b_refresh_internet;
174 	Zone_text_field *z_game_status, *z_game_end, *z_game_minimum, *z_game_level, *z_game_speed, *z_game_type;
175 	Zone_listbox *list_game;
176 	Zone_listbox *list_player;
177 	int selected_game;
178 	Bitmap *bit_;
179 	Font *font2_;
180 	bool local_net;
181 	char address[256];
182 	char game_end_text[256];
183 	int game_level_start;
184 	void refresh_player();
185 	void clear_game_info();
186 public:
187 	Menu_multi_join(Bitmap *bit, Font *font, Font *font2, const Palette& p, bool plocal);
188 	virtual ~Menu_multi_join();
189 	virtual void init();
190 	virtual void step();
191 	void addwatch();
192 	void removewatch();
193 	void refresh();
194 	virtual void net_call(Packet *p2);
195 	void join_game(char *nam, Dword adr, int port);
196 };
197 
198 class Zone_input_address: public Zone_text_input {
199 	Menu_multi_join *parent;
200 public:
Zone_input_address(Menu_multi_join * p,const Palette & pal,Inter * in,char * s,int mlen,int px,int py,int pw)201 	Zone_input_address(Menu_multi_join *p, const Palette &pal, Inter* in, char* s, int mlen, int px, int py, int pw):
202 		Zone_text_input(in, pal, s, mlen, px, py, pw) {
203 		parent = p;
204 	}
205 	virtual void lost_focus(int cancel);
206 };
207 
208 class Menu_multi_refresh: public Menu {
209 	Menu_multi_join *parent;
210 	Zone *cancel;
211 	void find_local_games();
212 	void find_internet_games();
213 	void resolve();
214 public:
215 	Menu_multi_refresh(Menu_multi_join *p);
216 	virtual void init();
217 	virtual void step();
218 };
219 
220 class Qserv;
221 
222 class Menu_multi_internet: public Menu {
223 	Menu_multi_join *parent;
224 	Zone *cancel;
225 	Qserv *request;
226 	Attack parse_attack(const char *s);
227 	void parsegames();
228 public:
229 	Menu_multi_internet(Menu_multi_join *p);
230 	virtual ~Menu_multi_internet();
231 	virtual void init();
232 	virtual void step();
233 };
234 
235 class Menu_highscore: public Menu_standard {
236 	Zone_list list;
237 	Bitmap *bit;
238 	Font *font2, *courrier, *courrier2;
239 	Zone *b_quit, *b_again, *playdemo[MAX_SCORE], *playdemog[MAX_SCORE], *playlast;
240 	Zone_text_button *sync;
241 	Qserv *sync_request;
242 	char *file_name;
243 	int *play_again;
244 	int time_demo;
245 	bool show_playback;
246 	Zone_text_field *status;
247 	void play_demo(const char *st);
248 	void start_sync();
249 	void step_sync();
250 	void stop_sync();
251 	void refresh_global(int& y);
252 public:
253 	Menu_highscore(int hscore=-1, int *playagain=NULL, bool show_playb=false);
254 	virtual ~Menu_highscore();
255 	virtual void step();
256 };
257 
258 class Menu_stat: public Menu_standard, public Notifyable {
259 	Zone_list list;
260 	class Colonne {
261 	public:
262 		int width, page;
263 		CS::Stat_type quel_stat;
264 		char titre[32];
265 		Zone_text_button *z_titre;
266 		bool sort_me;
267 		Colonne();
268 		void set_titre(const char *s);
269 	};
270 	std::vector<Colonne*> col;
271 	Bitmap *bit;
272 	Font *font2;
273 	Zone *b_quit, *b_restart, *b_stop;
274 	std::vector<Zone_text_button*> b_page;
275 	Score score;
276 	Font *fcourrier[MAXTEAMS];
277 	int active_sort, active_page;
278 	const int c_start;
279 	const int c_gap;
280 	void display();
281 	void calculate_total(bool force_blit);
282 	void add_title(Colonne &col, int *px, Bitmap *bit);
283 	void set_sort(int quel);
284 	void change_page(int p);
285 	void init_columns(Bitmap *bit);
286 	void sort(int quel_stat, int new_order[], bool reversed=false);
287 public:
288 	Menu_stat();
289 	virtual ~Menu_stat();
290 	virtual void init();
291 	virtual void step();
292 	virtual void notify();
293 };
294 
295 class Menu_multi_checkip: public Menu {
296 	Bitmap *bit_;
297 	Zone *cancel;
298 public:
299 	Menu_multi_checkip(Bitmap *bit, Font *font, Font *font2, const Palette& p);
300 	virtual void step();
301 };
302 
303 class Menu_multi_book: public Menu {
304 	Bitmap *bit_;
305 	Font *font2_;
306 	Zone *cancel;
307 	char buf[10][256];
308 	Zone *b_connect[10];
309 	Zone_text_field *status;
310 	bool looking, connect_failed;
311 	const char* address;
312 public:
313 	Menu_multi_book(Bitmap *bit, Font *font, Font *font2, const Palette& p, const char *adr);
314 	virtual void init();
315 	virtual void step();
316 };
317 
318 class Menu_internet: public Menu {
319 	const char *command;
320 public:
321 	Menu_internet(const char *c);
322 	virtual void init();
323 	virtual void step();
324 };
325 
326 class Menu_startserver: public Menu_quit {
327 	Bitmap *bit;
328 public:
329 	Menu_startserver();
330 	virtual ~Menu_startserver();
331 	virtual void step();
332 };
333 
334 class Menu_startconnect: public Menu_quit {
335 	Bitmap *bit;
336 	Module *module;
337 	Font *font2;
338 public:
339 	Menu_startconnect(const char *adr, bool rejoin);
340 	virtual ~Menu_startconnect();
341 	virtual void step();
342 };
343 
344 #endif
345