Tree view inner / outer slider functions but is not ideal. Going to try out text view object instead.
This commit is contained in:
parent
90482feac8
commit
6460a3035b
|
@ -85,8 +85,12 @@ struct memViewWin_t
|
||||||
GtkWidget *win;
|
GtkWidget *win;
|
||||||
GtkWidget *tree;
|
GtkWidget *tree;
|
||||||
GtkWidget *vbar;
|
GtkWidget *vbar;
|
||||||
|
GtkWidget *ivbar;
|
||||||
GtkWidget *selCellLabel;
|
GtkWidget *selCellLabel;
|
||||||
GtkTreeStore *memview_store;
|
GtkTreeStore *memview_store;
|
||||||
|
GtkAdjustment *vadj;
|
||||||
|
int baseAddr;
|
||||||
|
int maxAddr;
|
||||||
int selAddr;
|
int selAddr;
|
||||||
int selRowIdx;
|
int selRowIdx;
|
||||||
int selColIdx;
|
int selColIdx;
|
||||||
|
@ -94,11 +98,14 @@ struct memViewWin_t
|
||||||
int editColIdx;
|
int editColIdx;
|
||||||
int row_vis_start;
|
int row_vis_start;
|
||||||
int row_vis_end;
|
int row_vis_end;
|
||||||
|
int row_vis_center;
|
||||||
int mode;
|
int mode;
|
||||||
int evntSrcID;
|
int evntSrcID;
|
||||||
|
int treeViewLines;
|
||||||
unsigned char *mbuf;
|
unsigned char *mbuf;
|
||||||
int mbuf_size;
|
int mbuf_size;
|
||||||
GtkCellRenderer *hexByte_renderer[16];
|
GtkCellRenderer *hexByte_renderer[16];
|
||||||
|
bool redraw;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MODE_NES_RAM = 0,
|
MODE_NES_RAM = 0,
|
||||||
|
@ -112,6 +119,7 @@ struct memViewWin_t
|
||||||
win = NULL;
|
win = NULL;
|
||||||
tree = NULL;
|
tree = NULL;
|
||||||
vbar = NULL;
|
vbar = NULL;
|
||||||
|
vadj = NULL;
|
||||||
selCellLabel = NULL;
|
selCellLabel = NULL;
|
||||||
memview_store = NULL;
|
memview_store = NULL;
|
||||||
selRowIdx = -1;
|
selRowIdx = -1;
|
||||||
|
@ -119,11 +127,15 @@ struct memViewWin_t
|
||||||
editRowIdx = -1;
|
editRowIdx = -1;
|
||||||
editColIdx = -1;
|
editColIdx = -1;
|
||||||
selAddr = -1;
|
selAddr = -1;
|
||||||
|
baseAddr = 0;
|
||||||
row_vis_start = 0;
|
row_vis_start = 0;
|
||||||
row_vis_end = 0;
|
row_vis_end = 64;
|
||||||
|
row_vis_center= 32;
|
||||||
mode = MODE_NES_RAM;
|
mode = MODE_NES_RAM;
|
||||||
mbuf = NULL;
|
mbuf = NULL;
|
||||||
evntSrcID = 0;
|
evntSrcID = 0;
|
||||||
|
treeViewLines = 64;
|
||||||
|
redraw = 1;
|
||||||
|
|
||||||
for (int i=0; i<16; i++)
|
for (int i=0; i<16; i++)
|
||||||
{
|
{
|
||||||
|
@ -148,7 +160,69 @@ struct memViewWin_t
|
||||||
mode = new_mode;
|
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 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);
|
void showMemViewResults (int reset);
|
||||||
|
int calcVisibleRange( int *start_out, int *end_out, int *center_out );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -178,7 +252,7 @@ static void initMem( unsigned char *c, int size )
|
||||||
void memViewWin_t::showMemViewResults (int reset)
|
void memViewWin_t::showMemViewResults (int reset)
|
||||||
{
|
{
|
||||||
|
|
||||||
int lineAddr = 0, line_addr_start, line_addr_end, i, row;
|
int lineAddr = 0, line_addr_start, line_addr_end, i, row=0;
|
||||||
int addr, memSize = 0, un, ln;
|
int addr, memSize = 0, un, ln;
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
@ -230,6 +304,14 @@ void memViewWin_t::showMemViewResults (int reset)
|
||||||
mbuf_size = 0;
|
mbuf_size = 0;
|
||||||
return;
|
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)
|
if (reset)
|
||||||
|
@ -239,17 +321,18 @@ void memViewWin_t::showMemViewResults (int reset)
|
||||||
|
|
||||||
gtk_tree_store_clear (memview_store);
|
gtk_tree_store_clear (memview_store);
|
||||||
|
|
||||||
for ( lineAddr=line_addr_start; lineAddr < (line_addr_end+1); lineAddr += 16 )
|
for ( i=0; i < treeViewLines; i++)
|
||||||
{
|
{
|
||||||
gtk_tree_store_append (memview_store, &iter, NULL); // aquire iter
|
gtk_tree_store_append (memview_store, &iter, NULL); // aquire iter
|
||||||
}
|
}
|
||||||
gtk_tree_model_get_iter_first( GTK_TREE_MODEL (memview_store), &iter );
|
gtk_tree_model_get_iter_first( GTK_TREE_MODEL (memview_store), &iter );
|
||||||
|
|
||||||
line_addr_start = 0;
|
line_addr_start = 0;
|
||||||
line_addr_end = memSize;
|
line_addr_end = treeViewLines * 16;
|
||||||
|
|
||||||
row_vis_start = 0;
|
row_vis_start = 0;
|
||||||
row_vis_end = 60;
|
row_vis_end = treeViewLines;
|
||||||
|
row_vis_center = treeViewLines/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !reset )
|
if ( !reset )
|
||||||
|
@ -268,7 +351,7 @@ void memViewWin_t::showMemViewResults (int reset)
|
||||||
|
|
||||||
if ( indexArray != NULL )
|
if ( indexArray != NULL )
|
||||||
{
|
{
|
||||||
row_vis_end = indexArray[0];
|
row_vis_end = indexArray[0] + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterValid = gtk_tree_model_get_iter( GTK_TREE_MODEL (memview_store), &iter, start_path );
|
iterValid = gtk_tree_model_get_iter( GTK_TREE_MODEL (memview_store), &iter, start_path );
|
||||||
|
@ -281,17 +364,22 @@ void memViewWin_t::showMemViewResults (int reset)
|
||||||
printf("Error: Failed to get start iterator.\n");
|
printf("Error: Failed to get start iterator.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//printf("Tree View Start: %i End: %i \n", row_vis_start, row_vis_end );
|
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_start = row_vis_start * 16;
|
||||||
line_addr_end = row_vis_end * 16;
|
line_addr_end = row_vis_end * 16;
|
||||||
|
|
||||||
row = row_vis_start;
|
for ( row=row_vis_start; row<row_vis_end; row++)
|
||||||
|
|
||||||
for ( lineAddr=line_addr_start; lineAddr < line_addr_end; lineAddr += 16 )
|
|
||||||
{
|
{
|
||||||
row_changed = reset;
|
lineAddr = baseAddr + (row*16);
|
||||||
|
row_changed = reset || redraw;
|
||||||
|
|
||||||
sprintf( addrStr, "%08X", lineAddr );
|
sprintf( addrStr, "%08X", lineAddr );
|
||||||
|
|
||||||
|
@ -340,8 +428,64 @@ void memViewWin_t::showMemViewResults (int reset)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
row++;
|
|
||||||
}
|
}
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int memViewEvntSrcID = 0;
|
static int memViewEvntSrcID = 0;
|
||||||
|
@ -455,7 +599,7 @@ treeRowActivated (GtkTreeView *tree_view,
|
||||||
mv->selRowIdx = strtol( gtk_tree_path_to_string(path), NULL, 0 );
|
mv->selRowIdx = strtol( gtk_tree_path_to_string(path), NULL, 0 );
|
||||||
mv->selColIdx = strtol( gtk_tree_view_column_get_title(column), NULL, 16 );
|
mv->selColIdx = strtol( gtk_tree_view_column_get_title(column), NULL, 16 );
|
||||||
|
|
||||||
mv->selAddr = (mv->selRowIdx*16) + mv->selColIdx;
|
mv->selAddr = mv->baseAddr + (mv->selRowIdx*16) + mv->selColIdx;
|
||||||
|
|
||||||
sprintf( stmp, "<span font_desc=\"mono 12\">Selected Cell Address: 0x%04X</span>", mv->selAddr );
|
sprintf( stmp, "<span font_desc=\"mono 12\">Selected Cell Address: 0x%04X</span>", mv->selAddr );
|
||||||
|
|
||||||
|
@ -464,6 +608,45 @@ treeRowActivated (GtkTreeView *tree_view,
|
||||||
//printf("Row:Col Active: %i:%i Addr: 0x%04X \n", mv->selRowIdx, mv->selColIdx, mv->selAddr );
|
//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)
|
||||||
|
{
|
||||||
|
GtkAdjustment *ivadj;
|
||||||
|
double v, l, u, r;
|
||||||
|
|
||||||
|
ivadj = gtk_range_get_adjustment( range );
|
||||||
|
|
||||||
|
|
||||||
|
v = gtk_range_get_value( range );
|
||||||
|
l = gtk_adjustment_get_lower( ivadj );
|
||||||
|
u = gtk_adjustment_get_upper( ivadj );
|
||||||
|
|
||||||
|
r = (v - l) / (u - l);
|
||||||
|
|
||||||
|
printf("Inner VBAR: %f %f %f %f \n" ,
|
||||||
|
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 memview_cell_edited_cb (GtkCellRendererText * cell,
|
static void memview_cell_edited_cb (GtkCellRendererText * cell,
|
||||||
gchar * path_string,
|
gchar * path_string,
|
||||||
gchar * new_text, memViewWin_t * mv)
|
gchar * new_text, memViewWin_t * mv)
|
||||||
|
@ -476,7 +659,7 @@ static void memview_cell_edited_cb (GtkCellRendererText * cell,
|
||||||
|
|
||||||
rowIdx = atoi( path_string );
|
rowIdx = atoi( path_string );
|
||||||
|
|
||||||
addr = (rowIdx*16) + mv->selColIdx;
|
addr = mv->baseAddr + (rowIdx*16) + mv->selColIdx;
|
||||||
|
|
||||||
wfunc = GetWriteHandler (addr);
|
wfunc = GetWriteHandler (addr);
|
||||||
|
|
||||||
|
@ -520,6 +703,7 @@ void openMemoryViewWindow (void)
|
||||||
{
|
{
|
||||||
GtkWidget *main_vbox;
|
GtkWidget *main_vbox;
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
|
GtkWidget *vbox;
|
||||||
GtkWidget *scroll;
|
GtkWidget *scroll;
|
||||||
GtkWidget *menubar;
|
GtkWidget *menubar;
|
||||||
GtkCellRenderer *renderer;
|
GtkCellRenderer *renderer;
|
||||||
|
@ -609,7 +793,28 @@ void openMemoryViewWindow (void)
|
||||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
|
||||||
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||||
gtk_container_add (GTK_CONTAINER (scroll), mv->tree);
|
gtk_container_add (GTK_CONTAINER (scroll), mv->tree);
|
||||||
gtk_box_pack_start (GTK_BOX (main_vbox), scroll, TRUE, TRUE, 5);
|
|
||||||
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
||||||
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1);
|
||||||
|
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);
|
||||||
|
|
||||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1);
|
||||||
|
|
||||||
|
@ -623,7 +828,10 @@ void openMemoryViewWindow (void)
|
||||||
(GTK_DIALOG (mv->win))), main_vbox, TRUE, TRUE,
|
(GTK_DIALOG (mv->win))), main_vbox, TRUE, TRUE,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
mv->vbar = gtk_scrolled_window_get_vscrollbar( GTK_SCROLLED_WINDOW(scroll) );
|
mv->ivbar = gtk_scrolled_window_get_vscrollbar( GTK_SCROLLED_WINDOW(scroll) );
|
||||||
|
|
||||||
|
g_signal_connect (mv->ivbar, "value-changed",
|
||||||
|
G_CALLBACK (inner_vbar_changed), mv);
|
||||||
|
|
||||||
g_signal_connect (mv->win, "delete-event",
|
g_signal_connect (mv->win, "delete-event",
|
||||||
G_CALLBACK (closeMemoryViewWindow), mv);
|
G_CALLBACK (closeMemoryViewWindow), mv);
|
||||||
|
|
Loading…
Reference in New Issue