From 5db17d79133ad2faa2757622ffa69986ee24d269 Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Tue, 19 May 2020 01:00:14 -0400 Subject: [PATCH] Cleaned out treeview logic in favor of text view. Text view is much more efficient. --- src/drivers/sdl/memview.cpp | 484 +----------------------------------- 1 file changed, 2 insertions(+), 482 deletions(-) diff --git a/src/drivers/sdl/memview.cpp b/src/drivers/sdl/memview.cpp index 4366cc3c..c66e4dc4 100644 --- a/src/drivers/sdl/memview.cpp +++ b/src/drivers/sdl/memview.cpp @@ -84,27 +84,16 @@ static int getROM( unsigned int offset) struct memViewWin_t { GtkWidget *win; - GtkWidget *tree; - GtkWidget *vbar; GtkWidget *ivbar; GtkWidget *selCellLabel; GtkTextView *textview; GtkTextBuffer *textbuf; GtkTreeStore *memview_store; - GtkAdjustment *vadj; - int baseAddr; - int maxAddr; - int selAddr; - int selRowIdx; - int selColIdx; - int editRowIdx; - int editColIdx; int row_vis_start; int row_vis_end; int row_vis_center; int mode; int evntSrcID; - int treeViewLines; int numLines; int numCharsPerLine; unsigned char *mbuf; @@ -123,19 +112,10 @@ struct memViewWin_t memViewWin_t(void) { win = NULL; - tree = NULL; - vbar = NULL; - vadj = NULL; textview = NULL; textbuf = NULL; selCellLabel = NULL; memview_store = NULL; - selRowIdx = -1; - selColIdx = -1; - editRowIdx = -1; - editColIdx = -1; - selAddr = -1; - baseAddr = 0; row_vis_start = 0; row_vis_end = 64; row_vis_center= 32; @@ -143,7 +123,6 @@ struct memViewWin_t mbuf = NULL; numLines = 0; evntSrcID = 0; - treeViewLines = 64; numCharsPerLine = 90; redraw = 1; memAccessFunc = getRAM; @@ -171,49 +150,6 @@ struct memViewWin_t mode = new_mode; } - void setBaseAddr( double value ) - { - int addr, r, max; - addr = (int)( value + 0.50 ); - - printf("Set BaseAddr Req: %i 0x%08x\n", addr, addr ); - - r = addr % 16; - - addr = addr - r; - - max = mbuf_size - (treeViewLines * 16); - - if ( addr >= max ) - { - addr = max; - } - baseAddr = addr; - redraw = 1; - } - - void incrBaseAddr( int value ) - { - int addr, r, max; - - addr = baseAddr + value; - - printf("Set BaseAddr Req: %i 0x%08x\n", addr, addr ); - - r = addr % 16; - - addr = addr - r; - - max = mbuf_size - (treeViewLines * 16); - - if ( addr >= max ) - { - addr = max; - } - baseAddr = addr; - redraw = 1; - } - int writeMem( unsigned int addr, int value ) { switch ( mode ) @@ -241,26 +177,7 @@ struct memViewWin_t } } - //int set_inner_slider( double value ) - //{ - // GtkAdjustment *ivadj; - // double l, u; - - // ivadj = gtk_range_get_adjustment( GTK_RANGE(ivbar) ); - - // l = gtk_adjustment_get_lower( ivadj ); - // u = gtk_adjustment_get_upper( ivadj ); - - // printf("Inner VBAR Limits: %f %f \n" , - // l, u ); - - // gtk_range_set_value( GTK_RANGE(ivbar), l + value*(u-l) ); - - // return 0; - //} - void showMemViewResults (int reset); - //int calcVisibleRange( int *start_out, int *end_out, int *center_out ); int calcVisibleRange( int *start_out, int *end_out, int *center_out ); }; @@ -456,246 +373,6 @@ void memViewWin_t::showMemViewResults (int reset) } - -//void memViewWin_t::showMemViewResults (int reset) -//{ -// -// int lineAddr = 0, line_addr_start, line_addr_end, i, row=0; -// int addr, memSize = 0, un, ln; -// unsigned int c; -// GtkTreeIter iter; -// char addrStr[16], valStr[16][8], ascii[18], row_changed; -// int *indexArray; -// GtkTreePath *start_path = NULL, *end_path = NULL; -// int (*memAccessFunc)( unsigned int offset) = NULL; -// -// switch ( mode ) -// { -// default: -// case MODE_NES_RAM: -// memAccessFunc = getRAM; -// memSize = 0x10000; -// break; -// case MODE_NES_PPU: -// memAccessFunc = getPPU; -// memSize = (GameInfo->type == GIT_NSF ? 0x2000 : 0x4000); -// break; -// case MODE_NES_OAM: -// memAccessFunc = getOAM; -// memSize = 0x100; -// break; -// case MODE_NES_ROM: -// memAccessFunc = getROM; -// memSize = 16 + CHRsize[0] + PRGsize[0]; -// break; -// } -// -// if ( (mbuf == NULL) || (mbuf_size != memSize) ) -// { -// printf("Mode: %i MemSize:%i 0x%08x\n", mode, memSize, (unsigned int)memSize ); -// reset = 1; -// -// if ( mbuf ) -// { -// free(mbuf); mbuf = NULL; -// } -// mbuf = (unsigned char *)malloc( memSize ); -// -// if ( mbuf ) -// { -// mbuf_size = memSize; -// initMem( mbuf, memSize ); -// } -// else -// { -// printf("Error: Failed to allocate memview buffer size\n"); -// mbuf_size = 0; -// return; -// } -// -// gtk_adjustment_configure ( vadj, -// 0.0, // value, -// 0.0, // lower, -// mbuf_size, // upper, -// 16.0, // step_increment, -// 32.0, // page_increment, -// 32.0 ); // page_size); -// } -// -// if (reset) -// { -// line_addr_start = 0; -// line_addr_end = memSize; -// -// gtk_tree_store_clear (memview_store); -// -// for ( i=0; i < treeViewLines; i++) -// { -// gtk_tree_store_append (memview_store, &iter, NULL); // aquire iter -// } -// gtk_tree_model_get_iter_first( GTK_TREE_MODEL (memview_store), &iter ); -// -// line_addr_start = 0; -// line_addr_end = treeViewLines * 16; -// -// row_vis_start = 0; -// row_vis_end = treeViewLines; -// row_vis_center = treeViewLines/2; -// } -// -// if ( !reset ) -// { -// if ( gtk_tree_view_get_visible_range ( GTK_TREE_VIEW(tree), &start_path, &end_path ) ) -// { -// int iterValid; -// indexArray = gtk_tree_path_get_indices (start_path); -// -// if ( indexArray != NULL ) -// { -// row_vis_start = indexArray[0]; -// } -// -// indexArray = gtk_tree_path_get_indices (end_path); -// -// if ( indexArray != NULL ) -// { -// row_vis_end = indexArray[0] + 1; -// } -// -// iterValid = gtk_tree_model_get_iter( GTK_TREE_MODEL (memview_store), &iter, start_path ); -// -// gtk_tree_path_free( start_path ); -// gtk_tree_path_free( end_path ); -// -// if ( !iterValid ) -// { -// printf("Error: Failed to get start iterator.\n"); -// return; -// } -// row_vis_center = row_vis_start + (row_vis_end - row_vis_start + 1) / 2; -// //printf("Tree View Start: %i End: %i Center: %i \n", row_vis_start, row_vis_end, row_vis_center ); -// -// //if ( row_vis_center > 48 ) -// //{ -// // set_inner_slider( 0.50 ); -// //} -// } -// } -// line_addr_start = row_vis_start * 16; -// line_addr_end = row_vis_end * 16; -// -// for ( row=row_vis_start; row> 4; -// ln = ( c & 0x000f ); -// -// valStr[i][0] = conv2xchar(un); -// valStr[i][1] = conv2xchar(ln); -// valStr[i][2] = 0; -// -// if ( isprint(c) ) -// { -// ascii[i] = c; -// } -// else -// { -// ascii[i] = '.'; -// } -// if ( c != mbuf[addr] ) -// { -// row_changed = 1; -// mbuf[addr] = c; -// } -// } -// ascii[16] = 0; -// -// if ( row_changed && (editRowIdx != row) ) -// { -// gtk_tree_store_set( memview_store, &iter, 0, addrStr, -// 1 , valStr[0] , 2, valStr[1] , 3, valStr[2] , 4, valStr[3], -// 5 , valStr[4] , 6, valStr[5] , 7, valStr[6] , 8, valStr[7], -// 9 , valStr[8] , 10, valStr[9] , 11, valStr[10], 12, valStr[11], -// 13, valStr[12], 14, valStr[13], 15, valStr[14], 16, valStr[15], -// 17, ascii, -// -1 ); -// } -// -// if (!gtk_tree_model_iter_next -// (GTK_TREE_MODEL (memview_store), &iter)) -// { -// return; -// } -// } -// redraw = 0; -//} - -//int memViewWin_t::calcVisibleRange( int *start_out, int *end_out, int *center_out ) -//{ -// int retval = 0; -// int *indexArray; -// int start=0, end=64, center=32; -// GtkTreePath *start_path = NULL, *end_path = NULL; -// -// if ( gtk_tree_view_get_visible_range ( GTK_TREE_VIEW(tree), &start_path, &end_path ) ) -// { -// indexArray = gtk_tree_path_get_indices (start_path); -// -// if ( indexArray != NULL ) -// { -// start = indexArray[0]; -// } -// else -// { -// retval = -1; -// } -// -// indexArray = gtk_tree_path_get_indices (end_path); -// -// if ( indexArray != NULL ) -// { -// end = indexArray[0] + 1; -// } -// else -// { -// retval = -1; -// } -// -// gtk_tree_path_free( start_path ); -// gtk_tree_path_free( end_path ); -// -// center = start + (end - start + 1) / 2; -// -// if ( start_out != NULL ) -// { -// *start_out = start; -// } -// if ( end_out != NULL ) -// { -// *end_out = end; -// } -// if ( center_out != NULL ) -// { -// *center_out = center; -// } -// } -// else -// { -// retval = -1; -// } -// return retval; -//} - int memViewWin_t::calcVisibleRange( int *start_out, int *end_out, int *center_out ) { GtkAdjustment *ivadj; @@ -907,38 +584,6 @@ textbuffer_string_insert (GtkTextBuffer *textbuffer, } } - -static void -treeRowActivated (GtkTreeView *tree_view, - GtkTreePath *path, - GtkTreeViewColumn *column, - memViewWin_t * mv ) -{ - char stmp[128]; - - mv->selRowIdx = strtol( gtk_tree_path_to_string(path), NULL, 0 ); - mv->selColIdx = strtol( gtk_tree_view_column_get_title(column), NULL, 16 ); - - mv->selAddr = mv->baseAddr + (mv->selRowIdx*16) + mv->selColIdx; - - sprintf( stmp, "Selected Cell Address: 0x%04X", mv->selAddr ); - - gtk_label_set_markup ( GTK_LABEL(mv->selCellLabel), stmp ); - - //printf("Row:Col Active: %i:%i Addr: 0x%04X \n", mv->selRowIdx, mv->selColIdx, mv->selAddr ); -} - -static gboolean -vscroll_changed (GtkRange *range, - GtkScrollType scroll, - gdouble value, - memViewWin_t * mv) -{ - //mv->setBaseAddr( value ); - - return FALSE; -} - static void inner_vbar_changed (GtkRange *range, memViewWin_t * mv) @@ -959,63 +604,14 @@ inner_vbar_changed (GtkRange *range, // v, l, u, r ); } -static void -outer_vbar_changed (GtkRange *range, - memViewWin_t * mv) -{ - //printf("Outer VBAR: %f \n", gtk_range_get_value( range ) ); - //mv->setBaseAddr( gtk_range_get_value( range ) ); -} - static void textview_backspace_cb (GtkTextView *text_view, memViewWin_t * mv) { - printf("BackSpace:\n"); + //printf("BackSpace:\n"); mv->redraw = 1; } -static void memview_cell_edited_cb (GtkCellRendererText * cell, - gchar * path_string, - gchar * new_text, memViewWin_t * mv) -{ - int addr, rowIdx; - unsigned int value; - writefunc wfunc; - - //printf("PATH: %s \n", path_string ); - - rowIdx = atoi( path_string ); - - addr = mv->baseAddr + (rowIdx*16) + mv->selColIdx; - - wfunc = GetWriteHandler (addr); - - if (wfunc) - { - value = strtoul (new_text, NULL, 16); - - wfunc ((uint32) addr, - (uint8) (value & 0x000000ff)); - } - - mv->editRowIdx = -1; - mv->editColIdx = -1; -} -static void memview_cell_edited_start_cb (GtkCellRenderer * renderer, GtkCellEditable * editable, gchar * path, memViewWin_t * mv) -{ - //printf("MemView Edit Start: '%s':%li\n", path, (long)user_data); - mv->editRowIdx = atoi (path); - mv->editColIdx = mv->selColIdx; -} - -static void memview_cell_edited_cancel_cb (GtkCellRenderer * renderer, memViewWin_t * mv) -{ - //printf("MemView Edit Cancel:%li\n", (long)user_data); - mv->editRowIdx = -1; - mv->editColIdx = -1; -} - static gint updateMemViewTree (void *userData) { std::list ::iterator it; @@ -1034,10 +630,7 @@ void openMemoryViewWindow (void) GtkWidget *vbox; GtkWidget *scroll; GtkWidget *menubar; - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; memViewWin_t *mv; - //void (*memview_cell_edited_start_cbs)(GtkCellRenderer * renderer, GtkCellEditable * editable, gchar * path, memViewWin_t * mv)[16]; mv = new memViewWin_t; @@ -1058,65 +651,6 @@ void openMemoryViewWindow (void) gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); - mv->memview_store = - gtk_tree_store_new ( 18, - G_TYPE_STRING, // Address Field - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, // Bytes 0 -> 3 - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, // Bytes 4 -> 7 - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, // Bytes 8 -> 11 - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, // Bytes 12 -> 15 - G_TYPE_STRING ); // Ascii Byte Decoding - - mv->tree = - gtk_tree_view_new_with_model (GTK_TREE_MODEL - (mv->memview_store)); - - gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (mv->tree), - GTK_TREE_VIEW_GRID_LINES_VERTICAL); - - g_object_set( mv->tree, "activate-on-single-click", TRUE, NULL ); - - g_signal_connect (mv->tree, "row-activated", - (GCallback) treeRowActivated, - (gpointer) mv); - - renderer = gtk_cell_renderer_text_new (); - g_object_set (renderer, "family", "MonoSpace", NULL); - column = gtk_tree_view_column_new_with_attributes ("Addr", renderer, - "text", 0, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (mv->tree), column); - - for (long int i=0; i<16; i++) - { - char title[16]; - - sprintf( title, "%02lX", i ); - - renderer = gtk_cell_renderer_text_new (); - g_object_set (renderer, "family", "MonoSpace", NULL); - g_object_set (renderer, "editable", TRUE, NULL); - g_signal_connect (renderer, "edited", - (GCallback) memview_cell_edited_cb, (gpointer) mv); - g_signal_connect (renderer, "editing-started", - (GCallback) memview_cell_edited_start_cb, - (gpointer) mv); - g_signal_connect (renderer, "editing-canceled", - (GCallback) memview_cell_edited_cancel_cb, - (gpointer) mv); - column = gtk_tree_view_column_new_with_attributes ( title, - renderer, "text", i+1, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (mv->tree), column); - - mv->hexByte_renderer[i] = renderer; - } - - renderer = gtk_cell_renderer_text_new (); - g_object_set (renderer, "family", "MonoSpace", NULL); - column = gtk_tree_view_column_new_with_attributes ("ASCII", renderer, - "text", 17, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (mv->tree), column); - mv->textview = (GtkTextView*) gtk_text_view_new(); gtk_text_view_set_monospace( mv->textview, TRUE ); @@ -1140,8 +674,7 @@ void openMemoryViewWindow (void) scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - //gtk_container_add (GTK_CONTAINER (scroll), mv->tree); + GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET(mv->textview) ); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); @@ -1149,19 +682,6 @@ void openMemoryViewWindow (void) gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 2); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 2); - mv->vadj = gtk_adjustment_new( 0, 0, 100, 1, 20, 20 ); - - mv->vbar = gtk_scrollbar_new( GTK_ORIENTATION_VERTICAL, mv->vadj ); - - g_signal_connect (mv->vbar, "change-value", - G_CALLBACK (vscroll_changed), mv); - g_signal_connect (mv->vbar, "value-changed", - G_CALLBACK (outer_vbar_changed), mv); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); - - gtk_box_pack_start (GTK_BOX (vbox), mv->vbar, TRUE, TRUE, 2); - gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, TRUE, TRUE, 5);