more work on watch view to replace all old uis

This commit is contained in:
Ryan Fleury
2024-09-23 14:26:27 -07:00
parent f728614e0b
commit bfe6f655be
7 changed files with 100 additions and 71 deletions
+1 -1
View File
@@ -33,7 +33,7 @@ struct CTRL_MetaEvalFrameArray
U64 count;
CTRL_MetaEvalFrame *v;
};
ptr_type(CTRL_MetaEvalFrameArray__v_ptr_type, type(CTRL_MetaEvalFrame), .count_delimiter_name = str8_lit_comp("count"));
ptr_type(CTRL_MetaEvalFrameArray__v_ptr_type, &CTRL_MetaEvalFrame__vaddr_type, .count_delimiter_name = str8_lit_comp("count"));
struct_members(CTRL_MetaEvalFrameArray)
{
member_lit_comp(CTRL_MetaEvalFrameArray, type(U64), count),
@@ -423,8 +423,16 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(only)
}
}
E_MemberArray new_members_array = e_member_array_from_list(scratch.arena, &new_members);
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
E_TypeKey new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
E_TypeKey new_type = {0};
if(new_members_array.count == 1 && new_members_array.v[0].off == 0)
{
new_type = new_members_array.v[0].type_key;
}
else
{
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
}
expr = e_expr_ref_addr(arena, expr);
expr = e_expr_ref_cast(arena, e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, new_type, 0), expr);
expr = e_expr_ref_deref(arena, expr);
@@ -462,8 +470,16 @@ EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(omit)
}
}
E_MemberArray new_members_array = e_member_array_from_list(scratch.arena, &new_members);
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
E_TypeKey new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
E_TypeKey new_type = {0};
if(new_members_array.count == 1 && new_members_array.v[0].off == 0)
{
new_type = new_members_array.v[0].type_key;
}
else
{
String8 struct_name = e_type_string_from_key(scratch.arena, irtree.type_key);
new_type = e_type_key_cons(.kind = E_TypeKind_Struct, .name = struct_name, .members = new_members_array.v, .count = new_members_array.count);
}
expr = e_expr_ref_addr(arena, expr);
expr = e_expr_ref_cast(arena, e_type_key_cons_ptr(e_type_state->ctx->primary_module->arch, new_type, 0), expr);
expr = e_expr_ref_deref(arena, expr);
@@ -527,7 +527,7 @@ internal void
ev_block_end(EV_BlockList *list, EV_Block *block)
{
EV_BlockNode *n = CastFromMember(EV_BlockNode, v, block);
SLLQueuePush(list->first, list->last, n);
DLLPushBack(list->first, list->last, n);
list->count += 1;
list->total_visual_row_count += dim_1u64(block->visual_idx_range);
list->total_semantic_row_count += dim_1u64(block->semantic_idx_range);
@@ -563,7 +563,8 @@ ev_append_expr_blocks__rec(Arena *arena, EV_View *view, String8 filter, EV_Key p
//- rjf: do view rule children block generation, if we have an applicable view rule
if(parent_is_expanded && block_prod_view_rule_info != &ev_nil_view_rule_info)
{
block_prod_view_rule_info->block_prod(arena, view, filter, parent_key, key, node, string, expr, view_rules, block_prod_view_rule_params, depth+1, list_out);
E_Expr *expr_resolved = ev_expr_from_expr_view_rules(arena, expr, view_rules);
block_prod_view_rule_info->block_prod(arena, view, filter, parent_key, key, node, string, expr_resolved, view_rules, block_prod_view_rule_params, depth+1, list_out);
}
scratch_end(scratch);
@@ -639,7 +640,7 @@ ev_block_list_from_view_expr_keys(Arena *arena, EV_View *view, String8 filter, E
}
//- rjf: push expansions for root
ev_append_expr_blocks__rec(arena, view, filter, parent_key, key, expr, expr_resolved, view_rule_list, depth, &blocks);
ev_append_expr_blocks__rec(arena, view, filter, parent_key, key, expr, parse.expr, view_rule_list, depth, &blocks);
}
ProfEnd();
return blocks;
@@ -1094,19 +1095,37 @@ internal String8
ev_expr_string_from_row(Arena *arena, EV_Row *row)
{
String8 result = row->string;
if(result.size == 0) switch(row->expr->kind)
E_Expr *notable_expr = row->expr;
for(B32 good = 0; !good;)
{
switch(notable_expr->kind)
{
default:{good = 1;}break;
case E_ExprKind_Address:
case E_ExprKind_Deref:
case E_ExprKind_Cast:
{
notable_expr = notable_expr->last;
}break;
case E_ExprKind_Ref:
{
notable_expr = notable_expr->ref;
}break;
}
}
if(result.size == 0) switch(notable_expr->kind)
{
default:
{
result = e_string_from_expr(arena, row->expr);
result = e_string_from_expr(arena, notable_expr);
}break;
case E_ExprKind_ArrayIndex:
{
result = push_str8f(arena, "[%S]", e_string_from_expr(arena, row->expr->last));
result = push_str8f(arena, "[%S]", e_string_from_expr(arena, notable_expr->last));
}break;
case E_ExprKind_MemberAccess:
{
result = push_str8f(arena, ".%S", e_string_from_expr(arena, row->expr->last));
result = push_str8f(arena, ".%S", e_string_from_expr(arena, notable_expr->last));
}break;
}
return result;
@@ -109,7 +109,7 @@ typedef enum EV_BlockKind
EV_BlockKind_EnumMembers, // members of enum
EV_BlockKind_Elements, // elements of array
EV_BlockKind_Canvas, // escape hatch for arbitrary UI
EV_BlockKind_DebugInfoTable, // block of filtered debug info table elements
EV_BlockKind_DebugInfoTable, // block of filtered debug info table elements
EV_BlockKind_COUNT,
}
EV_BlockKind;
@@ -143,6 +143,7 @@ typedef struct EV_BlockNode EV_BlockNode;
struct EV_BlockNode
{
EV_BlockNode *next;
EV_BlockNode *prev;
EV_Block v;
};
@@ -172,7 +173,7 @@ struct EV_BlockArray
#define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name) ev_view_rule_expr_resolution__##name
#define EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(name) internal EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(EV_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name))
#define EV_VIEW_RULE_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, \
EV_View *view, \
EV_View *view, \
String8 filter, \
EV_Key parent_key, \
EV_Key key, \
+21 -25
View File
@@ -7877,14 +7877,14 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
Temp scratch = scratch_begin(&arena, 1);
RD_EntityList watches = rd_query_cached_entity_list_with_kind(RD_EntityKind_Watch);
EV_ViewRuleList top_level_view_rules = {0};
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(RD_EntityNode *n = watches.first; n != 0; n = n->next)
{
RD_Entity *entity = n->entity;
String8 entity_expr_string = entity->string;
EV_Key entity_parent_key = rd_parent_ev_key_from_entity(entity);
EV_Key entity_key = rd_ev_key_from_entity(entity);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, filter, &top_level_view_rules, entity_expr_string, entity_parent_key, entity_key, depth);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, filter, view_rules_inherited, entity_expr_string, entity_parent_key, entity_key, depth);
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, entity_expr_string);
if(blocks.total_semantic_row_count > 1 || matches.count == matches.needle_part_count)
{
@@ -7901,18 +7901,14 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
Temp scratch = scratch_begin(&arena, 1);
RD_EntityList targets = rd_query_cached_entity_list_with_kind(RD_EntityKind_Target);
EV_ViewRuleList top_level_view_rules = {0};
EV_Key addnew_key = ev_key_make(ev_hash_from_key(key), 1);
EV_Block *addnew_block = ev_block_begin(arena, EV_BlockKind_Canvas, key, addnew_key, depth);
addnew_block->visual_idx_range = addnew_block->semantic_idx_range = r1u64(0, 1);
ev_block_end(out, addnew_block);
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(RD_EntityNode *n = targets.first; n != 0; n = n->next)
{
RD_Entity *target = n->entity;
String8 target_expr_string = push_str8f(arena, "$%I64u", target->id);
EV_Key target_parent_key = key;
EV_Key target_key = ev_key_make(ev_hash_from_key(target_parent_key), target->id);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, target_expr_string, target_parent_key, target_key, depth);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, target_expr_string, target_parent_key, target_key, depth);
ev_block_list_concat__in_place(out, &blocks);
}
scratch_end(scratch);
@@ -7925,14 +7921,14 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
Temp scratch = scratch_begin(&arena, 1);
RD_EntityList bps = rd_query_cached_entity_list_with_kind(RD_EntityKind_Breakpoint);
EV_ViewRuleList top_level_view_rules = {0};
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(RD_EntityNode *n = bps.first; n != 0; n = n->next)
{
RD_Entity *bp = n->entity;
String8 bp_expr_string = push_str8f(arena, "$%I64u", bp->id);
EV_Key bp_parent_key = key;
EV_Key bp_key = ev_key_make(ev_hash_from_key(bp_parent_key), bp->id);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, bp_expr_string, bp_parent_key, bp_key, depth);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, bp_expr_string, bp_parent_key, bp_key, depth);
ev_block_list_concat__in_place(out, &blocks);
}
scratch_end(scratch);
@@ -7945,14 +7941,14 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
Temp scratch = scratch_begin(&arena, 1);
RD_EntityList wps = rd_query_cached_entity_list_with_kind(RD_EntityKind_WatchPin);
EV_ViewRuleList top_level_view_rules = {0};
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(RD_EntityNode *n = wps.first; n != 0; n = n->next)
{
RD_Entity *wp = n->entity;
String8 wp_expr_string = push_str8f(arena, "$%I64u", wp->id);
EV_Key wp_parent_key = key;
EV_Key wp_key = ev_key_make(ev_hash_from_key(wp_parent_key), wp->id);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, wp_expr_string, wp_parent_key, wp_key, depth);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, wp_expr_string, wp_parent_key, wp_key, depth);
ev_block_list_concat__in_place(out, &blocks);
}
scratch_end(scratch);
@@ -7965,14 +7961,14 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
Temp scratch = scratch_begin(&arena, 1);
CTRL_EntityList entities = ctrl_entity_list_from_kind(d_state->ctrl_entity_store, CTRL_EntityKind_Thread);
EV_ViewRuleList top_level_view_rules = {0};
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(CTRL_EntityNode *n = entities.first; n != 0; n = n->next)
{
CTRL_Entity *entity = n->v;
String8 entity_expr_string = push_str8f(arena, "$_%I64x_%I64x", entity->handle.machine_id, entity->handle.dmn_handle.u64[0]);
EV_Key entity_parent_key = key;
EV_Key entity_key = ev_key_make(ev_hash_from_key(entity_parent_key), d_hash_from_string(entity_expr_string));
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, entity_expr_string, entity_parent_key, entity_key, depth);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, entity_expr_string, entity_parent_key, entity_key, depth);
ev_block_list_concat__in_place(out, &blocks);
}
scratch_end(scratch);
@@ -7985,14 +7981,14 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
Temp scratch = scratch_begin(&arena, 1);
CTRL_EntityList entities = ctrl_entity_list_from_kind(d_state->ctrl_entity_store, CTRL_EntityKind_Module);
EV_ViewRuleList top_level_view_rules = {0};
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(CTRL_EntityNode *n = entities.first; n != 0; n = n->next)
{
CTRL_Entity *entity = n->v;
String8 entity_expr_string = push_str8f(arena, "$_%I64x_%I64x", entity->handle.machine_id, entity->handle.dmn_handle.u64[0]);
EV_Key entity_parent_key = key;
EV_Key entity_key = ev_key_make(ev_hash_from_key(entity_parent_key), d_hash_from_string(entity_expr_string));
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, entity_expr_string, entity_parent_key, entity_key, depth);
EV_BlockList blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, entity_expr_string, entity_parent_key, entity_key, depth);
ev_block_list_concat__in_place(out, &blocks);
}
scratch_end(scratch);
@@ -8006,7 +8002,7 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
Temp scratch = scratch_begin(&arena, 1);
E_String2NumMapNodeArray nodes = e_string2num_map_node_array_from_map(scratch.arena, e_parse_ctx->locals_map);
e_string2num_map_node_array_sort__in_place(&nodes);
EV_ViewRuleList top_level_view_rules = {0};
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
for(U64 idx = 0; idx < nodes.count; idx += 1)
{
E_String2NumMapNode *n = nodes.v[idx];
@@ -8016,7 +8012,7 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
EV_Key local_parent_key = key;
EV_Key local_key = ev_key_make(ev_hash_from_key(local_parent_key), idx+1);
EV_BlockList root_blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, root_expr_string, local_parent_key, local_key, depth);
EV_BlockList root_blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, root_expr_string, local_parent_key, local_key, depth);
ev_block_list_concat__in_place(out, &root_blocks);
}
}
@@ -8036,8 +8032,8 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
U64 alias_count = regs_alias_code_count_from_arch(arch);
String8 *alias_strings = regs_alias_code_string_table_from_arch(arch);
U64 num = 1;
EV_ViewRuleList top_level_view_rules = {0};
ev_view_rule_list_push_string(arena, &top_level_view_rules, str8_lit("hex"));
EV_ViewRuleList *view_rules_inherited = ev_view_rule_list_from_inheritance(arena, view_rules);
ev_view_rule_list_push_string(arena, view_rules_inherited, str8_lit("hex"));
for(U64 reg_idx = 1; reg_idx < reg_count; reg_idx += 1, num += 1)
{
String8 root_expr_string = push_str8f(arena, "reg:%S", reg_strings[reg_idx]);
@@ -8046,7 +8042,7 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
EV_Key reg_parent_key = key;
EV_Key reg_key = ev_key_make(ev_hash_from_key(reg_parent_key), num);
EV_BlockList root_blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, root_expr_string, reg_parent_key, reg_key, depth);
EV_BlockList root_blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, root_expr_string, reg_parent_key, reg_key, depth);
ev_block_list_concat__in_place(out, &root_blocks);
}
}
@@ -8058,7 +8054,7 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
{
EV_Key reg_parent_key = ev_key_make(5381, 0);
EV_Key reg_key = ev_key_make(ev_hash_from_key(reg_parent_key), num);
EV_BlockList root_blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), &top_level_view_rules, root_expr_string, reg_parent_key, reg_key, depth);
EV_BlockList root_blocks = ev_block_list_from_view_expr_keys(arena, view, str8_zero(), view_rules_inherited, root_expr_string, reg_parent_key, reg_key, depth);
ev_block_list_concat__in_place(out, &root_blocks);
}
}
@@ -8074,7 +8070,6 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
str8_match(string, str8_lit("procedures"), 0))
{
Temp scratch = scratch_begin(&arena, 1);
EV_ViewRuleList top_level_view_rules = {0};
RDI_SectionKind fzy_target = (str8_match(string, str8_lit("globals"), 0) ? RDI_SectionKind_GlobalVariables :
str8_match(string, str8_lit("thread_locals"), 0) ? RDI_SectionKind_ThreadVariables :
str8_match(string, str8_lit("types"), 0) ? RDI_SectionKind_UDTs :
@@ -8184,7 +8179,7 @@ EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(rd_collection_block_prod)
last_vb = ev_block_split_and_continue(arena, out, last_vb, sub_expand_item_idxs[sub_expand_idx]);
// rjf: build child view rules
EV_ViewRuleList *child_view_rules = ev_view_rule_list_from_inheritance(arena, &top_level_view_rules);
EV_ViewRuleList *child_view_rules = ev_view_rule_list_from_inheritance(arena, view_rules);
{
String8 view_rule_string = ev_view_rule_from_key(view, sub_expand_keys[sub_expand_idx]);
if(view_rule_string.size != 0)
@@ -8555,7 +8550,8 @@ rd_append_value_strings_from_eval(Arena *arena, EV_StringFlags flags, U32 defaul
{
E_Member *mem = &data_members.v[member_idx];
E_Expr *dot_expr = e_expr_ref_member_access(scratch.arena, eval.expr, mem->name);
E_Eval dot_eval = e_eval_from_expr(scratch.arena, dot_expr);
E_Expr *dot_expr_resolved = ev_expr_from_expr_view_rules(scratch.arena, dot_expr, view_rules);
E_Eval dot_eval = e_eval_from_expr(scratch.arena, dot_expr_resolved);
space_taken += rd_append_value_strings_from_eval(arena, flags, radix, font, font_size, max_size-space_taken, depth+1, dot_eval, 0, view_rules, out);
if(member_idx+1 < data_members.count)
{
+22 -31
View File
@@ -950,7 +950,7 @@ rd_watch_view_init(RD_WatchViewState *ewv)
}
internal void
rd_watch_view_build(RD_WatchViewState *ewv, String8 root_expr, String8 root_view_rule, B32 modifiable, U32 default_radix, Rng2F32 rect)
rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 root_expr, String8 root_view_rule, B32 modifiable, U32 default_radix, Rng2F32 rect)
{
ProfBeginFunction();
DI_Scope *di_scope = di_scope_open();
@@ -2105,7 +2105,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, String8 root_expr, String8 root_view
scroll_list_params.row_height_px = floor_f32(ui_top_font_size()*2.5f);
scroll_list_params.dim_px = dim_2f32(rect);
scroll_list_params.cursor_range = r2s64(v2s64(0, 0), v2s64(3, blocks.total_semantic_row_count));
scroll_list_params.item_range = r1s64(0, 1 + blocks.total_visual_row_count);
scroll_list_params.item_range = r1s64(0, blocks.total_visual_row_count + 1*!(flags & RD_WatchViewFlag_NoHeader));
scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1;
UI_ScrollListRowBlockChunkList row_block_chunks = {0};
for(EV_BlockNode *n = blocks.first; n != 0; n = n->next)
@@ -2138,7 +2138,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, String8 root_expr, String8 root_view
////////////////////////////
//- rjf: build table header
//
if(visible_row_rng.min == 0) UI_TableVector UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
if(~flags & RD_WatchViewFlag_NoHeader && visible_row_rng.min == 0) UI_TableVector UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
{
for(RD_WatchViewColumn *col = ewv->first_column; col != 0; col = col->next)
UI_TableCell
@@ -2210,7 +2210,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, String8 root_expr, String8 root_view
//
EV_WindowedRowList rows = {0};
{
rows = ev_windowed_row_list_from_block_list(scratch.arena, eval_view, r1s64(visible_row_rng.min-1, visible_row_rng.max), &blocks);
rows = ev_windowed_row_list_from_block_list(scratch.arena, eval_view,
r1s64(visible_row_rng.min - 1*!(flags & RD_WatchViewFlag_NoHeader),
visible_row_rng.max + 1*!!(flags & RD_WatchViewFlag_NoHeader)),
&blocks);
}
////////////////////////////
@@ -2306,20 +2309,11 @@ rd_watch_view_build(RD_WatchViewState *ewv, String8 root_expr, String8 root_view
ui_ts_cell_idx = 0;
////////////////////////
//- rjf: row with expand ui rule -> build large singular row for "escape hatch" ui
//- rjf: canvas block row -> build singular row for "escape hatch" ui
//
if(row->block_kind == EV_BlockKind_Canvas)
UI_Parent(row_box) UI_FocusHot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off)
{
//- rjf: build button row contents
if(ui_view_rule_info == &rd_nil_view_rule_info)
{
if(ui_clicked(rd_icon_buttonf(RD_IconKind_Add, 0, "Add New Target")))
{
rd_cmd(RD_CmdKind_RunCommand, .string = rd_cmd_kind_info_table[RD_CmdKind_AddTarget].string);
}
}
//- rjf: build ui hook row contents
if(ui_view_rule_info != &rd_nil_view_rule_info && ui_view_rule_info->ui != 0)
{
@@ -5033,13 +5027,10 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(targets)
if(!wv->initialized)
{
rd_watch_view_init(wv);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.25f, .string = str8_lit("label.str"), .display_string = str8_lit("Label"), .dequote_string = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.35f, .string = str8_lit("exe.str"), .display_string = str8_lit("Executable"), .dequote_string = 1, .is_non_code = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("args.str"), .display_string = str8_lit("Arguments"), .dequote_string = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("working_directory.str"), .display_string = str8_lit("Working Directory "), .dequote_string = 1, .is_non_code = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("entry_point.str"), .display_string = str8_lit("Custom Entry Point"), .dequote_string = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Expr, 0.30f, .display_string = str8_lit("Expression"));
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.70f, .display_string = str8_lit("Value"), .dequote_string = 1, .is_non_code = 1);
}
rd_watch_view_build(wv, str8_lit("targets"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader, str8_lit("targets"), str8_lit("collection, only:label exe args working_directory entry_point str"), 0, 10, rect);
ProfEnd();
}
@@ -5549,7 +5540,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(breakpoints)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("enabled"), .display_string = str8_lit("Enabled"), .view_rule = str8_lit("checkbox"));
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("hit_count"), .display_string = str8_lit("Hit Count"));
}
rd_watch_view_build(wv, str8_lit("breakpoints"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("breakpoints"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -5566,7 +5557,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(watch_pins)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.5f, .string = str8_lit("Label"), .dequote_string = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.5f, .string = str8_lit("Location"), .dequote_string = 1, .is_non_code = 1);
}
rd_watch_view_build(wv, str8_lit("watch_pins"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("watch_pins"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -5808,7 +5799,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(call_stack)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.7f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Module, 0.25f, .is_non_code = 1);
}
rd_watch_view_build(wv, str8_lit("current_thread.callstack.v"), str8_lit("cast:void**, array:current_thread.callstack.count"), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("current_thread.callstack.v"), str8_lit("cast:void**, array:current_thread.callstack.count"), 0, 10, rect);
ProfEnd();
}
@@ -5827,7 +5818,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(modules)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.30f, .string = str8_lit("dbg.str"), .display_string = str8_lit("Debug Info Path"), .dequote_string = 1, .is_non_code = 1);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("vaddr_range"), .display_string = str8_lit("Address Range"), .view_rule = str8_lit("hex"));
}
rd_watch_view_build(wv, str8_lit("modules"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("modules"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -6172,7 +6163,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(watch)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Type, 0.15f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.30f);
}
rd_watch_view_build(wv, str8_lit("watches"), str8_lit(""), 1, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("watches"), str8_lit(""), 1, 10, rect);
ProfEnd();
}
@@ -6191,7 +6182,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(locals)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Type, 0.15f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.30f);
}
rd_watch_view_build(wv, str8_lit("locals"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("locals"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -6210,7 +6201,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(registers)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Type, 0.15f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.30f);
}
rd_watch_view_build(wv, str8_lit("registers"), str8_lit("hex"), 0, 16, rect);
rd_watch_view_build(wv, 0, str8_lit("registers"), str8_lit("hex"), 0, 16, rect);
ProfEnd();
}
@@ -6229,7 +6220,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(globals)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Type, 0.15f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.30f);
}
rd_watch_view_build(wv, str8_lit("globals"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("globals"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -6248,7 +6239,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(thread_locals)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Type, 0.15f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.30f);
}
rd_watch_view_build(wv, str8_lit("thread_locals"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("thread_locals"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -6267,7 +6258,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(types)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Type, 0.15f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.30f);
}
rd_watch_view_build(wv, str8_lit("types"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("types"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
@@ -6285,7 +6276,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(procedures)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.6f);
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_ViewRule, 0.2f);
}
rd_watch_view_build(wv, str8_lit("procedures"), str8_lit(""), 0, 10, rect);
rd_watch_view_build(wv, 0, str8_lit("procedures"), str8_lit(""), 0, 10, rect);
ProfEnd();
}
+7 -1
View File
@@ -41,6 +41,12 @@ struct RD_CodeViewBuildResult
////////////////////////////////
//~ rjf: Watch View Types
typedef U32 RD_WatchViewFlags;
enum
{
RD_WatchViewFlag_NoHeader = (1<<0),
};
typedef enum RD_WatchViewColumnKind
{
RD_WatchViewColumnKind_Expr,
@@ -158,6 +164,6 @@ internal void rd_watch_view_column_release(RD_WatchViewState *wv, RD_WatchViewCo
//- rjf: watch view main hooks
internal void rd_watch_view_init(RD_WatchViewState *ewv);
internal void rd_watch_view_build(RD_WatchViewState *ewv, String8 root_expr, String8 root_view_rule, B32 modifiable, U32 default_radix, Rng2F32 rect);
internal void rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 root_expr, String8 root_view_rule, B32 modifiable, U32 default_radix, Rng2F32 rect);
#endif // RADDBG_VIEWS_H