1 #ifdef HAVE_CONFIG_H
2 #  include <config.h>
3 #endif
4 
5 #include <gtk/gtk.h>
6 
7 #include "callbacks.h"
8 #include "interface.h"
9 #include "support.h"
10 
11 #include "gtk_main.h"
12 #include "pce.h"
13 #include "iniconfig.h"
14 
15 static char tmp_buf[100];
16 
17 
18 void
on_open1_activate(GtkMenuItem * menuitem,gpointer user_data)19 on_open1_activate                      (GtkMenuItem     *menuitem,
20                                         gpointer         user_data)
21 {
22 	get_directory_from_filename(initial_path);
23   gtk_file_selection_set_filename((GtkFileSelection*)fileselector_window, initial_path);
24   gtk_widget_show(fileselector_window);
25 }
26 
27 
28 void
on_save1_activate(GtkMenuItem * menuitem,gpointer user_data)29 on_save1_activate                      (GtkMenuItem     *menuitem,
30                                         gpointer         user_data)
31 {
32     savegame();
33 }
34 
35 
36 void
on_load1_activate(GtkMenuItem * menuitem,gpointer user_data)37 on_load1_activate                      (GtkMenuItem     *menuitem,
38                                         gpointer         user_data)
39 {
40 	loadgame();
41 }
42 
43 
44 void
on_input_setting_1_activate(GtkMenuItem * menuitem,gpointer user_data)45 on_input_setting_1_activate            (GtkMenuItem     *menuitem,
46                                         gpointer         user_data)
47 {
48   gtk_widget_show(input_settings_window);
49 }
50 
51 
52 void
on_hugo_manual1_activate(GtkMenuItem * menuitem,gpointer user_data)53 on_hugo_manual1_activate               (GtkMenuItem     *menuitem,
54                                         gpointer         user_data)
55 {
56 	gtk_widget_show(manual_window);
57 }
58 
59 
60 void
on_about_1_activate(GtkMenuItem * menuitem,gpointer user_data)61 on_about_1_activate                    (GtkMenuItem     *menuitem,
62                                         gpointer         user_data)
63 {
64 	gtk_widget_show(about_window);
65 }
66 
67 
68 void
on_mainWindow_destroy(GtkObject * object,gpointer user_data)69 on_mainWindow_destroy                  (GtkObject       *object,
70                                         gpointer         user_data)
71 {
72 	gtk_main_quit();
73 }
74 
75 
76 void
on_ok_button1_clicked(GtkButton * button,gpointer user_data)77 on_ok_button1_clicked                  (GtkButton       *button,
78                                         gpointer         user_data)
79 {
80 	gtk_widget_hide(fileselector_window);
81 	CD_emulation = 0;
82 	strcpy( cart_name, gtk_file_selection_get_filename((GtkFileSelection*)fileselector_window));
83 
84 	/*
85 	 * We need to flush any gtk events waiting to happen (like the widget hide
86          * from above) to avoid a deadlock when starting a game fullscreen (at least
87          * in linux).
88          */
89 	while (gtk_events_pending())
90 	  gtk_main_iteration();
91 
92 	play_game();
93 }
94 
95 
96 void
on_button1_clicked(GtkButton * button,gpointer user_data)97 on_button1_clicked                     (GtkButton       *button,
98                                         gpointer         user_data)
99 {
100   on_open1_activate(NULL, NULL);
101 }
102 
103 
104 void
on_cancel_button1_clicked(GtkButton * button,gpointer user_data)105 on_cancel_button1_clicked              (GtkButton       *button,
106                                         gpointer         user_data)
107 {
108 	gtk_widget_hide(fileselector_window);
109 }
110 
111 
112 void
on_button_close_input_settings_window_clicked(GtkButton * button,gpointer user_data)113 on_button_close_input_settings_window_clicked
114                                         (GtkButton       *button,
115                                         gpointer         user_data)
116 {
117 	gtk_widget_hide(input_settings_window);
118 }
119 
120 
121 void
on_button2_clicked(GtkButton * button,gpointer user_data)122 on_button2_clicked                     (GtkButton       *button,
123                                         gpointer         user_data)
124 {
125   if (NULL == search_possible_syscard())
126     {
127       GtkWidget* dialog;
128       dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
129 				       GTK_DIALOG_DESTROY_WITH_PARENT,
130 				       GTK_MESSAGE_ERROR,
131 				       GTK_BUTTONS_OK,
132 				       "CD system card not found !\nDid you set \"CD system filename\" ?");
133       gtk_dialog_run (GTK_DIALOG (dialog));
134       gtk_widget_destroy (dialog);
135     }
136   else
137     {
138       CD_emulation = 1;
139       play_game();
140     }
141 }
142 
143 
144 void
on_general_settings_1_activate(GtkMenuItem * menuitem,gpointer user_data)145 on_general_settings_1_activate         (GtkMenuItem     *menuitem,
146                                         gpointer         user_data)
147 {
148 	gtk_widget_show(general_settings_window);
149 }
150 
151 
152 void
on_button_close_about_clicked(GtkButton * button,gpointer user_data)153 on_button_close_about_clicked          (GtkButton       *button,
154                                         gpointer         user_data)
155 {
156 	gtk_widget_hide(about_window);
157 }
158 
159 
160 void
on_button_browse_cd_system_clicked(GtkButton * button,gpointer user_data)161 on_button_browse_cd_system_clicked     (GtkButton       *button,
162                                         gpointer         user_data)
163 {
164 	gtk_widget_show(fileselector_cd_system);
165 }
166 
167 
168 void
on_buttongeneral_config_close_clicked(GtkButton * button,gpointer user_data)169 on_buttongeneral_config_close_clicked  (GtkButton       *button,
170                                         gpointer         user_data)
171 {
172 	gtk_widget_hide(general_settings_window);
173 	gtk_general_settings_grab();
174 }
175 
176 
177 void
on_button_general_config_save_clicked(GtkButton * button,gpointer user_data)178 on_button_general_config_save_clicked  (GtkButton       *button,
179                                         gpointer         user_data)
180 {
181 	gtk_general_settings_grab();
182 	save_config();
183 }
184 
185 
186 void
on_button_general_config_cancel_clicked(GtkButton * button,gpointer user_data)187 on_button_general_config_cancel_clicked
188                                         (GtkButton       *button,
189                                         gpointer         user_data)
190 {
191 	gtk_widget_hide(general_settings_window);
192 }
193 
194 
195 void
on_general_settings_window_show(GtkWidget * widget,gpointer user_data)196 on_general_settings_window_show        (GtkWidget       *widget,
197                                         gpointer         user_data)
198 {
199 	gtk_general_settings_set();
200 }
201 
202 
203 void
on_ok_button_cd_system_clicked(GtkButton * button,gpointer user_data)204 on_ok_button_cd_system_clicked         (GtkButton       *button,
205                                         gpointer         user_data)
206 {
207 	GtkEntry* temp_entry;
208 
209 	gtk_widget_hide(fileselector_cd_system);
210 	strncpy (cdsystem_path, gtk_file_selection_get_filename((GtkFileSelection*)fileselector_cd_system), PATH_MAX);
211 	temp_entry = (GtkEntry*)lookup_widget(general_settings_window, "entry_cd_system_filename");
212 	gtk_entry_set_text(temp_entry, cdsystem_path);
213 }
214 
215 
216 void
on_cancel_button_cd_system_clicked(GtkButton * button,gpointer user_data)217 on_cancel_button_cd_system_clicked     (GtkButton       *button,
218                                         gpointer         user_data)
219 {
220 	gtk_widget_hide(fileselector_cd_system);
221 }
222 
223 
224 void
on_ok_button_cd_path_clicked(GtkButton * button,gpointer user_data)225 on_ok_button_cd_path_clicked           (GtkButton       *button,
226                                         gpointer         user_data)
227 {
228 	GtkEntry* temp_entry;
229 
230 	gtk_widget_hide(fileselector_cd_path);
231 	strcpy (ISO_filename, gtk_file_selection_get_filename((GtkFileSelection*)fileselector_cd_path));
232 	temp_entry = (GtkEntry*)lookup_widget(general_settings_window, "entry_cd_path");
233 	gtk_entry_set_text(temp_entry, ISO_filename);
234 
235 }
236 
237 
238 void
on_cancel_button_cd_path_clicked(GtkButton * button,gpointer user_data)239 on_cancel_button_cd_path_clicked       (GtkButton       *button,
240                                         gpointer         user_data)
241 {
242 	gtk_widget_hide(fileselector_cd_path);
243 }
244 
245 void
on_button_browse_rom_dirname_clicked(GtkButton * button,gpointer user_data)246 on_button_browse_rom_dirname_clicked   (GtkButton       *button,
247                                         gpointer         user_data)
248 {
249 	gtk_widget_show(fileselector_rom_path);
250 }
251 
252 
253 void
on_button_browse_cd_path_clicked(GtkButton * button,gpointer user_data)254 on_button_browse_cd_path_clicked       (GtkButton       *button,
255                                         gpointer         user_data)
256 {
257 	gtk_widget_show(fileselector_cd_path);
258 }
259 
260 
261 void
on_ok_button_rom_path_clicked(GtkButton * button,gpointer user_data)262 on_ok_button_rom_path_clicked          (GtkButton       *button,
263                                         gpointer         user_data)
264 {
265 	GtkEntry* temp_entry;
266 
267 	gtk_widget_hide(fileselector_rom_path);
268 	strcpy (initial_path, gtk_file_selection_get_filename((GtkFileSelection*)fileselector_rom_path));
269 
270 	get_directory_from_filename(initial_path);
271 
272 //	if (strrchr(initial_path, '/') != NULL)
273 //		*strrchr(initial_path, '/') = 0;
274 	temp_entry = (GtkEntry*)lookup_widget(general_settings_window, "entry_rom_basedir");
275 	gtk_entry_set_text(temp_entry, initial_path);
276 }
277 
278 
279 void
on_cancel_button_rom_path_clicked(GtkButton * button,gpointer user_data)280 on_cancel_button_rom_path_clicked      (GtkButton       *button,
281                                         gpointer         user_data)
282 {
283 	gtk_widget_hide(fileselector_rom_path);
284 }
285 
286 
287 void
on_button_manual_close_clicked(GtkButton * button,gpointer user_data)288 on_button_manual_close_clicked         (GtkButton       *button,
289                                         gpointer         user_data)
290 {
291 	gtk_widget_hide(manual_window);
292 }
293 
294 //void
295 //on_input_settings_window_show          (GtkWidget       *widget,
296 //                                        gpointer         user_data)
297 //{
298 //	gtk_show_config(0);
299 //}
300 
301 
302 void
on_open_cd1_activate(GtkMenuItem * menuitem,gpointer user_data)303 on_open_cd1_activate                   (GtkMenuItem     *menuitem,
304                                         gpointer         user_data)
305 {
306 
307 }
308 
309 
310 void
on_save_settings1_activate(GtkMenuItem * menuitem,gpointer user_data)311 on_save_settings1_activate             (GtkMenuItem     *menuitem,
312                                         gpointer         user_data)
313 {
314 	save_config();
315 }
316 
317 void
on_option_config_number_changed(GtkOptionMenu * optionmenu,gpointer user_data)318 on_option_config_number_changed        (GtkOptionMenu   *optionmenu,
319                                         gpointer         user_data)
320 {
321 
322 }
323 
324 
325 void
on_button_input_configuration_clicked(GtkButton * button,gpointer user_data)326 on_button_input_configuration_clicked  (GtkButton       *button,
327                                         gpointer         user_data)
328 {
329 
330 	char* button_name = (char*) user_data;
331 	int player_number = button_name[strlen(button_name) - 1] - '0';
332 	int direction_index = 0;
333 
334 	if ((player_number < 0) || (player_number > 4))
335 	{
336 		Log("Abnormal player_number in %s at %s:%s\nAborting\n",
337 			__FUNCTION__,
338 			__FILE__,
339 			__LINE__);
340 		return;
341 	}
342 
343 	for (; direction_index < J_MAX; direction_index ++)
344 	{
345 		if (!strncmp(joymap_reverse[direction_index],
346 				button_name,
347 				strlen(button_name) - 1))
348 			{
349 				break;
350 			}
351 	}
352 
353 	gtk_grab_control(direction_index, player_number);
354 
355 }
356 
357 void
on_spinbutton_configuration_value_changed(GtkSpinButton * spinbutton,gpointer user_data)358 on_spinbutton_configuration_value_changed
359                                         (GtkSpinButton   *spinbutton,
360                                         gpointer         user_data)
361 {
362 	int index = gtk_spin_button_get_value_as_int((GtkSpinButton*) spinbutton);
363 	set_gui_configuration_index(index);
364 }
365 
366 
367 void
on_window_input_settings_show(GtkWidget * widget,gpointer user_data)368 on_window_input_settings_show          (GtkWidget       *widget,
369                                         gpointer         user_data)
370 {
371 	GtkSpinButton * spinbutton = (GtkSpinButton*)lookup_widget(widget, "spinbutton_configuration");
372 	on_spinbutton_configuration_value_changed(spinbutton, (gpointer)NULL);
373 	gtk_copy_current_configuration();
374 }
375 
376 
377 gboolean
on_window_input_settings_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)378 on_window_input_settings_delete_event  (GtkWidget       *widget,
379                                         GdkEvent        *event,
380                                         gpointer         user_data)
381 {
382 	gtk_widget_hide(input_settings_window);
383 	return TRUE;
384 }
385 
386 
387 void
on_button_input_ok_activate(GtkButton * button,gpointer user_data)388 on_button_input_ok_activate            (GtkButton       *button,
389                                         gpointer         user_data)
390 {
391 	gtk_confirm_configuration();
392 	gtk_widget_hide(input_settings_window);
393 }
394 
395 
396 void
on_button_input_cancel_activate(GtkButton * button,gpointer user_data)397 on_button_input_cancel_activate        (GtkButton       *button,
398                                         gpointer         user_data)
399 {
400 	gtk_widget_hide(input_settings_window);
401 }
402 
403 void
on_spinbutton_joydev_value_changed(GtkSpinButton * spinbutton,gpointer user_data)404 on_spinbutton_joydev_value_changed     (GtkSpinButton   *spinbutton,
405                                         gpointer         user_data)
406 {
407 	GtkSpinButton* temp_spin_button = NULL;
408 	int i = 0;
409 	int player_number = -1;
410 
411 	for (i = 0; i < 5; i++)
412 	{
413 		sprintf(tmp_buf, "spinbutton_joydev%d", i);
414 		if (spinbutton == (GtkSpinButton*)lookup_widget(input_settings_window, tmp_buf))
415 		{
416 			player_number = i;
417 			break;
418 		}
419 	}
420 
421 	printf("Checked that joydev %d changed\n", player_number);
422 
423 	if (player_number != -1)
424 	{
425 		printf("Read value %d\n", gtk_spin_button_get_value_as_int(spinbutton));
426 		set_gui_joydev(player_number, gtk_spin_button_get_value_as_int(spinbutton));
427 	}
428 
429 	gtk_update_configuration(FALSE);
430 }
431 
432 
433 gboolean
on_general_settings_window_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)434 on_general_settings_window_delete_event
435                                         (GtkWidget       *widget,
436                                         GdkEvent        *event,
437                                         gpointer         user_data)
438 {
439 	gtk_widget_hide(general_settings_window);
440   return TRUE;
441 }
442 
443 
444 gboolean
on_fileselection_cd_system_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)445 on_fileselection_cd_system_delete_event
446                                         (GtkWidget       *widget,
447                                         GdkEvent        *event,
448                                         gpointer         user_data)
449 {
450 	gtk_widget_hide(fileselector_cd_system);
451   return TRUE;
452 }
453 
454 
455 gboolean
on_fileselection_cd_path_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)456 on_fileselection_cd_path_delete_event  (GtkWidget       *widget,
457                                         GdkEvent        *event,
458                                         gpointer         user_data)
459 {
460 	gtk_widget_hide(fileselector_cd_path);
461   return TRUE;
462 }
463 
464 
465 gboolean
on_fileselection_rom_path_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)466 on_fileselection_rom_path_delete_event (GtkWidget       *widget,
467                                         GdkEvent        *event,
468                                         gpointer         user_data)
469 {
470 	gtk_widget_hide(fileselector_rom_path);
471   return TRUE;
472 }
473 
474 
475 gboolean
on_fileselection1_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)476 on_fileselection1_delete_event         (GtkWidget       *widget,
477                                         GdkEvent        *event,
478                                         gpointer         user_data)
479 {
480 	gtk_widget_hide(fileselector_window);
481   return TRUE;
482 }
483 
484 
485 gboolean
on_window_about_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)486 on_window_about_delete_event           (GtkWidget       *widget,
487                                         GdkEvent        *event,
488                                         gpointer         user_data)
489 {
490 	gtk_widget_hide(about_window);
491   return TRUE;
492 }
493 
494