nkeynes@1: #include nkeynes@1: #include nkeynes@1: #include nkeynes@1: #include nkeynes@1: #include "gui.h" nkeynes@1: #include "mem.h" nkeynes@1: #include "sh4dasm.h" nkeynes@1: #include "sh4core.h" nkeynes@1: nkeynes@1: #define REGISTER_FONT "-*-fixed-medium-r-normal--12-*-*-*-*-*-iso8859-1" nkeynes@1: nkeynes@1: GdkColor clrNormal, clrChanged, clrError, clrWarn, clrPC, clrDebug, clrTrace; nkeynes@1: PangoFontDescription *fixed_list_font; nkeynes@1: nkeynes@1: void open_file_callback(GtkWidget *btn, gpointer user_data); nkeynes@1: void open_file_canceled(GtkWidget *btn, gpointer user_data); nkeynes@1: void open_file( char *filename ); nkeynes@1: nkeynes@2: void init_gui() { nkeynes@2: GdkColormap *map; nkeynes@2: nkeynes@2: clrNormal.red = clrNormal.green = clrNormal.blue = 0; nkeynes@2: clrChanged.red = clrChanged.green = 64*256; nkeynes@2: clrChanged.blue = 154*256; nkeynes@2: clrError.red = 65535; nkeynes@2: clrError.green = clrError.blue = 64*256; nkeynes@2: clrPC.red = 32*256; nkeynes@2: clrPC.green = 170*256; nkeynes@2: clrPC.blue = 52*256; nkeynes@2: clrWarn = clrChanged; nkeynes@2: clrTrace.red = 156*256; nkeynes@2: clrTrace.green = 78*256; nkeynes@2: clrTrace.blue = 201*256; nkeynes@2: clrDebug = clrPC; nkeynes@1: nkeynes@2: map = gdk_colormap_new(gdk_visual_get_best(), TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrNormal, TRUE, TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrChanged, TRUE, TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrError, TRUE, TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrWarn, TRUE, TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrPC, TRUE, TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrDebug, TRUE, TRUE); nkeynes@2: gdk_colormap_alloc_color(map, &clrTrace, TRUE, TRUE); nkeynes@2: fixed_list_font = pango_font_description_from_string("Courier 10"); nkeynes@2: } nkeynes@2: nkeynes@2: void update_gui(void) { nkeynes@2: update_registers(); nkeynes@1: update_icount(); nkeynes@1: update_mmr_win(); nkeynes@2: dump_win_update_all(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void open_file_callback(GtkWidget *btn, gpointer user_data) { nkeynes@1: GtkFileSelection *file = GTK_FILE_SELECTION(user_data); nkeynes@1: gchar *filename = strdup( gtk_file_selection_get_filename( nkeynes@1: GTK_FILE_SELECTION(file) ) ); nkeynes@1: gtk_widget_destroy(GTK_WIDGET(file)); nkeynes@1: open_file( filename ); nkeynes@1: free(filename); nkeynes@1: } nkeynes@1: nkeynes@1: void open_file_canceled(GtkWidget *btn, gpointer user_data) { nkeynes@1: gtk_widget_destroy(GTK_WIDGET(user_data)); nkeynes@1: } nkeynes@1: nkeynes@1: void open_file_dialog( void ) nkeynes@1: { nkeynes@1: GtkWidget *file; nkeynes@1: nkeynes@1: file = gtk_file_selection_new( "Open..." ); nkeynes@1: gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION(file)->ok_button), nkeynes@1: "clicked", GTK_SIGNAL_FUNC(open_file_callback), file ); nkeynes@1: gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION(file)->cancel_button), nkeynes@1: "clicked", GTK_SIGNAL_FUNC(open_file_canceled), file ); nkeynes@1: gtk_widget_show( file ); nkeynes@1: } nkeynes@1: nkeynes@2: uint32_t gtk_entry_get_hex_value( GtkEntry *entry, uint32_t defaultValue ) nkeynes@1: { nkeynes@2: gchar *text = gtk_entry_get_text(entry); nkeynes@2: if( text == NULL ) nkeynes@2: return defaultValue; nkeynes@2: gchar *endptr; nkeynes@2: uint32_t value = strtoul( text, &endptr, 16 ); nkeynes@2: if( text == endptr ) { /* invalid input */ nkeynes@2: value = defaultValue; nkeynes@2: gtk_entry_set_hex_value( entry, value ); nkeynes@2: } nkeynes@2: return value; nkeynes@1: } nkeynes@1: nkeynes@2: void gtk_entry_set_hex_value( GtkEntry *entry, uint32_t value ) nkeynes@1: { nkeynes@2: char buf[10]; nkeynes@2: sprintf( buf, "%08X", value ); nkeynes@2: gtk_entry_set_text( entry, buf ); nkeynes@1: }