stateful query lister stack & immediate-mode autocompletion lister, via same codepath; begin hooking up views

This commit is contained in:
Ryan Fleury
2025-01-17 08:11:01 -08:00
parent 4ae032efff
commit e6d0afb026
6 changed files with 921 additions and 819 deletions
+9 -4
View File
@@ -191,7 +191,7 @@ RD_EntityKindFlags rd_entity_kind_flags_table[27] =
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (1*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (0*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
};
Rng1U64 rd_reg_slot_range_table[34] =
Rng1U64 rd_reg_slot_range_table[38] =
{
{0},
{OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(CTRL_Handle)},
@@ -219,6 +219,10 @@ Rng1U64 rd_reg_slot_range_table[34] =
{OffsetOf(RD_Regs, voff), OffsetOf(RD_Regs, voff) + sizeof(U64)},
{OffsetOf(RD_Regs, vaddr_range), OffsetOf(RD_Regs, vaddr_range) + sizeof(Rng1U64)},
{OffsetOf(RD_Regs, voff_range), OffsetOf(RD_Regs, voff_range) + sizeof(Rng1U64)},
{OffsetOf(RD_Regs, ui_key), OffsetOf(RD_Regs, ui_key) + sizeof(UI_Key)},
{OffsetOf(RD_Regs, off_px), OffsetOf(RD_Regs, off_px) + sizeof(Vec2F32)},
{OffsetOf(RD_Regs, lister_flags), OffsetOf(RD_Regs, lister_flags) + sizeof(RD_ListerFlags)},
{OffsetOf(RD_Regs, reg_slot), OffsetOf(RD_Regs, reg_slot) + sizeof(RD_RegSlot)},
{OffsetOf(RD_Regs, pid), OffsetOf(RD_Regs, pid) + sizeof(U32)},
{OffsetOf(RD_Regs, force_confirm), OffsetOf(RD_Regs, force_confirm) + sizeof(B32)},
{OffsetOf(RD_Regs, prefer_disasm), OffsetOf(RD_Regs, prefer_disasm) + sizeof(B32)},
@@ -229,7 +233,7 @@ Rng1U64 rd_reg_slot_range_table[34] =
{OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)},
};
RD_CmdKindInfo rd_cmd_kind_info_table[215] =
RD_CmdKindInfo rd_cmd_kind_info_table[216] =
{
{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("Launch and Run"), RD_IconKind_Play, (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_Required*1), RD_RegSlot_Entity, str8_lit_comp(""), RD_EntityKind_Target, CTRL_EntityKind_Null}},
@@ -266,6 +270,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("Set Entity Name"), RD_IconKind_Null, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, 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("Attach"), RD_IconKind_Null, (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_Required*1), RD_RegSlot_PID, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), RD_IconKind_X, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("open_lister"), str8_lit_comp("Opens the lister."), str8_lit_comp("help,cmd"), str8_lit_comp("Open Lister"), RD_IconKind_Null, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, 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("Run Command"), RD_IconKind_Null, (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_Required*1), RD_RegSlot_CmdName, str8_lit_comp("commands"), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("OS Event"), RD_IconKind_Null, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp("Select Thread"), RD_IconKind_Null, (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_Required*1), RD_RegSlot_Thread, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Thread}},
@@ -308,7 +313,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[215] =
{ str8_lit_comp("move_tab_right"), str8_lit_comp("Moves the selected tab right one slot."), str8_lit_comp(""), str8_lit_comp("Move Tab Right"), RD_IconKind_RightArrow, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("Move Tab Left"), RD_IconKind_LeftArrow, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("open_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), str8_lit_comp(""), str8_lit_comp("Open Tab"), RD_IconKind_Null, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("Close Tab"), RD_IconKind_X, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("Close Tab"), RD_IconKind_X, (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_Required*0), RD_RegSlot_View, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), str8_lit_comp(""), str8_lit_comp("Move Tab"), RD_IconKind_Null, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("tab_bar_top"), str8_lit_comp("Anchors a panel's tab bar to the top of the panel."), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Top"), RD_IconKind_UpArrow, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
{ str8_lit_comp("tab_bar_bottom"), str8_lit_comp("Anchors a panel's tab bar to the bottom of the panel."), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Bottom"), RD_IconKind_DownArrow, (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_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil, CTRL_EntityKind_Null}},
@@ -558,7 +563,7 @@ RD_StringBindingPair rd_default_binding_table[110] =
{str8_lit_comp("add_target"), {OS_Key_T, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("attach"), {OS_Key_F6, 0 |OS_Modifier_Shift }},
{str8_lit_comp("filter"), {OS_Key_Slash, 0 |OS_Modifier_Ctrl }},
{str8_lit_comp("run_command"), {OS_Key_F1, 0 }},
{str8_lit_comp("open_lister"), {OS_Key_F1, 0 }},
{str8_lit_comp("log_marker"), {OS_Key_M, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift |OS_Modifier_Alt}},
};
+17 -4
View File
@@ -75,6 +75,10 @@ RD_RegSlot_Vaddr,
RD_RegSlot_Voff,
RD_RegSlot_VaddrRange,
RD_RegSlot_VoffRange,
RD_RegSlot_UIKey,
RD_RegSlot_OffPx,
RD_RegSlot_ListerFlags,
RD_RegSlot_RegSlot,
RD_RegSlot_PID,
RD_RegSlot_ForceConfirm,
RD_RegSlot_PreferDisasm,
@@ -123,6 +127,7 @@ RD_CmdKind_SetEntityColor,
RD_CmdKind_SetEntityName,
RD_CmdKind_Attach,
RD_CmdKind_Exit,
RD_CmdKind_OpenLister,
RD_CmdKind_RunCommand,
RD_CmdKind_OSEvent,
RD_CmdKind_SelectThread,
@@ -298,9 +303,9 @@ RD_CmdKind_Settings,
RD_CmdKind_PickFile,
RD_CmdKind_PickFolder,
RD_CmdKind_PickFileOrFolder,
RD_CmdKind_PushLister,
RD_CmdKind_CompleteLister,
RD_CmdKind_CancelLister,
RD_CmdKind_PushQuery,
RD_CmdKind_CompleteQuery,
RD_CmdKind_CancelQuery,
RD_CmdKind_ToggleDevMenu,
RD_CmdKind_LogMarker,
RD_CmdKind_COUNT,
@@ -567,6 +572,10 @@ U64 vaddr;
U64 voff;
Rng1U64 vaddr_range;
Rng1U64 voff_range;
UI_Key ui_key;
Vec2F32 off_px;
RD_ListerFlags lister_flags;
RD_RegSlot reg_slot;
U32 pid;
B32 force_confirm;
B32 prefer_disasm;
@@ -638,6 +647,10 @@ RD_ViewRuleUIFunctionType *ui;
.voff = rd_regs()->voff,\
.vaddr_range = rd_regs()->vaddr_range,\
.voff_range = rd_regs()->voff_range,\
.ui_key = rd_regs()->ui_key,\
.off_px = rd_regs()->off_px,\
.lister_flags = rd_regs()->lister_flags,\
.reg_slot = rd_regs()->reg_slot,\
.pid = rd_regs()->pid,\
.force_confirm = rd_regs()->force_confirm,\
.prefer_disasm = rd_regs()->prefer_disasm,\
@@ -766,7 +779,7 @@ extern String8 d_entity_kind_name_lower_table[27];
extern String8 d_entity_kind_name_lower_plural_table[27];
extern String8 d_entity_kind_name_label_table[27];
extern RD_EntityKindFlags rd_entity_kind_flags_table[27];
extern Rng1U64 rd_reg_slot_range_table[34];
extern Rng1U64 rd_reg_slot_range_table[38];
extern RD_StringBindingPair rd_default_binding_table[110];
extern String8 rd_binding_version_remap_old_name_table[8];
extern String8 rd_binding_version_remap_new_name_table[8];
+16 -6
View File
@@ -181,6 +181,12 @@ RD_RegTable:
{Rng1U64 vaddr_range VaddrRange }
{Rng1U64 voff_range VoffRange }
// rjf: ui context
{UI_Key ui_key UIKey }
{Vec2F32 off_px OffPx }
{RD_ListerFlags lister_flags ListerFlags }
{RD_RegSlot reg_slot RegSlot }
// rjf: general parameters
{U32 pid PID }
{B32 force_confirm ForceConfirm }
@@ -228,6 +234,9 @@ RD_CmdTable: // | | | |
//- rjf: exiting
{Exit 1 1 Null null Nil Null 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" }
//- rjf: top-level lister
{OpenLister 1 1 Null null Nil Null 0 0 0 0 0 0 Null "open_lister" "Open Lister" "Opens the lister." "help,cmd" }
//- rjf: command runner
{RunCommand 1 1 CmdName commands Nil Null 0 0 0 0 0 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" }
@@ -295,7 +304,7 @@ RD_CmdTable: // | | | |
{MoveTabRight 1 1 Null null Nil Null 0 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" }
{MoveTabLeft 1 1 Null null Nil Null 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" }
{OpenTab 0 0 Null null Nil Null 0 0 0 0 0 0 Null "open_tab" "Open Tab" "Opens a new tab with the parameterized view specification." "" }
{CloseTab 1 1 Null null Nil Null 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" }
{CloseTab 1 1 View null Nil Null 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" }
{MoveTab 0 0 Null null Nil Null 0 0 0 0 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" }
{TabBarTop 1 1 Null null Nil Null 0 0 0 0 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" }
{TabBarBottom 1 1 Null null Nil Null 0 0 0 0 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" }
@@ -477,10 +486,10 @@ RD_CmdTable: // | | | |
{PickFolder 0 0 FilePath null Nil Null 0 1 0 0 0 1 FolderOpenFilled "pick_folder" "Pick Folder" "Opens the file browser to pick a folder." "" }
{PickFileOrFolder 0 0 FilePath null Nil Null 1 1 0 0 0 1 FileOutline "pick_file_or_folder" "Pick File/Folder" "Opens the file browser to pick a file or folder." "" }
//- rjf: lister stack
{PushLister 0 0 Null null Nil Null 0 0 0 0 0 0 Null "push_lister" "Push Lister" "Pushes a new lister onto the lister stack." "" }
{CompleteLister 0 0 Null null Nil Null 0 0 0 0 0 0 Null "complete_lister" "Complete Lister" "Completes a lister, and pops it off the lister stack." "" }
{CancelLister 0 0 Null null Nil Null 0 0 0 0 0 0 Null "cancel_lister" "Cancel Lister" "Cancels a lister, and pops it off the lister stack." "" }
//- rjf: query stack
{PushQuery 0 0 Null null Nil Null 0 0 0 0 0 0 Null "push_lister" "Push Lister" "Pushes a new lister onto the lister stack." "" }
{CompleteQuery 0 0 Null null Nil Null 0 0 0 0 0 0 Null "complete_lister" "Complete Lister" "Completes a lister, and pops it off the lister stack." "" }
{CancelQuery 0 0 Null null Nil Null 0 0 0 0 0 0 Null "cancel_lister" "Cancel Lister" "Cancels a lister, and pops it off the lister stack." "" }
//- rjf: developer commands
{ToggleDevMenu 1 1 Null null Nil Null 0 0 0 0 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" }
@@ -685,7 +694,8 @@ RD_DefaultBindingTable:
{ "filter" Slash ctrl 0 0 }
//- rjf: command lister
{ "run_command" F1 0 0 0 }
// { "run_command" F1 0 0 0 }
{ "open_lister" F1 0 0 0 }
//- rjf: developer commands
{ "log_marker" M ctrl shift alt }
+804 -714
View File
File diff suppressed because it is too large Load Diff
+42 -55
View File
@@ -142,7 +142,7 @@ enum
RD_ViewRuleInfoFlag_ProjectFiltered = (1<<7),
};
#define RD_VIEW_RULE_UI_FUNCTION_SIG(name) void name(String8 string, Rng2F32 rect)
#define RD_VIEW_RULE_UI_FUNCTION_SIG(name) void name(String8 string, MD_Node *params, Rng2F32 rect)
#define RD_VIEW_RULE_UI_FUNCTION_NAME(name) rd_view_rule_ui_##name
#define RD_VIEW_RULE_UI_FUNCTION_DEF(name) internal RD_VIEW_RULE_UI_FUNCTION_SIG(RD_VIEW_RULE_UI_FUNCTION_NAME(name))
typedef RD_VIEW_RULE_UI_FUNCTION_SIG(RD_ViewRuleUIFunctionType);
@@ -169,6 +169,7 @@ struct RD_ViewState
U64 last_frame_index_touched;
// rjf: loading indicator info
F32 loading_t;
F32 loading_t_target;
U64 loading_progress_v;
U64 loading_progress_v_target;
@@ -230,6 +231,35 @@ enum
RD_CmdKindFlag_ListInIPCDocs = (1<<1),
};
////////////////////////////////
//~ rjf: Lister Flags
typedef U32 RD_ListerFlags;
enum
{
//- rjf: lister visual settings
RD_ListerFlag_LineEdit = (1<<0), // determines whether or not the lister has its own line edit, or if the filtering string is sourced by a user
RD_ListerFlag_Descriptions = (1<<1), // determines whether or not the lister items have descriptions (taller & bigger buttons)
//- rjf: lister item sources
RD_ListerFlag_Locals = (1<<2),
RD_ListerFlag_Registers = (1<<3),
RD_ListerFlag_ViewRules = (1<<4),
RD_ListerFlag_ViewRuleParams = (1<<5),
RD_ListerFlag_Members = (1<<6),
RD_ListerFlag_Globals = (1<<7),
RD_ListerFlag_ThreadLocals = (1<<8),
RD_ListerFlag_Procedures = (1<<9),
RD_ListerFlag_Types = (1<<10),
RD_ListerFlag_Languages = (1<<11),
RD_ListerFlag_Architectures = (1<<12),
RD_ListerFlag_Tex2DFormats = (1<<13),
RD_ListerFlag_Files = (1<<14),
RD_ListerFlag_Commands = (1<<15),
RD_ListerFlag_Settings = (1<<16),
RD_ListerFlag_SystemProcesses= (1<<17),
};
////////////////////////////////
//~ rjf: Generated Code
@@ -538,32 +568,6 @@ RD_PaletteCode;
////////////////////////////////
//~ rjf: Lister Types
typedef U32 RD_ListerFlags;
enum
{
//- rjf: lister visual settings
RD_ListerFlag_LineEdit = (1<<0), // determines whether or not the lister has its own line edit, or if the filtering string is sourced by a user
RD_ListerFlag_Descriptions = (1<<1), // determines whether or not the lister items have descriptions (taller & bigger buttons)
//- rjf: lister item sources
RD_ListerFlag_Locals = (1<<2),
RD_ListerFlag_Registers = (1<<3),
RD_ListerFlag_ViewRules = (1<<4),
RD_ListerFlag_ViewRuleParams = (1<<5),
RD_ListerFlag_Members = (1<<6),
RD_ListerFlag_Globals = (1<<7),
RD_ListerFlag_ThreadLocals = (1<<8),
RD_ListerFlag_Procedures = (1<<9),
RD_ListerFlag_Types = (1<<10),
RD_ListerFlag_Languages = (1<<11),
RD_ListerFlag_Architectures = (1<<12),
RD_ListerFlag_Tex2DFormats = (1<<13),
RD_ListerFlag_Files = (1<<14),
RD_ListerFlag_Commands = (1<<15),
RD_ListerFlag_Settings = (1<<16),
RD_ListerFlag_SystemProcesses= (1<<17),
};
typedef struct RD_ListerItem RD_ListerItem;
struct RD_ListerItem
{
@@ -606,26 +610,12 @@ struct RD_ListerItemArray
U64 count;
};
typedef struct RD_ListerParams RD_ListerParams;
struct RD_ListerParams
{
UI_Key anchor_key;
Vec2F32 anchor_off;
RD_ListerFlags flags;
String8List strings;
String8 input;
U64 cursor_off;
F32 squish;
F32 transparency;
};
typedef struct RD_Lister RD_Lister;
struct RD_Lister
{
RD_Lister *next;
Arena *arena;
RD_Regs *regs;
RD_ListerParams params;
UI_ScrollPt scroll_pt;
U8 input_buffer[1024];
U64 input_string_size;
@@ -669,8 +659,9 @@ struct RD_WindowState
B32 menu_bar_key_held;
B32 menu_bar_focus_press_started;
// rjf: lister stack state
RD_Lister top_lister; // points to chain of stateful listers
// rjf: lister state
RD_Lister *top_query_lister;
RD_Lister *autocomp_lister;
U64 autocomp_lister_last_frame_idx;
// rjf: context menu state
@@ -687,22 +678,13 @@ struct RD_WindowState
Arena *drop_completion_arena;
String8List drop_completion_paths;
// rjf: lister state
U64 lister_last_frame_idx;
Arena *lister_arena;
RD_Regs *lister_regs;
RD_ListerParams lister_params;
UI_ScrollPt lister_scroll_pt;
U8 lister_input_buffer[1024];
U64 lister_input_size;
TxtPt lister_input_cursor;
TxtPt lister_input_mark;
// rjf: query view stack
#if 0
Arena *query_cmd_arena;
String8 query_cmd_name;
RD_Regs *query_cmd_regs;
U64 query_cmd_regs_mask[(RD_RegSlot_COUNT + 63) / 64];
#endif
// rjf: hover eval state
B32 hover_eval_focused;
@@ -1324,19 +1306,24 @@ internal String8 rd_value_string_from_eval(Arena *arena, EV_StringFlags flags, U
internal void rd_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 string);
////////////////////////////////
//~ rjf: Lister
//~ rjf: Lister Functions
internal void rd_lister_item_chunk_list_push(Arena *arena, RD_ListerItemChunkList *list, U64 cap, RD_ListerItem *item);
#define rd_lister_item_chunk_list_push_new(arena, list, cap, ...) rd_lister_item_chunk_list_push((arena), (list), (cap), &(RD_ListerItem){.string = {0}, __VA_ARGS__})
internal RD_ListerItemArray rd_lister_item_array_from_chunk_list(Arena *arena, RD_ListerItemChunkList *list);
internal int rd_lister_item_qsort_compare(RD_ListerItem *a, RD_ListerItem *b);
internal void rd_lister_item_array_sort__in_place(RD_ListerItemArray *array);
internal RD_ListerItemArray rd_lister_item_array_from_regs(Arena *arena, RD_Regs *regs);
internal String8 rd_lister_query_word_from_input_string_off(String8 input, U64 cursor_off);
internal String8 rd_lister_query_path_from_input_string_off(String8 input, U64 cursor_off);
#if 0 // TODO(rjf): @cfg
internal RD_ListerParams rd_view_rule_lister_params_from_input_cursor(Arena *arena, String8 string, U64 cursor_off);
internal void rd_set_autocomp_lister_query_(RD_ListerParams *params);
#define rd_set_autocomp_lister_query(...) rd_set_autocomp_lister_query_(&(RD_ListerParams){.flags = 0, __VA_ARGS__})
#endif
internal void rd_set_autocomp_lister_query_(RD_Regs *regs);
#define rd_set_autocomp_lister_query(...) rd_set_autocomp_lister_query_(&(RD_Regs){rd_regs_lit_init_top __VA_ARGS__})
////////////////////////////////
//~ rjf: Search Strings
+33 -36
View File
@@ -7,6 +7,7 @@
internal void
rd_code_view_init(RD_CodeViewState *cv)
{
ProfBeginFunction();
if(cv->initialized == 0)
{
cv->initialized = 1;
@@ -15,6 +16,7 @@ rd_code_view_init(RD_CodeViewState *cv)
cv->center_cursor = 1;
rd_store_view_loading_info(1, 0, 0);
}
ProfEnd();
}
internal RD_CodeViewBuildResult
@@ -3122,7 +3124,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
UI_Parent(box)
{
String8 row_expr = e_string_from_expr(scratch.arena, row->expr);
cell_ui_hook(row_expr, r2f32p(x_px, 0, x_px + col->pct*dim_2f32(rect).x, row_height_px));
cell_ui_hook(row_expr, cell_ui_params, r2f32p(x_px, 0, x_px + col->pct*dim_2f32(rect).x, row_height_px));
}
sig = ui_signal_from_box(box);
}
@@ -3158,20 +3160,11 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
txt_pt_match(cell_edit_state->cursor, cell_edit_state->mark))
{
String8 input = str8(cell_edit_state->input_buffer, cell_edit_state->input_size);
RD_ListerParams params = {cell_autocomp_flags};
if(col->kind == RD_WatchViewColumnKind_ViewRule)
{
params = rd_view_rule_lister_params_from_input_cursor(scratch.arena, input, cell_edit_state->cursor.column-1);
if(params.flags == 0)
{
params.flags = cell_autocomp_flags;
}
}
params.anchor_key = sig.box->key;
params.anchor_off = v2f32(0, dim_2f32(sig.box->rect).y);
params.input = input;
params.cursor_off = cell_edit_state->cursor.column-1;
rd_set_autocomp_lister_query_(&params);
rd_set_autocomp_lister_query(.ui_key = sig.box->key,
.off_px = v2f32(0, dim_2f32(sig.box->rect).y),
.string = input,
.cursor = cell_edit_state->cursor,
.lister_flags = cell_autocomp_flags);
}
}
}
@@ -3762,7 +3755,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(commands)
//- rjf: submit best match when hitting enter w/ no selection
if(cv->selected_cmd_hash == 0 && ui_slot_press(UI_EventActionSlot_Accept))
{
rd_cmd(RD_CmdKind_CompleteLister, .cmd_name = (cmd_array.count > 0 ? cmd_array.v[0].cmd_name : str8_zero()));
rd_cmd(RD_CmdKind_CompleteQuery, .cmd_name = (cmd_array.count > 0 ? cmd_array.v[0].cmd_name : str8_zero()));
}
//- rjf: selected kind -> cursor
@@ -3875,7 +3868,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(commands)
UI_Signal sig = ui_signal_from_box(box);
if(ui_clicked(sig))
{
rd_cmd(RD_CmdKind_CompleteLister, .cmd_name = item->cmd_name);
rd_cmd(RD_CmdKind_CompleteQuery, .cmd_name = item->cmd_name);
}
}
}
@@ -4227,7 +4220,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(file_system)
// rjf: command search part is empty, but directory matches some file:
if(path_query_path_props.created != 0 && path_query.search.size == 0)
{
rd_cmd(RD_CmdKind_CompleteLister, .file_path = query_normalized_with_opt_slash);
rd_cmd(RD_CmdKind_CompleteQuery, .file_path = query_normalized_with_opt_slash);
}
// rjf: command argument exactly matches some file:
@@ -4243,14 +4236,14 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(file_system)
// rjf: is a file -> complete view
else
{
rd_cmd(RD_CmdKind_CompleteLister, .file_path = query_normalized_with_opt_slash);
rd_cmd(RD_CmdKind_CompleteQuery, .file_path = query_normalized_with_opt_slash);
}
}
// rjf: command argument is empty, picking folders -> use current folder
else if(path_query.search.size == 0 && dir_selection)
{
rd_cmd(RD_CmdKind_CompleteLister, .file_path = path_query.path);
rd_cmd(RD_CmdKind_CompleteQuery, .file_path = path_query.path);
}
// rjf: command argument does not exactly match any file, but lister results are in:
@@ -4266,14 +4259,14 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(file_system)
else
{
String8 file_path = push_str8f(scratch.arena, "%S%S", path_query.path, filename);
rd_cmd(RD_CmdKind_CompleteLister, .file_path = file_path);
rd_cmd(RD_CmdKind_CompleteQuery, .file_path = file_path);
}
}
// rjf: command argument does not match any file, and lister is empty (new file)
else
{
rd_cmd(RD_CmdKind_CompleteLister, .file_path = query);
rd_cmd(RD_CmdKind_CompleteQuery, .file_path = query);
}
}
@@ -4472,7 +4465,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(file_system)
}
else
{
rd_cmd(RD_CmdKind_CompleteLister, .file_path = new_path);
rd_cmd(RD_CmdKind_CompleteQuery, .file_path = new_path);
}
}
}
@@ -4693,7 +4686,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(system_processes)
if(sp->selected_pid == 0 && process_info_array.count > 0 && ui_slot_press(UI_EventActionSlot_Accept))
{
RD_ProcessInfo *info = &process_info_array.v[0];
rd_cmd(RD_CmdKind_CompleteLister, .pid = info->info.pid);
rd_cmd(RD_CmdKind_CompleteQuery, .pid = info->info.pid);
}
//- rjf: selected PID -> cursor
@@ -4781,7 +4774,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(system_processes)
// rjf: click => activate this specific process
if(ui_clicked(sig))
{
rd_cmd(RD_CmdKind_CompleteLister, .pid = info->info.pid);
rd_cmd(RD_CmdKind_CompleteQuery, .pid = info->info.pid);
}
}
}
@@ -4932,7 +4925,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(entity_lister)
if(rd_entity_is_nil(rd_entity_from_handle(fev->selected_entity_handle)) && ent_arr.count != 0 && ui_slot_press(UI_EventActionSlot_Accept))
{
RD_Entity *ent = ent_arr.v[0].entity;
rd_cmd(RD_CmdKind_CompleteLister, .entity = rd_handle_from_entity(ent));
rd_cmd(RD_CmdKind_CompleteQuery, .entity = rd_handle_from_entity(ent));
}
//- rjf: selected entity -> cursor
@@ -4997,7 +4990,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(entity_lister)
}
if(ui_clicked(ui_signal_from_box(box)))
{
rd_cmd(RD_CmdKind_CompleteLister, .entity = rd_handle_from_entity(ent));
rd_cmd(RD_CmdKind_CompleteQuery, .entity = rd_handle_from_entity(ent));
}
}
}
@@ -5148,7 +5141,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(ctrl_entity_lister)
case CTRL_EntityKind_Thread: {rd_regs()->thread = ent->handle;}break;
case CTRL_EntityKind_Module: {rd_regs()->module = ent->handle;}break;
}
rd_cmd(RD_CmdKind_CompleteLister, .ctrl_entity = ent->handle);
rd_cmd(RD_CmdKind_CompleteQuery, .ctrl_entity = ent->handle);
}
}
@@ -5224,7 +5217,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(ctrl_entity_lister)
case CTRL_EntityKind_Thread: {rd_regs()->thread = ent->handle;}break;
case CTRL_EntityKind_Module: {rd_regs()->module = ent->handle;}break;
}
rd_cmd(RD_CmdKind_CompleteLister, .ctrl_entity = ent->handle);
rd_cmd(RD_CmdKind_CompleteQuery, .ctrl_entity = ent->handle);
}
}
}
@@ -5301,7 +5294,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
String8 name = str8(name_base, name_size);
if(name.size != 0)
{
rd_cmd(RD_CmdKind_CompleteLister, .string = name);
rd_cmd(RD_CmdKind_CompleteQuery, .string = name);
}
}
}
@@ -5373,7 +5366,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(symbol_lister)
UI_Signal sig = ui_signal_from_box(box);
if(ui_clicked(sig))
{
rd_cmd(RD_CmdKind_CompleteLister, .string = name);
rd_cmd(RD_CmdKind_CompleteQuery, .string = name);
}
if(ui_hovering(sig)) UI_Tooltip
{
@@ -5840,7 +5833,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(text)
//////////////////////////////
//- rjf: process code-file commands
//
for(RD_Cmd *cmd = 0; rd_next_cmd(&cmd);)
ProfScope("process code-file commands") for(RD_Cmd *cmd = 0; rd_next_cmd(&cmd);)
{
// rjf: mismatched window/panel => skip
if(!rd_handle_match(rd_regs()->view, cmd->regs->view))
@@ -5874,29 +5867,33 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(text)
//////////////////////////////
//- rjf: unpack parameterization info
//
ProfBegin("unpack parameterization info");
String8 path = rd_file_path_from_eval_string(rd_frame_arena(), string);
rd_regs()->file_path = path;
rd_regs()->vaddr = 0;
rd_regs()->prefer_disasm = 0;
#if 0 // TODO(rjf): @cfg
rd_regs()->cursor.line = rd_value_from_params_key(params, str8_lit("cursor_line")).s64;
rd_regs()->cursor.column = rd_value_from_params_key(params, str8_lit("cursor_column")).s64;
rd_regs()->mark.line = rd_value_from_params_key(params, str8_lit("mark_line")).s64;
rd_regs()->mark.column = rd_value_from_params_key(params, str8_lit("mark_column")).s64;
#endif
if(rd_regs()->cursor.line == 0) { rd_regs()->cursor.line = 1; }
if(rd_regs()->cursor.column == 0) { rd_regs()->cursor.column = 1; }
if(rd_regs()->mark.line == 0) { rd_regs()->mark.line = 1; }
if(rd_regs()->mark.column == 0) { rd_regs()->mark.column = 1; }
E_Eval eval = e_eval_from_string(scratch.arena, string);
Rng1U64 range = {0}; // TODO(rjf): @cfg rd_range_from_eval_params(eval, params);
Rng1U64 range = rd_range_from_eval_params(eval, params);
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);
rd_regs()->lang_kind = TXT_LangKind_Null; // TODO(rjf): @cfg rd_lang_kind_from_eval_params(eval, params);
rd_regs()->lang_kind = rd_lang_kind_from_eval_params(eval, params);
if(rd_regs()->lang_kind == TXT_LangKind_Null && path.size != 0)
{
rd_regs()->lang_kind = txt_lang_kind_from_extension(str8_skip_last_dot(path));
}
U128 hash = {0};
TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, rd_regs()->text_key, rd_regs()->lang_kind, &hash);
String8 data = hs_data_from_hash(hs_scope, hash);
B32 file_is_missing = (path.size != 0 && os_properties_from_file_path(path).modified == 0);
B32 key_has_data = !u128_match(hash, u128_zero()) && info.lines_count;
ProfEnd();
//////////////////////////////
//- rjf: build missing file interface