mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-15 00:22:23 -07:00
eval visualization - allow chained expressions to cause multiple child expansion blocks; begin work on unified lister watch window
This commit is contained in:
@@ -409,6 +409,7 @@ e_expr_copy(Arena *arena, E_Expr *src)
|
||||
E_Expr *dst_parent;
|
||||
E_Expr *src;
|
||||
B32 is_ref;
|
||||
B32 is_sib;
|
||||
};
|
||||
Task start_task = {0, &e_expr_nil, src};
|
||||
Task *first_task = &start_task;
|
||||
@@ -431,10 +432,23 @@ e_expr_copy(Arena *arena, E_Expr *src)
|
||||
{
|
||||
t->dst_parent->ref = dst;
|
||||
}
|
||||
else if(t->is_sib)
|
||||
{
|
||||
t->dst_parent->next = dst;
|
||||
dst->prev = t->dst_parent;
|
||||
}
|
||||
else
|
||||
{
|
||||
e_expr_push_child(t->dst_parent, dst);
|
||||
}
|
||||
if(t->src->next != &e_expr_nil)
|
||||
{
|
||||
Task *task = push_array(scratch.arena, Task, 1);
|
||||
task->dst_parent = dst;
|
||||
task->src = t->src->next;
|
||||
task->is_sib = 1;
|
||||
SLLQueuePush(first_task, last_task, task);
|
||||
}
|
||||
if(t->src->ref != &e_expr_nil)
|
||||
{
|
||||
Task *task = push_array(scratch.arena, Task, 1);
|
||||
|
||||
@@ -520,7 +520,7 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *exp
|
||||
tree.total_row_count += 1;
|
||||
tree.total_item_count += 1;
|
||||
|
||||
//- rjf: iterate all expansions & generate blocks for each
|
||||
//- rjf: generate initial task, for root's evaluation
|
||||
typedef struct Task Task;
|
||||
struct Task
|
||||
{
|
||||
@@ -534,6 +534,8 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *exp
|
||||
Task start_task = {0, tree.root, tree.root->eval, 1, 0};
|
||||
Task *first_task = &start_task;
|
||||
Task *last_task = first_task;
|
||||
|
||||
//- rjf: iterate all expansions & generate blocks for each
|
||||
for(Task *t = first_task; t != 0; t = t->next)
|
||||
{
|
||||
// rjf: get task key
|
||||
@@ -714,6 +716,19 @@ ev_block_tree_from_expr(Arena *arena, EV_View *view, String8 filter, E_Expr *exp
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: if this expr has a sibling, push another task to continue the chain
|
||||
if(t->eval.expr->next != &e_expr_nil)
|
||||
{
|
||||
Task *task = push_array(scratch.arena, Task, 1);
|
||||
task->next = t->next;
|
||||
t->next = task;
|
||||
task->parent_block = t->parent_block;
|
||||
task->eval = e_eval_from_expr(arena, t->eval.expr->next);
|
||||
task->child_id = t->child_id;
|
||||
task->split_relative_idx = 0;
|
||||
task->default_expanded = t->default_expanded;
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -797,7 +812,7 @@ ev_block_range_list_from_tree(Arena *arena, EV_BlockTree *block_tree)
|
||||
|
||||
// rjf: generate task for post-child rows, if any, after children
|
||||
Rng1U64 remainder_range = r1u64(t->next_child->split_relative_idx+1, t->block_relative_range.max);
|
||||
if(remainder_range.max > remainder_range.min)
|
||||
if(remainder_range.max >= remainder_range.min)
|
||||
{
|
||||
BlockTask *remainder_task = push_array(scratch.arena, BlockTask, 1);
|
||||
remainder_task->next = child_task->next;
|
||||
|
||||
@@ -426,7 +426,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[215] =
|
||||
{ str8_lit_comp("set_entity_name"), str8_lit_comp("Sets the passed entity's name."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_PID, str8_lit_comp("query:unattached_processes"), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("open_lister"), str8_lit_comp("Opens the lister."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:lister"), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("open_lister"), str8_lit_comp("Opens the lister."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}},
|
||||
|
||||
@@ -450,7 +450,7 @@ RD_CmdTable: // | | | |
|
||||
{Exit 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" "" }
|
||||
|
||||
//- rjf: top-level lister
|
||||
{OpenLister 1 1 "query:lister" Null null Nil Null 0 0 0 0 0 0 0 Null "open_lister" "Open Lister" "Opens the lister." "help,cmd" "" }
|
||||
{OpenLister 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 Null "open_lister" "Open Lister" "Opens the lister." "help,cmd" "" }
|
||||
|
||||
//- rjf: command runner
|
||||
{RunCommand 1 1 "query:commands" CmdName commands Nil Null 0 0 0 0 0 1 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" "" }
|
||||
|
||||
@@ -12492,18 +12492,11 @@ rd_frame(void)
|
||||
#endif
|
||||
}break;
|
||||
|
||||
//- rjf: top-level lister
|
||||
//- rjf: open lister
|
||||
case RD_CmdKind_OpenLister:
|
||||
{
|
||||
RD_ListerFlags lister_flags = (RD_ListerFlag_LineEdit|
|
||||
RD_ListerFlag_Descriptions|
|
||||
RD_ListerFlag_KindLabel|
|
||||
RD_ListerFlag_Procedures|
|
||||
RD_ListerFlag_Files|
|
||||
RD_ListerFlag_Commands|
|
||||
RD_ListerFlag_Settings|
|
||||
RD_ListerFlag_SystemProcesses);
|
||||
rd_cmd(RD_CmdKind_PushQuery, .lister_flags = lister_flags);
|
||||
String8 expr = push_str8f(scratch.arena, "query:commands, query:recent_files, query:recent_projects, query:procedures, query:$%I64x", rd_regs()->view);
|
||||
rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1);
|
||||
}break;
|
||||
|
||||
//- rjf: command fast path
|
||||
|
||||
@@ -29,7 +29,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(commands)
|
||||
}
|
||||
else
|
||||
{
|
||||
result.expr_count = RD_CmdKind_COUNT;
|
||||
result.expr_count = RD_CmdKind_COUNT - 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -67,7 +67,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(commands)
|
||||
{
|
||||
for(U64 idx = idx_range.min; idx < idx_range.max; idx += 1, out_idx += 1)
|
||||
{
|
||||
RD_CmdKind cmd_kind = (RD_CmdKind)idx;
|
||||
RD_CmdKind cmd_kind = (RD_CmdKind)(idx+1);
|
||||
String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string;
|
||||
E_Expr *expr = e_push_expr(arena, E_ExprKind_LeafValue, 0);
|
||||
expr->type_key = e_type_key_cons(.kind = E_TypeKind_U64, .name = str8_lit("command"));
|
||||
|
||||
@@ -3235,8 +3235,8 @@ rd_cell(RD_CellParams *params, String8 string)
|
||||
{
|
||||
B32 is_toggled = !!params->toggled_out[0];
|
||||
F32 toggle_t = ui_anim(ui_key_from_stringf(key, "toggled"), (F32)is_toggled, .initial = (F32)is_toggled);
|
||||
F32 padding_px = floor_f32(ui_top_font_size()*0.65f);
|
||||
F32 height_px = ui_top_px_height() - padding_px*2.f;
|
||||
F32 height_px = ui_top_font_size() * 1.75f;
|
||||
F32 padding_px = (ui_top_px_height() - height_px) / 2.f;
|
||||
UI_PrefWidth(ui_children_sum(1.f))
|
||||
UI_HeightFill
|
||||
UI_Column UI_Padding(ui_px(padding_px, 1.f))
|
||||
|
||||
Reference in New Issue
Block a user