more convergence

This commit is contained in:
Ryan Fleury
2025-02-21 15:29:54 -08:00
parent e76da7892a
commit 9b636568fd
8 changed files with 168 additions and 126 deletions
+3 -1
View File
@@ -1400,6 +1400,7 @@ ctrl_stored_hash_from_process_vaddr_range(CTRL_Handle process, Rng1U64 range, B3
//- rjf: try to read from cache
B32 is_good = 0;
B32 process_node_exists = 0;
B32 is_stale = 1;
OS_MutexScopeR(process_stripe->rw_mutex)
{
@@ -1407,6 +1408,7 @@ ctrl_stored_hash_from_process_vaddr_range(CTRL_Handle process, Rng1U64 range, B3
{
if(ctrl_handle_match(n->handle, process))
{
process_node_exists = 1;
U64 range_slot_idx = range_hash%n->range_hash_slots_count;
CTRL_ProcessMemoryRangeHashSlot *range_slot = &n->range_hash_slots[range_slot_idx];
for(CTRL_ProcessMemoryRangeHashNode *range_n = range_slot->first; range_n != 0; range_n = range_n->next)
@@ -1425,7 +1427,7 @@ ctrl_stored_hash_from_process_vaddr_range(CTRL_Handle process, Rng1U64 range, B3
}
//- rjf: not good -> create process cache node if necessary
if(!is_good)
if(!is_good && !process_node_exists)
{
OS_MutexScopeW(process_stripe->rw_mutex)
{
+10 -6
View File
@@ -4,7 +4,7 @@
//- GENERATED CODE
C_LINKAGE_BEGIN
RD_VocabInfo rd_vocab_info_table[294] =
RD_VocabInfo rd_vocab_info_table[296] =
{
{str8_lit_comp("auto_view_rule"), str8_lit_comp("auto_view_rules"), str8_lit_comp("Auto View Rule"), str8_lit_comp("Auto View Rules"), RD_IconKind_Binoculars},
{str8_lit_comp("file_path_map"), str8_lit_comp("file_path_maps"), str8_lit_comp("File Path Map"), str8_lit_comp("File Path Maps"), RD_IconKind_FileOutline},
@@ -125,10 +125,12 @@ RD_VocabInfo rd_vocab_info_table[294] =
{str8_lit_comp("open_lister"), str8_lit_comp(""), str8_lit_comp("Open Lister"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("run_command"), str8_lit_comp(""), str8_lit_comp("Run Command"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp("OS Event"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("select_thread"), str8_lit_comp(""), str8_lit_comp("Select Thread"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("select_thread"), str8_lit_comp(""), str8_lit_comp("Select Thread"), str8_lit_comp(""), RD_IconKind_Thread},
{str8_lit_comp("select_unwind"), str8_lit_comp(""), str8_lit_comp("Select Unwind"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("up_one_frame"), str8_lit_comp(""), str8_lit_comp("Up One Frame"), str8_lit_comp(""), RD_IconKind_UpArrow},
{str8_lit_comp("down_one_frame"), str8_lit_comp(""), str8_lit_comp("Down One Frame"), str8_lit_comp(""), RD_IconKind_DownArrow},
{str8_lit_comp("select_entity"), str8_lit_comp(""), str8_lit_comp("Select Entity"), str8_lit_comp(""), RD_IconKind_RadioHollow},
{str8_lit_comp("deselect_entity"), str8_lit_comp(""), str8_lit_comp("Deselect Entity"), str8_lit_comp(""), RD_IconKind_RadioFilled},
{str8_lit_comp("inc_ui_font_scale"), str8_lit_comp(""), str8_lit_comp("Increase UI Font Scale"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("dec_ui_font_scale"), str8_lit_comp(""), str8_lit_comp("Decrease UI Font Scale"), str8_lit_comp(""), RD_IconKind_Null},
{str8_lit_comp("inc_code_font_scale"), str8_lit_comp(""), str8_lit_comp("Increase Code Font Scale"), str8_lit_comp(""), RD_IconKind_Null},
@@ -362,7 +364,7 @@ Rng1U64 rd_reg_slot_range_table[40] =
{OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)},
};
RD_CmdKindInfo rd_cmd_kind_info_table[212] =
RD_CmdKindInfo rd_cmd_kind_info_table[214] =
{
{0},
{ str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), 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_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}},
@@ -401,10 +403,12 @@ RD_CmdKindInfo rd_cmd_kind_info_table[212] =
{ 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("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*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_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}},
{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), 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}},
{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the call stack frame above the currently selected."), 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("down_one_frame"), str8_lit_comp("Selects the call stack frame below the currently selected."), str8_lit_comp("callstack,unwind"), 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("select_entity"), str8_lit_comp("Selects a control entity."), 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("deselect_entity"), str8_lit_comp("Deselects a control entity."), 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("inc_ui_font_scale"), str8_lit_comp("Increases the font size used for UI."), 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("dec_ui_font_scale"), str8_lit_comp("Decreases the font size used for UI."), 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
{ str8_lit_comp("inc_code_font_scale"), str8_lit_comp("Increases the font size used for code."), 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*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
@@ -522,7 +526,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[212] =
{ str8_lit_comp("enable_cfg"), str8_lit_comp("Enables a config tree."), 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("disable_cfg"), str8_lit_comp("Disables a config tree."), 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_cfg"), str8_lit_comp("Selects a config tree, disabling all others of the same kind."), 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("deselect_cfg"), str8_lit_comp("Deselects a config tree, disabling all others of the same kind."), 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("deselect_cfg"), str8_lit_comp("Deselects a config tree."), 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("remove_cfg"), str8_lit_comp("Removes a config tree."), 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("name_cfg"), str8_lit_comp("Equips a config tree with a label."), 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("condition_cfg"), str8_lit_comp("Equips a config tree with a condition string."), 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}},
+3 -1
View File
@@ -94,6 +94,8 @@ RD_CmdKind_SelectThread,
RD_CmdKind_SelectUnwind,
RD_CmdKind_UpOneFrame,
RD_CmdKind_DownOneFrame,
RD_CmdKind_SelectEntity,
RD_CmdKind_DeselectEntity,
RD_CmdKind_IncUIFontScale,
RD_CmdKind_DecUIFontScale,
RD_CmdKind_IncCodeFontScale,
@@ -630,7 +632,7 @@ RD_Query query;
.os_event = rd_regs()->os_event,\
C_LINKAGE_BEGIN
extern RD_VocabInfo rd_vocab_info_table[294];
extern RD_VocabInfo rd_vocab_info_table[296];
extern RD_NameSchemaInfo rd_name_schema_info_table[12];
extern Rng1U64 rd_reg_slot_range_table[40];
extern String8 rd_binding_version_remap_old_name_table[8];
+5 -3
View File
@@ -368,10 +368,12 @@ RD_CmdTable: // | | | |
{OSEvent 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "os_event" "OS Event" "" "" "" }
//- rjf: thread/frame selection
{SelectThread 1 1 "query:threads" Thread null Nil Thread 0 0 0 0 0 1 1 Null "select_thread" "Select Thread" "Selects a thread." "" "" }
{SelectUnwind 1 1 "query:call_stack" Null null Nil Null 0 0 0 0 0 0 0 Null "select_unwind" "Select Unwind" "Selects an unwind frame number for the selected thread." "" "" }
{SelectThread 0 1 "query:threads" Thread null Nil Thread 0 0 0 0 0 1 1 Thread "select_thread" "Select Thread" "Selects a thread." "" "" }
{SelectUnwind 0 1 "query:call_stack" Null null Nil Null 0 0 0 0 0 0 0 Null "select_unwind" "Select Unwind" "Selects an unwind frame number for the selected thread." "" "" }
{UpOneFrame 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 UpArrow "up_one_frame" "Up One Frame" "Selects the call stack frame above the currently selected." "" "" }
{DownOneFrame 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 DownArrow "down_one_frame" "Down One Frame" "Selects the call stack frame below the currently selected." "callstack,unwind" "" }
{SelectEntity 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 RadioHollow "select_entity" "Select Entity" "Selects a control entity." "" "" }
{DeselectEntity 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 RadioFilled "deselect_entity" "Deselect Entity" "Deselects a control entity." "" "" }
//- rjf: font sizes
{IncUIFontScale 1 1 "" Null null Nil Null 0 0 0 0 0 0 0 Null "inc_ui_font_scale" "Increase UI Font Scale" "Increases the font size used for UI." "" "" }
@@ -537,7 +539,7 @@ RD_CmdTable: // | | | |
{EnableCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 CheckHollow "enable_cfg" "Enable Config Tree" "Enables a config tree." "" "" }
{DisableCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 CheckFilled "disable_cfg" "Disable Config Tree" "Disables a config tree." "" "" }
{SelectCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 RadioHollow "select_cfg" "Select Config Tree" "Selects a config tree, disabling all others of the same kind." "" "" }
{DeselectCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 RadioFilled "deselect_cfg" "Deselect Config Tree" "Deselects a config tree, disabling all others of the same kind." "" "" }
{DeselectCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 RadioFilled "deselect_cfg" "Deselect Config Tree" "Deselects a config tree." "" "" }
{RemoveCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Trash "remove_cfg" "Remove Config Tree" "Removes a config tree." "" "" }
{NameCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "name_cfg" "Name Config Tree" "Equips a config tree with a label." "" "" }
{ConditionCfg 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "condition_cfg" "Condition Config Tree" "Equips a config tree with a condition string." "" "" }
+124 -100
View File
@@ -396,7 +396,9 @@ E_LOOKUP_RANGE_FUNCTION_DEF(cfg)
U64 read_count = dim_1u64(read_range);
for(U64 idx = 0; idx < read_count; idx += 1, dst_idx += 1)
{
exprs[dst_idx] = e_expr_irext_array_index(arena, lhs, &lhs_irtree, idx + read_range.min - cfgs_idx_range.min);
RD_Cfg *cfg = accel->cfgs.v[idx + read_range.min - cfgs_idx_range.min];
exprs[dst_idx] = e_push_expr(arena, E_ExprKind_LeafIdent, 0);
exprs[dst_idx]->string = push_str8f(arena, "$%I64d", cfg->id);
}
}
}
@@ -836,6 +838,20 @@ E_LOOKUP_ACCESS_FUNCTION_DEF(ctrl_entities)
return result;
}
E_LOOKUP_RANGE_FUNCTION_DEF(ctrl_entities)
{
CTRL_EntityArray *entities = (CTRL_EntityArray *)user_data;
Rng1U64 legal_range = r1u64(0, entities->count);
Rng1U64 read_range = intersect_1u64(legal_range, idx_range);
U64 read_count = dim_1u64(read_range);
for(U64 out_idx = 0; out_idx < read_count; out_idx += 1)
{
CTRL_Entity *entity = entities->v[out_idx + read_range.min];
exprs[out_idx] = e_push_expr(arena, E_ExprKind_LeafIdent, 0);
exprs[out_idx]->string = ctrl_string_from_handle(arena, entity->handle);
}
}
////////////////////////////////
//~ rjf: Debug Info Tables Eval Hooks
@@ -3314,7 +3330,6 @@ rd_view_state_from_cfg(RD_Cfg *cfg)
view_state->arena = arena_alloc();
view_state->arena_reset_pos = arena_pos(view_state->arena);
view_state->ev_view = ev_view_alloc();
view_state->search_arena = arena_alloc();
}
if(view_state != &rd_nil_view_state)
{
@@ -3333,21 +3348,29 @@ rd_view_ui(Rng2F32 rect)
String8 expr_string = rd_expr_from_cfg(view);
//////////////////////////////
//- rjf: searching extension
//- rjf: query extension
//
B32 search_row_is_open = (vs->is_searching || vs->search_string_size != 0);
RD_Cfg *query_root = rd_cfg_child_from_string(view, str8_lit("query"));
RD_Cfg *input_root = rd_cfg_child_from_string(query_root, str8_lit("input"));
RD_Cfg *cmd_root = rd_cfg_child_from_string(query_root, str8_lit("cmd"));
String8 current_input = input_root->first->string;
B32 search_row_is_open = (vs->query_is_selected || current_input.size != 0);
F32 search_row_open_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "search_row_open_%p", view), (F32)!!search_row_is_open, .initial = (F32)!!search_row_is_open);
if(search_row_open_t > 0.001f)
{
String8 cmd_name = vs->search_cmd_name;
String8 cmd_name = cmd_root->first->string;
RD_IconKind icon = rd_icon_kind_from_code_name(cmd_name);
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
//- rjf: store cfg's string into view's
vs->query_string_size = Min(sizeof(vs->query_buffer), current_input.size);
MemoryCopy(vs->query_buffer, current_input.str, vs->query_string_size);
//- rjf: clamp cursor
if(vs->search_cursor.column == 0)
if(vs->query_cursor.column == 0)
{
vs->search_mark = txt_pt(1, 1);
vs->search_cursor = txt_pt(1, vs->search_string_size+1);
vs->query_mark = txt_pt(1, 1);
vs->query_cursor = txt_pt(1, vs->query_string_size+1);
}
//- rjf: determine dimensions
@@ -3365,7 +3388,7 @@ rd_view_ui(Rng2F32 rect)
}
//- rjf: build contents
UI_Parent(search_row) UI_WidthFill UI_HeightFill UI_Focus(vs->is_searching ? UI_FocusKind_On : UI_FocusKind_Off)
UI_Parent(search_row) UI_WidthFill UI_HeightFill UI_Focus(vs->query_is_selected ? UI_FocusKind_On : UI_FocusKind_Off)
RD_Font(cmd_kind_info->query.flags & RD_QueryFlag_CodeInput ? RD_FontSlot_Code : RD_FontSlot_Main)
{
UI_TextAlignment(UI_TextAlign_Center)
@@ -3382,23 +3405,27 @@ rd_view_ui(Rng2F32 rect)
{
params.flags |= !!(cmd_kind_info->query.flags & RD_QueryFlag_CodeInput) * RD_LineEditFlag_CodeContents;
params.flags |= RD_LineEditFlag_Border;
params.cursor = &vs->search_cursor;
params.mark = &vs->search_mark;
params.edit_buffer = vs->search_buffer;
params.edit_string_size_out = &vs->search_string_size;
params.edit_buffer_size = sizeof(vs->search_buffer);
params.pre_edit_value = str8(vs->search_buffer, vs->search_string_size);
params.cursor = &vs->query_cursor;
params.mark = &vs->query_mark;
params.edit_buffer = vs->query_buffer;
params.edit_string_size_out = &vs->query_string_size;
params.edit_buffer_size = sizeof(vs->query_buffer);
params.pre_edit_value = current_input;
}
UI_Signal sig = rd_line_editf(&params, "###search");
if(ui_pressed(sig))
{
vs->is_searching = 1;
vs->query_is_selected = 1;
rd_cmd(RD_CmdKind_FocusPanel);
}
}
//- rjf: commit string to view
RD_Cfg *search = rd_cfg_child_from_string_or_alloc(view, str8_lit("search"));
rd_cfg_new_replace(search, str8(vs->search_buffer, vs->search_string_size));
if(input_root == &rd_nil_cfg)
{
input_root = rd_cfg_child_from_string_or_alloc(query_root, str8_lit("input"));
}
rd_cfg_new_replace(input_root, str8(vs->query_buffer, vs->query_string_size));
}
//////////////////////////////
@@ -3691,7 +3718,7 @@ rd_view_ui(Rng2F32 rect)
S64 num_possible_visible_rows = (S64)(dim_2f32(rect).y/row_height_px);
F32 row_string_max_size_px = dim_2f32(rect).x;
EV_StringFlags string_flags = EV_StringFlag_ReadOnlyDisplayRules;
String8 filter = rd_view_search();
String8 filter = rd_view_query_input();
Vec4F32 pop_background_rgba = {0};
UI_TagF("pop") pop_background_rgba = ui_color_from_name(str8_lit("background"));
@@ -3720,16 +3747,35 @@ rd_view_ui(Rng2F32 rect)
}
}
//////////////////////////////
//- rjf: process commands
//
for(RD_Cmd *cmd = 0; rd_next_view_cmd(&cmd);)
{
RD_CmdKind kind = rd_cmd_kind_from_string(cmd->name);
switch(kind)
{
default:{}break;
case RD_CmdKind_Search:
case RD_CmdKind_SearchBackwards:
{
vs->query_is_selected = 0;
}break;
}
}
//////////////////////////////
//- rjf: consume query-completion events, if this view is being used as a query
//
if(vs->is_searching &&
#if 0
if(vs->query_is_selected &&
ui_is_focus_active() &&
ui_slot_press(UI_EventActionSlot_Accept))
{
// TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf):
// TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf): // TODO(rjf):
}
#endif
//////////////////////////////
//- rjf: consume events & perform navigations/edits - calculate state
@@ -5159,7 +5205,7 @@ rd_view_ui(Rng2F32 rect)
{
searched_string = dr_string_from_fstrs(scratch.arena, &cell_info.fstrs);
}
String8 search_query = rd_view_search();
String8 search_query = rd_view_query_input();
FuzzyMatchRangeList fuzzy_matches = fuzzy_match_find(scratch.arena, search_query, searched_string);
if(fuzzy_matches.count == 0)
{
@@ -5582,12 +5628,12 @@ rd_view_ui(Rng2F32 rect)
////////////////////////////
//- rjf: catchall query completion controls
//
if(vs->is_searching) UI_Focus(UI_FocusKind_On)
if(vs->query_is_selected) UI_Focus(UI_FocusKind_On)
{
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Cancel))
{
vs->is_searching = 0;
vs->search_string_size = 0;
vs->query_is_selected = 0;
vs->query_string_size = 0;
}
if(ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept))
{
@@ -5629,12 +5675,23 @@ rd_view_eval_view(void)
}
internal String8
rd_view_search(void)
rd_view_query_cmd(void)
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *search = rd_cfg_child_from_string(view, str8_lit("search"));
String8 search_string = search->first->string;
return search_string;
RD_Cfg *query = rd_cfg_child_from_string(view, str8_lit("query"));
RD_Cfg *cmd = rd_cfg_child_from_string(query, str8_lit("cmd"));
String8 string = cmd->first->string;
return string;
}
internal String8
rd_view_query_input(void)
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *query = rd_cfg_child_from_string(view, str8_lit("query"));
RD_Cfg *input = rd_cfg_child_from_string(query, str8_lit("input"));
String8 string = input->first->string;
return string;
}
internal RD_Cfg *
@@ -7258,19 +7315,19 @@ rd_window_frame(void)
B32 size_query_by_expr_eval = (cmd_kind_info->query.expr.size == 0);
//- rjf: build & prepare view for query ui
RD_Cfg *query = rd_immediate_cfg_from_keyf("window_query_%p", window);
RD_Cfg *view = rd_cfg_child_from_string_or_alloc(query, str8_lit("watch"));
RD_Cfg *window_query = rd_immediate_cfg_from_keyf("window_query_%p", window);
RD_Cfg *view = rd_cfg_child_from_string_or_alloc(window_query, str8_lit("watch"));
RD_Cfg *expr = rd_cfg_child_from_string_or_alloc(view, str8_lit("expression"));
RD_Cfg *query = rd_cfg_child_from_string_or_alloc(view, str8_lit("query"));
RD_Cfg *cmd = rd_cfg_child_from_string_or_alloc(query, str8_lit("cmd"));
rd_cfg_new_replace(cmd, cmd_name);
rd_cfg_child_from_string_or_alloc(view, str8_lit("lister"));
RD_ViewState *vs = rd_view_state_from_cfg(view);
vs->is_searching = 1;
arena_clear(vs->search_arena);
vs->search_cmd_name = push_str8_copy(vs->search_arena, cmd_name);
vs->search_regs = rd_regs_copy(vs->search_arena, ws->query_regs);
vs->query_is_selected = 1;
String8 query_expression = cmd_kind_info->query.expr;
if(query_expression.size == 0)
{
query_expression = str8(vs->search_buffer, vs->search_string_size);
query_expression = str8(vs->query_buffer, vs->query_string_size);
RD_Cfg *explicit_root = rd_cfg_child_from_string_or_alloc(view, str8_lit("explicit_root"));
rd_cfg_new(explicit_root, str8_lit("1"));
}
@@ -7281,7 +7338,7 @@ rd_window_frame(void)
{
String8 pre_insertion = str8_prefix(query_expression, input_insertion_pos);
String8 post_insertion = str8_skip(query_expression, input_insertion_pos + 6);
query_expression = push_str8f(scratch.arena, "%S%S%S", pre_insertion, str8(vs->search_buffer, vs->search_string_size), post_insertion);
query_expression = push_str8f(scratch.arena, "%S%S%S", pre_insertion, str8(vs->query_buffer, vs->query_string_size), post_insertion);
}
rd_cfg_release(rd_cfg_child_from_string(view, str8_lit("explicit_root")));
}
@@ -7300,7 +7357,7 @@ rd_window_frame(void)
{
Vec2F32 content_rect_center = center_2f32(content_rect);
Vec2F32 content_rect_dim = dim_2f32(content_rect);
EV_BlockTree predicted_block_tree = ev_block_tree_from_exprs(scratch.arena, rd_view_eval_view(), rd_view_search(), query_eval.exprs);
EV_BlockTree predicted_block_tree = ev_block_tree_from_exprs(scratch.arena, rd_view_eval_view(), rd_view_query_input(), query_eval.exprs);
F32 query_open_t = ui_anim(ui_key_from_string(ui_key_zero(), str8_lit("query_open_t")), 1.f);
F32 query_width_px = floor_f32(dim_2f32(content_rect).x * 0.35f);
F32 max_query_height_px = content_rect_dim.y*0.8f;
@@ -12535,7 +12592,6 @@ rd_frame(void)
{
arena_release(ext->arena);
}
arena_release(vs->search_arena);
arena_release(vs->arena);
DLLRemove_NP(rd_state->view_state_slots[slot_idx].first, rd_state->view_state_slots[slot_idx].last, vs, hash_next, hash_prev);
SLLStackPush_N(rd_state->free_view_state, vs, hash_next);
@@ -13462,7 +13518,8 @@ rd_frame(void)
e_string2expr_map_insert(scratch.arena, ctx->macro_map, collection_name, expr);
e_lookup_rule_map_insert_new(scratch.arena, ctx->lookup_rule_map, collection_name,
.info = E_LOOKUP_INFO_FUNCTION_NAME(ctrl_entities),
.access = E_LOOKUP_ACCESS_FUNCTION_NAME(ctrl_entities));
.access = E_LOOKUP_ACCESS_FUNCTION_NAME(ctrl_entities),
.range = E_LOOKUP_RANGE_FUNCTION_NAME(ctrl_entities));
}
//- rjf: add macro / lookup rules for unattached processes
@@ -15795,6 +15852,8 @@ Z(getting_started)
{
String8 cmd_name = rd_regs()->cmd_name;
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
// rjf: floating queries -> set up window to build immediate-mode top-level query
if(cmd_kind_info->query.flags & RD_QueryFlag_Floating)
{
RD_Cfg *window = rd_cfg_from_id(rd_regs()->window);
@@ -15807,38 +15866,40 @@ Z(getting_started)
ws->query_regs = rd_regs_copy(ws->query_arena, rd_regs());
}
}
// rjf: non-floating -> embed in tab parameter
else
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_Cfg *query = rd_cfg_child_from_string_or_alloc(view, str8_lit("query"));
RD_Cfg *cmd = rd_cfg_child_from_string_or_alloc(query, str8_lit("cmd"));
RD_Cfg *input = rd_cfg_child_from_string_or_alloc(query, str8_lit("input"));
String8 current_query_cmd_name = cmd->first->string;
RD_ViewState *vs = rd_view_state_from_cfg(view);
if(!str8_match(vs->search_cmd_name, cmd_name, 0))
if(!str8_match(current_query_cmd_name, cmd_name, 0))
{
arena_clear(vs->search_arena);
vs->search_regs = rd_regs_copy(vs->search_arena, rd_regs());
vs->search_cmd_name = push_str8_copy(vs->search_arena, cmd_name);
if(!vs->is_searching)
rd_cfg_new_replace(cmd, cmd_name);
if(!vs->query_is_selected)
{
vs->search_cursor = txt_pt(1, 1+vs->search_string_size);
vs->search_mark = txt_pt(1, 1);
vs->query_cursor = txt_pt(1, 1+input->first->string.size);
vs->query_mark = txt_pt(1, 1);
}
vs->is_searching = 1;
vs->query_is_selected = 1;
}
else
{
vs->is_searching ^= 1;
vs->query_is_selected ^= 1;
}
}
}break;
case RD_CmdKind_CompleteQuery:
{
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_ViewState *vs = rd_view_state_from_cfg(view);
String8 cmd_name = vs->search_cmd_name;
String8 cmd_name = rd_view_query_cmd();
String8 input = rd_view_query_input();
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name);
RD_RegsScope()
{
rd_regs_copy_contents(vs->search_arena, rd_regs(), vs->search_regs);
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, str8(vs->search_buffer, vs->search_string_size));
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, input);
rd_push_cmd(cmd_name, rd_regs());
}
if(cmd_kind_info->query.flags & RD_QueryFlag_Floating)
@@ -15849,53 +15910,12 @@ Z(getting_started)
}
else if(!(cmd_kind_info->query.flags & RD_QueryFlag_KeepOldInput))
{
vs->is_searching = 0;
vs->search_string_size = 0;
RD_Cfg *view = rd_cfg_from_id(rd_regs()->view);
RD_ViewState *vs = rd_view_state_from_cfg(view);
vs->query_is_selected = 0;
vs->query_string_size = 0;
rd_cfg_release(rd_cfg_child_from_string(view, str8_lit("query")));
}
#if 0 // TODO(rjf): @cfg (query completion)
RD_Window *ws = rd_window_from_handle(rd_regs()->window);
String8 query_cmd_name = ws->query_cmd_name;
RD_CmdKindInfo *info = rd_cmd_kind_info_from_string(query_cmd_name);
RD_RegSlot slot = info->query.slot;
// rjf: compound command parameters
if(slot != RD_RegSlot_Null && !(ws->query_cmd_regs_mask[slot/64] & (1ull<<(slot%64))))
{
RD_Regs *regs_copy = rd_regs_copy(ws->query_cmd_arena, rd_regs());
Rng1U64 offset_range_in_regs = rd_reg_slot_range_table[slot];
MemoryCopy((U8 *)(ws->query_cmd_regs) + offset_range_in_regs.min,
(U8 *)(regs_copy) + offset_range_in_regs.min,
dim_1u64(offset_range_in_regs));
ws->query_cmd_regs_mask[slot/64] |= (1ull<<(slot%64));
}
// rjf: determine if command is ready to run
B32 command_ready = 1;
if(slot != RD_RegSlot_Null && !(ws->query_cmd_regs_mask[slot/64] & (1ull<<(slot%64))))
{
command_ready = 0;
}
// rjf: end this query
if(!(info->query.flags & RD_QueryFlag_KeepOldInput))
{
rd_cmd(RD_CmdKind_CancelQuery);
}
// rjf: unset command register slot, if we keep old input (and thus need
// to re-query user)
if(info->query.flags & RD_QueryFlag_KeepOldInput)
{
ws->query_cmd_regs_mask[slot/64] &= ~(1ull<<(slot%64));
}
// rjf: push command if possible
if(command_ready)
{
rd_push_cmd(ws->query_cmd_name, ws->query_cmd_regs);
}
#endif
}break;
case RD_CmdKind_CancelQuery:
{
@@ -16068,7 +16088,7 @@ Z(getting_started)
case RD_CmdKind_AddAddressBreakpoint:
case RD_CmdKind_AddFunctionBreakpoint:
{
rd_cmd(RD_CmdKind_AddBreakpoint);
rd_cmd(RD_CmdKind_AddBreakpoint, .file_path = str8_zero());
}break;
//- rjf: watch pins
@@ -16293,6 +16313,10 @@ Z(getting_started)
}break;
//- rjf: debug control context management operations
case RD_CmdKind_SelectEntity:
{
rd_cmd(RD_CmdKind_SelectThread, .thread = rd_regs()->ctrl_entity);
}break;
case RD_CmdKind_SelectThread:
{
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread);
+8 -10
View File
@@ -235,15 +235,12 @@ struct RD_ViewState
RD_ArenaExt *last_arena_ext;
void *user_data;
// rjf: search editing controls
B32 is_searching;
Arena *search_arena;
RD_Regs *search_regs;
String8 search_cmd_name;
TxtPt search_cursor;
TxtPt search_mark;
U8 search_buffer[KB(1)];
U64 search_string_size;
// rjf: query state
B32 query_is_selected;
TxtPt query_cursor;
TxtPt query_mark;
U8 query_buffer[KB(1)];
U64 query_string_size;
};
typedef struct RD_ViewStateSlot RD_ViewStateSlot;
@@ -1079,7 +1076,8 @@ internal void rd_view_ui(Rng2F32 rect);
internal Arena *rd_view_arena(void);
internal UI_ScrollPt2 rd_view_scroll_pos(void);
internal EV_View *rd_view_eval_view(void);
internal String8 rd_view_search(void);
internal String8 rd_view_query_cmd(void);
internal String8 rd_view_query_input(void);
internal RD_Cfg *rd_view_cfg_from_string(String8 string);
internal E_Value rd_view_cfg_value_from_string(String8 string);
+14 -4
View File
@@ -139,7 +139,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
//////////////////////////////
//- rjf: get active search query
//
String8 search_query = rd_view_search();
String8 search_query = rd_view_query_input();
B32 search_query_is_active = 0;
//////////////////////////////
@@ -832,7 +832,7 @@ rd_watch_pt_from_tbl(EV_BlockRangeList *block_ranges, Vec2S64 tbl)
RD_WatchPt pt = zero_struct;
{
Temp scratch = scratch_begin(0, 0);
EV_Row *row = ev_row_from_num(scratch.arena, rd_view_eval_view(), rd_view_search(), block_ranges, (U64)tbl.y);
EV_Row *row = ev_row_from_num(scratch.arena, rd_view_eval_view(), rd_view_query_input(), block_ranges, (U64)tbl.y);
RD_WatchRowInfo row_info = rd_watch_row_info_from_row(scratch.arena, row);
{
S64 x = 0;
@@ -859,7 +859,7 @@ rd_tbl_from_watch_pt(EV_BlockRangeList *block_ranges, RD_WatchPt pt)
{
Temp scratch = scratch_begin(0, 0);
U64 num = ev_num_from_key(block_ranges, pt.key);
EV_Row *row = ev_row_from_num(scratch.arena, rd_view_eval_view(), rd_view_search(), block_ranges, num);
EV_Row *row = ev_row_from_num(scratch.arena, rd_view_eval_view(), rd_view_query_input(), block_ranges, num);
RD_WatchRowInfo row_info = rd_watch_row_info_from_row(scratch.arena, row);
tbl.x = 0;
{
@@ -1091,6 +1091,16 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .flags = RD_WatchCellFlag_ActivateWithSingleClick|RD_WatchCellFlag_Button, .px = floor_f32(ui_top_font_size()*4.f), .string = push_str8f(arena, "query:commands.%S", cmd_name));
}
if(entity->kind == CTRL_EntityKind_Thread)
{
RD_CmdKind cmd_kind = RD_CmdKind_SelectEntity;
if(ctrl_handle_match(entity->handle, rd_base_regs()->thread))
{
cmd_kind = RD_CmdKind_DeselectEntity;
}
String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .flags = RD_WatchCellFlag_ActivateWithSingleClick|RD_WatchCellFlag_Button, .px = floor_f32(ui_top_font_size()*4.f), .string = push_str8f(arena, "query:commands.%S", cmd_name));
}
}
// rjf: singular button for unattached processes
@@ -1408,7 +1418,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
}
//- rjf: generate strings/flags based on that expression & fill
result.string = rd_value_string_from_eval(arena, rd_view_search(), string_flags, default_radix, font, font_size, max_size_px, result.eval);
result.string = rd_value_string_from_eval(arena, rd_view_query_input(), string_flags, default_radix, font, font_size, max_size_px, result.eval);
result.flags |= !!(ev_type_key_is_editable(result.eval.irtree.type_key) && result.eval.irtree.mode == E_Mode_Offset) * RD_WatchCellFlag_CanEdit;
E_Type *type = e_type_from_key__cached(result.eval.irtree.type_key);
if(type->flags & (E_TypeFlag_IsPlainText|E_TypeFlag_IsPathText))
+1 -1
View File
@@ -438,7 +438,7 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e
Vec4F32 process_color = rd_color_from_ctrl_entity(process);
if(process_color.w == 0)
{
process_color = color;
process_color = ui_color_from_name(str8_lit("text"));
}
if(process_name.size != 0)
{