targets view: ensure ctrl+click for selection, ensure proper target parameterization of engine commands

This commit is contained in:
Ryan Fleury
2024-09-30 09:40:39 -07:00
parent 2e13b221ac
commit 5d76b58acd
3 changed files with 36 additions and 12 deletions
+23 -10
View File
@@ -1708,6 +1708,21 @@ rd_entity_from_name_and_kind(String8 string, RD_EntityKind kind)
//////////////////////////////// ////////////////////////////////
//~ rjf: Frontend Entity Info Extraction //~ rjf: Frontend Entity Info Extraction
internal D_Target
rd_d_target_from_entity(RD_Entity *entity)
{
RD_Entity *src_target_exe = rd_entity_child_from_kind(entity, RD_EntityKind_Executable);
RD_Entity *src_target_args = rd_entity_child_from_kind(entity, RD_EntityKind_Arguments);
RD_Entity *src_target_wdir = rd_entity_child_from_kind(entity, RD_EntityKind_WorkingDirectory);
RD_Entity *src_target_entry = rd_entity_child_from_kind(entity, RD_EntityKind_EntryPoint);
D_Target target = {0};
target.exe = src_target_exe->string;
target.args = src_target_args->string;
target.working_directory = src_target_wdir->string;
target.custom_entry_point_name = src_target_entry->string;
return target;
}
internal DR_FancyStringList internal DR_FancyStringList
rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_color, F32 size) rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_color, F32 size)
{ {
@@ -11085,6 +11100,7 @@ rd_frame(void)
// rjf: try to run engine command // rjf: try to run engine command
if(D_CmdKind_Null < (D_CmdKind)kind && (D_CmdKind)kind < D_CmdKind_COUNT) if(D_CmdKind_Null < (D_CmdKind)kind && (D_CmdKind)kind < D_CmdKind_COUNT)
{ {
RD_Entity *entity = rd_entity_from_handle(rd_regs()->entity);
D_CmdParams params = {0}; D_CmdParams params = {0};
params.machine = rd_regs()->machine; params.machine = rd_regs()->machine;
params.thread = rd_regs()->thread; params.thread = rd_regs()->thread;
@@ -11096,7 +11112,12 @@ rd_frame(void)
params.vaddr = rd_regs()->vaddr; params.vaddr = rd_regs()->vaddr;
params.prefer_disasm = rd_regs()->prefer_disasm; params.prefer_disasm = rd_regs()->prefer_disasm;
params.pid = rd_regs()->pid; params.pid = rd_regs()->pid;
// TODO(rjf): @msgs params.targets = ???; if(entity->kind == RD_EntityKind_Target)
{
params.targets.count = 1;
params.targets.v = push_array(scratch.arena, D_Target, params.targets.count);
params.targets.v[0] = rd_d_target_from_entity(entity);
}
// TODO(rjf): @msgs // TODO(rjf): @msgs
#if 0 #if 0
params.window = rd_regs()->window; params.window = rd_regs()->window;
@@ -14890,15 +14911,7 @@ rd_frame(void)
targets.count -= 1; targets.count -= 1;
continue; continue;
} }
RD_Entity *src_target_exe = rd_entity_child_from_kind(src_target, RD_EntityKind_Executable); targets.v[idx] = rd_d_target_from_entity(src_target);
RD_Entity *src_target_args = rd_entity_child_from_kind(src_target, RD_EntityKind_Arguments);
RD_Entity *src_target_wdir = rd_entity_child_from_kind(src_target, RD_EntityKind_WorkingDirectory);
RD_Entity *src_target_entry = rd_entity_child_from_kind(src_target, RD_EntityKind_EntryPoint);
D_Target *dst_target = &targets.v[idx];
dst_target->exe = src_target_exe->string;
dst_target->args = src_target_args->string;
dst_target->working_directory = src_target_wdir->string;
dst_target->custom_entry_point_name = src_target_entry->string;
idx += 1; idx += 1;
} }
} }
+1
View File
@@ -1168,6 +1168,7 @@ internal RD_Entity *rd_entity_from_name_and_kind(String8 string, RD_EntityKind k
//////////////////////////////// ////////////////////////////////
//~ rjf: Frontend Entity Info Extraction //~ rjf: Frontend Entity Info Extraction
internal D_Target rd_d_target_from_entity(RD_Entity *entity);
internal DR_FancyStringList rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_color, F32 size); internal DR_FancyStringList rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_color, F32 size);
//////////////////////////////// ////////////////////////////////
+12 -2
View File
@@ -2555,9 +2555,19 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
{ {
icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled; icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled;
} }
if(ui_clicked(rd_icon_buttonf(icon_kind, 0, "###row_ctrl_%I64x", idx))) UI_Signal sig = rd_icon_buttonf(icon_kind, 0, "###row_ctrl_%I64x", idx);
if(ui_clicked(sig))
{ {
rd_cmd(ctrl->kind, .entity = rd_handle_from_entity(entity)); if(ctrl->kind == RD_CmdKind_SelectEntity)
{
rd_cmd(sig.event_flags & OS_Modifier_Ctrl && entity->disabled ? RD_CmdKind_EnableEntity :
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
}
else
{
rd_cmd(ctrl->kind, .entity = rd_handle_from_entity(entity));
}
} }
} }
ctrl_idx += 1; ctrl_idx += 1;