2 * $Id: gtkcb.c,v 1.9 2007-11-10 04:45:29 nkeynes Exp $
4 * Action callbacks from the main window
6 * Copyright (c) 2005 Nathan Keynes.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
21 #include "dreamcast.h"
22 #include "gdrom/gdrom.h"
23 #include "gui/gtkui.h"
24 #include "pvr2/pvr2.h"
28 static void add_file_pattern( GtkFileChooser *chooser, char *pattern, char *patname )
30 if( pattern != NULL ) {
31 GtkFileFilter *filter = gtk_file_filter_new();
32 gtk_file_filter_add_pattern( filter, pattern );
33 gtk_file_filter_set_name( filter, patname );
34 gtk_file_chooser_add_filter( chooser, filter );
35 filter = gtk_file_filter_new();
36 gtk_file_filter_set_name( filter, _("All files") );
37 gtk_file_filter_add_pattern( filter, "*" );
38 gtk_file_chooser_add_filter( chooser, filter );
42 void open_file_dialog( char *title, file_callback_t action, char *pattern, char *patname,
43 gchar const *initial_dir )
46 file = gtk_file_chooser_dialog_new( title, NULL,
47 GTK_FILE_CHOOSER_ACTION_OPEN,
48 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
49 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
51 add_file_pattern( GTK_FILE_CHOOSER(file), pattern, patname );
52 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(file), initial_dir );
53 gtk_window_set_modal( GTK_WINDOW(file), TRUE );
54 gtk_dialog_set_default_response( GTK_DIALOG(file), GTK_RESPONSE_ACCEPT );
55 int result = gtk_dialog_run( GTK_DIALOG(file) );
56 if( result == GTK_RESPONSE_ACCEPT ) {
57 gchar *filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(file) );
60 gtk_widget_destroy(file);
63 void save_file_dialog( char *title, file_callback_t action, char *pattern, char *patname,
64 gchar const *initial_dir )
67 file = gtk_file_chooser_dialog_new( title, NULL,
68 GTK_FILE_CHOOSER_ACTION_SAVE,
69 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
70 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
72 add_file_pattern( GTK_FILE_CHOOSER(file), pattern, patname );
73 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(file), initial_dir );
74 gtk_window_set_modal( GTK_WINDOW(file), TRUE );
75 gtk_dialog_set_default_response( GTK_DIALOG(file), GTK_RESPONSE_ACCEPT );
76 int result = gtk_dialog_run( GTK_DIALOG(file) );
77 if( result == GTK_RESPONSE_ACCEPT ) {
78 gchar *filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(file) );
81 gtk_widget_destroy(file);
84 void mount_action_callback( GtkAction *action, gpointer user_data)
86 const gchar *dir = lxdream_get_config_value(CONFIG_DEFAULT_PATH);
87 open_file_dialog( "Open...", gdrom_mount_image, NULL, NULL, dir );
89 void reset_action_callback( GtkAction *action, gpointer user_data)
94 void pause_action_callback( GtkAction *action, gpointer user_data)
99 void resume_action_callback( GtkAction *action, gpointer user_data)
104 void load_state_preview_callback( GtkFileChooser *chooser, gpointer user_data )
106 GtkWidget *preview = GTK_WIDGET(user_data);
107 gchar *filename = gtk_file_chooser_get_preview_filename(chooser);
109 frame_buffer_t data = dreamcast_load_preview(filename);
111 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_frame_buffer(data);
112 GdkPixbuf *scaled = gdk_pixbuf_scale_simple(pixbuf, 320, 240,
113 GDK_INTERP_BILINEAR);
114 g_object_unref(pixbuf);
115 gtk_image_set_from_pixbuf( GTK_IMAGE(preview), scaled );
116 g_object_unref(scaled);
117 gtk_widget_show(preview);
119 gtk_widget_hide(preview);
123 void load_state_action_callback( GtkAction *action, gpointer user_data)
125 GtkWidget *file, *preview, *frame, *align;
127 const gchar *dir = lxdream_get_config_value(CONFIG_SAVE_PATH);
128 file = gtk_file_chooser_dialog_new( _("Load state..."), NULL,
129 GTK_FILE_CHOOSER_ACTION_OPEN,
130 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
131 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
133 add_file_pattern( GTK_FILE_CHOOSER(file), "*.dst", _("lxDream Save State (*.dst)") );
134 gtk_object_set_data( GTK_OBJECT(file), "file_action", action );
136 preview = gtk_image_new( );
138 frame = gtk_frame_new(NULL);
139 gtk_frame_set_shadow_type( GTK_FRAME(frame), GTK_SHADOW_IN );
140 gtk_container_add( GTK_CONTAINER(frame), preview );
141 gtk_widget_show(frame);
142 gtk_widget_size_request(frame, &size);
143 gtk_widget_set_size_request(frame, size.width + 320, size.height + 240);
144 align = gtk_alignment_new(0.5, 0.5, 0, 0 );
145 gtk_container_add( GTK_CONTAINER(align), frame );
146 gtk_widget_show( align );
147 gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(file), align);
148 g_signal_connect( file, "update-preview", G_CALLBACK(load_state_preview_callback),
150 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(file), dir );
151 gtk_window_set_modal( GTK_WINDOW(file), TRUE );
152 int result = gtk_dialog_run( GTK_DIALOG(file) );
153 if( result == GTK_RESPONSE_ACCEPT ) {
154 gchar *filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(file) );
155 dreamcast_load_state( filename );
157 gtk_widget_destroy(file);
160 void save_state_action_callback( GtkAction *action, gpointer user_data)
162 const gchar *dir = lxdream_get_config_value(CONFIG_SAVE_PATH);
163 save_file_dialog( "Save state...", dreamcast_save_state, "*.dst", _("lxDream Save State (*.dst)"), dir );
165 void about_action_callback( GtkAction *action, gpointer user_data)
168 GtkWidget *dialog = g_object_new (GTK_TYPE_ABOUT_DIALOG,
170 "version", APP_VERSION,
171 "copyright", "(C) 2003-2007 Nathan Keynes",
173 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
174 gtk_dialog_run(GTK_DIALOG(dialog));
175 gtk_widget_destroy(dialog);
179 void exit_action_callback( GtkAction *action, gpointer user_data)
184 void path_settings_callback( GtkAction *action, gpointer user_data)
189 void audio_settings_callback( GtkAction *action, gpointer user_data)
193 void maple_settings_callback( GtkAction *action, gpointer user_data)
198 void network_settings_callback( GtkAction *action, gpointer user_data)
202 void video_settings_callback( GtkAction *action, gpointer user_data)
206 void fullscreen_toggle_callback( GtkToggleAction *action, gpointer user_data)
208 main_window_set_fullscreen(gtk_gui_get_main(), gtk_toggle_action_get_active(action));
211 void debugger_action_callback( GtkAction *action, gpointer user_data)
213 gtk_gui_show_debugger();
216 void debug_memory_action_callback( GtkAction *action, gpointer user_data)
218 gchar *title = g_strdup_printf( APP_NAME " " APP_VERSION " :: %s", _("Memory dump") );
219 dump_window_new( title );
223 void debug_mmio_action_callback( GtkAction *action, gpointer user_data)
228 void save_scene_action_callback( GtkAction *action, gpointer user_data)
230 const gchar *dir = lxdream_get_config_value(CONFIG_SAVE_PATH);
231 save_file_dialog( _("Save next scene..."), pvr2_save_next_scene, "*.dsc", _("lxdream scene file (*.dsc)"), dir );
234 int debug_window_get_selected_row( debug_window_t data );
236 void debug_step_action_callback( GtkAction *action, gpointer user_data)
238 debug_window_single_step(gtk_gui_get_debugger());
241 void debug_runto_action_callback( GtkAction *action, gpointer user_data)
243 debug_window_t debug = gtk_gui_get_debugger();
244 int selected_row = debug_window_get_selected_row(debug);
245 if( selected_row == -1 ) {
246 WARN( _("No address selected, so can't run to it"), NULL );
248 debug_window_set_oneshot_breakpoint( debug, selected_row );
253 void debug_breakpoint_action_callback( GtkAction *action, gpointer user_data)
255 debug_window_t debug = gtk_gui_get_debugger();
256 int selected_row = debug_window_get_selected_row(debug);
257 if( selected_row != -1 ) {
258 debug_window_toggle_breakpoint( debug, selected_row );
.