nkeynes@26: /** nkeynes@167: * $Id: callbacks.c,v 1.15 2006-06-19 11:00:42 nkeynes Exp $ nkeynes@26: * nkeynes@26: * All GTK callbacks go here (stubs are autogenerated by Glade) nkeynes@26: * nkeynes@26: * Copyright (c) 2005 Nathan Keynes. nkeynes@26: * nkeynes@26: * This program is free software; you can redistribute it and/or modify nkeynes@26: * it under the terms of the GNU General Public License as published by nkeynes@26: * the Free Software Foundation; either version 2 of the License, or nkeynes@26: * (at your option) any later version. nkeynes@26: * nkeynes@26: * This program is distributed in the hope that it will be useful, nkeynes@26: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@26: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@26: * GNU General Public License for more details. nkeynes@26: */ nkeynes@26: nkeynes@1: #ifdef HAVE_CONFIG_H nkeynes@1: # include nkeynes@1: #endif nkeynes@1: nkeynes@1: #include nkeynes@1: nkeynes@26: #include "gui/callbacks.h" nkeynes@26: #include "gui/interface.h" nkeynes@26: #include "gui/gui.h" nkeynes@139: #include "gdrom/gdrom.h" nkeynes@43: #include "mem.h" nkeynes@18: #include "dreamcast.h" nkeynes@26: #include "loader.h" nkeynes@1: nkeynes@1: int selected_pc = -1; nkeynes@43: int selected_row = -1; nkeynes@1: nkeynes@1: void nkeynes@1: on_new_file1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_open1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@167: const gchar *dir = dreamcast_get_config_value(CONFIG_DEFAULT_PATH); nkeynes@167: open_file_dialog( "Open...", file_load_magic, NULL, NULL, dir ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_save1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_save_as1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_exit1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: gtk_main_quit(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_preferences1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_about1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: GtkWidget *about = create_about_win(); nkeynes@1: gtk_widget_show(about); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_load_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@167: const gchar *dir = dreamcast_get_config_value(CONFIG_DEFAULT_PATH); nkeynes@167: open_file_dialog( "Open...", gdrom_mount_image, NULL, NULL, dir ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_reset_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@26: dreamcast_reset(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_stop_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@26: dreamcast_stop(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_step_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@30: debug_info_t data = get_debug_info(GTK_WIDGET(button)); nkeynes@30: debug_win_single_step(data); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_run_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@23: dreamcast_run(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_runto_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: if( selected_pc == -1 ) nkeynes@1: WARN( "No address selected, so can't run to it", NULL ); nkeynes@1: else { nkeynes@45: debug_info_t data = get_debug_info(GTK_WIDGET(button)); nkeynes@45: debug_win_set_oneshot_breakpoint( data, selected_row ); nkeynes@23: dreamcast_run(); nkeynes@1: } nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_break_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@43: debug_info_t data = get_debug_info(GTK_WIDGET(button)); nkeynes@45: debug_win_toggle_breakpoint( data, selected_row ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: gboolean nkeynes@1: on_debug_win_delete_event (GtkWidget *widget, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: gtk_main_quit(); nkeynes@26: return FALSE; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_disasm_list_select_row (GtkCList *clist, nkeynes@1: gint row, nkeynes@1: gint column, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info(GTK_WIDGET(clist)); nkeynes@9: selected_pc = row_to_address(data, row); nkeynes@43: selected_row = row; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_disasm_list_unselect_row (GtkCList *clist, nkeynes@1: gint row, nkeynes@1: gint column, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info(GTK_WIDGET(clist)); nkeynes@9: int pc = row_to_address(data,row); nkeynes@1: if( selected_pc == pc ) selected_pc = -1; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_mem_mapped_regs1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: mmr_open_win(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: gboolean nkeynes@1: on_mmr_win_delete_event (GtkWidget *widget, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: mmr_close_win(); nkeynes@1: return TRUE; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_mmr_close_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: mmr_close_win(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_mode_field_changed (GtkEditable *editable, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@18: const gchar *text = gtk_entry_get_text( GTK_ENTRY(editable) ); nkeynes@10: debug_info_t data = get_debug_info( GTK_WIDGET(editable) ); nkeynes@10: set_disassembly_cpu( data, text ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_page_locked_btn_toggled (GtkToggleButton *togglebutton, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: gboolean nkeynes@1: on_page_field_key_press_event (GtkWidget *widget, nkeynes@1: GdkEventKey *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: if( event->keyval == GDK_Return || event->keyval == GDK_Linefeed ) { nkeynes@9: debug_info_t data = get_debug_info(widget); nkeynes@18: const gchar *text = gtk_entry_get_text( GTK_ENTRY(widget) ); nkeynes@1: gchar *endptr; nkeynes@1: unsigned int val = strtoul( text, &endptr, 16 ); nkeynes@1: if( text == endptr ) { /* invalid input */ nkeynes@1: char buf[10]; nkeynes@9: sprintf( buf, "%08X", row_to_address(data,0) ); nkeynes@1: gtk_entry_set_text( GTK_ENTRY(widget), buf ); nkeynes@1: } else { nkeynes@9: set_disassembly_region(data, val); nkeynes@1: } nkeynes@1: } nkeynes@1: return FALSE; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_output_list_select_row (GtkCList *clist, nkeynes@1: gint row, nkeynes@1: gint column, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: if( event->type == GDK_2BUTTON_PRESS && event->button.button == 1 ) { nkeynes@1: char *val; nkeynes@45: gtk_clist_get_text( clist, row, 2, &val ); nkeynes@1: if( val[0] != '\0' ) { nkeynes@1: int addr = strtoul( val, NULL, 16 ); nkeynes@9: debug_info_t data = get_debug_info( GTK_WIDGET(clist) ); nkeynes@9: jump_to_disassembly( data, addr, TRUE ); nkeynes@1: } nkeynes@1: } nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_jump_pc_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info( GTK_WIDGET(button) ); nkeynes@9: jump_to_pc( data, TRUE ); nkeynes@1: } nkeynes@1: nkeynes@2: nkeynes@2: void nkeynes@2: on_button_add_watch_clicked (GtkButton *button, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: nkeynes@2: } nkeynes@2: nkeynes@2: nkeynes@2: void nkeynes@2: on_button_clear_all_clicked (GtkButton *button, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: nkeynes@2: } nkeynes@2: nkeynes@2: nkeynes@2: void nkeynes@2: on_button_close_clicked (GtkButton *button, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: nkeynes@2: } nkeynes@2: nkeynes@2: nkeynes@2: void nkeynes@2: on_view_memory_activate (GtkMenuItem *menuitem, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: dump_window_new(); nkeynes@2: } nkeynes@2: nkeynes@18: nkeynes@18: void nkeynes@18: on_loadstate_button_clicked (GtkToolButton *toolbutton, nkeynes@18: gpointer user_data) nkeynes@18: { nkeynes@167: const gchar *dir = dreamcast_get_config_value(CONFIG_SAVE_PATH); nkeynes@167: open_file_dialog( "Load state...", dreamcast_load_state, "*.dst", "DreamOn Save State (*.dst)", dir ); nkeynes@18: } nkeynes@18: nkeynes@18: nkeynes@18: void nkeynes@18: on_savestate_button_clicked (GtkToolButton *toolbutton, nkeynes@18: gpointer user_data) nkeynes@18: { nkeynes@167: const gchar *dir = dreamcast_get_config_value(CONFIG_SAVE_PATH); nkeynes@167: save_file_dialog( "Save state...", dreamcast_save_state, "*.dst", "DreamOn Save State (*.dst)", dir ); nkeynes@18: } nkeynes@18: