Added logic to allow for use of a enable checkbox to next to each breakpoint in the list

This commit is contained in:
Matthew Budd 2020-05-24 21:31:29 -04:00
parent 9f009a1850
commit 2755c9cdb2
1 changed files with 59 additions and 5 deletions

View File

@ -196,7 +196,7 @@ int debuggerWin_t::get_bpList_selrow(void)
void debuggerWin_t::bpListUpdate(void) void debuggerWin_t::bpListUpdate(void)
{ {
GtkTreeIter iter; GtkTreeIter iter;
char line[256], addrStr[32], flags[16]; char line[256], addrStr[32], flags[16], enable;
gtk_tree_store_clear( bp_store ); gtk_tree_store_clear( bp_store );
@ -234,6 +234,8 @@ void debuggerWin_t::bpListUpdate(void)
flags[5] = (watchpoint[i].flags & WP_F) ? 'F' : '-'; flags[5] = (watchpoint[i].flags & WP_F) ? 'F' : '-';
flags[6] = 0; flags[6] = 0;
enable = (watchpoint[i].flags & WP_E) ? 1 : 0;
strcpy( line, addrStr ); strcpy( line, addrStr );
strcat( line, flags ); strcat( line, flags );
@ -250,7 +252,7 @@ void debuggerWin_t::bpListUpdate(void)
strcat( line, watchpoint[i].condText); strcat( line, watchpoint[i].condText);
strcat( line, " "); strcat( line, " ");
} }
gtk_tree_store_set( bp_store, &iter, 0, line, -1 ); gtk_tree_store_set( bp_store, &iter, 0, enable, 1, line, -1 );
} }
} }
@ -809,6 +811,43 @@ static void editBreakpointCB (GtkButton * button, debuggerWin_t * dw)
} }
} }
static void enableBreakpointCB (GtkCellRendererToggle * renderer,
gchar * pathStr, debuggerWin_t * dw)
{
GtkTreePath *path;
int depth;
int *indexArray;
path = gtk_tree_path_new_from_string (pathStr);
if (path == NULL)
{
printf ("Error: gtk_tree_path_new_from_string failed\n");
return;
}
depth = gtk_tree_path_get_depth (path);
indexArray = gtk_tree_path_get_indices (path);
if (depth > 0)
{
if ( !gtk_cell_renderer_toggle_get_active(renderer) )
{
//printf("Toggle: %i On\n", indexArray[0] );
watchpoint[indexArray[0]].flags |= WP_E;
}
else
{
//printf("Toggle: %i Off\n", indexArray[0] );
watchpoint[indexArray[0]].flags &= ~WP_E;
}
}
gtk_tree_path_free (path);
dw->bpListUpdate();
}
static void DeleteBreak(int sel) static void DeleteBreak(int sel)
{ {
if(sel<0) return; if(sel<0) return;
@ -1037,6 +1076,7 @@ void openDebuggerWindow (void)
GtkWidget *entry; GtkWidget *entry;
GtkWidget *grid; GtkWidget *grid;
GtkCellRenderer *renderer; GtkCellRenderer *renderer;
GtkCellRenderer *chkbox_renderer;
GtkTreeViewColumn *column; GtkTreeViewColumn *column;
debuggerWin_t *dw; debuggerWin_t *dw;
@ -1278,16 +1318,30 @@ void openDebuggerWindow (void)
gtk_box_pack_start (GTK_BOX (vbox3), frame, TRUE, TRUE, 2); gtk_box_pack_start (GTK_BOX (vbox3), frame, TRUE, TRUE, 2);
dw->bp_store = dw->bp_store =
gtk_tree_store_new (1, G_TYPE_STRING ); gtk_tree_store_new (2, G_TYPE_BOOLEAN, G_TYPE_STRING );
dw->bp_tree = dw->bp_tree =
gtk_tree_view_new_with_model (GTK_TREE_MODEL gtk_tree_view_new_with_model (GTK_TREE_MODEL
(dw->bp_store)); (dw->bp_store));
gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (dw->bp_tree),
GTK_TREE_VIEW_GRID_LINES_VERTICAL);
chkbox_renderer = gtk_cell_renderer_toggle_new ();
gtk_cell_renderer_toggle_set_activatable ((GtkCellRendererToggle *)
chkbox_renderer, TRUE);
column = gtk_tree_view_column_new_with_attributes ("Ena",
chkbox_renderer,
"active", 0, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (dw->bp_tree), column);
g_signal_connect (chkbox_renderer, "toggled",
G_CALLBACK (enableBreakpointCB), (void *) dw);
renderer = gtk_cell_renderer_text_new (); renderer = gtk_cell_renderer_text_new ();
g_object_set (renderer, "family", "MonoSpace", NULL); g_object_set (renderer, "family", "MonoSpace", NULL);
column = gtk_tree_view_column_new_with_attributes ("Breakpoint", renderer, column = gtk_tree_view_column_new_with_attributes ("Addr/Flags", renderer,
"text", 0, NULL); "text", 1, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (dw->bp_tree), column); gtk_tree_view_append_column (GTK_TREE_VIEW (dw->bp_tree), column);
scroll = gtk_scrolled_window_new (NULL, NULL); scroll = gtk_scrolled_window_new (NULL, NULL);