mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 05:18:40 +00: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;
|
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
|
internal B32
|
||||||
ev_row_is_expandable(EV_Row *row)
|
ev_row_is_expandable(EV_Row *row)
|
||||||
{
|
{
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
if(!ev_key_match(ev_key_root(), row->block->key))
|
if(!ev_key_match(ev_key_root(), row->block->key))
|
||||||
{
|
{
|
||||||
E_IRTreeAndType irtree = row->eval.irtree;
|
result = ev_eval_is_expandable(row->eval);
|
||||||
|
|
||||||
// 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;
|
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_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_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 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_expandable(EV_Row *row);
|
||||||
internal B32 ev_row_is_editable(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("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("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("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("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("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)},
|
{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
|
// rjf: determine view ui rule
|
||||||
info.view_ui_rule = rd_view_ui_rule_from_string(row->block->viz_expand_rule->string);
|
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
|
// rjf: fill row's cells
|
||||||
{
|
{
|
||||||
if(0){}
|
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
|
// rjf: folder / file rows
|
||||||
else if(row->eval.space.kind == E_SpaceKind_FileSystem)
|
else if(row->eval.space.kind == E_SpaceKind_FileSystem)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user