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