mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-18 01:52:22 -07:00
table lens
This commit is contained in:
@@ -1063,29 +1063,37 @@ ev_rows_from_num_range(Arena *arena, EV_View *view, String8 filter, EV_BlockRang
|
||||
return rows;
|
||||
}
|
||||
|
||||
internal B32
|
||||
ev_eval_is_expandable(E_Eval eval)
|
||||
{
|
||||
B32 result = 0;
|
||||
E_IRTreeAndType irtree = eval.irtree;
|
||||
|
||||
// rjf: determine if lenses force expandability
|
||||
if(!result)
|
||||
{
|
||||
EV_ExpandRule *expand_rule = ev_expand_rule_from_type_key(irtree.type_key);
|
||||
if(expand_rule != &ev_nil_expand_rule)
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: determine if type info force expandability
|
||||
if(!result)
|
||||
{
|
||||
result = ev_type_key_and_mode_is_expandable(irtree.type_key, irtree.mode);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal B32
|
||||
ev_row_is_expandable(EV_Row *row)
|
||||
{
|
||||
B32 result = 0;
|
||||
if(!ev_key_match(ev_key_root(), row->block->key))
|
||||
{
|
||||
E_IRTreeAndType irtree = row->eval.irtree;
|
||||
|
||||
// rjf: determine if lenses force expandability
|
||||
if(!result)
|
||||
{
|
||||
EV_ExpandRule *expand_rule = ev_expand_rule_from_type_key(irtree.type_key);
|
||||
if(expand_rule != &ev_nil_expand_rule)
|
||||
{
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: determine if type info force expandability
|
||||
if(!result)
|
||||
{
|
||||
result = ev_type_key_and_mode_is_expandable(irtree.type_key, irtree.mode);
|
||||
}
|
||||
result = ev_eval_is_expandable(row->eval);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -369,6 +369,7 @@ internal U64 ev_num_from_vnum(EV_BlockRangeList *block_ranges, U64 vidx);
|
||||
internal EV_WindowedRowList ev_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8 filter, EV_BlockRangeList *block_ranges, Rng1U64 vnum_range);
|
||||
internal EV_Row *ev_row_from_num(Arena *arena, EV_View *view, String8 filter, EV_BlockRangeList *block_ranges, U64 num);
|
||||
internal EV_WindowedRowList ev_rows_from_num_range(Arena *arena, EV_View *view, String8 filter, EV_BlockRangeList *block_ranges, Rng1U64 num_range);
|
||||
internal B32 ev_eval_is_expandable(E_Eval eval);
|
||||
internal B32 ev_row_is_expandable(EV_Row *row);
|
||||
internal B32 ev_row_is_editable(EV_Row *row);
|
||||
|
||||
|
||||
@@ -12330,6 +12330,7 @@ rd_frame(void)
|
||||
{str8_lit("range1"), 0, 0, 0, 0, 0, {0}},
|
||||
{str8_lit("array"), 0, 0, 1, 0, 0, {E_TYPE_EXPAND_INFO_FUNCTION_NAME(array), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(array)}},
|
||||
{str8_lit("slice"), 0, 0, 1, E_TYPE_IREXT_FUNCTION_NAME(slice), E_TYPE_ACCESS_FUNCTION_NAME(slice), {E_TYPE_EXPAND_INFO_FUNCTION_NAME(slice), E_TYPE_EXPAND_RANGE_FUNCTION_NAME(slice)}},
|
||||
{str8_lit("table"), 0, 0, 0, 0, 0, {0}},
|
||||
{str8_lit("text"), 0, 0, 0, 0, 0, {0}, RD_VIEW_UI_FUNCTION_NAME(text), EV_EXPAND_RULE_INFO_FUNCTION_NAME(text)},
|
||||
{str8_lit("disasm"), 0, 0, 0, 0, 0, {0}, RD_VIEW_UI_FUNCTION_NAME(disasm), EV_EXPAND_RULE_INFO_FUNCTION_NAME(disasm)},
|
||||
{str8_lit("memory"), 0, 0, 0, 0, 0, {0}, RD_VIEW_UI_FUNCTION_NAME(memory), EV_EXPAND_RULE_INFO_FUNCTION_NAME(memory)},
|
||||
|
||||
@@ -1053,10 +1053,52 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
// rjf: determine view ui rule
|
||||
info.view_ui_rule = rd_view_ui_rule_from_string(row->block->viz_expand_rule->string);
|
||||
|
||||
// rjf: find possible table type
|
||||
E_Type *maybe_table_type = block_type;
|
||||
for(;;)
|
||||
{
|
||||
if(maybe_table_type->kind == E_TypeKind_Lens &&
|
||||
str8_match(maybe_table_type->name, str8_lit("table"), 0))
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(maybe_table_type->kind == E_TypeKind_Lens)
|
||||
{
|
||||
maybe_table_type = e_type_from_key__cached(maybe_table_type->direct_type_key);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: fill row's cells
|
||||
{
|
||||
if(0){}
|
||||
|
||||
// rjf: table rows
|
||||
else if(maybe_table_type->kind == E_TypeKind_Lens && str8_match(maybe_table_type->name, str8_lit("table"), 0) && maybe_table_type->count >= 1)
|
||||
{
|
||||
U64 column_count = maybe_table_type->count;
|
||||
info.cell_style_key = push_str8f(arena, "table_%I64u_cols", column_count);
|
||||
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
|
||||
RD_Cfg *style = rd_cfg_child_from_string(view, info.cell_style_key);
|
||||
RD_Cfg *w_cfg = style->first;
|
||||
F32 next_pct = 0;
|
||||
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
|
||||
E_IRTreeAndType *prev_overridden_irtree = e_ir_state->overridden_irtree;
|
||||
e_ir_state->overridden_irtree = &row->eval.irtree;
|
||||
for(U64 idx = 0; idx < maybe_table_type->count; idx += 1)
|
||||
{
|
||||
E_Eval cell_eval = e_eval_from_expr(arena, maybe_table_type->args[idx]);
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .eval = cell_eval, .default_pct = 1.f/maybe_table_type->count, .pct = take_pct());
|
||||
}
|
||||
e_ir_state->overridden_irtree = prev_overridden_irtree;
|
||||
info.can_expand = 0;
|
||||
#undef take_pct
|
||||
}
|
||||
|
||||
// rjf: folder / file rows
|
||||
else if(row->eval.space.kind == E_SpaceKind_FileSystem)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user