From c018ffa3178c3b6ad116783b281ee60ee8b63b70 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Sun, 21 Jan 2024 21:06:49 -0800 Subject: [PATCH] major simplification pass over command query system; eliminate per-window query views, just collapse down to a single query view stack per-window (way simpler and honestly just what everyone does anyways); simplify/dejankify ui focus system --- src/base/base_types.h | 3 - src/df/core/df_core.c | 93 +- src/df/core/df_core.h | 27 +- src/df/core/df_core.mdesk | 438 +++-- src/df/core/generated/df_core.meta.c | 390 ++-- src/df/core/generated/df_core.meta.h | 64 +- src/df/gfx/df_gfx.c | 2554 ++++++++++++-------------- src/df/gfx/df_gfx.h | 64 +- src/df/gfx/df_gfx.mdesk | 114 +- src/df/gfx/df_views.c | 660 ++++--- src/df/gfx/generated/df_gfx.meta.h | 79 +- src/raddbg/raddbg.c | 10 +- src/raddbg/raddbg.h | 3 + src/ui/generated/ui.meta.c | 300 +-- src/ui/generated/ui.meta.h | 406 ++-- src/ui/ui.mdesk | 153 +- src/ui/ui_basic_widgets.c | 16 +- src/ui/ui_core.c | 219 +-- src/ui/ui_core.h | 201 +- src/unwind/unwind.c | 3 +- 20 files changed, 2894 insertions(+), 2903 deletions(-) diff --git a/src/base/base_types.h b/src/base/base_types.h index 37b5734b..3abf3251 100644 --- a/src/base/base_types.h +++ b/src/base/base_types.h @@ -170,9 +170,6 @@ #define DeferLoop(begin, end) for(int _i_ = ((begin), 0); !_i_; _i_ += 1, (end)) #define DeferLoopChecked(begin, end) for(int _i_ = 2 * !(begin); (_i_ == 2 ? ((end), 0) : !_i_); _i_ += 1, (end)) -#define B8 S8 -#define B32 rrbool - #if LANG_CPP # define zero_struct {} #else diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index 7836c5b9..d027a317 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -1042,20 +1042,23 @@ df_cmd_params_apply_spec_query(Arena *arena, DF_CtrlCtx *ctrl_ctx, DF_CmdParams { String8 error = {0}; B32 prefer_imm = 0; - switch(spec->info.query_rule) + switch(spec->info.query.slot) { default: - case DF_CmdQueryRule_String: + case DF_CmdParamSlot_String: { params->string = push_str8_copy(arena, query); df_cmd_params_mark_slot(params, DF_CmdParamSlot_String); }break; - case DF_CmdQueryRule_FilePath: + case DF_CmdParamSlot_FilePath: { - params->file_path = push_str8_copy(arena, query); + String8TxtPtPair pair = str8_txt_pt_pair_from_string(query); + params->file_path = push_str8_copy(arena, pair.string); + params->text_point = pair.pt; df_cmd_params_mark_slot(params, DF_CmdParamSlot_FilePath); + df_cmd_params_mark_slot(params, DF_CmdParamSlot_TextPoint); }break; - case DF_CmdQueryRule_TextPoint: + case DF_CmdParamSlot_TextPoint: { U64 v = 0; if(try_u64_from_str8_c_rules(query, &v)) @@ -1064,19 +1067,15 @@ df_cmd_params_apply_spec_query(Arena *arena, DF_CtrlCtx *ctrl_ctx, DF_CmdParams params->text_point.line = v; df_cmd_params_mark_slot(params, DF_CmdParamSlot_TextPoint); } + else + { + error = str8_lit("Couldn't interpret as a line number."); + } }break; - case DF_CmdQueryRule_FilePathAndTextPoint: - { - String8TxtPtPair pair = str8_txt_pt_pair_from_string(query); - params->file_path = push_str8_copy(arena, pair.string); - params->text_point = pair.pt; - df_cmd_params_mark_slot(params, DF_CmdParamSlot_FilePath); - df_cmd_params_mark_slot(params, DF_CmdParamSlot_TextPoint); - }break; - case DF_CmdQueryRule_VirtualAddr: prefer_imm = 0; goto use_numeric_eval; - case DF_CmdQueryRule_VirtualOff: prefer_imm = 0; goto use_numeric_eval; - case DF_CmdQueryRule_Index: prefer_imm = 1; goto use_numeric_eval; - case DF_CmdQueryRule_ID: prefer_imm = 1; goto use_numeric_eval; + case DF_CmdParamSlot_VirtualAddr: prefer_imm = 0; goto use_numeric_eval; + case DF_CmdParamSlot_VirtualOff: prefer_imm = 0; goto use_numeric_eval; + case DF_CmdParamSlot_Index: prefer_imm = 1; goto use_numeric_eval; + case DF_CmdParamSlot_ID: prefer_imm = 1; goto use_numeric_eval; use_numeric_eval: { Temp scratch = scratch_begin(&arena, 1); @@ -1097,25 +1096,25 @@ df_cmd_params_apply_spec_query(Arena *arena, DF_CtrlCtx *ctrl_ctx, DF_CmdParams prefer_imm = 1; } U64 u64 = !prefer_imm && eval.offset ? eval.offset : eval.imm_u64; - switch(spec->info.query_rule) + switch(spec->info.query.slot) { default:{}break; - case DF_CmdQueryRule_VirtualAddr: + case DF_CmdParamSlot_VirtualAddr: { params->vaddr = u64; df_cmd_params_mark_slot(params, DF_CmdParamSlot_VirtualAddr); }break; - case DF_CmdQueryRule_VirtualOff: + case DF_CmdParamSlot_VirtualOff: { params->voff = u64; df_cmd_params_mark_slot(params, DF_CmdParamSlot_VirtualOff); }break; - case DF_CmdQueryRule_Index: + case DF_CmdParamSlot_Index: { params->index = u64; df_cmd_params_mark_slot(params, DF_CmdParamSlot_Index); }break; - case DF_CmdQueryRule_ID: + case DF_CmdParamSlot_ID: { params->id = u64; df_cmd_params_mark_slot(params, DF_CmdParamSlot_ID); @@ -1140,11 +1139,7 @@ df_cmd_list_push(Arena *arena, DF_CmdList *cmds, DF_CmdParams *params, DF_CmdSpe { DF_CmdNode *n = push_array(arena, DF_CmdNode, 1); n->cmd.spec = spec; - MemoryCopyStruct(&n->cmd.params, params); - n->cmd.params.entity_list = df_push_handle_list_copy(arena, params->entity_list); - n->cmd.params.string = push_str8_copy(arena, params->string); - n->cmd.params.file_path = push_str8_copy(arena, params->file_path); - if(n->cmd.params.cmd_spec == 0) {n->cmd.params.cmd_spec = &df_g_nil_cmd_spec;} + n->cmd.params = df_cmd_params_copy(arena, params); DLLPushBack(cmds->first, cmds->last, n); cmds->count += 1; } @@ -2503,9 +2498,8 @@ df_register_cmd_specs(DF_CmdSpecInfoArray specs) info_copy->search_tags = push_str8_copy(df_state->arena, info->search_tags); info_copy->display_name = push_str8_copy(df_state->arena, info->display_name); info_copy->flags = info->flags; - info_copy->query_rule = info->query_rule; + info_copy->query = info->query; info_copy->canonical_icon_kind = info->canonical_icon_kind; - MemoryCopyArray(info_copy->query_info_u64, info->query_info_u64); spec->registrar_index = registrar_idx; spec->ordering_index = idx; } @@ -6802,13 +6796,18 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) default:{}break; //- rjf: command fast paths - case DF_CoreCmdKind_CommandFastPath: + case DF_CoreCmdKind_RunCommand: { DF_CmdSpec *spec = params.cmd_spec; - DF_CmdQueryRule query_rule = spec->info.query_rule; - if(query_rule == DF_CmdQueryRule_Null) + if(spec != cmd->spec) { - df_cmd_list_push(arena, cmds, ¶ms, spec); + df_cmd_spec_counter_inc(spec); + if(!(spec->info.query.flags & DF_CmdQueryFlag_Required) && + (spec->info.query.slot == DF_CmdParamSlot_Null || + df_cmd_params_has_slot(¶ms, spec->info.query.slot))) + { + df_cmd_list_push(arena, cmds, ¶ms, spec); + } } }break; @@ -6979,14 +6978,17 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) }break; case DF_CoreCmdKind_Detach: { - DF_Entity *entity = df_entity_from_handle(params.entity); - if(entity->kind == DF_EntityKind_Process) + for(DF_HandleNode *n = params.entity_list.first; n != 0; n = n->next) { - CTRL_Msg msg = {CTRL_MsgKind_Detach}; - msg.machine_id = entity->ctrl_machine_id; - msg.entity = entity->ctrl_handle; - MemoryCopyArray(msg.exception_code_filters, df_state->ctrl_exception_code_filters); - df_push_ctrl_msg(&msg); + DF_Entity *entity = df_entity_from_handle(n->handle); + if(entity->kind == DF_EntityKind_Process) + { + CTRL_Msg msg = {CTRL_MsgKind_Detach}; + msg.machine_id = entity->ctrl_machine_id; + msg.entity = entity->ctrl_handle; + MemoryCopyArray(msg.exception_code_filters, df_state->ctrl_exception_code_filters); + df_push_ctrl_msg(&msg); + } } }break; case DF_CoreCmdKind_Continue: @@ -7087,17 +7089,6 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt) } } }break; - case DF_CoreCmdKind_RunToModuleOffset: - { - DF_Entity *thread = df_entity_from_handle(params.entity); - DF_Entity *module = df_module_from_thread(thread); - U64 voff = params.voff; - U64 vaddr = df_vaddr_from_voff(module, voff); - DF_CmdParams params = df_cmd_params_zero(); - params.vaddr = vaddr; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_VirtualAddr); - df_cmd_list_push(arena, cmds, ¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunToAddress)); - }break; case DF_CoreCmdKind_Halt: if(df_ctrl_targets_running()) { diff --git a/src/df/core/df_core.h b/src/df/core/df_core.h index fc26e542..353b3f34 100644 --- a/src/df/core/df_core.h +++ b/src/df/core/df_core.h @@ -853,15 +853,28 @@ struct DF_EvalVizWindowedRowList //////////////////////////////// //~ rjf: Command Specification Types +typedef U32 DF_CmdQueryFlags; +enum +{ + DF_CmdQueryFlag_FoldersOnly = (1<<0), + DF_CmdQueryFlag_CodeInput = (1<<1), + DF_CmdQueryFlag_KeepOldInput = (1<<2), + DF_CmdQueryFlag_SelectOldInput = (1<<3), + DF_CmdQueryFlag_Required = (1<<4), +}; + +typedef struct DF_CmdQuery DF_CmdQuery; +struct DF_CmdQuery +{ + DF_CmdParamSlot slot; + DF_EntityKind entity_kind; + DF_CmdQueryFlags flags; +}; + typedef U32 DF_CmdSpecFlags; enum { DF_CmdSpecFlag_OmitFromLists = (1<<0), - DF_CmdSpecFlag_RunKeepsQuery = (1<<1), - DF_CmdSpecFlag_QueryUsesOldInput = (1<<2), - DF_CmdSpecFlag_OldInputSelect = (1<<3), - DF_CmdSpecFlag_AppliesToView = (1<<4), - DF_CmdSpecFlag_QueryIsCode = (1<<5), }; typedef struct DF_CmdSpecInfo DF_CmdSpecInfo; @@ -872,10 +885,8 @@ struct DF_CmdSpecInfo String8 search_tags; String8 display_name; DF_CmdSpecFlags flags; - DF_CmdParamSlot query_slots[4]; - DF_CmdQueryRule query_rule; + DF_CmdQuery query; DF_IconKind canonical_icon_kind; - U64 query_info_u64[2]; }; typedef struct DF_CmdSpec DF_CmdSpec; diff --git a/src/df/core/df_core.mdesk b/src/df/core/df_core.mdesk index b553a6e4..938c54e7 100644 --- a/src/df/core/df_core.mdesk +++ b/src/df/core/df_core.mdesk @@ -91,6 +91,7 @@ DF_CmdParamSlotTable: {FilePath, file_path, `String8`} {TextPoint, text_point, `TxtPt`} {CmdSpec, cmd_spec, `struct DF_CmdSpec *`} + {ViewSpec, view_spec, `struct DF_ViewSpec *`} {VirtualAddr, vaddr, `U64`} {VirtualOff, voff, `U64`} {Index, index, `U64`} @@ -99,303 +100,281 @@ DF_CmdParamSlotTable: {ForceConfirm, force_confirm,`B32`} } -@table(name, display_string, args_desc) -DF_CmdQueryRuleTable: +@table(name lister_omit q_slot q_ent_kind q_folders_only q_keep_oi q_select_oi q_is_code q_required canonical_icon string display_name desc search_tags ) +// / | | \___ __________________________________/ | | | | | +// / | | \ / | | | | | +DF_CoreCmdTable:// | | | | | | | | | { - {Null "" "" } - {Entity "" "" } - {String "" "" } - {SearchString "" "" } - {FilePath "File Path" "" } - {TextPoint "Text Point" "[:column]" } - {FilePathAndTextPoint "Source Location" "[:line[:column]]" } - {VirtualAddr "Virtual Address" "
" } - {VirtualOff "Virtual Offset" "" } - {Index "Index" "" } - {ID "ID" "" } -} - -@table(name lister_omit keep_query old_input oi_select apply_to_view query_is_code query_slot0 query_slot1 query_slot2 query_entity_filter query_rule query_info_0_u64 query_info_1_u64 canonical_icon string display_name desc search_tags ) -DF_CoreCmdTable: -{ - {Null 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "" "" "" "" } + {Null 1 Null Nil 0 0 0 0 0 Null "" "" "" "" } //- rjf: exiting - {Exit 0 0 0 0 0 0 Null Null Null Null Null 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" } + {Exit 0 Null Nil 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" } - //- rjf: command fast path - {CommandFastPath 1 0 0 0 0 0 CmdSpec Null Null Null Null 0 0 Null "command_fast_path" "Command Fast Path" "Performs the fast path for the command named by the argument." "" } + //- rjf: command runner + {RunCommand 0 CmdSpec Nil 0 0 0 0 0 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" } //- rjf: notifications - {Error 1 0 0 0 0 0 String Null Null Null Null 0 0 Null "error" "Error" "Notifies of an error." "" } + {Error 1 Null Nil 0 0 0 0 0 Null "error" "Error" "Notifies of an error." "" } //- rjf: low-level target control operations - {LaunchAndRun 0 0 0 0 0 0 EntityList Null Null Target Entity DF_EntityKind_Target 0 Play "launch_and_run" "Launch and Run" "Starts debugging a new instance of a target, then runs." "launch,start,run,target" } - {LaunchAndInit 0 0 0 0 0 0 EntityList Null Null Target Entity DF_EntityKind_Target 0 PlayStepForward "launch_and_init" "Launch and Initialize" "Starts debugging a new instance of a target, then stops at the program's entry point." "launch,start,entry,point" } - {Kill 0 0 0 0 0 0 EntityList Null Null Process Entity DF_EntityKind_Process 0 Stop "kill" "Kill" "Kills the specified existing debugged process(es)." "stop,kill" } - {KillAll 0 0 0 0 0 0 Null Null Null Null Null 0 0 Stop "kill_all" "Kill All" "Kills all debugged child processes." "stop,kill,all" } - {Detach 0 0 0 0 0 0 EntityList Null Null Process Entity DF_EntityKind_Process 0 Null "detach" "Detach" "Detaches the specified debugged process." "detach" } - {Continue 0 0 0 0 0 0 Null Null Null Null Null 0 0 Play "continue" "Continue" "Continues all halted threads." "" } - {StepIntoInst 0 0 0 0 0 0 Entity Null Null Null Null 0 0 StepInto "step_into_inst" "Step Into (Assembly)" "Performs a step that goes into calls, at the instruction level." "single,step,thread" } - {StepOverInst 0 0 0 0 0 0 Entity Null Null Null Null 0 0 StepOver "step_over_inst" "Step Over (Assembly)" "Performs a step that skips calls, at the instruction level." "single,step,thread" } - {StepIntoLine 0 0 0 0 0 0 Entity Null Null Null Null 0 0 StepInto "step_into_line" "Step Into (Line)" "Performs a step that goes into calls, at the source code line level." "step,thread" } - {StepOverLine 0 0 0 0 0 0 Entity Null Null Null Null 0 0 StepOver "step_over_line" "Step Over (Line)" "Performs a step that skips calls, at the source code line level." "step,thread" } - {StepOut 0 0 0 0 0 0 Entity Null Null Null Null 0 0 StepOut "step_out" "Step Out" "Runs to the end of the current function and exits it." "" } - {RunToAddress 0 0 0 0 0 0 Entity VirtualAddr Null Thread VirtualAddr 0 0 PlayStepForward "run_to_address" "Run To Address" "Runs the selected thread to the specified address." "" } - {RunToModuleOffset 0 0 0 0 0 0 Entity VirtualOff Null Thread VirtualOff 0 0 PlayStepForward "run_to_module_offset" "Run To Module Offset" "Runs the selected thread to the specified offset within the current module." "" } - {Halt 0 0 0 0 0 0 Null Null Null Null Null 0 0 Pause "halt" "Halt" "Halts all running processes." "pause" } - {SoftHaltRefresh 0 0 0 0 0 0 Null Null Null Null Null 0 0 Refresh "soft_halt_refresh" "Soft Halt Refresh" "Interrupts all running processes to collect data, and then resumes them." "" } - {SetThreadIP 1 0 0 0 0 0 Entity VirtualAddr Null Null Null 0 0 Null "set_thread_ip" "Set Thread IP" "Sets the passed thread's instruction pointer at the passed address." "" } + {LaunchAndRun 0 EntityList Target 0 0 0 0 1 Play "launch_and_run" "Launch and Run" "Starts debugging a new instance of a target, then runs." "launch,start,run,target" } + {LaunchAndInit 0 EntityList Target 0 0 0 0 1 PlayStepForward "launch_and_init" "Launch and Initialize" "Starts debugging a new instance of a target, then stops at the program's entry point." "launch,start,entry,point" } + {Kill 0 EntityList Process 0 0 0 0 1 Stop "kill" "Kill" "Kills the specified existing debugged process(es)." "stop,kill" } + {KillAll 0 Null Nil 0 0 0 0 0 Stop "kill_all" "Kill All" "Kills all debugged child processes." "stop,kill,all" } + {Detach 0 EntityList Process 0 0 0 0 1 Null "detach" "Detach" "Detaches the specified debugged process." "detach" } + {Continue 0 Null Nil 0 0 0 0 0 Play "continue" "Continue" "Continues all halted threads." "" } + {StepIntoInst 0 Null Nil 0 0 0 0 0 StepInto "step_into_inst" "Step Into (Assembly)" "Performs a step that goes into calls, at the instruction level." "single,step,thread" } + {StepOverInst 0 Null Nil 0 0 0 0 0 StepOver "step_over_inst" "Step Over (Assembly)" "Performs a step that skips calls, at the instruction level." "single,step,thread" } + {StepIntoLine 0 Null Nil 0 0 0 0 0 StepInto "step_into_line" "Step Into (Line)" "Performs a step that goes into calls, at the source code line level." "step,thread" } + {StepOverLine 0 Null Nil 0 0 0 0 0 StepOver "step_over_line" "Step Over (Line)" "Performs a step that skips calls, at the source code line level." "step,thread" } + {StepOut 0 Null Nil 0 0 0 0 0 StepOut "step_out" "Step Out" "Runs to the end of the current function and exits it." "" } + {RunToAddress 0 VirtualAddr Nil 0 0 0 1 1 PlayStepForward "run_to_address" "Run To Address" "Runs the selected thread to the specified address." "" } + {Halt 0 Null Nil 0 0 0 0 0 Pause "halt" "Halt" "Halts all running processes." "pause" } + {SoftHaltRefresh 0 Null Nil 0 0 0 0 0 Refresh "soft_halt_refresh" "Soft Halt Refresh" "Interrupts all running processes to collect data, and then resumes them." "" } + {SetThreadIP 1 VirtualAddr Nil 0 0 0 1 1 Null "set_thread_ip" "Set Thread IP" "Sets the passed thread's instruction pointer at the passed address." "" } //- rjf: high-level composite target control operations - {Run 0 0 0 0 0 0 Null Null Null Null Null 0 0 Play "run" "Run" "Runs all targets after starting them if they have not been started yet." "play" } - {Restart 0 0 0 0 0 0 Null Null Null Null Null 0 0 Redo "restart" "Restart" "Kills all running processes, then restarts the targets which were used to launch all current processes (if any)." "restart,retry" } - {StepInto 0 0 0 0 0 0 Entity Null Null Thread Null 0 0 StepInto "step_into" "Step Into" "Steps once, possibly into function calls, for either line or instructions." "" } - {StepOver 0 0 0 0 0 0 Entity Null Null Thread Null 0 0 StepOver "step_over" "Step Over" "Steps once, always over function calls, for either line or instructions." "" } - {RunToCursor 0 0 0 0 0 0 Entity View Null Thread Null 0 0 Play "run_to_cursor" "Run To Cursor" "Runs the selected thread to the current cursor." "" } - {SetNextStatement 0 0 0 0 0 0 Entity View Null Thread Null 0 0 RightArrow "set_next_statement" "Set Next Statement" "Sets the selected thread's instruction pointer to the cursor's position." "" } + {Run 0 Null Nil 0 0 0 0 0 Play "run" "Run" "Runs all targets after starting them if they have not been started yet." "play" } + {Restart 0 Null Nil 0 0 0 0 0 Redo "restart" "Restart" "Kills all running processes, then restarts the targets which were used to launch all current processes (if any)." "restart,retry" } + {StepInto 0 Null Nil 0 0 0 0 0 StepInto "step_into" "Step Into" "Steps once, possibly into function calls, for either line or instructions." "" } + {StepOver 0 Null Nil 0 0 0 0 0 StepOver "step_over" "Step Over" "Steps once, always over function calls, for either line or instructions." "" } + {RunToCursor 0 Null Nil 0 0 0 0 0 Play "run_to_cursor" "Run To Cursor" "Runs the selected thread to the current cursor." "" } + {SetNextStatement 0 Null Nil 0 0 0 0 0 RightArrow "set_next_statement" "Set Next Statement" "Sets the selected thread's instruction pointer to the cursor's position." "" } //- rjf: solo stepping mode - {EnableSoloSteppingMode 0 0 0 0 0 0 Null Null Null Null Null 0 0 Thread "enable_solo_stepping_mode" "Enable Solo Stepping Mode" "Enables 'solo stepping mode', which suspends all non-selected threads before stepping." "solo,stepping,mode,suspend" } - {DisableSoloSteppingMode 0 0 0 0 0 0 Null Null Null Null Null 0 0 Thread "disable_solo_stepping_mode" "Disable Solo Stepping Mode" "Disables 'solo stepping mode', which suspends all non-selected threads before stepping." "solo,stepping,mode,suspend" } + {EnableSoloSteppingMode 0 Null Nil 0 0 0 0 0 Thread "enable_solo_stepping_mode" "Enable Solo Stepping Mode" "Enables 'solo stepping mode', which suspends all non-selected threads before stepping." "solo,stepping,mode,suspend" } + {DisableSoloSteppingMode 0 Null Nil 0 0 0 0 0 Thread "disable_solo_stepping_mode" "Disable Solo Stepping Mode" "Disables 'solo stepping mode', which suspends all non-selected threads before stepping." "solo,stepping,mode,suspend" } //- rjf: debug control context management operations - {SelectThread 0 0 0 0 0 0 Entity Null Null Thread Entity DF_EntityKind_Thread 0 Null "select_thread" "Select Thread" "Selects a thread." "" } - {SelectThreadWindow 0 0 0 0 0 0 Entity Window Null Thread Entity DF_EntityKind_Thread 0 Null "select_thread_window" "Select Thread On Window" "Selects a thread for the active window, overriding the global selected thread." "" } - {SelectThreadView 0 0 0 0 0 0 Entity View Null Thread Entity DF_EntityKind_Thread 0 Null "select_thread_view" "Select Thread On View" "Selects a thread for the active view, overriding the global and per-window selected threads." "" } - {SelectUnwind 1 0 0 0 0 0 Index Null Null Null Null 0 0 Null "select_unwind" "Select Unwind" "Selects an unwind frame number for the selected thread." "" } - {UpOneFrame 0 0 0 0 0 0 Null Null Null Null Null 0 0 UpArrow "up_one_frame" "Up One Frame" "Selects the callstack frame above the currently selected." "" } - {DownOneFrame 0 0 0 0 0 0 Null Null Null Null Null 0 0 DownArrow "down_one_frame" "Down One Frame" "Selects the callstack frame below the currently selected." "" } - {FreezeThread 0 0 0 0 0 0 Entity Null Null Thread Entity DF_EntityKind_Thread 0 Locked "freeze_thread" "Freeze Thread" "Freezes the passed thread." "" } - {ThawThread 0 0 0 0 0 0 Entity Null Null Thread Entity DF_EntityKind_Thread 0 Unlocked "thaw_thread" "Thaw Thread" "Thaws the passed thread." "" } - {FreezeProcess 0 0 0 0 0 0 Entity Null Null Process Entity DF_EntityKind_Process 0 Locked "freeze_process" "Freeze Process" "Freezes the passed process." "" } - {ThawProcess 0 0 0 0 0 0 Entity Null Null Process Entity DF_EntityKind_Process 0 Unlocked "thaw_process" "Thaw Process" "Thaws the passed process." "" } - {FreezeMachine 1 0 0 0 0 0 Entity Null Null Machine Entity DF_EntityKind_Machine 0 Locked "freeze_machine" "Freeze Machine" "Freezes the passed machine." "" } - {ThawMachine 1 0 0 0 0 0 Entity Null Null Machine Entity DF_EntityKind_Machine 0 Unlocked "thaw_machine" "Thaw Machine" "Thaws the passed machine." "" } - {FreezeLocalMachine 0 0 0 0 0 0 Null Null Null Null Null 0 0 Machine "freeze_local_machine" "Freeze Local Machine" "Freezes the local machine." "" } - {ThawLocalMachine 0 0 0 0 0 0 Null Null Null Null Null 0 0 Machine "thaw_local_machine" "Thaw Local Machine" "Thaws the local machine." "" } + {SelectThread 0 Entity Thread 0 0 0 0 1 Null "select_thread" "Select Thread" "Selects a thread." "" } + {SelectThreadWindow 0 Entity Thread 0 0 0 0 1 Null "select_thread_window" "Select Thread On Window" "Selects a thread for the active window, overriding the global selected thread." "" } + {SelectThreadView 0 Entity Thread 0 0 0 0 1 Null "select_thread_view" "Select Thread On View" "Selects a thread for the active view, overriding the global and per-window selected threads." "" } + {SelectUnwind 1 Null Nil 0 0 0 0 0 Null "select_unwind" "Select Unwind" "Selects an unwind frame number for the selected thread." "" } + {UpOneFrame 0 Null Nil 0 0 0 0 0 UpArrow "up_one_frame" "Up One Frame" "Selects the callstack frame above the currently selected." "" } + {DownOneFrame 0 Null Nil 0 0 0 0 0 DownArrow "down_one_frame" "Down One Frame" "Selects the callstack frame below the currently selected." "" } + {FreezeThread 0 Entity Thread 0 0 0 0 1 Locked "freeze_thread" "Freeze Thread" "Freezes the passed thread." "" } + {ThawThread 0 Entity Thread 0 0 0 0 1 Unlocked "thaw_thread" "Thaw Thread" "Thaws the passed thread." "" } + {FreezeProcess 0 Entity Process 0 0 0 0 1 Locked "freeze_process" "Freeze Process" "Freezes the passed process." "" } + {ThawProcess 0 Entity Process 0 0 0 0 1 Unlocked "thaw_process" "Thaw Process" "Thaws the passed process." "" } + {FreezeMachine 1 Entity Machine 0 0 0 0 1 Locked "freeze_machine" "Freeze Machine" "Freezes the passed machine." "" } + {ThawMachine 1 Entity Machine 0 0 0 0 1 Unlocked "thaw_machine" "Thaw Machine" "Thaws the passed machine." "" } + {FreezeLocalMachine 0 Null Nil 0 0 0 0 0 Machine "freeze_local_machine" "Freeze Local Machine" "Freezes the local machine." "" } + {ThawLocalMachine 0 Null Nil 0 0 0 0 0 Machine "thaw_local_machine" "Thaw Local Machine" "Thaws the local machine." "" } //- rjf: font sizes - {IncUIFontScale 0 0 0 0 0 0 Window Null Null Null Null 0 0 Null "inc_ui_font_scale" "Increase UI Font Scale" "Increases the font size used for UI." "" } - {DecUIFontScale 0 0 0 0 0 0 Window Null Null Null Null 0 0 Null "dec_ui_font_scale" "Decrease UI Font Scale" "Decreases the font size used for UI." "" } - {IncCodeFontScale 0 0 0 0 0 0 Window Null Null Null Null 0 0 Null "inc_code_font_scale" "Increase Code Font Scale" "Increases the font size used for code." "" } - {DecCodeFontScale 0 0 0 0 0 0 Window Null Null Null Null 0 0 Null "dec_code_font_scale" "Decrease Code Font Scale" "Decreases the font size used for code." "" } + {IncUIFontScale 0 Null Nil 0 0 0 0 0 Null "inc_ui_font_scale" "Increase UI Font Scale" "Increases the font size used for UI." "" } + {DecUIFontScale 0 Null Nil 0 0 0 0 0 Null "dec_ui_font_scale" "Decrease UI Font Scale" "Decreases the font size used for UI." "" } + {IncCodeFontScale 0 Null Nil 0 0 0 0 0 Null "inc_code_font_scale" "Increase Code Font Scale" "Increases the font size used for code." "" } + {DecCodeFontScale 0 Null Nil 0 0 0 0 0 Null "dec_code_font_scale" "Decrease Code Font Scale" "Decreases the font size used for code." "" } //- rjf: windows - {OpenWindow 0 0 0 0 0 0 Null Null Null Null Null 0 0 Window "open_window" "Open New Window" "Opens a new window." "" } - {CloseWindow 0 0 0 0 0 0 Window Null Null Null Null 0 0 Window "close_window" "Close Window" "Closes an opened window." "" } - {ToggleFullscreen 0 0 0 0 0 0 Window Null Null Null Null 0 0 Window "toggle_fullscreen" "Toggle Fullscreen" "Toggles fullscreen view on the active window." "" } + {OpenWindow 0 Null Nil 0 0 0 0 0 Window "open_window" "Open New Window" "Opens a new window." "" } + {CloseWindow 0 Null Nil 0 0 0 0 0 Window "close_window" "Close Window" "Closes an opened window." "" } + {ToggleFullscreen 0 Null Nil 0 0 0 0 0 Window "toggle_fullscreen" "Toggle Fullscreen" "Toggles fullscreen view on the active window." "" } //- rjf: confirmations - {ConfirmAccept 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "confirm_accept" "Confirm Accept" "Accepts the active confirmation prompt." "" } - {ConfirmCancel 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "confirm_cancel" "Confirm Cancel" "Cancels the active confirmation prompt." "" } + {ConfirmAccept 1 Null Nil 0 0 0 0 0 Null "confirm_accept" "Confirm Accept" "Accepts the active confirmation prompt." "" } + {ConfirmCancel 1 Null Nil 0 0 0 0 0 Null "confirm_cancel" "Confirm Cancel" "Cancels the active confirmation prompt." "" } //- rjf: panel splitting - {ResetToDefaultPanels 0 0 0 0 0 0 Window Null Null Null Null 0 0 Window "reset_to_default_panels" "Reset To Default Panel Layout" "Resets the window to the default panel layout." "panel" } - {NewPanelRight 0 0 0 0 0 0 Window Panel Null Null Null 0 0 XSplit "new_panel_right" "Split Panel Vertically" "Creates a new panel to the right of the active panel." "panel" } - {NewPanelDown 0 0 0 0 0 0 Window Panel Null Null Null 0 0 YSplit "new_panel_down" "Split Panel Horizontally" "Creates a new panel at the bottom of the active panel." "panel" } + {ResetToDefaultPanels 0 Null Nil 0 0 0 0 0 Window "reset_to_default_panels" "Reset To Default Panel Layout" "Resets the window to the default panel layout." "panel" } + {NewPanelRight 0 Null Nil 0 0 0 0 0 XSplit "new_panel_right" "Split Panel Vertically" "Creates a new panel to the right of the active panel." "panel" } + {NewPanelDown 0 Null Nil 0 0 0 0 0 YSplit "new_panel_down" "Split Panel Horizontally" "Creates a new panel at the bottom of the active panel." "panel" } //- rjf: panel rotation - {RotatePanelColumns 0 0 0 0 0 0 Window Panel Null Null Null 0 0 Null "rotate_panel_columns" "Rotate Panel Columns" "Rotates all panels at the closest column level of the panel hierarchy." "" } + {RotatePanelColumns 0 Null Nil 0 0 0 0 0 Null "rotate_panel_columns" "Rotate Panel Columns" "Rotates all panels at the closest column level of the panel hierarchy." "" } //- rjf: focused panel changing - {NextPanel 0 0 0 0 0 0 Window Null Null Null Null 0 0 RightArrow "next_panel" "Focus Next Panel" "Cycles the active panel forward." "" } - {PrevPanel 0 0 0 0 0 0 Window Null Null Null Null 0 0 LeftArrow "prev_panel" "Focus Previous Panel" "Cycles the active panel backwards." "" } - {FocusPanel 1 0 0 0 0 0 Window Panel Null Null Null 0 0 Null "focus_panel" "Focus Panel" "Focuses a new panel." "" } - {FocusPanelRight 0 0 0 0 0 0 Window Null Null Null Null 0 0 RightArrow "focus_panel_right" "Focus Panel Right" "Focuses a panel rightward of the currently focused panel." "" } - {FocusPanelLeft 0 0 0 0 0 0 Window Null Null Null Null 0 0 LeftArrow "focus_panel_left" "Focus Panel Left" "Focuses a panel leftward of the currently focused panel." "" } - {FocusPanelUp 0 0 0 0 0 0 Window Null Null Null Null 0 0 UpArrow "focus_panel_up" "Focus Panel Up" "Focuses a panel upward of the currently focused panel." "" } - {FocusPanelDown 0 0 0 0 0 0 Window Null Null Null Null 0 0 DownArrow "focus_panel_down" "Focus Panel Down" "Focuses a panel downward of the currently focused panel." "" } + {NextPanel 0 Null Nil 0 0 0 0 0 RightArrow "next_panel" "Focus Next Panel" "Cycles the active panel forward." "" } + {PrevPanel 0 Null Nil 0 0 0 0 0 LeftArrow "prev_panel" "Focus Previous Panel" "Cycles the active panel backwards." "" } + {FocusPanel 1 Null Nil 0 0 0 0 0 Null "focus_panel" "Focus Panel" "Focuses a new panel." "" } + {FocusPanelRight 0 Null Nil 0 0 0 0 0 RightArrow "focus_panel_right" "Focus Panel Right" "Focuses a panel rightward of the currently focused panel." "" } + {FocusPanelLeft 0 Null Nil 0 0 0 0 0 LeftArrow "focus_panel_left" "Focus Panel Left" "Focuses a panel leftward of the currently focused panel." "" } + {FocusPanelUp 0 Null Nil 0 0 0 0 0 UpArrow "focus_panel_up" "Focus Panel Up" "Focuses a panel upward of the currently focused panel." "" } + {FocusPanelDown 0 Null Nil 0 0 0 0 0 DownArrow "focus_panel_down" "Focus Panel Down" "Focuses a panel downward of the currently focused panel." "" } //- rjf: undo/redo - {Undo 1 0 0 0 0 0 Null Null Null Null Null 0 0 Undo "undo" "Undo" "Undoes the previous action." "" } - {Redo 1 0 0 0 0 0 Null Null Null Null Null 0 0 Redo "redo" "Redo" "Redoes the first previously undone action." "" } + {Undo 1 Null Nil 0 0 0 0 0 Undo "undo" "Undo" "Undoes the previous action." "" } + {Redo 1 Null Nil 0 0 0 0 0 Redo "redo" "Redo" "Redoes the first previously undone action." "" } //- rjf: focus history - {GoBack 1 0 0 0 0 0 Window Panel Null Null Null 0 0 LeftArrow "go_back" "Go Back" "Returns to the previously selected panel and tab in recorded history." "" } - {GoForward 1 0 0 0 0 0 Window Panel Null Null Null 0 0 RightArrow "go_forward" "Go Forward" "Returns to the next selected panel and tab in recorded history." "" } + {GoBack 1 Null Nil 0 0 0 0 0 LeftArrow "go_back" "Go Back" "Returns to the previously selected panel and tab in recorded history." "" } + {GoForward 1 Null Nil 0 0 0 0 0 RightArrow "go_forward" "Go Forward" "Returns to the next selected panel and tab in recorded history." "" } //- rjf: panel removal - {ClosePanel 0 0 0 0 0 0 Window Panel Null Null Null 0 0 ClosePanel "close_panel" "Close Panel" "Closes the currently active panel." "" } + {ClosePanel 0 Null Nil 0 0 0 0 0 ClosePanel "close_panel" "Close Panel" "Closes the currently active panel." "" } //- rjf: panel tab - {NextTab 0 0 0 0 0 0 Null Null Null Null Null 0 0 RightArrow "next_tab" "Focus Next Tab" "Focuses the next tab on the active panel." "" } - {PrevTab 0 0 0 0 0 0 Null Null Null Null Null 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" } - {MoveTabRight 0 0 0 0 0 0 Null Null Null Null Null 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" } - {MoveTabLeft 0 0 0 0 0 0 Null Null Null Null Null 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" } - {CloseTab 0 0 0 0 0 0 Null Null Null Null Null 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" } - {MoveTab 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" } - {TabBarTop 0 0 0 0 0 0 Null Null Null Null Null 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" } - {TabBarBottom 0 0 0 0 0 0 Null Null Null Null Null 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" } - {TabBarEnable 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "tab_bar_enable" "Enable Tab Bar" "Enables a panel's tab bar." "" } - {TabBarDisable 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "tab_bar_disable" "Disable Tab Bar" "Disables a panel's tab bar." "" } - {TabBarHistoryModeEnable 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "tab_bar_history_mode_enable" "Enable Tab Bar History Mode" "Enables history mode for a panel's tab bar, which orders and manages tabs as recorded history of views." "" } - {TabBarHistoryModeDisable 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "tab_bar_history_mode_disable""Disable Tab Bar History Mode" "Disables history mode for a panel's tab bar." "" } + {NextTab 0 Null Nil 0 0 0 0 0 RightArrow "next_tab" "Focus Next Tab" "Focuses the next tab on the active panel." "" } + {PrevTab 0 Null Nil 0 0 0 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" } + {MoveTabRight 0 Null Nil 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" } + {MoveTabLeft 0 Null Nil 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" } + {OpenTab 1 Null Nil 0 0 0 0 0 Null "open_tab" "Open Tab" "Opens a new tab with the parameterized view specification." "" } + {CloseTab 0 Null Nil 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" } + {MoveTab 1 Null Nil 0 0 0 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" } + {TabBarTop 0 Null Nil 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 0 Null Nil 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." "" } //- rjf: files - {SetCurrentPath 0 0 0 0 0 0 FilePath Null Null Null FilePath 0 0 FileOutline "set_current_path" "Set Current Path" "Sets the debugger's current path, which is used as a starting point when browsing for files." "" } - {Open 0 0 0 0 0 0 FilePath Null Null Null FilePath 0 0 FileOutline "open" "Open" "Opens a file." "code,source,file" } - {Reload 0 0 0 0 0 0 Entity Null Null File Entity DF_EntityKind_File 0 FileOutline "reload" "Reload" "Reloads a loaded file." "code,source,file,reload" } - {ReloadActive 0 0 0 0 0 0 Window Panel Null Null Null 0 0 FileOutline "reload_active" "Reload Active File" "Reloads the active file." "code,source,file,reload" } - {Switch 0 0 0 0 0 0 Window Panel Entity File Entity DF_EntityKind_File DF_EntityFlag_IsFolder FileOutline "switch" "Switch" "Switches to a loaded file." "code,source,file" } + {SetCurrentPath 1 Null Nil 0 0 0 0 0 FileOutline "set_current_path" "Set Current Path" "Sets the debugger's current path, which is used as a starting point when browsing for files." "" } + {Open 0 FilePath Nil 0 0 0 0 1 FileOutline "open" "Open" "Opens a file." "code,source,file" } + {Reload 0 Entity File 0 0 0 0 1 FileOutline "reload" "Reload" "Reloads a loaded file." "code,source,file,reload" } + {ReloadActive 0 Null Nil 0 0 0 0 0 FileOutline "reload_active" "Reload Active File" "Reloads the active file." "code,source,file,reload" } + {Switch 0 Entity File 0 0 0 0 1 FileOutline "switch" "Switch" "Switches to a loaded file." "code,source,file" } //- rjf: override file links - {SetFileOverrideLinkSrc 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "set_file_override_link_src" "Set File Override Link Source" "Sets the source path for an override file link." "" } - {SetFileOverrideLinkDst 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "set_file_override_link_dst" "Set File Override Link Destination" "Sets the destination path for an override file link." "" } - {SetFileReplacementPath 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "set_file_replacement_path" "Set File Replacement Path" "Sets the path which should be used as the replacement for the passed file." "" } + {SetFileOverrideLinkSrc 1 Null Nil 0 0 0 0 0 Null "set_file_override_link_src" "Set File Override Link Source" "Sets the source path for an override file link." "" } + {SetFileOverrideLinkDst 1 Null Nil 0 0 0 0 0 Null "set_file_override_link_dst" "Set File Override Link Destination" "Sets the destination path for an override file link." "" } + {SetFileReplacementPath 1 Null Nil 0 0 0 0 0 Null "set_file_replacement_path" "Set File Replacement Path" "Sets the path which should be used as the replacement for the passed file." "" } //- rjf: setting config paths - {LoadUser 0 0 0 0 0 0 FilePath Null Null Null FilePath 0 0 Person "load_user" "Load User" "Loads and applies a user file." "load,user,profile,layout" } - {LoadProfile 0 0 0 0 0 0 FilePath Null Null Null FilePath 0 0 Briefcase "load_profile" "Load Profile" "Loads and applies a profile file." "profile,project,session" } + {LoadUser 0 FilePath Nil 0 0 0 0 1 Person "load_user" "Load User" "Loads and applies a user file." "load,user,profile,layout" } + {LoadProfile 0 FilePath Nil 0 0 0 0 1 Briefcase "load_profile" "Load Profile" "Loads and applies a profile file." "profile,project,session" } //- rjf: loading/applying stateful config changes - {ApplyUserData 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "apply_user_data" "Apply User Data" "Applies user data from the active user file." "" } - {ApplyProfileData 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "apply_profile_data" "Apply Profile Data" "Applies profile data from the active profile file." "" } + {ApplyUserData 1 Null Nil 0 0 0 0 0 Null "apply_user_data" "Apply User Data" "Applies user data from the active user file." "" } + {ApplyProfileData 1 Null Nil 0 0 0 0 0 Null "apply_profile_data" "Apply Profile Data" "Applies profile data from the active profile file." "" } //- rjf: writing config changes - {WriteUserData 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "write_user_data" "Write User Data" "Writes user data to the active user file." "" } - {WriteProfileData 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "write_profile_data" "Write Profile Data" "Writes profile data to the active profile file." "" } + {WriteUserData 1 Null Nil 0 0 0 0 0 Null "write_user_data" "Write User Data" "Writes user data to the active user file." "" } + {WriteProfileData 1 Null Nil 0 0 0 0 0 Null "write_profile_data" "Write Profile Data" "Writes profile data to the active profile file." "" } //- rjf: directional movement & text controls - {MoveLeft 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_left" "Move Left" "Moves the cursor or selection left." "" } - {MoveRight 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_right" "Move Right" "Moves the cursor or selection right." "" } - {MoveUp 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up" "Move Up" "Moves the cursor or selection up." "" } - {MoveDown 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down" "Move Down" "Moves the cursor or selection down." "" } - {MoveLeftSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_left_select" "Move Left Select" "Moves the cursor or selection left, while selecting." "" } - {MoveRightSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_right_select" "Move Right Select" "Moves the cursor or selection right, while selecting." "" } - {MoveUpSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_select" "Move Up Select" "Moves the cursor or selection up, while selecting." "" } - {MoveDownSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_select" "Move Down Select" "Moves the cursor or selection down, while selecting." "" } - {MoveLeftChunk 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_left_chunk" "Move Left Select" "Moves the cursor or selection left one chunk." "" } - {MoveRightChunk 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_right_chunk" "Move Right Select" "Moves the cursor or selection right one chunk." "" } - {MoveUpChunk 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_chunk" "Move Up Chunk" "Moves the cursor or selection up one chunk." "" } - {MoveDownChunk 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_chunk" "Move Down Chunk" "Moves the cursor or selection down one chunk." "" } - {MoveUpPage 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_page" "Move Up Page" "Moves the cursor or selection up one page." "" } - {MoveDownPage 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_page" "Move Down Page" "Moves the cursor or selection down one page." "" } - {MoveUpWhole 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_whole" "Move Up Whole" "Moves the cursor or selection to the beginning of the relevant content." "" } - {MoveDownWhole 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_whole" "Move Down Whole" "Moves the cursor or selection to the end of the relevant content." "" } - {MoveLeftChunkSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_left_chunk_select" "Move Left Chunk Select" "Moves the cursor or selection left one chunk." "" } - {MoveRightChunkSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_right_chunk_select" "Move Right Chunk Select" "Moves the cursor or selection right one chunk." "" } - {MoveUpChunkSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_chunk_select" "Move Up Chunk Select" "Moves the cursor or selection up one chunk." "" } - {MoveDownChunkSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_chunk_select" "Move Down Chunk Select" "Moves the cursor or selection down one chunk." "" } - {MoveUpPageSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_page_select" "Move Up Page Select" "Moves the cursor or selection up one page, while selecting." "" } - {MoveDownPageSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_page_select" "Move Down Page Select" "Moves the cursor or selection down one page, while selecting." "" } - {MoveUpWholeSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_up_whole_select" "Move Up Whole Select" "Moves the cursor or selection to the beginning of the relevant content, while selecting." "" } - {MoveDownWholeSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_down_whole_select" "Move Down Whole Select" "Moves the cursor or selection to the end of the relevant content, while selecting." "" } - {MoveHome 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_home" "Move Home" "Moves the cursor to the beginning of the line." "" } - {MoveEnd 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_end" "Move End" "Moves the cursor to the end of the line." "" } - {MoveHomeSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_home_select" "Move Home Select" "Moves the cursor to the beginning of the line, while selecting." "" } - {MoveEndSelect 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "move_end_select" "Move End Select" "Moves the cursor to the end of the line, while selecting." "" } - {SelectAll 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "select_all" "Select All" "Selects everything possible." "" } - {DeleteSingle 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "delete_single" "Delete Single" "Deletes a single element to the right of the cursor, or the active selection." "" } - {DeleteChunk 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "delete_chunk" "Delete Chunk" "Deletes a chunk to the right of the cursor, or the active selection." "" } - {BackspaceSingle 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "backspace_single" "Backspace Single" "Deletes a single element to the left of the cursor, or the active selection." "" } - {BackspaceChunk 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "backspace_chunk" "Backspace Chunk" "Deletes a chunk to the left of the cursor, or the active selection." "" } - {Copy 0 0 0 0 0 0 Null Null Null Null Null 0 0 Clipboard "copy" "Copy" "Copies the active selection to the clipboard." "" } - {Cut 0 0 0 0 0 0 Null Null Null Null Null 0 0 Clipboard "cut" "Cut" "Copies the active selection to the clipboard, then deletes it." "" } - {Paste 0 0 0 0 0 0 Null Null Null Null Null 0 0 Clipboard "paste" "Paste" "Pastes the current contents of the clipboard." "" } - {InsertText 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "insert_text" "Insert Text" "Inserts the text that was used to cause this command." "" } + {MoveLeft 0 Null Nil 0 0 0 0 0 Null "move_left" "Move Left" "Moves the cursor or selection left." "" } + {MoveRight 0 Null Nil 0 0 0 0 0 Null "move_right" "Move Right" "Moves the cursor or selection right." "" } + {MoveUp 0 Null Nil 0 0 0 0 0 Null "move_up" "Move Up" "Moves the cursor or selection up." "" } + {MoveDown 0 Null Nil 0 0 0 0 0 Null "move_down" "Move Down" "Moves the cursor or selection down." "" } + {MoveLeftSelect 0 Null Nil 0 0 0 0 0 Null "move_left_select" "Move Left Select" "Moves the cursor or selection left, while selecting." "" } + {MoveRightSelect 0 Null Nil 0 0 0 0 0 Null "move_right_select" "Move Right Select" "Moves the cursor or selection right, while selecting." "" } + {MoveUpSelect 0 Null Nil 0 0 0 0 0 Null "move_up_select" "Move Up Select" "Moves the cursor or selection up, while selecting." "" } + {MoveDownSelect 0 Null Nil 0 0 0 0 0 Null "move_down_select" "Move Down Select" "Moves the cursor or selection down, while selecting." "" } + {MoveLeftChunk 0 Null Nil 0 0 0 0 0 Null "move_left_chunk" "Move Left Select" "Moves the cursor or selection left one chunk." "" } + {MoveRightChunk 0 Null Nil 0 0 0 0 0 Null "move_right_chunk" "Move Right Select" "Moves the cursor or selection right one chunk." "" } + {MoveUpChunk 0 Null Nil 0 0 0 0 0 Null "move_up_chunk" "Move Up Chunk" "Moves the cursor or selection up one chunk." "" } + {MoveDownChunk 0 Null Nil 0 0 0 0 0 Null "move_down_chunk" "Move Down Chunk" "Moves the cursor or selection down one chunk." "" } + {MoveUpPage 0 Null Nil 0 0 0 0 0 Null "move_up_page" "Move Up Page" "Moves the cursor or selection up one page." "" } + {MoveDownPage 0 Null Nil 0 0 0 0 0 Null "move_down_page" "Move Down Page" "Moves the cursor or selection down one page." "" } + {MoveUpWhole 0 Null Nil 0 0 0 0 0 Null "move_up_whole" "Move Up Whole" "Moves the cursor or selection to the beginning of the relevant content." "" } + {MoveDownWhole 0 Null Nil 0 0 0 0 0 Null "move_down_whole" "Move Down Whole" "Moves the cursor or selection to the end of the relevant content." "" } + {MoveLeftChunkSelect 0 Null Nil 0 0 0 0 0 Null "move_left_chunk_select" "Move Left Chunk Select" "Moves the cursor or selection left one chunk." "" } + {MoveRightChunkSelect 0 Null Nil 0 0 0 0 0 Null "move_right_chunk_select" "Move Right Chunk Select" "Moves the cursor or selection right one chunk." "" } + {MoveUpChunkSelect 0 Null Nil 0 0 0 0 0 Null "move_up_chunk_select" "Move Up Chunk Select" "Moves the cursor or selection up one chunk." "" } + {MoveDownChunkSelect 0 Null Nil 0 0 0 0 0 Null "move_down_chunk_select" "Move Down Chunk Select" "Moves the cursor or selection down one chunk." "" } + {MoveUpPageSelect 0 Null Nil 0 0 0 0 0 Null "move_up_page_select" "Move Up Page Select" "Moves the cursor or selection up one page, while selecting." "" } + {MoveDownPageSelect 0 Null Nil 0 0 0 0 0 Null "move_down_page_select" "Move Down Page Select" "Moves the cursor or selection down one page, while selecting." "" } + {MoveUpWholeSelect 0 Null Nil 0 0 0 0 0 Null "move_up_whole_select" "Move Up Whole Select" "Moves the cursor or selection to the beginning of the relevant content, while selecting." "" } + {MoveDownWholeSelect 0 Null Nil 0 0 0 0 0 Null "move_down_whole_select" "Move Down Whole Select" "Moves the cursor or selection to the end of the relevant content, while selecting." "" } + {MoveHome 0 Null Nil 0 0 0 0 0 Null "move_home" "Move Home" "Moves the cursor to the beginning of the line." "" } + {MoveEnd 0 Null Nil 0 0 0 0 0 Null "move_end" "Move End" "Moves the cursor to the end of the line." "" } + {MoveHomeSelect 0 Null Nil 0 0 0 0 0 Null "move_home_select" "Move Home Select" "Moves the cursor to the beginning of the line, while selecting." "" } + {MoveEndSelect 0 Null Nil 0 0 0 0 0 Null "move_end_select" "Move End Select" "Moves the cursor to the end of the line, while selecting." "" } + {SelectAll 0 Null Nil 0 0 0 0 0 Null "select_all" "Select All" "Selects everything possible." "" } + {DeleteSingle 0 Null Nil 0 0 0 0 0 Null "delete_single" "Delete Single" "Deletes a single element to the right of the cursor, or the active selection." "" } + {DeleteChunk 0 Null Nil 0 0 0 0 0 Null "delete_chunk" "Delete Chunk" "Deletes a chunk to the right of the cursor, or the active selection." "" } + {BackspaceSingle 0 Null Nil 0 0 0 0 0 Null "backspace_single" "Backspace Single" "Deletes a single element to the left of the cursor, or the active selection." "" } + {BackspaceChunk 0 Null Nil 0 0 0 0 0 Null "backspace_chunk" "Backspace Chunk" "Deletes a chunk to the left of the cursor, or the active selection." "" } + {Copy 0 Null Nil 0 0 0 0 0 Clipboard "copy" "Copy" "Copies the active selection to the clipboard." "" } + {Cut 0 Null Nil 0 0 0 0 0 Clipboard "cut" "Cut" "Copies the active selection to the clipboard, then deletes it." "" } + {Paste 0 Null Nil 0 0 0 0 0 Clipboard "paste" "Paste" "Pastes the current contents of the clipboard." "" } + {InsertText 1 Null Nil 0 0 0 0 0 Null "insert_text" "Insert Text" "Inserts the text that was used to cause this command." "" } //- rjf: code navigation - {GoToLine 0 0 0 0 1 0 TextPoint Null Null Null TextPoint 0 0 Null "goto_line" "Go To Line" "Jumps to a line number in the current code file." "" } - {GoToAddress 0 0 0 0 1 1 VirtualAddr Null Null Null VirtualAddr 0 0 Null "goto_address" "Go To Address" "Jumps to an address in the current memory or disassembly view." "" } - {CenterCursor 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "center_cursor" "Center Cursor" "Snaps the current code view to center the cursor." "" } - {ContainCursor 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "contain_cursor" "Contain Cursor" "Snaps the current code view to contain the cursor." "" } - {FindTextForward 0 1 1 1 1 1 String Null Null Null SearchString 0 0 Find "find_text_forward" "Find Text (Forward)" "Searches the current code file forward (from the cursor) for a string." "" } - {FindTextBackward 0 1 1 1 1 1 String Null Null Null SearchString 0 0 Find "find_text_backward" "Find Text (Backwards)" "Searches the current code file backwards (from the cursor) for a string." "" } - {FindNext 0 1 1 1 1 0 String Null Null Null Null 0 0 Find "find_next" "Find Next" "Searches the current code file forward (from the cursor) for the last searched string." "" } - {FindPrev 0 1 1 1 1 0 String Null Null Null Null 0 0 Find "find_prev" "Find Previous" "Searches the current code file backwards (from the cursor) for the last searched string." "" } + {GoToLine 0 TextPoint Nil 0 0 0 1 1 Null "goto_line" "Go To Line" "Jumps to a line number in the current code file." "" } + {GoToAddress 0 VirtualAddr Nil 0 0 0 1 1 Null "goto_address" "Go To Address" "Jumps to an address in the current memory or disassembly view." "" } + {CenterCursor 0 Null Nil 0 0 0 0 0 Null "center_cursor" "Center Cursor" "Snaps the current code view to center the cursor." "" } + {ContainCursor 0 Null Nil 0 0 0 0 0 Null "contain_cursor" "Contain Cursor" "Snaps the current code view to contain the cursor." "" } + {FindTextForward 0 String Nil 0 1 1 1 1 Find "find_text_forward" "Find Text (Forward)" "Searches the current code file forward (from the cursor) for a string." "" } + {FindTextBackward 0 String Nil 0 1 1 1 1 Find "find_text_backward" "Find Text (Backwards)" "Searches the current code file backwards (from the cursor) for a string." "" } + {FindNext 0 Null Nil 0 1 0 0 0 Find "find_next" "Find Next" "Searches the current code file forward (from the cursor) for the last searched string." "" } + {FindPrev 0 Null Nil 0 1 0 0 0 Find "find_prev" "Find Previous" "Searches the current code file backwards (from the cursor) for the last searched string." "" } //- rjf: thread finding - {FindThread 0 0 0 0 0 0 Entity Null Null Thread Entity DF_EntityKind_Thread 0 Find "find_thread" "Find Thread" "Jumps to the passed thread in either source code, disassembly, or both if they're already open." "" } - {FindSelectedThread 0 0 0 0 0 0 Null Null Null Null Null 0 0 Find "find_selected_thread" "Find Selected Thread" "Jumps to the selected thread in either source code, disassembly, or both if they're already open." "" } + {FindThread 0 Entity Thread 0 0 0 0 1 Find "find_thread" "Find Thread" "Jumps to the passed thread in either source code, disassembly, or both if they're already open." "" } + {FindSelectedThread 0 Null Nil 0 0 0 0 0 Find "find_selected_thread" "Find Selected Thread" "Jumps to the selected thread in either source code, disassembly, or both if they're already open." "" } //- rjf: name finding - {GoToName 0 0 0 0 0 1 Null Null Null Null String 0 0 Null "goto_name" "Go To Name" "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible." "" } - {GoToNameAtCursor 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "goto_name_at_cursor" "Go To Name At Cursor" "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible." "" } + {GoToName 0 String Nil 0 0 0 1 1 Null "goto_name" "Go To Name" "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible." "" } + {GoToNameAtCursor 0 Null Nil 0 0 0 0 0 Null "goto_name_at_cursor" "Go To Name At Cursor" "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible." "" } //- rjf: watch expressions - {ToggleWatchExpression 0 0 0 0 0 0 Null Null Null Null Null 0 0 Binoculars "toggle_watch_expr" "Toggle Watch Expression" "Adds or removes an expression to an opened watch view." "" } - {ToggleWatchExpressionAtCursor 0 0 0 0 0 0 Null Null Null Null Null 0 0 Binoculars "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor" "Adds or removes the expression that the cursor or selection is currently over to an opened watch view." "" } - - //- rjf: memory openers - {OpenFileMemory 0 0 0 0 0 0 Entity Null Null File Entity DF_EntityKind_File 0 Grid "open_file_memory" "Open File Memory" "Opens a memory view for the passed file." "" } - {OpenProcessMemory 0 0 0 0 0 0 Entity Null Null Process Entity DF_EntityKind_Process 0 Grid "open_process_memory" "Open Process Memory" "Opens a memory view for the passed process." "" } - {OpenSelectedProcessMemory 0 0 0 0 0 0 Null Null Null Null Null 0 0 Grid "open_selected_process_memory""Open Selected Process Memory" "Opens a memory view for the selected process." "" } + {ToggleWatchExpression 0 Null Nil 0 0 0 0 0 Binoculars "toggle_watch_expr" "Toggle Watch Expression" "Adds or removes an expression to an opened watch view." "" } + {ToggleWatchExpressionAtCursor 0 Null Nil 0 0 0 0 0 Binoculars "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor" "Adds or removes the expression that the cursor or selection is currently over to an opened watch view." "" } //- rjf: memory view parameterization - {SetColumns 0 0 0 0 1 0 Index Null Null Null Index 0 0 Thumbnails "set_columns" "Set Columns" "Sets the number of columns for a memory view." "" } + {SetColumns 0 Index Nil 0 0 0 1 1 Thumbnails "set_columns" "Set Columns" "Sets the number of columns for a memory view." "" } //- rjf: disassembly view parameterization - {ToggleAddressVisibility 0 0 0 0 1 0 Null Null Null Null Null 0 0 Thumbnails "toggle_address_visibility" "Toggle Address Visibility" "Toggles the visibility of addresses in a disassembly view." "" } - {ToggleCodeBytesVisibility 0 0 0 0 1 0 Null Null Null Null Null 0 0 Thumbnails "toggle_code_bytes_visibility""Toggle Code Bytes Visibility" "Toggles the visibility of machine code bytes in a disassembly view." "" } + {ToggleAddressVisibility 0 Null Nil 0 0 0 0 0 Thumbnails "toggle_address_visibility" "Toggle Address Visibility" "Toggles the visibility of addresses in a disassembly view." "" } + {ToggleCodeBytesVisibility 0 Null Nil 0 0 0 0 0 Thumbnails "toggle_code_bytes_visibility""Toggle Code Bytes Visibility" "Toggles the visibility of machine code bytes in a disassembly view." "" } //- rjf: general entity operations - {EnableEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "enable_entity" "Enable Entity" "Enables an entity." "" } - {DisableEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "disable_entity" "Disable Entity" "Disables an entity." "" } - {FreezeEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "freeze_entity" "Freeze Entity" "Freezes an entity." "" } - {ThawEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "thaw_entity" "Thaw Entity" "Thaws an entity." "" } - {RemoveEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "remove_entity" "Remove Entity" "Removes an entity." "" } - {NameEntity 1 0 0 0 0 0 Entity String Null Null Null 0 0 Null "name_entity" "Name Entity" "Equips an entity with a name." "" } - {EditEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "edit_entity" "Edit Entity" "Opens the editor for an entity." "" } - {DuplicateEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "duplicate_entity" "Duplicate Entity" "Duplicates an entity." "" } + {EnableEntity 1 Null Nil 0 0 0 0 0 Null "enable_entity" "Enable Entity" "Enables an entity." "" } + {DisableEntity 1 Null Nil 0 0 0 0 0 Null "disable_entity" "Disable Entity" "Disables an entity." "" } + {FreezeEntity 1 Null Nil 0 0 0 0 0 Null "freeze_entity" "Freeze Entity" "Freezes an entity." "" } + {ThawEntity 1 Null Nil 0 0 0 0 0 Null "thaw_entity" "Thaw Entity" "Thaws an entity." "" } + {RemoveEntity 1 Null Nil 0 0 0 0 0 Null "remove_entity" "Remove Entity" "Removes an entity." "" } + {NameEntity 1 Null Nil 0 0 0 0 0 Null "name_entity" "Name Entity" "Equips an entity with a name." "" } + {EditEntity 1 Null Nil 0 0 0 0 0 Null "edit_entity" "Edit Entity" "Opens the editor for an entity." "" } + {DuplicateEntity 1 Null Nil 0 0 0 0 0 Null "duplicate_entity" "Duplicate Entity" "Duplicates an entity." "" } //- rjf: breakpoints - {TextBreakpoint 1 0 0 0 0 0 Null Null Null Null Null 0 0 CircleFilled "text_breakpoint" "Text Breakpoint" "Places or removes a breakpoint on the specified line of source code." "" } - {AddressBreakpoint 0 0 0 0 0 1 VirtualAddr Null Null Null VirtualAddr 0 0 CircleFilled "address_breakpoint" "Address Breakpoint" "Places or removes a breakpoint on the specified address." "" } - {FunctionBreakpoint 0 0 0 0 0 1 String Null Null Null String 0 0 CircleFilled "function_breakpoint" "Function Breakpoint" "Places or removes a breakpoint on the first address(es) of the specified function." "" } - {ToggleBreakpointAtCursor 0 0 0 0 0 0 Null Null Null Null Null 0 0 CircleFilled "toggle_breakpoint_cursor" "Toggle Breakpoint At Cursor" "Places or removes a breakpoint on the line on which the active cursor sits." "" } - {RemoveBreakpoint 0 0 0 0 0 0 Entity Null Null Breakpoint Entity DF_EntityKind_Breakpoint 0 Trash "remove_breakpoint" "Remove Breakpoint" "Removes an existing breakpoint." "" } - {EnableBreakpoint 0 0 0 0 0 0 Entity Null Null Breakpoint Entity DF_EntityKind_Breakpoint 0 CheckFilled "enable_breakpoint" "Enable Breakpoint" "Enables a breakpoint." "" } - {DisableBreakpoint 0 0 0 0 0 0 Entity Null Null Breakpoint Entity DF_EntityKind_Breakpoint 0 CheckHollow "disable_breakpoint" "Disable Breakpoint" "Disables a breakpoint." "" } + {TextBreakpoint 1 Null Nil 0 0 0 0 0 CircleFilled "text_breakpoint" "Text Breakpoint" "Places or removes a breakpoint on the specified line of source code." "" } + {AddressBreakpoint 0 VirtualAddr Nil 0 0 0 1 1 CircleFilled "address_breakpoint" "Address Breakpoint" "Places or removes a breakpoint on the specified address." "" } + {FunctionBreakpoint 0 String Nil 0 0 0 1 1 CircleFilled "function_breakpoint" "Function Breakpoint" "Places or removes a breakpoint on the first address(es) of the specified function." "" } + {ToggleBreakpointAtCursor 0 Null Nil 0 0 0 0 0 CircleFilled "toggle_breakpoint_cursor" "Toggle Breakpoint At Cursor" "Places or removes a breakpoint on the line on which the active cursor sits." "" } + {RemoveBreakpoint 0 Entity Breakpoint 0 0 0 0 1 Trash "remove_breakpoint" "Remove Breakpoint" "Removes an existing breakpoint." "" } + {EnableBreakpoint 0 Entity Breakpoint 0 0 0 0 1 CheckFilled "enable_breakpoint" "Enable Breakpoint" "Enables a breakpoint." "" } + {DisableBreakpoint 0 Entity Breakpoint 0 0 0 0 1 CheckHollow "disable_breakpoint" "Disable Breakpoint" "Disables a breakpoint." "" } //- rjf: watches - {ToggleWatchPin 1 0 0 0 0 1 Entity TextPoint String Null String 0 0 Binoculars "toggle_watch_pin" "Toggle Watch Pin" "Places or removes a watch pin on a textual location on a particular entity." "" } - {ToggleWatchPinAtCursor 0 0 0 0 1 1 String Null Null Null String 0 0 Binoculars "toggle_watch_pin_at_cursor" "Toggle Watch Pin At Cursor" "Places or removes a watch pin at the cursor on the currently active file." "" } + {ToggleWatchPin 1 Null Nil 0 0 0 0 0 Binoculars "toggle_watch_pin" "Toggle Watch Pin" "Places or removes a watch pin on a textual location on a particular entity." "" } + {ToggleWatchPinAtCursor 0 String Nil 0 0 0 1 1 Binoculars "toggle_watch_pin_at_cursor" "Toggle Watch Pin At Cursor" "Places or removes a watch pin at the cursor on the currently active file." "" } //- rjf: targets - {AddTarget 0 0 0 0 0 0 FilePath Null Null Null FilePath 0 0 Target "add_target" "Add Target" "Adds a new target." "application,executable,debug" } - {RemoveTarget 0 0 0 0 0 0 Entity Null Null Target Entity DF_EntityKind_Target 0 Trash "remove_target" "Remove Target" "Removes an existing target." "delete,remove,target" } - {EditTarget 0 0 0 0 0 0 Entity Null Null Target Entity DF_EntityKind_Target 0 Pencil "edit_target" "Edit Target" "Edits an existing target." "" } + {AddTarget 0 FilePath Nil 0 0 0 0 1 Target "add_target" "Add Target" "Adds a new target." "application,executable,debug" } + {RemoveTarget 0 Entity Target 0 0 0 0 1 Trash "remove_target" "Remove Target" "Removes an existing target." "delete,remove,target" } + {EditTarget 0 Entity Target 0 0 0 0 1 Pencil "edit_target" "Edit Target" "Edits an existing target." "" } //- rjf: ended processes - {RetryEndedProcess 1 0 0 0 0 0 Entity Null Null EndedProcess Entity DF_EntityKind_EndedProcess 0 Null "retry_ended_process" "Retry Ended Process" "Launches a new process with the same options as the passed ended process." "" } + {RetryEndedProcess 1 Entity Process 0 0 0 0 0 Null "retry_ended_process" "Retry Ended Process" "Launches a new process with the same options as the passed ended process." "" } //- rjf: attaching - {Attach 0 0 0 0 0 0 String Null Null Null String 0 0 Null "attach" "Attach" "Attaches to a process that is already running on the local machine." "" } - {RegisterAsJITDebugger 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "register_as_jit_debugger" "Register As Just-In-Time (JIT) Debugger" "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system." "" } + {Attach 0 ID Nil 0 0 0 1 1 Null "attach" "Attach" "Attaches to a process that is already running on the local machine." "" } + {RegisterAsJITDebugger 0 Null Nil 0 0 0 0 0 Null "register_as_jit_debugger" "Register As Just-In-Time (JIT) Debugger" "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system." "" } //- rjf: catchall general entity activation paths (drag/drop, clicking) - {EntityRefFastPath 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "entity_ref_fast_path" "Entity Reference Fast Path" "Activates the default behavior when clicking an entity reference." "" } - {SpawnEntityView 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "spawn_entity_view" "Spawn Entity View" "Spawns a new view, given an entity and other parameterizations." "" } - {FindCodeLocation 0 0 0 0 0 0 FilePath TextPoint Null Null FilePathAndTextPoint 0 0 FileOutline "find_code_location" "Find Code Location" "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary." "" } + {EntityRefFastPath 1 Null Nil 0 0 0 0 0 Null "entity_ref_fast_path" "Entity Reference Fast Path" "Activates the default behavior when clicking an entity reference." "" } + {SpawnEntityView 1 Null Nil 0 0 0 0 0 Null "spawn_entity_view" "Spawn Entity View" "Spawns a new view, given an entity and other parameterizations." "" } + {FindCodeLocation 0 FilePath Nil 0 0 0 0 1 FileOutline "find_code_location" "Find Code Location" "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary." "" } //- rjf: view drivers - {Commands 0 0 0 0 0 0 Null Null Null Null String 0 0 List "commands" "Commands" "Opens the list of all commands." "" } - {Target 1 0 0 0 0 0 Null Null Null Null Null 0 0 Target "target_editor" "Target" "Opens the editor for a target." "" } - {Targets 0 0 0 0 0 0 Null Null Null Null Null 0 0 Target "targets" "Targets" "Opens the list of all targets." "" } - {FilePathMap 0 0 0 0 0 0 Null Null Null Null Null 0 0 FileOutline "file_path_map" "File Path Map" "Opens the file path mapping editor." "" } - {Scheduler 0 0 0 0 0 0 Null Null Null Null Null 0 0 Scheduler "scheduler" "Scheduler" "Opens the scheduler view, for process and thread controls." "" } - {CallStack 0 0 0 0 0 0 Null Null Null Null Null 0 0 Thread "call_stack" "Call Stack" "Opens the call stack view." "callstack,thread" } - {Modules 0 0 0 0 0 0 Null Null Null Null Null 0 0 Module "modules" "Modules" "Opens the modules view." "" } - {PendingEntity 1 0 0 0 0 0 Null Null Null Null Null 0 0 FileOutline "pending_entity" "Pending Entity" "Opens a view which waits for the passed entity to be completely loaded, then replaces itself with a new view." "" } - {Code 1 0 0 0 0 0 Null Null Null Null Null 0 0 FileOutline "code" "Code" "Opens the code view for an already-loaded file." "" } - {Watch 0 0 0 0 0 0 Null Null Null Null Null 0 0 Binoculars "watch" "Watch" "Opens a watch view." "" } - {Locals 0 0 0 0 0 0 Null Null Null Null Null 0 0 Binoculars "locals" "Locals" "Opens a locals view." "" } - {Registers 0 0 0 0 0 0 Null Null Null Null Null 0 0 Binoculars "registers" "Registers" "Opens a registers view for the currently selected thread." "" } - {Output 0 0 0 0 0 0 Null Null Null Null Null 0 0 List "output" "Output" "Opens an output view." "" } - {Memory 0 0 0 0 0 0 Null Null Null Null Null 0 0 Grid "memory" "Memory" "Opens a memory view." "" } - {Disassembly 0 0 0 0 0 0 Null Null Null Null Null 0 0 Glasses "disassembly" "Disassembly" "Opens the disassembly view." "disasm" } - {Breakpoints 0 0 0 0 0 0 Null Null Null Null Null 0 0 CircleFilled "breakpoints" "Breakpoints" "Opens the breakpoints view." "" } - {WatchPins 0 0 0 0 0 0 Null Null Null Null Null 0 0 Pin "watch_pins" "Watch Pins" "Opens the watch pins view." "" } - {ExceptionFilters 0 0 0 0 0 0 Null Null Null Null Null 0 0 Gear "exception_filters" "Exception Filters" "Opens the exception filters view." "exceptions,filters" } - {Theme 0 0 0 0 0 0 Null Null Null Null Null 0 0 Palette "theme" "Theme" "Opens the theme view." "theme,color,scheme,palette" } - {PickFile 1 0 0 0 1 0 FilePath Null Null Null FilePath 0 0 FileOutline "pick_file" "Pick File" "Opens the file browser to pick a file." "" } + {Commands 0 Null Nil 0 0 0 0 0 List "commands" "Commands" "Opens the list of all commands." "" } + {Target 1 Null Nil 0 0 0 0 0 Target "target" "Target" "Opens the editor for a target." "" } + {Targets 0 Null Nil 0 0 0 0 0 Target "targets" "Targets" "Opens the list of all targets." "" } + {FilePathMap 0 Null Nil 0 0 0 0 0 FileOutline "file_path_map" "File Path Map" "Opens the file path mapping editor." "" } + {Scheduler 0 Null Nil 0 0 0 0 0 Scheduler "scheduler" "Scheduler" "Opens the scheduler view, for process and thread controls." "" } + {CallStack 0 Null Nil 0 0 0 0 0 Thread "call_stack" "Call Stack" "Opens the call stack view." "callstack,thread" } + {Modules 0 Null Nil 0 0 0 0 0 Module "modules" "Modules" "Opens the modules view." "" } + {PendingEntity 1 Null Nil 0 0 0 0 0 FileOutline "pending_entity" "Pending Entity" "Opens a view which waits for the passed entity to be completely loaded, then replaces itself with a new view." "" } + {Code 1 Null Nil 0 0 0 0 0 FileOutline "code" "Code" "Opens the code view for an already-loaded file." "" } + {Watch 0 Null Nil 0 0 0 0 0 Binoculars "watch" "Watch" "Opens a watch view." "" } + {Locals 0 Null Nil 0 0 0 0 0 Binoculars "locals" "Locals" "Opens a locals view." "" } + {Registers 0 Null Nil 0 0 0 0 0 Binoculars "registers" "Registers" "Opens a registers view for the currently selected thread." "" } + {Output 0 Null Nil 0 0 0 0 0 List "output" "Output" "Opens an output view." "" } + {Memory 0 Null Nil 0 0 0 0 0 Grid "memory" "Memory" "Opens a memory view." "" } + {Disassembly 0 Null Nil 0 0 0 0 0 Glasses "disassembly" "Disassembly" "Opens the disassembly view." "disasm" } + {Breakpoints 0 Null Nil 0 0 0 0 0 CircleFilled "breakpoints" "Breakpoints" "Opens the breakpoints view." "" } + {WatchPins 0 Null Nil 0 0 0 0 0 Pin "watch_pins" "Watch Pins" "Opens the watch pins view." "" } + {ExceptionFilters 0 Null Nil 0 0 0 0 0 Gear "exception_filters" "Exception Filters" "Opens the exception filters view." "exceptions,filters" } + {Theme 0 Null Nil 0 0 0 0 0 Palette "theme" "Theme" "Opens the theme view." "theme,color,scheme,palette" } + {PickFile 1 FilePath Nil 0 0 0 0 0 FileOutline "pick_file" "Pick File" "Opens the file browser to pick a file." "" } - //- rjf: core pass-through view result commands - {ViewReturn 1 0 0 0 0 0 Null Null Null Null Null 0 0 Null "complete_view" "Complete View" "Completes a view, passing all parameters to a new command matching the passed command spec." "" } + //- rjf: query completion + {CompleteQuery 1 Null Nil 0 0 0 0 0 Null "complete_query" "Complete Query" "Completes a query." "" } + {CancelQuery 1 Null Nil 0 0 0 0 0 Null "cancel_query" "Cancel Query" "Cancels a query." "" } //- rjf: developer commands - {ToggleDevMenu 0 0 0 0 0 0 Null Null Null Null Null 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" } + {ToggleDevMenu 0 Null Nil 0 0 0 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" } } //////////////////////////////// @@ -1757,19 +1736,12 @@ DF_CmdParamSlot: `};`; } -@table_gen_enum -DF_CmdQueryRule: +@table_gen_data(type:Rng1U64, fallback:0) +df_g_cmd_param_slot_range_table: { - @expand(DF_CmdQueryRuleTable a) - `DF_CmdQueryRule_$(a.name),`; - `DF_CmdQueryRule_COUNT`; -} - -@table_gen_data(type: String8, fallback: `{0}`) -df_g_cmd_query_rule_kind_arg_desc_table: -{ - @expand(DF_CmdQueryRuleTable a) - `str8_lit_comp("$(a.args_desc)"),`; + `{0},` + @expand(DF_CmdParamSlotTable a) + `{OffsetOf(DF_CmdParams, $(a.name_lower)), OffsetOf(DF_CmdParams, $(a.name_lower)) + sizeof($(a.c_type))},` } //- rjf: entity kind tables @@ -1847,7 +1819,7 @@ df_g_cfg_src_apply_cmd_kind_table: df_g_core_cmd_kind_spec_info_table: { @expand(DF_CoreCmdTable, a) - ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), (DF_CmdSpecFlag_OmitFromLists*$(a.lister_omit)) | (DF_CmdSpecFlag_RunKeepsQuery*$(a.keep_query)) | (DF_CmdSpecFlag_QueryUsesOldInput*$(a.old_input)) | (DF_CmdSpecFlag_OldInputSelect*$(a.oi_select)) | (DF_CmdSpecFlag_AppliesToView*$(a.apply_to_view)) | (DF_CmdSpecFlag_QueryIsCode*$(a.query_is_code)), {DF_CmdParamSlot_$(a.query_slot0), DF_CmdParamSlot_$(a.query_slot1), DF_CmdParamSlot_$(a.query_slot2)}, DF_CmdQueryRule_$(a.query_rule), DF_IconKind_$(a.canonical_icon), {$(a.query_info_0_u64), $(a.query_info_1_u64)}},```; + ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), (DF_CmdSpecFlag_OmitFromLists*$(a.lister_omit)), {DF_CmdParamSlot_$(a.q_slot), DF_EntityKind_$(a.q_ent_kind), (DF_CmdQueryFlag_FoldersOnly*$(a.q_folders_only))|(DF_CmdQueryFlag_CodeInput*$(a.q_is_code))|(DF_CmdQueryFlag_KeepOldInput*$(a.q_keep_oi))|(DF_CmdQueryFlag_SelectOldInput*$(a.q_select_oi))|(DF_CmdQueryFlag_Required*$(a.q_required))}, DF_IconKind_$(a.canonical_icon)},```; } //- rjf: core view rule tables diff --git a/src/df/core/generated/df_core.meta.c b/src/df/core/generated/df_core.meta.c index 8103c270..273836d1 100644 --- a/src/df/core/generated/df_core.meta.c +++ b/src/df/core/generated/df_core.meta.c @@ -5,204 +5,198 @@ DF_CmdSpecInfo df_g_core_cmd_kind_spec_info_table[] = { -{ str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_X, {0, 0}}, -{ str8_lit_comp("command_fast_path"), str8_lit_comp("Performs the fast path for the command named by the argument."), str8_lit_comp(""), str8_lit_comp("Command Fast Path"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_CmdSpec, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("error"), str8_lit_comp("Notifies of an error."), str8_lit_comp(""), str8_lit_comp("Error"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 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"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_EntityList, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Play, {DF_EntityKind_Target, 0}}, -{ str8_lit_comp("launch_and_init"), str8_lit_comp("Starts debugging a new instance of a target, then stops at the program's entry point."), str8_lit_comp("launch,start,entry,point"), str8_lit_comp("Launch and Initialize"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_EntityList, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_PlayStepForward, {DF_EntityKind_Target, 0}}, -{ str8_lit_comp("kill"), str8_lit_comp("Kills the specified existing debugged process(es)."), str8_lit_comp("stop,kill"), str8_lit_comp("Kill"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_EntityList, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Stop, {DF_EntityKind_Process, 0}}, -{ str8_lit_comp("kill_all"), str8_lit_comp("Kills all debugged child processes."), str8_lit_comp("stop,kill,all"), str8_lit_comp("Kill All"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Stop, {0, 0}}, -{ str8_lit_comp("detach"), str8_lit_comp("Detaches the specified debugged process."), str8_lit_comp("detach"), str8_lit_comp("Detach"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_EntityList, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Null, {DF_EntityKind_Process, 0}}, -{ str8_lit_comp("continue"), str8_lit_comp("Continues all halted threads."), str8_lit_comp(""), str8_lit_comp("Continue"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Play, {0, 0}}, -{ str8_lit_comp("step_into_inst"), str8_lit_comp("Performs a step that goes into calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp("Step Into (Assembly)"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepInto, {0, 0}}, -{ str8_lit_comp("step_over_inst"), str8_lit_comp("Performs a step that skips calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp("Step Over (Assembly)"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepOver, {0, 0}}, -{ str8_lit_comp("step_into_line"), str8_lit_comp("Performs a step that goes into calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp("Step Into (Line)"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepInto, {0, 0}}, -{ str8_lit_comp("step_over_line"), str8_lit_comp("Performs a step that skips calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp("Step Over (Line)"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepOver, {0, 0}}, -{ str8_lit_comp("step_out"), str8_lit_comp("Runs to the end of the current function and exits it."), str8_lit_comp(""), str8_lit_comp("Step Out"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepOut, {0, 0}}, -{ str8_lit_comp("run_to_address"), str8_lit_comp("Runs the selected thread to the specified address."), str8_lit_comp(""), str8_lit_comp("Run To Address"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_VirtualAddr, DF_CmdParamSlot_Null}, DF_CmdQueryRule_VirtualAddr, DF_IconKind_PlayStepForward, {0, 0}}, -{ str8_lit_comp("run_to_module_offset"), str8_lit_comp("Runs the selected thread to the specified offset within the current module."), str8_lit_comp(""), str8_lit_comp("Run To Module Offset"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_VirtualOff, DF_CmdParamSlot_Null}, DF_CmdQueryRule_VirtualOff, DF_IconKind_PlayStepForward, {0, 0}}, -{ str8_lit_comp("halt"), str8_lit_comp("Halts all running processes."), str8_lit_comp("pause"), str8_lit_comp("Halt"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Pause, {0, 0}}, -{ str8_lit_comp("soft_halt_refresh"), str8_lit_comp("Interrupts all running processes to collect data, and then resumes them."), str8_lit_comp(""), str8_lit_comp("Soft Halt Refresh"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Refresh, {0, 0}}, -{ str8_lit_comp("set_thread_ip"), str8_lit_comp("Sets the passed thread's instruction pointer at the passed address."), str8_lit_comp(""), str8_lit_comp("Set Thread IP"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_VirtualAddr, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("run"), str8_lit_comp("Runs all targets after starting them if they have not been started yet."), str8_lit_comp("play"), str8_lit_comp("Run"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Play, {0, 0}}, -{ str8_lit_comp("restart"), str8_lit_comp("Kills all running processes, then restarts the targets which were used to launch all current processes (if any)."), str8_lit_comp("restart,retry"), str8_lit_comp("Restart"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Redo, {0, 0}}, -{ str8_lit_comp("step_into"), str8_lit_comp("Steps once, possibly into function calls, for either line or instructions."), str8_lit_comp(""), str8_lit_comp("Step Into"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepInto, {0, 0}}, -{ str8_lit_comp("step_over"), str8_lit_comp("Steps once, always over function calls, for either line or instructions."), str8_lit_comp(""), str8_lit_comp("Step Over"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_StepOver, {0, 0}}, -{ str8_lit_comp("run_to_cursor"), str8_lit_comp("Runs the selected thread to the current cursor."), str8_lit_comp(""), str8_lit_comp("Run To Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_View, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Play, {0, 0}}, -{ str8_lit_comp("set_next_statement"), str8_lit_comp("Sets the selected thread's instruction pointer to the cursor's position."), str8_lit_comp(""), str8_lit_comp("Set Next Statement"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_View, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_RightArrow, {0, 0}}, -{ str8_lit_comp("enable_solo_stepping_mode"), str8_lit_comp("Enables 'solo stepping mode', which suspends all non-selected threads before stepping."), str8_lit_comp("solo,stepping,mode,suspend"), str8_lit_comp("Enable Solo Stepping Mode"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Thread, {0, 0}}, -{ str8_lit_comp("disable_solo_stepping_mode"), str8_lit_comp("Disables 'solo stepping mode', which suspends all non-selected threads before stepping."), str8_lit_comp("solo,stepping,mode,suspend"), str8_lit_comp("Disable Solo Stepping Mode"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Thread, {0, 0}}, -{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp("Select Thread"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Null, {DF_EntityKind_Thread, 0}}, -{ str8_lit_comp("select_thread_window"), str8_lit_comp("Selects a thread for the active window, overriding the global selected thread."), str8_lit_comp(""), str8_lit_comp("Select Thread On Window"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Window, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Null, {DF_EntityKind_Thread, 0}}, -{ str8_lit_comp("select_thread_view"), str8_lit_comp("Selects a thread for the active view, overriding the global and per-window selected threads."), str8_lit_comp(""), str8_lit_comp("Select Thread On View"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_View, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Null, {DF_EntityKind_Thread, 0}}, -{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp("Select Unwind"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Index, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the callstack frame above the currently selected."), str8_lit_comp(""), str8_lit_comp("Up One Frame"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_UpArrow, {0, 0}}, -{ str8_lit_comp("down_one_frame"), str8_lit_comp("Selects the callstack frame below the currently selected."), str8_lit_comp(""), str8_lit_comp("Down One Frame"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_DownArrow, {0, 0}}, -{ str8_lit_comp("freeze_thread"), str8_lit_comp("Freezes the passed thread."), str8_lit_comp(""), str8_lit_comp("Freeze Thread"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Locked, {DF_EntityKind_Thread, 0}}, -{ str8_lit_comp("thaw_thread"), str8_lit_comp("Thaws the passed thread."), str8_lit_comp(""), str8_lit_comp("Thaw Thread"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Unlocked, {DF_EntityKind_Thread, 0}}, -{ str8_lit_comp("freeze_process"), str8_lit_comp("Freezes the passed process."), str8_lit_comp(""), str8_lit_comp("Freeze Process"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Locked, {DF_EntityKind_Process, 0}}, -{ str8_lit_comp("thaw_process"), str8_lit_comp("Thaws the passed process."), str8_lit_comp(""), str8_lit_comp("Thaw Process"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Unlocked, {DF_EntityKind_Process, 0}}, -{ str8_lit_comp("freeze_machine"), str8_lit_comp("Freezes the passed machine."), str8_lit_comp(""), str8_lit_comp("Freeze Machine"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Locked, {DF_EntityKind_Machine, 0}}, -{ str8_lit_comp("thaw_machine"), str8_lit_comp("Thaws the passed machine."), str8_lit_comp(""), str8_lit_comp("Thaw Machine"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Unlocked, {DF_EntityKind_Machine, 0}}, -{ str8_lit_comp("freeze_local_machine"), str8_lit_comp("Freezes the local machine."), str8_lit_comp(""), str8_lit_comp("Freeze Local Machine"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Machine, {0, 0}}, -{ str8_lit_comp("thaw_local_machine"), str8_lit_comp("Thaws the local machine."), str8_lit_comp(""), str8_lit_comp("Thaw Local Machine"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Machine, {0, 0}}, -{ str8_lit_comp("inc_ui_font_scale"), str8_lit_comp("Increases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Increase UI Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("dec_ui_font_scale"), str8_lit_comp("Decreases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Decrease UI Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("inc_code_font_scale"), str8_lit_comp("Increases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Increase Code Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("dec_code_font_scale"), str8_lit_comp("Decreases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Decrease Code Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("open_window"), str8_lit_comp("Opens a new window."), str8_lit_comp(""), str8_lit_comp("Open New Window"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Window, {0, 0}}, -{ str8_lit_comp("close_window"), str8_lit_comp("Closes an opened window."), str8_lit_comp(""), str8_lit_comp("Close Window"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Window, {0, 0}}, -{ str8_lit_comp("toggle_fullscreen"), str8_lit_comp("Toggles fullscreen view on the active window."), str8_lit_comp(""), str8_lit_comp("Toggle Fullscreen"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Window, {0, 0}}, -{ str8_lit_comp("confirm_accept"), str8_lit_comp("Accepts the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Accept"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("confirm_cancel"), str8_lit_comp("Cancels the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Cancel"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("reset_to_default_panels"), str8_lit_comp("Resets the window to the default panel layout."), str8_lit_comp("panel"), str8_lit_comp("Reset To Default Panel Layout"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Window, {0, 0}}, -{ str8_lit_comp("new_panel_right"), str8_lit_comp("Creates a new panel to the right of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Vertically"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_XSplit, {0, 0}}, -{ str8_lit_comp("new_panel_down"), str8_lit_comp("Creates a new panel at the bottom of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Horizontally"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_YSplit, {0, 0}}, -{ str8_lit_comp("rotate_panel_columns"), str8_lit_comp("Rotates all panels at the closest column level of the panel hierarchy."), str8_lit_comp(""), str8_lit_comp("Rotate Panel Columns"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("next_panel"), str8_lit_comp("Cycles the active panel forward."), str8_lit_comp(""), str8_lit_comp("Focus Next Panel"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_RightArrow, {0, 0}}, -{ str8_lit_comp("prev_panel"), str8_lit_comp("Cycles the active panel backwards."), str8_lit_comp(""), str8_lit_comp("Focus Previous Panel"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_LeftArrow, {0, 0}}, -{ str8_lit_comp("focus_panel"), str8_lit_comp("Focuses a new panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("focus_panel_right"), str8_lit_comp("Focuses a panel rightward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Right"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_RightArrow, {0, 0}}, -{ str8_lit_comp("focus_panel_left"), str8_lit_comp("Focuses a panel leftward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Left"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_LeftArrow, {0, 0}}, -{ str8_lit_comp("focus_panel_up"), str8_lit_comp("Focuses a panel upward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Up"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_UpArrow, {0, 0}}, -{ str8_lit_comp("focus_panel_down"), str8_lit_comp("Focuses a panel downward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Down"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_DownArrow, {0, 0}}, -{ str8_lit_comp("undo"), str8_lit_comp("Undoes the previous action."), str8_lit_comp(""), str8_lit_comp("Undo"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Undo, {0, 0}}, -{ str8_lit_comp("redo"), str8_lit_comp("Redoes the first previously undone action."), str8_lit_comp(""), str8_lit_comp("Redo"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Redo, {0, 0}}, -{ str8_lit_comp("go_back"), str8_lit_comp("Returns to the previously selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Back"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_LeftArrow, {0, 0}}, -{ str8_lit_comp("go_forward"), str8_lit_comp("Returns to the next selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Forward"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_RightArrow, {0, 0}}, -{ str8_lit_comp("close_panel"), str8_lit_comp("Closes the currently active panel."), str8_lit_comp(""), str8_lit_comp("Close Panel"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_ClosePanel, {0, 0}}, -{ str8_lit_comp("next_tab"), str8_lit_comp("Focuses the next tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Next Tab"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_RightArrow, {0, 0}}, -{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Previous Tab"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_LeftArrow, {0, 0}}, -{ 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"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_RightArrow, {0, 0}}, -{ 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"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_LeftArrow, {0, 0}}, -{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("Close Tab"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_X, {0, 0}}, -{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), str8_lit_comp(""), str8_lit_comp("Move Tab"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ 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"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_UpArrow, {0, 0}}, -{ 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"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_DownArrow, {0, 0}}, -{ str8_lit_comp("tab_bar_enable"), str8_lit_comp("Enables a panel's tab bar."), str8_lit_comp(""), str8_lit_comp("Enable Tab Bar"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("tab_bar_disable"), str8_lit_comp("Disables a panel's tab bar."), str8_lit_comp(""), str8_lit_comp("Disable Tab Bar"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("tab_bar_history_mode_enable"), str8_lit_comp("Enables history mode for a panel's tab bar, which orders and manages tabs as recorded history of views."), str8_lit_comp(""), str8_lit_comp("Enable Tab Bar History Mode"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("tab_bar_history_mode_disable"), str8_lit_comp("Disables history mode for a panel's tab bar."), str8_lit_comp(""), str8_lit_comp("Disable Tab Bar History Mode"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("set_current_path"), str8_lit_comp("Sets the debugger's current path, which is used as a starting point when browsing for files."), str8_lit_comp(""), str8_lit_comp("Set Current Path"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePath, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("open"), str8_lit_comp("Opens a file."), str8_lit_comp("code,source,file"), str8_lit_comp("Open"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePath, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("reload"), str8_lit_comp("Reloads a loaded file."), str8_lit_comp("code,source,file,reload"), str8_lit_comp("Reload"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_FileOutline, {DF_EntityKind_File, 0}}, -{ str8_lit_comp("reload_active"), str8_lit_comp("Reloads the active file."), str8_lit_comp("code,source,file,reload"), str8_lit_comp("Reload Active File"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("switch"), str8_lit_comp("Switches to a loaded file."), str8_lit_comp("code,source,file"), str8_lit_comp("Switch"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Window, DF_CmdParamSlot_Panel, DF_CmdParamSlot_Entity}, DF_CmdQueryRule_Entity, DF_IconKind_FileOutline, {DF_EntityKind_File, DF_EntityFlag_IsFolder}}, -{ str8_lit_comp("set_file_override_link_src"), str8_lit_comp("Sets the source path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Source"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("set_file_override_link_dst"), str8_lit_comp("Sets the destination path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Destination"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("set_file_replacement_path"), str8_lit_comp("Sets the path which should be used as the replacement for the passed file."), str8_lit_comp(""), str8_lit_comp("Set File Replacement Path"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("load_user"), str8_lit_comp("Loads and applies a user file."), str8_lit_comp("load,user,profile,layout"), str8_lit_comp("Load User"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePath, DF_IconKind_Person, {0, 0}}, -{ str8_lit_comp("load_profile"), str8_lit_comp("Loads and applies a profile file."), str8_lit_comp("profile,project,session"), str8_lit_comp("Load Profile"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePath, DF_IconKind_Briefcase, {0, 0}}, -{ str8_lit_comp("apply_user_data"), str8_lit_comp("Applies user data from the active user file."), str8_lit_comp(""), str8_lit_comp("Apply User Data"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("apply_profile_data"), str8_lit_comp("Applies profile data from the active profile file."), str8_lit_comp(""), str8_lit_comp("Apply Profile Data"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("write_user_data"), str8_lit_comp("Writes user data to the active user file."), str8_lit_comp(""), str8_lit_comp("Write User Data"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("write_profile_data"), str8_lit_comp("Writes profile data to the active profile file."), str8_lit_comp(""), str8_lit_comp("Write Profile Data"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_left"), str8_lit_comp("Moves the cursor or selection left."), str8_lit_comp(""), str8_lit_comp("Move Left"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_right"), str8_lit_comp("Moves the cursor or selection right."), str8_lit_comp(""), str8_lit_comp("Move Right"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up"), str8_lit_comp("Moves the cursor or selection up."), str8_lit_comp(""), str8_lit_comp("Move Up"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down"), str8_lit_comp("Moves the cursor or selection down."), str8_lit_comp(""), str8_lit_comp("Move Down"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_left_select"), str8_lit_comp("Moves the cursor or selection left, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_right_select"), str8_lit_comp("Moves the cursor or selection right, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_select"), str8_lit_comp("Moves the cursor or selection up, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_select"), str8_lit_comp("Moves the cursor or selection down, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_left_chunk"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_right_chunk"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_chunk"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_chunk"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_page"), str8_lit_comp("Moves the cursor or selection up one page."), str8_lit_comp(""), str8_lit_comp("Move Up Page"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_page"), str8_lit_comp("Moves the cursor or selection down one page."), str8_lit_comp(""), str8_lit_comp("Move Down Page"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_whole"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Up Whole"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_whole"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Down Whole"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_left_chunk_select"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_right_chunk_select"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_chunk_select"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_chunk_select"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_page_select"), str8_lit_comp("Moves the cursor or selection up one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Page Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_page_select"), str8_lit_comp("Moves the cursor or selection down one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Page Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_up_whole_select"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Whole Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_down_whole_select"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Whole Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_home"), str8_lit_comp("Moves the cursor to the beginning of the line."), str8_lit_comp(""), str8_lit_comp("Move Home"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_end"), str8_lit_comp("Moves the cursor to the end of the line."), str8_lit_comp(""), str8_lit_comp("Move End"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_home_select"), str8_lit_comp("Moves the cursor to the beginning of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Home Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("move_end_select"), str8_lit_comp("Moves the cursor to the end of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move End Select"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("select_all"), str8_lit_comp("Selects everything possible."), str8_lit_comp(""), str8_lit_comp("Select All"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("delete_single"), str8_lit_comp("Deletes a single element to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Single"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("delete_chunk"), str8_lit_comp("Deletes a chunk to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Chunk"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("backspace_single"), str8_lit_comp("Deletes a single element to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Single"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("backspace_chunk"), str8_lit_comp("Deletes a chunk to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Chunk"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("copy"), str8_lit_comp("Copies the active selection to the clipboard."), str8_lit_comp(""), str8_lit_comp("Copy"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Clipboard, {0, 0}}, -{ str8_lit_comp("cut"), str8_lit_comp("Copies the active selection to the clipboard, then deletes it."), str8_lit_comp(""), str8_lit_comp("Cut"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Clipboard, {0, 0}}, -{ str8_lit_comp("paste"), str8_lit_comp("Pastes the current contents of the clipboard."), str8_lit_comp(""), str8_lit_comp("Paste"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Clipboard, {0, 0}}, -{ str8_lit_comp("insert_text"), str8_lit_comp("Inserts the text that was used to cause this command."), str8_lit_comp(""), str8_lit_comp("Insert Text"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("goto_line"), str8_lit_comp("Jumps to a line number in the current code file."), str8_lit_comp(""), str8_lit_comp("Go To Line"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_TextPoint, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_TextPoint, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("goto_address"), str8_lit_comp("Jumps to an address in the current memory or disassembly view."), str8_lit_comp(""), str8_lit_comp("Go To Address"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_VirtualAddr, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_VirtualAddr, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("center_cursor"), str8_lit_comp("Snaps the current code view to center the cursor."), str8_lit_comp(""), str8_lit_comp("Center Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("contain_cursor"), str8_lit_comp("Snaps the current code view to contain the cursor."), str8_lit_comp(""), str8_lit_comp("Contain Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("find_text_forward"), str8_lit_comp("Searches the current code file forward (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Forward)"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*1) | (DF_CmdSpecFlag_QueryUsesOldInput*1) | (DF_CmdSpecFlag_OldInputSelect*1) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_SearchString, DF_IconKind_Find, {0, 0}}, -{ str8_lit_comp("find_text_backward"), str8_lit_comp("Searches the current code file backwards (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Backwards)"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*1) | (DF_CmdSpecFlag_QueryUsesOldInput*1) | (DF_CmdSpecFlag_OldInputSelect*1) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_SearchString, DF_IconKind_Find, {0, 0}}, -{ str8_lit_comp("find_next"), str8_lit_comp("Searches the current code file forward (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Next"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*1) | (DF_CmdSpecFlag_QueryUsesOldInput*1) | (DF_CmdSpecFlag_OldInputSelect*1) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Find, {0, 0}}, -{ str8_lit_comp("find_prev"), str8_lit_comp("Searches the current code file backwards (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Previous"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*1) | (DF_CmdSpecFlag_QueryUsesOldInput*1) | (DF_CmdSpecFlag_OldInputSelect*1) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Find, {0, 0}}, -{ str8_lit_comp("find_thread"), str8_lit_comp("Jumps to the passed thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Thread"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Find, {DF_EntityKind_Thread, 0}}, -{ str8_lit_comp("find_selected_thread"), str8_lit_comp("Jumps to the selected thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Selected Thread"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Find, {0, 0}}, -{ str8_lit_comp("goto_name"), str8_lit_comp("Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_String, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("goto_name_at_cursor"), str8_lit_comp("Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("toggle_watch_expr"), str8_lit_comp("Adds or removes an expression to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("toggle_watch_expr_at_cursor"), str8_lit_comp("Adds or removes the expression that the cursor or selection is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("open_file_memory"), str8_lit_comp("Opens a memory view for the passed file."), str8_lit_comp(""), str8_lit_comp("Open File Memory"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Grid, {DF_EntityKind_File, 0}}, -{ str8_lit_comp("open_process_memory"), str8_lit_comp("Opens a memory view for the passed process."), str8_lit_comp(""), str8_lit_comp("Open Process Memory"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Grid, {DF_EntityKind_Process, 0}}, -{ str8_lit_comp("open_selected_process_memory"), str8_lit_comp("Opens a memory view for the selected process."), str8_lit_comp(""), str8_lit_comp("Open Selected Process Memory"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Grid, {0, 0}}, -{ str8_lit_comp("set_columns"), str8_lit_comp("Sets the number of columns for a memory view."), str8_lit_comp(""), str8_lit_comp("Set Columns"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Index, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Index, DF_IconKind_Thumbnails, {0, 0}}, -{ str8_lit_comp("toggle_address_visibility"), str8_lit_comp("Toggles the visibility of addresses in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Address Visibility"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Thumbnails, {0, 0}}, -{ str8_lit_comp("toggle_code_bytes_visibility"), str8_lit_comp("Toggles the visibility of machine code bytes in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Code Bytes Visibility"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Thumbnails, {0, 0}}, -{ str8_lit_comp("enable_entity"), str8_lit_comp("Enables an entity."), str8_lit_comp(""), str8_lit_comp("Enable Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("disable_entity"), str8_lit_comp("Disables an entity."), str8_lit_comp(""), str8_lit_comp("Disable Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp("Freeze Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp("Thaw Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("remove_entity"), str8_lit_comp("Removes an entity."), str8_lit_comp(""), str8_lit_comp("Remove Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("name_entity"), str8_lit_comp("Equips an entity with a name."), str8_lit_comp(""), str8_lit_comp("Name Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_String, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("edit_entity"), str8_lit_comp("Opens the editor for an entity."), str8_lit_comp(""), str8_lit_comp("Edit Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("duplicate_entity"), str8_lit_comp("Duplicates an entity."), str8_lit_comp(""), str8_lit_comp("Duplicate Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("text_breakpoint"), str8_lit_comp("Places or removes a breakpoint on the specified line of source code."), str8_lit_comp(""), str8_lit_comp("Text Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_CircleFilled, {0, 0}}, -{ str8_lit_comp("address_breakpoint"), str8_lit_comp("Places or removes a breakpoint on the specified address."), str8_lit_comp(""), str8_lit_comp("Address Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_VirtualAddr, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_VirtualAddr, DF_IconKind_CircleFilled, {0, 0}}, -{ str8_lit_comp("function_breakpoint"), str8_lit_comp("Places or removes a breakpoint on the first address(es) of the specified function."), str8_lit_comp(""), str8_lit_comp("Function Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_String, DF_IconKind_CircleFilled, {0, 0}}, -{ str8_lit_comp("toggle_breakpoint_cursor"), str8_lit_comp("Places or removes a breakpoint on the line on which the active cursor sits."), str8_lit_comp(""), str8_lit_comp("Toggle Breakpoint At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_CircleFilled, {0, 0}}, -{ str8_lit_comp("remove_breakpoint"), str8_lit_comp("Removes an existing breakpoint."), str8_lit_comp(""), str8_lit_comp("Remove Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Trash, {DF_EntityKind_Breakpoint, 0}}, -{ str8_lit_comp("enable_breakpoint"), str8_lit_comp("Enables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Enable Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_CheckFilled, {DF_EntityKind_Breakpoint, 0}}, -{ str8_lit_comp("disable_breakpoint"), str8_lit_comp("Disables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Disable Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_CheckHollow, {DF_EntityKind_Breakpoint, 0}}, -{ str8_lit_comp("toggle_watch_pin"), str8_lit_comp("Places or removes a watch pin on a textual location on a particular entity."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_TextPoint, DF_CmdParamSlot_String}, DF_CmdQueryRule_String, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("toggle_watch_pin_at_cursor"), str8_lit_comp("Places or removes a watch pin at the cursor on the currently active file."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*1), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_String, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("add_target"), str8_lit_comp("Adds a new target."), str8_lit_comp("application,executable,debug"), str8_lit_comp("Add Target"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePath, DF_IconKind_Target, {0, 0}}, -{ str8_lit_comp("remove_target"), str8_lit_comp("Removes an existing target."), str8_lit_comp("delete,remove,target"), str8_lit_comp("Remove Target"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Trash, {DF_EntityKind_Target, 0}}, -{ str8_lit_comp("edit_target"), str8_lit_comp("Edits an existing target."), str8_lit_comp(""), str8_lit_comp("Edit Target"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Pencil, {DF_EntityKind_Target, 0}}, -{ str8_lit_comp("retry_ended_process"), str8_lit_comp("Launches a new process with the same options as the passed ended process."), str8_lit_comp(""), str8_lit_comp("Retry Ended Process"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Entity, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Entity, DF_IconKind_Null, {DF_EntityKind_EndedProcess, 0}}, -{ 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"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_String, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_String, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("register_as_jit_debugger"), str8_lit_comp("Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."), str8_lit_comp(""), str8_lit_comp("Register As Just-In-Time (JIT) Debugger"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("entity_ref_fast_path"), str8_lit_comp("Activates the default behavior when clicking an entity reference."), str8_lit_comp(""), str8_lit_comp("Entity Reference Fast Path"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("spawn_entity_view"), str8_lit_comp("Spawns a new view, given an entity and other parameterizations."), str8_lit_comp(""), str8_lit_comp("Spawn Entity View"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("find_code_location"), str8_lit_comp("Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."), str8_lit_comp(""), str8_lit_comp("Find Code Location"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_TextPoint, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePathAndTextPoint, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("commands"), str8_lit_comp("Opens the list of all commands."), str8_lit_comp(""), str8_lit_comp("Commands"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_String, DF_IconKind_List, {0, 0}}, -{ str8_lit_comp("target_editor"), str8_lit_comp("Opens the editor for a target."), str8_lit_comp(""), str8_lit_comp("Target"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Target, {0, 0}}, -{ str8_lit_comp("targets"), str8_lit_comp("Opens the list of all targets."), str8_lit_comp(""), str8_lit_comp("Targets"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Target, {0, 0}}, -{ str8_lit_comp("file_path_map"), str8_lit_comp("Opens the file path mapping editor."), str8_lit_comp(""), str8_lit_comp("File Path Map"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("scheduler"), str8_lit_comp("Opens the scheduler view, for process and thread controls."), str8_lit_comp(""), str8_lit_comp("Scheduler"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Scheduler, {0, 0}}, -{ str8_lit_comp("call_stack"), str8_lit_comp("Opens the call stack view."), str8_lit_comp("callstack,thread"), str8_lit_comp("Call Stack"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Thread, {0, 0}}, -{ str8_lit_comp("modules"), str8_lit_comp("Opens the modules view."), str8_lit_comp(""), str8_lit_comp("Modules"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Module, {0, 0}}, -{ str8_lit_comp("pending_entity"), str8_lit_comp("Opens a view which waits for the passed entity to be completely loaded, then replaces itself with a new view."), str8_lit_comp(""), str8_lit_comp("Pending Entity"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("code"), str8_lit_comp("Opens the code view for an already-loaded file."), str8_lit_comp(""), str8_lit_comp("Code"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("watch"), str8_lit_comp("Opens a watch view."), str8_lit_comp(""), str8_lit_comp("Watch"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("locals"), str8_lit_comp("Opens a locals view."), str8_lit_comp(""), str8_lit_comp("Locals"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("registers"), str8_lit_comp("Opens a registers view for the currently selected thread."), str8_lit_comp(""), str8_lit_comp("Registers"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Binoculars, {0, 0}}, -{ str8_lit_comp("output"), str8_lit_comp("Opens an output view."), str8_lit_comp(""), str8_lit_comp("Output"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_List, {0, 0}}, -{ str8_lit_comp("memory"), str8_lit_comp("Opens a memory view."), str8_lit_comp(""), str8_lit_comp("Memory"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Grid, {0, 0}}, -{ str8_lit_comp("disassembly"), str8_lit_comp("Opens the disassembly view."), str8_lit_comp("disasm"), str8_lit_comp("Disassembly"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Glasses, {0, 0}}, -{ str8_lit_comp("breakpoints"), str8_lit_comp("Opens the breakpoints view."), str8_lit_comp(""), str8_lit_comp("Breakpoints"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_CircleFilled, {0, 0}}, -{ str8_lit_comp("watch_pins"), str8_lit_comp("Opens the watch pins view."), str8_lit_comp(""), str8_lit_comp("Watch Pins"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Pin, {0, 0}}, -{ str8_lit_comp("exception_filters"), str8_lit_comp("Opens the exception filters view."), str8_lit_comp("exceptions,filters"), str8_lit_comp("Exception Filters"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Gear, {0, 0}}, -{ str8_lit_comp("theme"), str8_lit_comp("Opens the theme view."), str8_lit_comp("theme,color,scheme,palette"), str8_lit_comp("Theme"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Palette, {0, 0}}, -{ str8_lit_comp("pick_file"), str8_lit_comp("Opens the file browser to pick a file."), str8_lit_comp(""), str8_lit_comp("Pick File"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*1) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_FilePath, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_FilePath, DF_IconKind_FileOutline, {0, 0}}, -{ str8_lit_comp("complete_view"), str8_lit_comp("Completes a view, passing all parameters to a new command matching the passed command spec."), str8_lit_comp(""), str8_lit_comp("Complete View"), (DF_CmdSpecFlag_OmitFromLists*1) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, -{ str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp("Toggle Developer Menu"), (DF_CmdSpecFlag_OmitFromLists*0) | (DF_CmdSpecFlag_RunKeepsQuery*0) | (DF_CmdSpecFlag_QueryUsesOldInput*0) | (DF_CmdSpecFlag_OldInputSelect*0) | (DF_CmdSpecFlag_AppliesToView*0) | (DF_CmdSpecFlag_QueryIsCode*0), {DF_CmdParamSlot_Null, DF_CmdParamSlot_Null, DF_CmdParamSlot_Null}, DF_CmdQueryRule_Null, DF_IconKind_Null, {0, 0}}, +{ str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_X}, +{ 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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_CmdSpec, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("error"), str8_lit_comp("Notifies of an error."), str8_lit_comp(""), str8_lit_comp("Error"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ 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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_EntityList, DF_EntityKind_Target, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Play}, +{ str8_lit_comp("launch_and_init"), str8_lit_comp("Starts debugging a new instance of a target, then stops at the program's entry point."), str8_lit_comp("launch,start,entry,point"), str8_lit_comp("Launch and Initialize"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_EntityList, DF_EntityKind_Target, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_PlayStepForward}, +{ str8_lit_comp("kill"), str8_lit_comp("Kills the specified existing debugged process(es)."), str8_lit_comp("stop,kill"), str8_lit_comp("Kill"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_EntityList, DF_EntityKind_Process, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Stop}, +{ str8_lit_comp("kill_all"), str8_lit_comp("Kills all debugged child processes."), str8_lit_comp("stop,kill,all"), str8_lit_comp("Kill All"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Stop}, +{ str8_lit_comp("detach"), str8_lit_comp("Detaches the specified debugged process."), str8_lit_comp("detach"), str8_lit_comp("Detach"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_EntityList, DF_EntityKind_Process, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("continue"), str8_lit_comp("Continues all halted threads."), str8_lit_comp(""), str8_lit_comp("Continue"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Play}, +{ str8_lit_comp("step_into_inst"), str8_lit_comp("Performs a step that goes into calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp("Step Into (Assembly)"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepInto}, +{ str8_lit_comp("step_over_inst"), str8_lit_comp("Performs a step that skips calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp("Step Over (Assembly)"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepOver}, +{ str8_lit_comp("step_into_line"), str8_lit_comp("Performs a step that goes into calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp("Step Into (Line)"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepInto}, +{ str8_lit_comp("step_over_line"), str8_lit_comp("Performs a step that skips calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp("Step Over (Line)"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepOver}, +{ str8_lit_comp("step_out"), str8_lit_comp("Runs to the end of the current function and exits it."), str8_lit_comp(""), str8_lit_comp("Step Out"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepOut}, +{ str8_lit_comp("run_to_address"), str8_lit_comp("Runs the selected thread to the specified address."), str8_lit_comp(""), str8_lit_comp("Run To Address"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_VirtualAddr, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_PlayStepForward}, +{ str8_lit_comp("halt"), str8_lit_comp("Halts all running processes."), str8_lit_comp("pause"), str8_lit_comp("Halt"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Pause}, +{ str8_lit_comp("soft_halt_refresh"), str8_lit_comp("Interrupts all running processes to collect data, and then resumes them."), str8_lit_comp(""), str8_lit_comp("Soft Halt Refresh"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Refresh}, +{ str8_lit_comp("set_thread_ip"), str8_lit_comp("Sets the passed thread's instruction pointer at the passed address."), str8_lit_comp(""), str8_lit_comp("Set Thread IP"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_VirtualAddr, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("run"), str8_lit_comp("Runs all targets after starting them if they have not been started yet."), str8_lit_comp("play"), str8_lit_comp("Run"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Play}, +{ str8_lit_comp("restart"), str8_lit_comp("Kills all running processes, then restarts the targets which were used to launch all current processes (if any)."), str8_lit_comp("restart,retry"), str8_lit_comp("Restart"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Redo}, +{ str8_lit_comp("step_into"), str8_lit_comp("Steps once, possibly into function calls, for either line or instructions."), str8_lit_comp(""), str8_lit_comp("Step Into"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepInto}, +{ str8_lit_comp("step_over"), str8_lit_comp("Steps once, always over function calls, for either line or instructions."), str8_lit_comp(""), str8_lit_comp("Step Over"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_StepOver}, +{ str8_lit_comp("run_to_cursor"), str8_lit_comp("Runs the selected thread to the current cursor."), str8_lit_comp(""), str8_lit_comp("Run To Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Play}, +{ str8_lit_comp("set_next_statement"), str8_lit_comp("Sets the selected thread's instruction pointer to the cursor's position."), str8_lit_comp(""), str8_lit_comp("Set Next Statement"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_RightArrow}, +{ str8_lit_comp("enable_solo_stepping_mode"), str8_lit_comp("Enables 'solo stepping mode', which suspends all non-selected threads before stepping."), str8_lit_comp("solo,stepping,mode,suspend"), str8_lit_comp("Enable Solo Stepping Mode"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Thread}, +{ str8_lit_comp("disable_solo_stepping_mode"), str8_lit_comp("Disables 'solo stepping mode', which suspends all non-selected threads before stepping."), str8_lit_comp("solo,stepping,mode,suspend"), str8_lit_comp("Disable Solo Stepping Mode"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Thread}, +{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp("Select Thread"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Thread, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("select_thread_window"), str8_lit_comp("Selects a thread for the active window, overriding the global selected thread."), str8_lit_comp(""), str8_lit_comp("Select Thread On Window"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Thread, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("select_thread_view"), str8_lit_comp("Selects a thread for the active view, overriding the global and per-window selected threads."), str8_lit_comp(""), str8_lit_comp("Select Thread On View"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Thread, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp("Select Unwind"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the callstack frame above the currently selected."), str8_lit_comp(""), str8_lit_comp("Up One Frame"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_UpArrow}, +{ str8_lit_comp("down_one_frame"), str8_lit_comp("Selects the callstack frame below the currently selected."), str8_lit_comp(""), str8_lit_comp("Down One Frame"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_DownArrow}, +{ str8_lit_comp("freeze_thread"), str8_lit_comp("Freezes the passed thread."), str8_lit_comp(""), str8_lit_comp("Freeze Thread"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Thread, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Locked}, +{ str8_lit_comp("thaw_thread"), str8_lit_comp("Thaws the passed thread."), str8_lit_comp(""), str8_lit_comp("Thaw Thread"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Thread, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Unlocked}, +{ str8_lit_comp("freeze_process"), str8_lit_comp("Freezes the passed process."), str8_lit_comp(""), str8_lit_comp("Freeze Process"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Process, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Locked}, +{ str8_lit_comp("thaw_process"), str8_lit_comp("Thaws the passed process."), str8_lit_comp(""), str8_lit_comp("Thaw Process"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Process, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Unlocked}, +{ str8_lit_comp("freeze_machine"), str8_lit_comp("Freezes the passed machine."), str8_lit_comp(""), str8_lit_comp("Freeze Machine"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Entity, DF_EntityKind_Machine, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Locked}, +{ str8_lit_comp("thaw_machine"), str8_lit_comp("Thaws the passed machine."), str8_lit_comp(""), str8_lit_comp("Thaw Machine"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Entity, DF_EntityKind_Machine, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Unlocked}, +{ str8_lit_comp("freeze_local_machine"), str8_lit_comp("Freezes the local machine."), str8_lit_comp(""), str8_lit_comp("Freeze Local Machine"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Machine}, +{ str8_lit_comp("thaw_local_machine"), str8_lit_comp("Thaws the local machine."), str8_lit_comp(""), str8_lit_comp("Thaw Local Machine"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Machine}, +{ str8_lit_comp("inc_ui_font_scale"), str8_lit_comp("Increases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Increase UI Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("dec_ui_font_scale"), str8_lit_comp("Decreases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Decrease UI Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("inc_code_font_scale"), str8_lit_comp("Increases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Increase Code Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("dec_code_font_scale"), str8_lit_comp("Decreases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Decrease Code Font Scale"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("open_window"), str8_lit_comp("Opens a new window."), str8_lit_comp(""), str8_lit_comp("Open New Window"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Window}, +{ str8_lit_comp("close_window"), str8_lit_comp("Closes an opened window."), str8_lit_comp(""), str8_lit_comp("Close Window"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Window}, +{ str8_lit_comp("toggle_fullscreen"), str8_lit_comp("Toggles fullscreen view on the active window."), str8_lit_comp(""), str8_lit_comp("Toggle Fullscreen"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Window}, +{ str8_lit_comp("confirm_accept"), str8_lit_comp("Accepts the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Accept"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("confirm_cancel"), str8_lit_comp("Cancels the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Cancel"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("reset_to_default_panels"), str8_lit_comp("Resets the window to the default panel layout."), str8_lit_comp("panel"), str8_lit_comp("Reset To Default Panel Layout"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Window}, +{ str8_lit_comp("new_panel_right"), str8_lit_comp("Creates a new panel to the right of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Vertically"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_XSplit}, +{ str8_lit_comp("new_panel_down"), str8_lit_comp("Creates a new panel at the bottom of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Horizontally"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_YSplit}, +{ str8_lit_comp("rotate_panel_columns"), str8_lit_comp("Rotates all panels at the closest column level of the panel hierarchy."), str8_lit_comp(""), str8_lit_comp("Rotate Panel Columns"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("next_panel"), str8_lit_comp("Cycles the active panel forward."), str8_lit_comp(""), str8_lit_comp("Focus Next Panel"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_RightArrow}, +{ str8_lit_comp("prev_panel"), str8_lit_comp("Cycles the active panel backwards."), str8_lit_comp(""), str8_lit_comp("Focus Previous Panel"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_LeftArrow}, +{ str8_lit_comp("focus_panel"), str8_lit_comp("Focuses a new panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("focus_panel_right"), str8_lit_comp("Focuses a panel rightward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Right"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_RightArrow}, +{ str8_lit_comp("focus_panel_left"), str8_lit_comp("Focuses a panel leftward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Left"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_LeftArrow}, +{ str8_lit_comp("focus_panel_up"), str8_lit_comp("Focuses a panel upward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Up"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_UpArrow}, +{ str8_lit_comp("focus_panel_down"), str8_lit_comp("Focuses a panel downward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Down"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_DownArrow}, +{ str8_lit_comp("undo"), str8_lit_comp("Undoes the previous action."), str8_lit_comp(""), str8_lit_comp("Undo"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Undo}, +{ str8_lit_comp("redo"), str8_lit_comp("Redoes the first previously undone action."), str8_lit_comp(""), str8_lit_comp("Redo"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Redo}, +{ str8_lit_comp("go_back"), str8_lit_comp("Returns to the previously selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Back"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_LeftArrow}, +{ str8_lit_comp("go_forward"), str8_lit_comp("Returns to the next selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Forward"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_RightArrow}, +{ str8_lit_comp("close_panel"), str8_lit_comp("Closes the currently active panel."), str8_lit_comp(""), str8_lit_comp("Close Panel"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_ClosePanel}, +{ str8_lit_comp("next_tab"), str8_lit_comp("Focuses the next tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Next Tab"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_RightArrow}, +{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Previous Tab"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_LeftArrow}, +{ 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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_RightArrow}, +{ 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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_LeftArrow}, +{ 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"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("Close Tab"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_X}, +{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), str8_lit_comp(""), str8_lit_comp("Move Tab"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_UpArrow}, +{ 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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_DownArrow}, +{ str8_lit_comp("set_current_path"), str8_lit_comp("Sets the debugger's current path, which is used as a starting point when browsing for files."), str8_lit_comp(""), str8_lit_comp("Set Current Path"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("open"), str8_lit_comp("Opens a file."), str8_lit_comp("code,source,file"), str8_lit_comp("Open"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_FilePath, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("reload"), str8_lit_comp("Reloads a loaded file."), str8_lit_comp("code,source,file,reload"), str8_lit_comp("Reload"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_File, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("reload_active"), str8_lit_comp("Reloads the active file."), str8_lit_comp("code,source,file,reload"), str8_lit_comp("Reload Active File"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("switch"), str8_lit_comp("Switches to a loaded file."), str8_lit_comp("code,source,file"), str8_lit_comp("Switch"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_File, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("set_file_override_link_src"), str8_lit_comp("Sets the source path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Source"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("set_file_override_link_dst"), str8_lit_comp("Sets the destination path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Destination"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("set_file_replacement_path"), str8_lit_comp("Sets the path which should be used as the replacement for the passed file."), str8_lit_comp(""), str8_lit_comp("Set File Replacement Path"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("load_user"), str8_lit_comp("Loads and applies a user file."), str8_lit_comp("load,user,profile,layout"), str8_lit_comp("Load User"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_FilePath, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Person}, +{ str8_lit_comp("load_profile"), str8_lit_comp("Loads and applies a profile file."), str8_lit_comp("profile,project,session"), str8_lit_comp("Load Profile"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_FilePath, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Briefcase}, +{ str8_lit_comp("apply_user_data"), str8_lit_comp("Applies user data from the active user file."), str8_lit_comp(""), str8_lit_comp("Apply User Data"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("apply_profile_data"), str8_lit_comp("Applies profile data from the active profile file."), str8_lit_comp(""), str8_lit_comp("Apply Profile Data"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("write_user_data"), str8_lit_comp("Writes user data to the active user file."), str8_lit_comp(""), str8_lit_comp("Write User Data"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("write_profile_data"), str8_lit_comp("Writes profile data to the active profile file."), str8_lit_comp(""), str8_lit_comp("Write Profile Data"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_left"), str8_lit_comp("Moves the cursor or selection left."), str8_lit_comp(""), str8_lit_comp("Move Left"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_right"), str8_lit_comp("Moves the cursor or selection right."), str8_lit_comp(""), str8_lit_comp("Move Right"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up"), str8_lit_comp("Moves the cursor or selection up."), str8_lit_comp(""), str8_lit_comp("Move Up"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down"), str8_lit_comp("Moves the cursor or selection down."), str8_lit_comp(""), str8_lit_comp("Move Down"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_left_select"), str8_lit_comp("Moves the cursor or selection left, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_right_select"), str8_lit_comp("Moves the cursor or selection right, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_select"), str8_lit_comp("Moves the cursor or selection up, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_select"), str8_lit_comp("Moves the cursor or selection down, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_left_chunk"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_right_chunk"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_chunk"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_chunk"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_page"), str8_lit_comp("Moves the cursor or selection up one page."), str8_lit_comp(""), str8_lit_comp("Move Up Page"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_page"), str8_lit_comp("Moves the cursor or selection down one page."), str8_lit_comp(""), str8_lit_comp("Move Down Page"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_whole"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Up Whole"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_whole"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Down Whole"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_left_chunk_select"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_right_chunk_select"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_chunk_select"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_chunk_select"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_page_select"), str8_lit_comp("Moves the cursor or selection up one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Page Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_page_select"), str8_lit_comp("Moves the cursor or selection down one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Page Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_up_whole_select"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Whole Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_down_whole_select"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Whole Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_home"), str8_lit_comp("Moves the cursor to the beginning of the line."), str8_lit_comp(""), str8_lit_comp("Move Home"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_end"), str8_lit_comp("Moves the cursor to the end of the line."), str8_lit_comp(""), str8_lit_comp("Move End"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_home_select"), str8_lit_comp("Moves the cursor to the beginning of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Home Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("move_end_select"), str8_lit_comp("Moves the cursor to the end of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move End Select"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("select_all"), str8_lit_comp("Selects everything possible."), str8_lit_comp(""), str8_lit_comp("Select All"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("delete_single"), str8_lit_comp("Deletes a single element to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Single"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("delete_chunk"), str8_lit_comp("Deletes a chunk to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Chunk"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("backspace_single"), str8_lit_comp("Deletes a single element to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Single"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("backspace_chunk"), str8_lit_comp("Deletes a chunk to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Chunk"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("copy"), str8_lit_comp("Copies the active selection to the clipboard."), str8_lit_comp(""), str8_lit_comp("Copy"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Clipboard}, +{ str8_lit_comp("cut"), str8_lit_comp("Copies the active selection to the clipboard, then deletes it."), str8_lit_comp(""), str8_lit_comp("Cut"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Clipboard}, +{ str8_lit_comp("paste"), str8_lit_comp("Pastes the current contents of the clipboard."), str8_lit_comp(""), str8_lit_comp("Paste"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Clipboard}, +{ str8_lit_comp("insert_text"), str8_lit_comp("Inserts the text that was used to cause this command."), str8_lit_comp(""), str8_lit_comp("Insert Text"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("goto_line"), str8_lit_comp("Jumps to a line number in the current code file."), str8_lit_comp(""), str8_lit_comp("Go To Line"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_TextPoint, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("goto_address"), str8_lit_comp("Jumps to an address in the current memory or disassembly view."), str8_lit_comp(""), str8_lit_comp("Go To Address"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_VirtualAddr, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("center_cursor"), str8_lit_comp("Snaps the current code view to center the cursor."), str8_lit_comp(""), str8_lit_comp("Center Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("contain_cursor"), str8_lit_comp("Snaps the current code view to contain the cursor."), str8_lit_comp(""), str8_lit_comp("Contain Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("find_text_forward"), str8_lit_comp("Searches the current code file forward (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Forward)"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_String, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*1)|(DF_CmdQueryFlag_SelectOldInput*1)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Find}, +{ str8_lit_comp("find_text_backward"), str8_lit_comp("Searches the current code file backwards (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Backwards)"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_String, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*1)|(DF_CmdQueryFlag_SelectOldInput*1)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Find}, +{ str8_lit_comp("find_next"), str8_lit_comp("Searches the current code file forward (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Next"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*1)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Find}, +{ str8_lit_comp("find_prev"), str8_lit_comp("Searches the current code file backwards (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Previous"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*1)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Find}, +{ str8_lit_comp("find_thread"), str8_lit_comp("Jumps to the passed thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Thread"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Thread, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Find}, +{ str8_lit_comp("find_selected_thread"), str8_lit_comp("Jumps to the selected thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Selected Thread"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Find}, +{ str8_lit_comp("goto_name"), str8_lit_comp("Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_String, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("goto_name_at_cursor"), str8_lit_comp("Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("toggle_watch_expr"), str8_lit_comp("Adds or removes an expression to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("toggle_watch_expr_at_cursor"), str8_lit_comp("Adds or removes the expression that the cursor or selection is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("set_columns"), str8_lit_comp("Sets the number of columns for a memory view."), str8_lit_comp(""), str8_lit_comp("Set Columns"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Index, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Thumbnails}, +{ str8_lit_comp("toggle_address_visibility"), str8_lit_comp("Toggles the visibility of addresses in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Address Visibility"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Thumbnails}, +{ str8_lit_comp("toggle_code_bytes_visibility"), str8_lit_comp("Toggles the visibility of machine code bytes in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Code Bytes Visibility"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Thumbnails}, +{ str8_lit_comp("enable_entity"), str8_lit_comp("Enables an entity."), str8_lit_comp(""), str8_lit_comp("Enable Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("disable_entity"), str8_lit_comp("Disables an entity."), str8_lit_comp(""), str8_lit_comp("Disable Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp("Freeze Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp("Thaw Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("remove_entity"), str8_lit_comp("Removes an entity."), str8_lit_comp(""), str8_lit_comp("Remove Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("name_entity"), str8_lit_comp("Equips an entity with a name."), str8_lit_comp(""), str8_lit_comp("Name Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("edit_entity"), str8_lit_comp("Opens the editor for an entity."), str8_lit_comp(""), str8_lit_comp("Edit Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("duplicate_entity"), str8_lit_comp("Duplicates an entity."), str8_lit_comp(""), str8_lit_comp("Duplicate Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("text_breakpoint"), str8_lit_comp("Places or removes a breakpoint on the specified line of source code."), str8_lit_comp(""), str8_lit_comp("Text Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_CircleFilled}, +{ str8_lit_comp("address_breakpoint"), str8_lit_comp("Places or removes a breakpoint on the specified address."), str8_lit_comp(""), str8_lit_comp("Address Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_VirtualAddr, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_CircleFilled}, +{ str8_lit_comp("function_breakpoint"), str8_lit_comp("Places or removes a breakpoint on the first address(es) of the specified function."), str8_lit_comp(""), str8_lit_comp("Function Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_String, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_CircleFilled}, +{ str8_lit_comp("toggle_breakpoint_cursor"), str8_lit_comp("Places or removes a breakpoint on the line on which the active cursor sits."), str8_lit_comp(""), str8_lit_comp("Toggle Breakpoint At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_CircleFilled}, +{ str8_lit_comp("remove_breakpoint"), str8_lit_comp("Removes an existing breakpoint."), str8_lit_comp(""), str8_lit_comp("Remove Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Breakpoint, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Trash}, +{ str8_lit_comp("enable_breakpoint"), str8_lit_comp("Enables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Enable Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Breakpoint, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_CheckFilled}, +{ str8_lit_comp("disable_breakpoint"), str8_lit_comp("Disables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Disable Breakpoint"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Breakpoint, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_CheckHollow}, +{ str8_lit_comp("toggle_watch_pin"), str8_lit_comp("Places or removes a watch pin on a textual location on a particular entity."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("toggle_watch_pin_at_cursor"), str8_lit_comp("Places or removes a watch pin at the cursor on the currently active file."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin At Cursor"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_String, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("add_target"), str8_lit_comp("Adds a new target."), str8_lit_comp("application,executable,debug"), str8_lit_comp("Add Target"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_FilePath, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Target}, +{ str8_lit_comp("remove_target"), str8_lit_comp("Removes an existing target."), str8_lit_comp("delete,remove,target"), str8_lit_comp("Remove Target"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Target, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Trash}, +{ str8_lit_comp("edit_target"), str8_lit_comp("Edits an existing target."), str8_lit_comp(""), str8_lit_comp("Edit Target"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Entity, DF_EntityKind_Target, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Pencil}, +{ str8_lit_comp("retry_ended_process"), str8_lit_comp("Launches a new process with the same options as the passed ended process."), str8_lit_comp(""), str8_lit_comp("Retry Ended Process"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Entity, DF_EntityKind_Process, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_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"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_ID, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*1)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_Null}, +{ str8_lit_comp("register_as_jit_debugger"), str8_lit_comp("Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."), str8_lit_comp(""), str8_lit_comp("Register As Just-In-Time (JIT) Debugger"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("entity_ref_fast_path"), str8_lit_comp("Activates the default behavior when clicking an entity reference."), str8_lit_comp(""), str8_lit_comp("Entity Reference Fast Path"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("spawn_entity_view"), str8_lit_comp("Spawns a new view, given an entity and other parameterizations."), str8_lit_comp(""), str8_lit_comp("Spawn Entity View"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("find_code_location"), str8_lit_comp("Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."), str8_lit_comp(""), str8_lit_comp("Find Code Location"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_FilePath, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*1)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("commands"), str8_lit_comp("Opens the list of all commands."), str8_lit_comp(""), str8_lit_comp("Commands"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_List}, +{ str8_lit_comp("target"), str8_lit_comp("Opens the editor for a target."), str8_lit_comp(""), str8_lit_comp("Target"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Target}, +{ str8_lit_comp("targets"), str8_lit_comp("Opens the list of all targets."), str8_lit_comp(""), str8_lit_comp("Targets"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Target}, +{ str8_lit_comp("file_path_map"), str8_lit_comp("Opens the file path mapping editor."), str8_lit_comp(""), str8_lit_comp("File Path Map"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("scheduler"), str8_lit_comp("Opens the scheduler view, for process and thread controls."), str8_lit_comp(""), str8_lit_comp("Scheduler"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Scheduler}, +{ str8_lit_comp("call_stack"), str8_lit_comp("Opens the call stack view."), str8_lit_comp("callstack,thread"), str8_lit_comp("Call Stack"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Thread}, +{ str8_lit_comp("modules"), str8_lit_comp("Opens the modules view."), str8_lit_comp(""), str8_lit_comp("Modules"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Module}, +{ str8_lit_comp("pending_entity"), str8_lit_comp("Opens a view which waits for the passed entity to be completely loaded, then replaces itself with a new view."), str8_lit_comp(""), str8_lit_comp("Pending Entity"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("code"), str8_lit_comp("Opens the code view for an already-loaded file."), str8_lit_comp(""), str8_lit_comp("Code"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("watch"), str8_lit_comp("Opens a watch view."), str8_lit_comp(""), str8_lit_comp("Watch"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("locals"), str8_lit_comp("Opens a locals view."), str8_lit_comp(""), str8_lit_comp("Locals"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("registers"), str8_lit_comp("Opens a registers view for the currently selected thread."), str8_lit_comp(""), str8_lit_comp("Registers"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Binoculars}, +{ str8_lit_comp("output"), str8_lit_comp("Opens an output view."), str8_lit_comp(""), str8_lit_comp("Output"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_List}, +{ str8_lit_comp("memory"), str8_lit_comp("Opens a memory view."), str8_lit_comp(""), str8_lit_comp("Memory"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Grid}, +{ str8_lit_comp("disassembly"), str8_lit_comp("Opens the disassembly view."), str8_lit_comp("disasm"), str8_lit_comp("Disassembly"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Glasses}, +{ str8_lit_comp("breakpoints"), str8_lit_comp("Opens the breakpoints view."), str8_lit_comp(""), str8_lit_comp("Breakpoints"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_CircleFilled}, +{ str8_lit_comp("watch_pins"), str8_lit_comp("Opens the watch pins view."), str8_lit_comp(""), str8_lit_comp("Watch Pins"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Pin}, +{ str8_lit_comp("exception_filters"), str8_lit_comp("Opens the exception filters view."), str8_lit_comp("exceptions,filters"), str8_lit_comp("Exception Filters"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Gear}, +{ str8_lit_comp("theme"), str8_lit_comp("Opens the theme view."), str8_lit_comp("theme,color,scheme,palette"), str8_lit_comp("Theme"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Palette}, +{ str8_lit_comp("pick_file"), str8_lit_comp("Opens the file browser to pick a file."), str8_lit_comp(""), str8_lit_comp("Pick File"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_FilePath, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_FileOutline}, +{ str8_lit_comp("complete_query"), str8_lit_comp("Completes a query."), str8_lit_comp(""), str8_lit_comp("Complete Query"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("cancel_query"), str8_lit_comp("Cancels a query."), str8_lit_comp(""), str8_lit_comp("Cancel Query"), (DF_CmdSpecFlag_OmitFromLists*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, +{ str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp("Toggle Developer Menu"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_FoldersOnly*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, }; DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[] = diff --git a/src/df/core/generated/df_core.meta.h b/src/df/core/generated/df_core.meta.h index c8cfd51c..a9b52687 100644 --- a/src/df/core/generated/df_core.meta.h +++ b/src/df/core/generated/df_core.meta.h @@ -57,7 +57,7 @@ typedef enum DF_CoreCmdKind { DF_CoreCmdKind_Null, DF_CoreCmdKind_Exit, -DF_CoreCmdKind_CommandFastPath, +DF_CoreCmdKind_RunCommand, DF_CoreCmdKind_Error, DF_CoreCmdKind_LaunchAndRun, DF_CoreCmdKind_LaunchAndInit, @@ -71,7 +71,6 @@ DF_CoreCmdKind_StepIntoLine, DF_CoreCmdKind_StepOverLine, DF_CoreCmdKind_StepOut, DF_CoreCmdKind_RunToAddress, -DF_CoreCmdKind_RunToModuleOffset, DF_CoreCmdKind_Halt, DF_CoreCmdKind_SoftHaltRefresh, DF_CoreCmdKind_SetThreadIP, @@ -126,14 +125,11 @@ DF_CoreCmdKind_NextTab, DF_CoreCmdKind_PrevTab, DF_CoreCmdKind_MoveTabRight, DF_CoreCmdKind_MoveTabLeft, +DF_CoreCmdKind_OpenTab, DF_CoreCmdKind_CloseTab, DF_CoreCmdKind_MoveTab, DF_CoreCmdKind_TabBarTop, DF_CoreCmdKind_TabBarBottom, -DF_CoreCmdKind_TabBarEnable, -DF_CoreCmdKind_TabBarDisable, -DF_CoreCmdKind_TabBarHistoryModeEnable, -DF_CoreCmdKind_TabBarHistoryModeDisable, DF_CoreCmdKind_SetCurrentPath, DF_CoreCmdKind_Open, DF_CoreCmdKind_Reload, @@ -199,9 +195,6 @@ DF_CoreCmdKind_GoToName, DF_CoreCmdKind_GoToNameAtCursor, DF_CoreCmdKind_ToggleWatchExpression, DF_CoreCmdKind_ToggleWatchExpressionAtCursor, -DF_CoreCmdKind_OpenFileMemory, -DF_CoreCmdKind_OpenProcessMemory, -DF_CoreCmdKind_OpenSelectedProcessMemory, DF_CoreCmdKind_SetColumns, DF_CoreCmdKind_ToggleAddressVisibility, DF_CoreCmdKind_ToggleCodeBytesVisibility, @@ -251,7 +244,8 @@ DF_CoreCmdKind_WatchPins, DF_CoreCmdKind_ExceptionFilters, DF_CoreCmdKind_Theme, DF_CoreCmdKind_PickFile, -DF_CoreCmdKind_ViewReturn, +DF_CoreCmdKind_CompleteQuery, +DF_CoreCmdKind_CancelQuery, DF_CoreCmdKind_ToggleDevMenu, DF_CoreCmdKind_COUNT } DF_CoreCmdKind; @@ -365,6 +359,7 @@ DF_CmdParamSlot_String, DF_CmdParamSlot_FilePath, DF_CmdParamSlot_TextPoint, DF_CmdParamSlot_CmdSpec, +DF_CmdParamSlot_ViewSpec, DF_CmdParamSlot_VirtualAddr, DF_CmdParamSlot_VirtualOff, DF_CmdParamSlot_Index, @@ -374,22 +369,6 @@ DF_CmdParamSlot_ForceConfirm, DF_CmdParamSlot_COUNT } DF_CmdParamSlot; -typedef enum DF_CmdQueryRule -{ -DF_CmdQueryRule_Null, -DF_CmdQueryRule_Entity, -DF_CmdQueryRule_String, -DF_CmdQueryRule_SearchString, -DF_CmdQueryRule_FilePath, -DF_CmdQueryRule_TextPoint, -DF_CmdQueryRule_FilePathAndTextPoint, -DF_CmdQueryRule_VirtualAddr, -DF_CmdQueryRule_VirtualOff, -DF_CmdQueryRule_Index, -DF_CmdQueryRule_ID, -DF_CmdQueryRule_COUNT -} DF_CmdQueryRule; - typedef struct DF_CmdParams DF_CmdParams; struct DF_CmdParams { @@ -405,6 +384,7 @@ String8 string; String8 file_path; TxtPt text_point; struct DF_CmdSpec * cmd_spec; +struct DF_ViewSpec * view_spec; U64 vaddr; U64 voff; U64 index; @@ -1519,19 +1499,27 @@ struct {B32 *value_ptr; String8 name;} DEV_toggle_table[] = {&DEV_scratch_mouse_draw, str8_lit_comp("scratch_mouse_draw")}, {&DEV_updating_indicator, str8_lit_comp("updating_indicator")}, }; -String8 df_g_cmd_query_rule_kind_arg_desc_table[] = +Rng1U64 df_g_cmd_param_slot_range_table[] = { -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp("[:column]"), -str8_lit_comp("[:line[:column]]"), -str8_lit_comp("
"), -str8_lit_comp(""), -str8_lit_comp(""), -str8_lit_comp(""), +{0}, +{OffsetOf(DF_CmdParams, window), OffsetOf(DF_CmdParams, window) + sizeof(DF_Handle)}, +{OffsetOf(DF_CmdParams, panel), OffsetOf(DF_CmdParams, panel) + sizeof(DF_Handle)}, +{OffsetOf(DF_CmdParams, dest_panel), OffsetOf(DF_CmdParams, dest_panel) + sizeof(DF_Handle)}, +{OffsetOf(DF_CmdParams, prev_view), OffsetOf(DF_CmdParams, prev_view) + sizeof(DF_Handle)}, +{OffsetOf(DF_CmdParams, view), OffsetOf(DF_CmdParams, view) + sizeof(DF_Handle)}, +{OffsetOf(DF_CmdParams, entity), OffsetOf(DF_CmdParams, entity) + sizeof(DF_Handle)}, +{OffsetOf(DF_CmdParams, entity_list), OffsetOf(DF_CmdParams, entity_list) + sizeof(DF_HandleList)}, +{OffsetOf(DF_CmdParams, string), OffsetOf(DF_CmdParams, string) + sizeof(String8)}, +{OffsetOf(DF_CmdParams, file_path), OffsetOf(DF_CmdParams, file_path) + sizeof(String8)}, +{OffsetOf(DF_CmdParams, text_point), OffsetOf(DF_CmdParams, text_point) + sizeof(TxtPt)}, +{OffsetOf(DF_CmdParams, cmd_spec), OffsetOf(DF_CmdParams, cmd_spec) + sizeof(struct DF_CmdSpec *)}, +{OffsetOf(DF_CmdParams, view_spec), OffsetOf(DF_CmdParams, view_spec) + sizeof(struct DF_ViewSpec *)}, +{OffsetOf(DF_CmdParams, vaddr), OffsetOf(DF_CmdParams, vaddr) + sizeof(U64)}, +{OffsetOf(DF_CmdParams, voff), OffsetOf(DF_CmdParams, voff) + sizeof(U64)}, +{OffsetOf(DF_CmdParams, index), OffsetOf(DF_CmdParams, index) + sizeof(U64)}, +{OffsetOf(DF_CmdParams, id), OffsetOf(DF_CmdParams, id) + sizeof(U64)}, +{OffsetOf(DF_CmdParams, prefer_dasm), OffsetOf(DF_CmdParams, prefer_dasm) + sizeof(B32)}, +{OffsetOf(DF_CmdParams, force_confirm), OffsetOf(DF_CmdParams, force_confirm) + sizeof(B32)}, }; DF_IconKind df_g_entity_kind_icon_kind_table[] = diff --git a/src/df/gfx/df_gfx.c b/src/df/gfx/df_gfx.c index 7967ef18..d04e7f0e 100644 --- a/src/df/gfx/df_gfx.c +++ b/src/df/gfx/df_gfx.c @@ -134,13 +134,20 @@ df_view_from_handle(DF_Handle handle) return result; } -internal DF_View * -df_view_caller_root_from_view(DF_View *view) +//////////////////////////////// +//~ rjf: View Spec Type Functions + +internal DF_GfxViewKind +df_gfx_view_kind_from_string(String8 string) { - DF_View *result = &df_g_nil_view; - for(DF_View *v = view; !df_view_is_nil(v); v = v->caller_view) + DF_GfxViewKind result = DF_GfxViewKind_Null; + for(U64 idx = 0; idx < ArrayCount(df_g_gfx_view_kind_spec_info_table); idx += 1) { - result = v; + if(str8_match(string, df_g_gfx_view_kind_spec_info_table[idx].name, StringMatchFlag_CaseInsensitive)) + { + result = (DF_GfxViewKind)idx; + break; + } } return result; } @@ -321,86 +328,22 @@ df_rect_from_panel(Rng2F32 root_rect, DF_Panel *root, DF_Panel *panel) //- rjf: view ownership insertion/removal internal void -df_panel_history_new_branch(DF_Panel *panel) +df_panel_insert_tab_view(DF_Panel *panel, DF_View *prev_view, DF_View *view) { - if(panel->history_tab_bar_mode) - { - for(DF_View *v = panel->selected_stable_view->next, *next = 0; !df_view_is_nil(v); v = next) - { - next = v->next; - df_panel_remove_stable_view(panel, v); - df_view_release(v); - } - } + DLLInsert_NPZ(&df_g_nil_view, panel->first_tab_view, panel->last_tab_view, prev_view, view, next, prev); + panel->tab_view_count += 1; + panel->selected_tab_view = df_handle_from_view(view); } internal void -df_panel_insert_stable_view(DF_Panel *panel, DF_View *prev_view, DF_View *view) +df_panel_remove_tab_view(DF_Panel *panel, DF_View *view) { - DLLInsert_NPZ(&df_g_nil_view, panel->first_stable_view, panel->last_stable_view, prev_view, view, next, prev); - panel->stable_view_count += 1; - panel->selected_stable_view = view; -} - -internal void -df_panel_remove_stable_view(DF_Panel *panel, DF_View *view) -{ - DLLRemove_NPZ(&df_g_nil_view, panel->first_stable_view, panel->last_stable_view, view, next, prev); - if(panel->selected_stable_view == view) + DLLRemove_NPZ(&df_g_nil_view, panel->first_tab_view, panel->last_tab_view, view, next, prev); + if(df_view_from_handle(panel->selected_tab_view) == view) { - panel->selected_stable_view = !df_view_is_nil(view->prev) ? view->prev : view->next; + panel->selected_tab_view = df_handle_from_view(!df_view_is_nil(view->prev) ? view->prev : view->next); } - panel->stable_view_count -= 1; -} - -internal DF_View * -df_selected_view_stack_from_panel(DF_Panel *panel) -{ - DF_View *view = panel->query_view_stack_top; - if(df_view_is_nil(view)) - { - view = panel->selected_stable_view; - } - return view; -} - -internal DF_View * -df_selected_view_from_panel(DF_Panel *panel) -{ - DF_View *view = df_selected_view_stack_from_panel(panel); - for(DF_View *v = view; !df_view_is_nil(v); v = v->callee_view) - { - view = v; - } - return view; -} - -internal DF_View * -df_query_view_from_panel(DF_Panel *panel) -{ - DF_View *query_view = &df_g_nil_view; - { - if(!df_view_is_nil(panel->query_view_stack_top)) - { - query_view = panel->query_view_stack_top; - for(DF_View *v = query_view; !df_view_is_nil(v); v = v->callee_view) - { - query_view = v; - } - } - else if(!df_view_is_nil(panel->selected_stable_view)) - { - for(DF_View *v = panel->selected_stable_view->callee_view; !df_view_is_nil(v); v = v->callee_view) - { - query_view = v; - } - if(!df_view_is_nil(query_view) && query_view->cmd_spec->info.query_rule == DF_CmdQueryRule_Null) - { - query_view = &df_g_nil_view; - } - } - } - return query_view; + panel->tab_view_count -= 1; } //- rjf: icons & display strings @@ -409,38 +352,33 @@ internal String8 df_display_string_from_view(Arena *arena, DF_CtrlCtx ctrl_ctx, DF_View *view) { String8 result = {0}; + switch(view->spec->info.name_kind) { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd_spec); - DF_NameKind name_kind = view_spec->info.name_kind; - switch(name_kind) + default: + case DF_NameKind_Null: { - default: - case DF_NameKind_Null: + result = view->spec->info.display_string; + }break; + case DF_NameKind_EntityName: + { + Temp scratch = scratch_begin(&arena, 1); + DF_Entity *entity = df_entity_from_handle(view->entity); + String8 display_string = df_display_string_from_entity(scratch.arena, entity); + if(display_string.size != 0) { - result = view_spec->info.display_string; - }break; - case DF_NameKind_EntityName: + result = push_str8_copy(arena, display_string); + } + else if(df_entity_is_nil(entity)) { - Temp scratch = scratch_begin(&arena, 1); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); - String8 display_string = df_display_string_from_entity(scratch.arena, entity); - if(display_string.size != 0) - { - result = push_str8_copy(arena, display_string); - } - else if(df_entity_is_nil(entity)) - { - result = str8_lit("Invalid"); - } - else - { - String8 kind_string = df_g_entity_kind_display_string_table[entity->kind]; - result = push_str8f(arena, "Untitled %S", kind_string); - } - scratch_end(scratch); - }break; - } + result = str8_lit("Invalid"); + } + else + { + String8 kind_string = df_g_entity_kind_display_string_table[entity->kind]; + result = push_str8f(arena, "Untitled %S", kind_string); + } + scratch_end(scratch); + }break; } return result; } @@ -448,9 +386,7 @@ df_display_string_from_view(Arena *arena, DF_CtrlCtx ctrl_ctx, DF_View *view) internal DF_IconKind df_icon_kind_from_view(DF_View *view) { - DF_IconKind result = DF_IconKind_Null; - DF_CmdSpec *spec = view->cmd_spec; - result = spec->info.canonical_icon_kind; + DF_IconKind result = view->spec->info.icon_kind; return result; } @@ -519,7 +455,7 @@ df_cmd_params_from_gfx(void) { p.window = df_handle_from_window(window); p.panel = df_handle_from_panel(window->focused_panel); - p.view = df_handle_from_view(window->focused_panel->selected_stable_view); + p.view = window->focused_panel->selected_tab_view; } return p; } @@ -528,14 +464,14 @@ internal B32 df_prefer_dasm_from_window(DF_Window *window) { DF_Panel *panel = window->focused_panel; - DF_View *view = panel->selected_stable_view; - DF_CoreCmdKind view_cmd_kind = df_core_cmd_kind_from_string(view->cmd_spec->info.string); + DF_View *view = df_view_from_handle(panel->selected_tab_view); + DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name); B32 result = 0; - if(view_cmd_kind == DF_CoreCmdKind_Disassembly) + if(view_kind == DF_GfxViewKind_Disassembly) { result = 1; } - else if(view_cmd_kind == DF_CoreCmdKind_Code) + else if(view_kind == DF_GfxViewKind_Code) { result = 0; } @@ -545,13 +481,13 @@ df_prefer_dasm_from_window(DF_Window *window) B32 has_dasm = 0; for(DF_Panel *p = window->root_panel; !df_panel_is_nil(p); p = df_panel_rec_df_pre(p).next) { - DF_View *p_view = p->selected_stable_view; - DF_CoreCmdKind p_view_cmd_kind = df_core_cmd_kind_from_string(p_view->cmd_spec->info.string); - if(p_view_cmd_kind == DF_CoreCmdKind_Code) + DF_View *p_view = df_view_from_handle(p->selected_tab_view); + DF_GfxViewKind p_view_kind = df_gfx_view_kind_from_string(p_view->spec->info.name); + if(p_view_kind == DF_GfxViewKind_Code) { - has_src= 1; + has_src = 1; } - if(p_view_cmd_kind == DF_CoreCmdKind_Disassembly) + if(p_view_kind == DF_GfxViewKind_Disassembly) { has_dasm = 1; } @@ -566,7 +502,7 @@ internal DF_CmdParams df_cmd_params_from_window(DF_Window *window) { DF_CmdParams p = df_cmd_params_zero(); - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, window->focused_panel->selected_stable_view); + DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, df_view_from_handle(window->focused_panel->selected_tab_view)); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Window); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Panel); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View); @@ -575,7 +511,7 @@ df_cmd_params_from_window(DF_Window *window) df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Index); p.window = df_handle_from_window(window); p.panel = df_handle_from_panel(window->focused_panel); - p.view = df_handle_from_view(window->focused_panel->selected_stable_view); + p.view = window->focused_panel->selected_tab_view; p.prefer_dasm = df_prefer_dasm_from_window(window); p.entity = ctrl_ctx.thread; p.index = ctrl_ctx.unwind_count; @@ -586,7 +522,7 @@ internal DF_CmdParams df_cmd_params_from_panel(DF_Window *window, DF_Panel *panel) { DF_CmdParams p = df_cmd_params_zero(); - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, panel->selected_stable_view); + DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, df_view_from_handle(panel->selected_tab_view)); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Window); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Panel); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View); @@ -595,7 +531,7 @@ df_cmd_params_from_panel(DF_Window *window, DF_Panel *panel) df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Index); p.window = df_handle_from_window(window); p.panel = df_handle_from_panel(panel); - p.view = df_handle_from_view(panel->selected_stable_view); + p.view = panel->selected_tab_view; p.prefer_dasm = df_prefer_dasm_from_window(window); p.entity = ctrl_ctx.thread; p.index = ctrl_ctx.unwind_count; @@ -622,6 +558,19 @@ df_cmd_params_from_view(DF_Window *window, DF_Panel *panel, DF_View *view) return p; } +internal DF_CmdParams +df_cmd_params_copy(Arena *arena, DF_CmdParams *src) +{ + DF_CmdParams dst = {0}; + MemoryCopyStruct(&dst, src); + dst.entity_list = df_push_handle_list_copy(arena, src->entity_list); + dst.string = push_str8_copy(arena, src->string); + dst.file_path = push_str8_copy(arena, src->file_path); + if(dst.cmd_spec == 0) {dst.cmd_spec = &df_g_nil_cmd_spec;} + if(dst.view_spec == 0) {dst.view_spec = &df_g_nil_view_spec;} + return dst; +} + //////////////////////////////// //~ rjf: Global Cross-Window UI Interaction State Functions @@ -708,18 +657,6 @@ df_register_view_specs(DF_ViewSpecInfoArray specs) } } -internal void -df_register_cmd2view(String8 cmd_name, String8 view_name) -{ - U64 hash = df_hash_from_string(cmd_name); - U64 slot_idx = hash%df_gfx_state->cmd2view_slot_count; - DF_String2ViewSlot *slot = &df_gfx_state->cmd2view_slots[slot_idx]; - DF_String2ViewNode *node = push_array(df_gfx_state->arena, DF_String2ViewNode, 1); - node->string = push_str8_copy(df_gfx_state->arena, cmd_name); - node->view_name = push_str8_copy(df_gfx_state->arena, view_name); - SLLQueuePush_N(slot->first, slot->last, node, hash_next); -} - internal DF_ViewSpec * df_view_spec_from_string(String8 string) { @@ -747,23 +684,14 @@ df_view_spec_from_gfx_view_kind(DF_GfxViewKind gfx_view_kind) } internal DF_ViewSpec * -df_view_spec_from_cmd_spec(DF_CmdSpec *cmd_spec) +df_view_spec_from_cmd_param_slot(DF_CmdParamSlot slot) { - DF_ViewSpec *view_spec = &df_g_nil_view_spec; + DF_ViewSpec *spec = df_gfx_state->cmd_param_slot_view_spec_table[slot]; + if(spec == 0) { - U64 hash = df_hash_from_string(cmd_spec->info.string); - U64 slot_idx = hash%df_gfx_state->cmd2view_slot_count; - DF_String2ViewSlot *slot = &df_gfx_state->cmd2view_slots[slot_idx]; - for(DF_String2ViewNode *n = slot->first; n != 0; n = n->hash_next) - { - if(str8_match(n->string, cmd_spec->info.string, 0)) - { - view_spec = df_view_spec_from_string(n->view_name); - break; - } - } + spec = &df_g_nil_view_spec; } - return view_spec; + return spec; } //////////////////////////////// @@ -843,16 +771,16 @@ df_view_alloc(void) // rjf: initialize view->arena = arena_alloc(); - view->cmd_spec = &df_g_nil_cmd_spec; - view->cmd_entity = df_handle_zero(); - view->query.str = view->query_buffer; + view->spec = &df_g_nil_view_spec; + view->entity = df_handle_zero(); view->query_cursor = view->query_mark = txt_pt(1, 1); + view->query_string_size = 0; df_gfx_state->allocated_view_count += 1; return view; } internal void -df_view_release_single(DF_View *view) +df_view_release(DF_View *view) { SLLStackPush(df_gfx_state->free_view, view); for(DF_ArenaExt *ext = view->first_arena_ext; ext != 0; ext = ext->next) @@ -868,51 +796,21 @@ df_view_release_single(DF_View *view) } internal void -df_view_release(DF_View *view) -{ - // rjf: terminate this callee chain from caller - if(!df_view_is_nil(view->caller_view)) - { - view->caller_view->callee_view = &df_g_nil_view; - } - - // rjf: release all callees - for(DF_View *v = view->callee_view, *next = 0; !df_view_is_nil(v); v = next) - { - next = v->callee_view; - df_view_release_single(v); - } - - // rjf: release this view - df_view_release_single(view); -} - -internal void -df_view_equip_command(DF_View *view, DF_CmdSpec *spec, DF_CmdParams *params, String8 default_query, DF_CfgNode *cfg_root) +df_view_equip_spec(DF_View *view, DF_ViewSpec *spec, DF_Entity *entity, String8 default_query, DF_CfgNode *cfg_root) { // rjf: fill arguments buffer - MemoryCopy(view->query_buffer, default_query.str, Min(sizeof(view->query_buffer), default_query.size)); - view->query.str = view->query_buffer; - view->query.size = default_query.size; + view->query_string_size = Min(sizeof(view->query_buffer), default_query.size); + MemoryCopy(view->query_buffer, default_query.str, view->query_string_size); view->query_cursor = view->query_mark = txt_pt(1, default_query.size+1); - // rjf: initialize state for new command spec, if needed - if(view->cmd_spec != spec) + // rjf: initialize state for new view spec, if needed + if(view->spec != spec || spec == &df_g_nil_view_spec) { - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(spec); + DF_ViewSetupFunctionType *view_setup = spec->info.setup_hook; df_view_clear_user_state(view); MemoryZeroStruct(&view->scroll_pos); - view->cmd_spec = spec; - - // rjf: fill extra parameters - MemoryZeroStruct(&view->cmd_entity); - if(!df_entity_is_nil(df_entity_from_handle(params->entity)) && view_spec->info.flags & DF_ViewSpecFlag_ParameterizedByEntity) - { - view->cmd_entity = params->entity; - } - - // rjf: give the view a chance to initialize - DF_ViewSetupFunctionType *view_setup = view_spec->info.setup_hook; + view->spec = spec; + view->entity = df_handle_from_entity(entity); view_setup(view, cfg_root); } } @@ -1026,8 +924,8 @@ df_panel_alloc(DF_Window *ws) panel = push_array(ws->arena, DF_Panel, 1); } panel->first = panel->last = panel->next = panel->prev = panel->parent = &df_g_nil_panel; + panel->first_tab_view = panel->last_tab_view = &df_g_nil_view; panel->generation += 1; - panel->query_view_stack_top = panel->first_stable_view = panel->last_stable_view = panel->selected_stable_view = &df_g_nil_view; return panel; } @@ -1042,16 +940,13 @@ df_panel_release(DF_Window *ws, DF_Panel *panel) internal void df_panel_release_all_views(DF_Panel *panel) { - if(!df_view_is_nil(panel->query_view_stack_top)) - { - df_view_release(panel->query_view_stack_top); - } - for(DF_View *view = panel->first_stable_view, *next = 0; !df_view_is_nil(view); view = next) + for(DF_View *view = panel->first_tab_view, *next = 0; !df_view_is_nil(view); view = next) { next = view->next; df_view_release(view); } - panel->first_stable_view = panel->last_stable_view = panel->query_view_stack_top = panel->selected_stable_view = &df_g_nil_view; + panel->first_tab_view = panel->last_tab_view = &df_g_nil_view; + panel->selected_tab_view = df_handle_zero(); } //////////////////////////////// @@ -1089,6 +984,9 @@ df_window_open(Vec2F32 size, OS_Handle preferred_monitor, DF_CfgSrc cfg_src) window->free_panel = &df_g_nil_panel; window->root_panel = df_panel_alloc(window); window->focused_panel = window->root_panel; + window->query_cmd_arena = arena_alloc(); + window->query_cmd_spec = &df_g_nil_cmd_spec; + window->query_view_stack_top = &df_g_nil_view; if(df_gfx_state->first_window == 0) { DF_FontSlot english_font_slots[] = {DF_FontSlot_Main, DF_FontSlot_Code}; @@ -1144,27 +1042,37 @@ internal void df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, DF_CmdList *cmds) { ProfBeginFunction(); + + ////////////////////////////// + //- rjf: unpack context + // B32 window_is_focused = os_window_is_focused(ws->os); B32 confirm_open = df_gfx_state->confirm_active; - B32 hover_eval_is_open = (ws->hover_eval_string.size != 0 && ws->hover_eval_first_frame_idx+20 < ws->hover_eval_last_frame_idx && df_frame_index()-ws->hover_eval_last_frame_idx < 20); - B32 any_query_is_focused = !df_panel_is_nil(ws->focused_panel) && !df_view_is_nil(df_query_view_from_panel(ws->focused_panel)); + B32 query_is_open = !df_view_is_nil(ws->query_view_stack_top); + B32 hover_eval_is_open = (!confirm_open && + !query_is_open && + ws->hover_eval_string.size != 0 && + ws->hover_eval_first_frame_idx+20 < ws->hover_eval_last_frame_idx && + df_frame_index()-ws->hover_eval_last_frame_idx < 20); if(!window_is_focused) { ws->menu_bar_key_held = 0; } ui_select_state(ws->ui); + ////////////////////////////// //- rjf: auto-close tabs which have parameter entities that've been deleted + // for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) { - for(DF_View *view = panel->first_stable_view; + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next) { - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); - if(entity->flags & DF_EntityFlag_MarkedForDeletion || (df_entity_is_nil(entity) && !df_handle_match(df_handle_zero(), view->cmd_entity))) + DF_Entity *entity = df_entity_from_handle(view->entity); + if(entity->flags & DF_EntityFlag_MarkedForDeletion || (df_entity_is_nil(entity) && !df_handle_match(df_handle_zero(), view->entity))) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); df_cmd_list_push(arena, cmds, ¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CloseTab)); @@ -1172,30 +1080,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } - //- rjf: in empty views, typing should automatically pull up command lister - if(window_is_focused && - !df_panel_is_nil(ws->focused_panel) && - df_view_is_nil(ws->focused_panel->query_view_stack_top) && - df_view_is_nil(ws->focused_panel->selected_stable_view) && - !ui_any_ctx_menu_is_open()) - { - for(OS_Event *event = events->first; - event != 0; - event = event->next) - { - if(!os_handle_match(event->window, ws->os) || event->kind != OS_EventKind_Text) - { - continue; - } - DF_CmdParams params = df_cmd_params_from_window(ws); - params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Commands); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_cmd_list_push(arena, cmds, ¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); - break; - } - } - + ////////////////////////////// //- rjf: do core-layer commands & batch up commands to be dispatched to views + // UI_NavActionList nav_actions = {0}; ProfScope("do commands") { @@ -1226,121 +1113,38 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D // rjf: dispatch by core command kind switch(core_cmd_kind) { - //- rjf: default path + //- rjf: default -> try to open tabs for "view driver" commands default: { - // rjf: stable view commits - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd->spec); - if(view_spec != &df_g_nil_view_spec && - cmd->spec->info.query_rule == DF_CmdQueryRule_Null) + String8 name = cmd->spec->info.string; + DF_ViewSpec *view_spec = df_view_spec_from_string(name); + if(view_spec != &df_g_nil_view_spec) { - DF_Panel *panel = df_panel_from_handle(params.panel); - DF_View *view = df_view_alloc(); - df_view_equip_command(view, cmd->spec, ¶ms, str8_lit(""), &df_g_nil_cfg_node); - df_panel_history_new_branch(panel); - df_panel_insert_stable_view(panel, panel->last_stable_view, view); - df_panel_notify_mutation(ws, panel); + DF_CmdParams p = params; + p.view_spec = view_spec; + df_cmd_params_mark_slot(&p, DF_CmdParamSlot_ViewSpec); + df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_OpenTab)); } }break; //- rjf: command fast path - case DF_CoreCmdKind_CommandFastPath: + case DF_CoreCmdKind_RunCommand: { DF_CmdSpec *spec = params.cmd_spec; - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd->spec); - DF_Panel *panel = df_panel_from_handle(params.panel); - if(view_spec != &df_g_nil_view_spec || - spec->info.query_rule != DF_CmdQueryRule_Null) + + // rjf: command simply executes - just no-op in this layer + if(!(spec->info.query.flags & DF_CmdQueryFlag_Required) && + !df_cmd_spec_is_nil(spec) && + (spec->info.query.slot == DF_CmdParamSlot_Null || df_cmd_params_has_slot(¶ms, spec->info.query.slot))) { - df_cmd_spec_counter_inc(spec); - - //- rjf: extract info from spec - DF_CmdQueryRule query_rule = spec->info.query_rule; - B32 applies_to_view = !!(spec->info.flags & DF_CmdSpecFlag_AppliesToView); - B32 fill_with_input = !!(spec->info.flags & DF_CmdSpecFlag_QueryUsesOldInput); - B32 select_old_input = !!(spec->info.flags & DF_CmdSpecFlag_OldInputSelect); - - //- rjf: grab active input from panel - B32 active_input_valid = 0; - String8 active_input = {0}; - { - DF_View *view = df_selected_view_from_panel(panel); - if(!df_view_is_nil(view) && view->cmd_spec->info.query_rule != DF_CmdQueryRule_Null) - { - active_input = view->query; - active_input_valid = 1; - } - } - - //- rjf: get view for this command - DF_View *view = &df_g_nil_view; - if(query_rule != DF_CmdQueryRule_Null) - { - DF_View *selected_view = df_view_is_nil(panel->query_view_stack_top) ? panel->selected_stable_view : panel->query_view_stack_top; - - // rjf: applies to view? => push this onto the selected view's call stack - if(applies_to_view && !df_view_is_nil(selected_view)) - { - DF_View *new_view = df_view_alloc(); - selected_view->callee_view = new_view; - new_view->caller_view = selected_view; - view = new_view; - } - - // rjf: does not apply to view => push onto the query stack - if(!applies_to_view) - { - view = df_view_alloc(); - panel->query_view_stack_top = view; - } - } - - //- rjf: map query kind => default input - String8 default_input = {0}; - { - switch(query_rule) - { - default:{}break; - case DF_CmdQueryRule_SearchString: - { - default_input = df_push_search_string(scratch.arena); - }break; - case DF_CmdQueryRule_FilePath: - case DF_CmdQueryRule_FilePathAndTextPoint: - { - String8 current_path = df_current_path(); - String8 fixed_path = push_str8_copy(scratch.arena, current_path); - for(U64 idx = 0; idx < fixed_path.size; idx += 1) - { - fixed_path.str[idx] = char_to_correct_slash(fixed_path.str[idx]); - } - default_input = fixed_path; - }break; - } - } - - //- rjf: override default input with active input, if this view wants to reuse existing inputs - if(fill_with_input && active_input_valid) - { - default_input = active_input; - } - - //- rjf: set up view for this command - if(!df_view_is_nil(view)) - { - DF_CmdParams params = df_cmd_params_from_panel(ws, panel); - df_view_equip_command(view, spec, ¶ms, default_input, &df_g_nil_cfg_node); - if(select_old_input) - { - view->query_mark = txt_pt(1, 1); - } - } - - //- rjf: focus this panel - { - DF_CmdParams p = params; - df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); - } + } + + // rjf: command is missing arguments -> prep query + else + { + arena_clear(ws->query_cmd_arena); + ws->query_cmd_spec = df_cmd_spec_is_nil(spec) ? cmd->spec : spec; + ws->query_cmd_params = df_cmd_params_copy(ws->query_cmd_arena, ¶ms); } }break; @@ -1366,7 +1170,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_View *view = df_view_from_handle(params.view); if(df_view_is_nil(view) && !df_panel_is_nil(panel)) { - view = panel->selected_stable_view; + view = df_view_from_handle(panel->selected_tab_view); } if(!df_view_is_nil(view)) { @@ -1481,27 +1285,27 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { DF_Handle handle = df_handle_from_panel(panel); df_handle_list_push(scratch.arena, &panels_to_close, handle); - for(DF_View *view = panel->first_stable_view, *next = 0; !df_view_is_nil(view); view = next) + for(DF_View *view = panel->first_tab_view, *next = 0; !df_view_is_nil(view); view = next) { next = view->next; - DF_CoreCmdKind cmd_kind = df_core_cmd_kind_from_string(view->cmd_spec->info.string); + DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name); B32 needs_delete = 1; - switch(cmd_kind) + switch(view_kind) { default:{}break; - case DF_CoreCmdKind_Watch: {if(df_view_is_nil(watch)) { needs_delete = 0; watch = view;} }break; - case DF_CoreCmdKind_Locals: {if(df_view_is_nil(locals)) { needs_delete = 0; locals = view;} }break; - case DF_CoreCmdKind_Registers: {if(df_view_is_nil(regs)) { needs_delete = 0; regs = view;} }break; - case DF_CoreCmdKind_CallStack: {if(df_view_is_nil(callstack)) { needs_delete = 0; callstack = view;} }break; - case DF_CoreCmdKind_Breakpoints:{if(df_view_is_nil(breakpoints)) { needs_delete = 0; breakpoints = view;} }break; - case DF_CoreCmdKind_WatchPins: {if(df_view_is_nil(watch_pins)) { needs_delete = 0; watch_pins = view;} }break; - case DF_CoreCmdKind_Output: {if(df_view_is_nil(output)) { needs_delete = 0; output = view;} }break; - case DF_CoreCmdKind_Targets: {if(df_view_is_nil(targets)) { needs_delete = 0; targets = view;} }break; - case DF_CoreCmdKind_Scheduler: {if(df_view_is_nil(scheduler)) { needs_delete = 0; scheduler = view;} }break; - case DF_CoreCmdKind_Modules: {if(df_view_is_nil(modules)) { needs_delete = 0; modules = view;} }break; - case DF_CoreCmdKind_Disassembly:{if(df_view_is_nil(disasm)) { needs_delete = 0; disasm = view;} }break; - case DF_CoreCmdKind_Memory: {if(df_view_is_nil(memory)) { needs_delete = 0; memory = view;} }break; - case DF_CoreCmdKind_Code: + case DF_GfxViewKind_Watch: {if(df_view_is_nil(watch)) { needs_delete = 0; watch = view;} }break; + case DF_GfxViewKind_Locals: {if(df_view_is_nil(locals)) { needs_delete = 0; locals = view;} }break; + case DF_GfxViewKind_Registers: {if(df_view_is_nil(regs)) { needs_delete = 0; regs = view;} }break; + case DF_GfxViewKind_CallStack: {if(df_view_is_nil(callstack)) { needs_delete = 0; callstack = view;} }break; + case DF_GfxViewKind_Breakpoints:{if(df_view_is_nil(breakpoints)) { needs_delete = 0; breakpoints = view;} }break; + case DF_GfxViewKind_WatchPins: {if(df_view_is_nil(watch_pins)) { needs_delete = 0; watch_pins = view;} }break; + case DF_GfxViewKind_Output: {if(df_view_is_nil(output)) { needs_delete = 0; output = view;} }break; + case DF_GfxViewKind_Targets: {if(df_view_is_nil(targets)) { needs_delete = 0; targets = view;} }break; + case DF_GfxViewKind_Scheduler: {if(df_view_is_nil(scheduler)) { needs_delete = 0; scheduler = view;} }break; + case DF_GfxViewKind_Modules: {if(df_view_is_nil(modules)) { needs_delete = 0; modules = view;} }break; + case DF_GfxViewKind_Disassembly:{if(df_view_is_nil(disasm)) { needs_delete = 0; disasm = view;} }break; + case DF_GfxViewKind_Memory: {if(df_view_is_nil(memory)) { needs_delete = 0; memory = view;} }break; + case DF_GfxViewKind_Code: { needs_delete = 0; df_handle_list_push(scratch.arena, &code_views, df_handle_from_view(view)); @@ -1509,7 +1313,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } if(!needs_delete) { - df_panel_remove_stable_view(panel, view); + df_panel_remove_tab_view(panel, view); } } } @@ -1534,62 +1338,62 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D if(df_view_is_nil(watch)) { watch = df_view_alloc(); - df_view_equip_command(watch, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Watch), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(watch, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Watch), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(locals)) { locals = df_view_alloc(); - df_view_equip_command(locals, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Locals), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(locals, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Locals), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(regs)) { regs = df_view_alloc(); - df_view_equip_command(regs, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Registers), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(regs, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Registers), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(callstack)) { callstack = df_view_alloc(); - df_view_equip_command(callstack, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CallStack), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(callstack, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_CallStack), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(breakpoints)) { breakpoints = df_view_alloc(); - df_view_equip_command(breakpoints, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Breakpoints), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(breakpoints, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Breakpoints), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(watch_pins)) { watch_pins = df_view_alloc(); - df_view_equip_command(watch_pins, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_WatchPins), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(watch_pins, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_WatchPins), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(output)) { output = df_view_alloc(); - df_view_equip_command(output, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Output), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(output, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Output), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(targets)) { targets = df_view_alloc(); - df_view_equip_command(targets, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Targets), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(targets, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Targets), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(scheduler)) { scheduler = df_view_alloc(); - df_view_equip_command(scheduler, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Scheduler), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(scheduler, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Scheduler), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(modules)) { modules = df_view_alloc(); - df_view_equip_command(modules, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Modules), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(modules, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Modules), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(disasm)) { disasm = df_view_alloc(); - df_view_equip_command(disasm, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Disassembly), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(disasm, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Disassembly), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } if(df_view_is_nil(memory)) { memory = df_view_alloc(); - df_view_equip_command(memory, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Memory), &blank_params, str8_lit(""), &df_g_nil_cfg_node); + df_view_equip_spec(memory, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Memory), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); } // rjf: root split @@ -1618,10 +1422,10 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D df_panel_insert(root_1, root_1->last, root_1_1); root_1_0->size_pct_of_parent = root_1_0->size_pct_of_parent_target = v2f32(1.f, 0.50f); root_1_1->size_pct_of_parent = root_1_1->size_pct_of_parent_target = v2f32(1.f, 0.50f); - df_panel_insert_stable_view(root_1_0, root_1_0->last_stable_view, targets); - df_panel_insert_stable_view(root_1_1, root_1_1->last_stable_view, scheduler); - root_1_0->selected_stable_view = targets; - root_1_1->selected_stable_view = scheduler; + df_panel_insert_tab_view(root_1_0, root_1_0->last_tab_view, targets); + df_panel_insert_tab_view(root_1_1, root_1_1->last_tab_view, scheduler); + root_1_0->selected_tab_view = df_handle_from_view(targets); + root_1_1->selected_tab_view = df_handle_from_view(scheduler); root_1_1->tab_side = Side_Max; // rjf: root_0_0 split @@ -1641,13 +1445,13 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D df_panel_insert(root_0_0_0, root_0_0_0->last, root_0_0_0_1); root_0_0_0_0->size_pct_of_parent = root_0_0_0_0->size_pct_of_parent_target = v2f32(1.f, 0.5f); root_0_0_0_1->size_pct_of_parent = root_0_0_0_1->size_pct_of_parent_target = v2f32(1.f, 0.5f); - df_panel_insert_stable_view(root_0_0_0_0, root_0_0_0_0->last_stable_view, disasm); - root_0_0_0_0->selected_stable_view = disasm; - df_panel_insert_stable_view(root_0_0_0_1, root_0_0_0_1->last_stable_view, breakpoints); - df_panel_insert_stable_view(root_0_0_0_1, root_0_0_0_1->last_stable_view, watch_pins); - df_panel_insert_stable_view(root_0_0_0_1, root_0_0_0_1->last_stable_view, output); - df_panel_insert_stable_view(root_0_0_0_1, root_0_0_0_1->last_stable_view, memory); - root_0_0_0_1->selected_stable_view = output; + df_panel_insert_tab_view(root_0_0_0_0, root_0_0_0_0->last_tab_view, disasm); + root_0_0_0_0->selected_tab_view = df_handle_from_view(disasm); + df_panel_insert_tab_view(root_0_0_0_1, root_0_0_0_1->last_tab_view, breakpoints); + df_panel_insert_tab_view(root_0_0_0_1, root_0_0_0_1->last_tab_view, watch_pins); + df_panel_insert_tab_view(root_0_0_0_1, root_0_0_0_1->last_tab_view, output); + df_panel_insert_tab_view(root_0_0_0_1, root_0_0_0_1->last_tab_view, memory); + root_0_0_0_1->selected_tab_view = df_handle_from_view(output); // rjf: root_0_1 split root_0_1->split_axis = Axis2_X; @@ -1657,14 +1461,14 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D df_panel_insert(root_0_1, root_0_1->last, root_0_1_1); root_0_1_0->size_pct_of_parent = root_0_1_0->size_pct_of_parent_target = v2f32(0.60f, 1.f); root_0_1_1->size_pct_of_parent = root_0_1_1->size_pct_of_parent_target = v2f32(0.40f, 1.f); - df_panel_insert_stable_view(root_0_1_0, root_0_1_0->last_stable_view, watch); - df_panel_insert_stable_view(root_0_1_0, root_0_1_0->last_stable_view, locals); - df_panel_insert_stable_view(root_0_1_0, root_0_1_0->last_stable_view, regs); - root_0_1_0->selected_stable_view = watch; + df_panel_insert_tab_view(root_0_1_0, root_0_1_0->last_tab_view, watch); + df_panel_insert_tab_view(root_0_1_0, root_0_1_0->last_tab_view, locals); + df_panel_insert_tab_view(root_0_1_0, root_0_1_0->last_tab_view, regs); + root_0_1_0->selected_tab_view = df_handle_from_view(watch); root_0_1_0->tab_side = Side_Max; - df_panel_insert_stable_view(root_0_1_1, root_0_1_1->last_stable_view, callstack); - df_panel_insert_stable_view(root_0_1_1, root_0_1_1->last_stable_view, modules); - root_0_1_1->selected_stable_view = callstack; + df_panel_insert_tab_view(root_0_1_1, root_0_1_1->last_tab_view, callstack); + df_panel_insert_tab_view(root_0_1_1, root_0_1_1->last_tab_view, modules); + root_0_1_1->selected_tab_view = df_handle_from_view(callstack); root_0_1_1->tab_side = Side_Max; // rjf: fill main panel with all collected code views @@ -1673,7 +1477,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_View *view = df_view_from_handle(n->handle); if(!df_view_is_nil(view)) { - df_panel_insert_stable_view(root_0_0_1, root_0_0_1->last_stable_view, view); + df_panel_insert_tab_view(root_0_0_1, root_0_0_1->last_tab_view, view); } } @@ -1900,32 +1704,30 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D case DF_CoreCmdKind_NextTab: { DF_Panel *panel = df_panel_from_handle(params.panel); - if(panel->history_tab_bar_mode == 0 && !df_view_is_nil(panel->selected_stable_view) && df_view_is_nil(panel->query_view_stack_top)) + DF_View *view = df_view_from_handle(panel->selected_tab_view); + view = view->next; + if(df_view_is_nil(view)) { - panel->selected_stable_view = panel->selected_stable_view->next; - if(df_view_is_nil(panel->selected_stable_view)) - { - panel->selected_stable_view = panel->first_stable_view; - } + view = panel->first_tab_view; } + panel->selected_tab_view = df_handle_from_view(view); }break; case DF_CoreCmdKind_PrevTab: { DF_Panel *panel = df_panel_from_handle(params.panel); - if(panel->history_tab_bar_mode == 0 && !df_view_is_nil(panel->selected_stable_view) && df_view_is_nil(panel->query_view_stack_top)) + DF_View *view = df_view_from_handle(panel->selected_tab_view); + view = view->prev; + if(df_view_is_nil(view)) { - panel->selected_stable_view = panel->selected_stable_view->prev; - if(df_view_is_nil(panel->selected_stable_view)) - { - panel->selected_stable_view = panel->last_stable_view; - } + view = panel->last_tab_view; } + panel->selected_tab_view = df_handle_from_view(view); }break; case DF_CoreCmdKind_MoveTabRight: case DF_CoreCmdKind_MoveTabLeft: { DF_Panel *panel = ws->focused_panel; - DF_View *view = panel->selected_stable_view; + DF_View *view = df_view_from_handle(panel->selected_tab_view); DF_View *prev_view = core_cmd_kind == DF_CoreCmdKind_MoveTabRight ? view->next : view->prev->prev; if(!df_view_is_nil(prev_view) || core_cmd_kind == DF_CoreCmdKind_MoveTabLeft) { @@ -1937,26 +1739,29 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_MoveTab)); } }break; + case DF_CoreCmdKind_OpenTab: + { + DF_Panel *panel = df_panel_from_handle(params.panel); + DF_ViewSpec *spec = params.view_spec; + DF_Entity *entity = df_entity_from_handle(params.entity); + if(!df_panel_is_nil(panel) && spec != &df_g_nil_view_spec) + { + DF_View *view = df_view_alloc(); + df_view_equip_spec(view, spec, entity, str8_lit(""), &df_g_nil_cfg_node); + df_panel_insert_tab_view(panel, panel->last_tab_view, view); + df_panel_notify_mutation(ws, panel); + } + }break; case DF_CoreCmdKind_CloseTab: { DF_Panel *panel = df_panel_from_handle(params.panel); DF_View *view = df_view_from_handle(params.view); - if(panel->history_tab_bar_mode == 0 && !df_view_is_nil(view)) + if(!df_view_is_nil(view)) { - df_panel_remove_stable_view(panel, view); + df_panel_remove_tab_view(panel, view); df_view_release(view); df_panel_notify_mutation(ws, panel); } - if(panel->history_tab_bar_mode == 1) - { - for(DF_View *v = panel->first_stable_view, *next = 0; - !df_view_is_nil(v); v = next) - { - next = v->next; - df_panel_remove_stable_view(panel, v); - df_view_release(v); - } - } }break; case DF_CoreCmdKind_MoveTab: { @@ -1968,8 +1773,8 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D !df_panel_is_nil(dst_panel) && prev_view != view) { - df_panel_remove_stable_view(src_panel, view); - df_panel_insert_stable_view(dst_panel, prev_view, view); + df_panel_remove_tab_view(src_panel, view); + df_panel_insert_tab_view(dst_panel, prev_view, view); ws->focused_panel = dst_panel; df_panel_notify_mutation(ws, dst_panel); } @@ -1986,33 +1791,6 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D panel->tab_side = Side_Max; df_panel_notify_mutation(ws, panel); }break; - case DF_CoreCmdKind_TabBarEnable: - { - DF_Panel *panel = df_panel_from_handle(params.panel); - panel->hide_tab_bar = 0; - panel->history_tab_bar_mode = 0; - df_panel_notify_mutation(ws, panel); - }break; - case DF_CoreCmdKind_TabBarDisable: - { - DF_Panel *panel = df_panel_from_handle(params.panel); - panel->hide_tab_bar = 1; - panel->history_tab_bar_mode = 1; - df_panel_notify_mutation(ws, panel); - }break; - case DF_CoreCmdKind_TabBarHistoryModeEnable: - { - DF_Panel *panel = df_panel_from_handle(params.panel); - panel->history_tab_bar_mode = 1; - panel->hide_tab_bar = 0; - df_panel_notify_mutation(ws, panel); - }break; - case DF_CoreCmdKind_TabBarHistoryModeDisable: - { - DF_Panel *panel = df_panel_from_handle(params.panel); - panel->history_tab_bar_mode = 0; - df_panel_notify_mutation(ws, panel); - }break; //- rjf: files case DF_CoreCmdKind_Open: @@ -2035,8 +1813,8 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_Entity *file = df_entity_from_handle(params.entity); for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) { - DF_View *view = panel->selected_stable_view; - DF_Entity *view_entity = df_entity_from_handle(view->cmd_entity); + DF_View *view = df_view_from_handle(panel->selected_tab_view); + DF_Entity *view_entity = df_entity_from_handle(view->entity); if(view_entity == file) { view->flash_t = 1.f; @@ -2046,8 +1824,8 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D case DF_CoreCmdKind_ReloadActive: { DF_Panel *panel = df_panel_from_handle(params.panel); - DF_View *view = panel->selected_stable_view; - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_View *view = df_view_from_handle(panel->selected_tab_view); + DF_Entity *entity = df_entity_from_handle(view->entity); if(entity->kind == DF_EntityKind_File) { DF_CmdParams p = df_cmd_params_from_view(ws, panel, view); @@ -2060,12 +1838,12 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { B32 already_opened = 0; DF_Panel *panel = df_panel_from_handle(params.panel); - for(DF_View *v = panel->first_stable_view; !df_view_is_nil(v); v = v->next) + for(DF_View *v = panel->first_tab_view; !df_view_is_nil(v); v = v->next) { - DF_Entity *v_param_entity = df_entity_from_handle(v->cmd_entity); + DF_Entity *v_param_entity = df_entity_from_handle(v->entity); if(v_param_entity == df_entity_from_handle(params.entity)) { - panel->selected_stable_view = v; + panel->selected_tab_view = df_handle_from_view(v); already_opened = 1; break; } @@ -2525,23 +2303,6 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } }break; - //- rjf: memory openers - case DF_CoreCmdKind_OpenFileMemory: - case DF_CoreCmdKind_OpenProcessMemory: - { - df_cmd_list_push(arena, cmds, ¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Memory)); - }break; - case DF_CoreCmdKind_OpenSelectedProcessMemory: - { - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_window(ws); - DF_Entity *selected_thread = df_entity_from_handle(ctrl_ctx.thread); - DF_Entity *selected_process = df_entity_ancestor_from_kind(selected_thread, DF_EntityKind_Process); - DF_CmdParams params = df_cmd_params_from_window(ws); - params.entity = df_handle_from_entity(selected_process); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity); - df_cmd_list_push(arena, cmds, ¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_OpenProcessMemory)); - }break; - //- rjf: targets case DF_CoreCmdKind_EditTarget: { @@ -2619,7 +2380,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_CmdParams p = df_cmd_params_from_panel(ws, panel); p.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Open); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } } else @@ -2745,16 +2506,15 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { continue; } - for(DF_View *view = panel->first_stable_view; !df_view_is_nil(view); view = view->next) + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next) { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_CoreCmdKind cmd_kind = df_core_cmd_kind_from_string(cmd_spec->info.string); - DF_Entity *viewed_entity = df_entity_from_handle(view->cmd_entity); - if((cmd_kind == DF_CoreCmdKind_Code || cmd_kind == DF_CoreCmdKind_PendingEntity) && viewed_entity == src_code) + DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name); + DF_Entity *viewed_entity = df_entity_from_handle(view->entity); + if((view_kind == DF_GfxViewKind_Code || view_kind == DF_GfxViewKind_PendingEntity) && viewed_entity == src_code) { panel_w_this_src_code = panel; view_w_this_src_code = view; - if(view == panel->selected_stable_view) + if(view == df_view_from_handle(panel->selected_tab_view)) { break; } @@ -2770,11 +2530,10 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { continue; } - for(DF_View *view = panel->first_stable_view; !df_view_is_nil(view); view = view->next) + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next) { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_CoreCmdKind cmd_kind = df_core_cmd_kind_from_string(cmd_spec->info.string); - if(cmd_kind == DF_CoreCmdKind_Code) + DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name); + if(view_kind == DF_GfxViewKind_Code) { panel_w_any_src_code = panel; break; @@ -2791,16 +2550,15 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { continue; } - for(DF_View *view = panel->first_stable_view; !df_view_is_nil(view); view = view->next) + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next) { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_CoreCmdKind cmd_kind = df_core_cmd_kind_from_string(cmd_spec->info.string); - DF_Entity *viewed_entity = df_entity_from_handle(view->cmd_entity); - if(cmd_kind == DF_CoreCmdKind_Disassembly) + DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name); + DF_Entity *viewed_entity = df_entity_from_handle(view->entity); + if(view_kind == DF_GfxViewKind_Disassembly) { panel_w_disasm = panel; view_w_disasm = view; - if(view == panel->selected_stable_view) + if(view == df_view_from_handle(panel->selected_tab_view)) { break; } @@ -2844,7 +2602,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D Rng2F32 panel_rect = df_rect_from_panel(root_rect, ws->root_panel, panel); Vec2F32 panel_rect_dim = dim_2f32(panel_rect); F32 area = panel_rect_dim.x * panel_rect_dim.y; - if(df_view_is_nil(panel->first_stable_view) && (best_panel_area == 0 || area > best_panel_area)) + if(df_view_is_nil(panel->first_tab_view) && (best_panel_area == 0 || area > best_panel_area)) { best_panel_area = area; biggest_empty_panel = panel; @@ -2870,19 +2628,14 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D if(!df_panel_is_nil(dst_panel) && df_view_is_nil(view_w_this_src_code)) { DF_View *view = df_view_alloc(); - DF_CmdSpec *spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PendingEntity); - DF_CmdParams new_view_params = df_cmd_params_zero(); - new_view_params.entity = df_handle_from_entity(src_code); - df_cmd_params_mark_slot(&new_view_params, DF_CmdParamSlot_Entity); - df_view_equip_command(view, spec, &new_view_params, str8_lit(""), &df_g_nil_cfg_node); - df_panel_history_new_branch(dst_panel); - df_panel_insert_stable_view(dst_panel, dst_panel->last_stable_view, view); + df_view_equip_spec(view, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Code), src_code, str8_lit(""), &df_g_nil_cfg_node); + df_panel_insert_tab_view(dst_panel, dst_panel->last_tab_view, view); dst_view = view; } // rjf: determine if we need a contain or center DF_CoreCmdKind cursor_snap_kind = DF_CoreCmdKind_CenterCursor; - if(!df_panel_is_nil(dst_panel) && dst_view == view_w_this_src_code && dst_panel->selected_stable_view == dst_view) + if(!df_panel_is_nil(dst_panel) && dst_view == view_w_this_src_code && df_view_from_handle(dst_panel->selected_tab_view) == dst_view) { cursor_snap_kind = DF_CoreCmdKind_ContainCursor; } @@ -2890,7 +2643,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D // rjf: move cursor & snap-to-cursor if(!df_panel_is_nil(dst_panel)) { - dst_panel->selected_stable_view = dst_view; + dst_panel->selected_tab_view = df_handle_from_view(dst_view); DF_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view); params.text_point = point; df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_TextPoint); @@ -2921,17 +2674,14 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D if(!df_panel_is_nil(dst_panel) && df_view_is_nil(view_w_disasm)) { DF_View *view = df_view_alloc(); - DF_CmdSpec *spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Disassembly); - DF_CmdParams new_view_params = df_cmd_params_zero(); - df_view_equip_command(view, spec, &new_view_params, str8_lit(""), &df_g_nil_cfg_node); - df_panel_history_new_branch(dst_panel); - df_panel_insert_stable_view(dst_panel, dst_panel->last_stable_view, view); + df_view_equip_spec(view, df_view_spec_from_gfx_view_kind(DF_GfxViewKind_Disassembly), &df_g_nil_entity, str8_lit(""), &df_g_nil_cfg_node); + df_panel_insert_tab_view(dst_panel, dst_panel->last_tab_view, view); dst_view = view; } // rjf: determine if we need a contain or center DF_CoreCmdKind cursor_snap_kind = DF_CoreCmdKind_CenterCursor; - if(dst_view == view_w_disasm && dst_panel->selected_stable_view == dst_view) + if(dst_view == view_w_disasm && df_view_from_handle(dst_panel->selected_tab_view) == dst_view) { cursor_snap_kind = DF_CoreCmdKind_ContainCursor; } @@ -2939,7 +2689,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D // rjf: move cursor & snap-to-cursor if(!df_panel_is_nil(dst_panel)) { - dst_panel->selected_stable_view = dst_view; + dst_panel->selected_tab_view = df_handle_from_view(dst_view); DF_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view); params.entity = df_handle_from_entity(process); params.vaddr = vaddr; @@ -2951,30 +2701,52 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } }break; - //- rjf: core pass-through view result commands - case DF_CoreCmdKind_ViewReturn: + //- rjf: query completion + case DF_CoreCmdKind_CompleteQuery: { - DF_Panel *panel = df_panel_from_handle(params.panel); - DF_View *view = df_view_from_handle(params.view); - - // rjf: if this is a stable view, remove - for(DF_View *stable_view = panel->first_stable_view; !df_view_is_nil(stable_view); stable_view = stable_view->next) + // rjf: compound command parameters + if(ws->query_cmd_spec->info.query.slot != DF_CmdParamSlot_Null && + df_cmd_params_has_slot(¶ms, ws->query_cmd_spec->info.query.slot)) { - if(stable_view == view) - { - df_panel_remove_stable_view(panel, view); - break; - } + DF_CmdParams params_copy = df_cmd_params_copy(ws->query_cmd_arena, ¶ms); + Rng1U64 offset_range_in_params = df_g_cmd_param_slot_range_table[ws->query_cmd_spec->info.query.slot]; + MemoryCopy((U8 *)(&ws->query_cmd_params) + offset_range_in_params.min, + (U8 *)(¶ms_copy) + offset_range_in_params.min, + dim_1u64(offset_range_in_params)); + df_cmd_params_mark_slot(&ws->query_cmd_params, ws->query_cmd_spec->info.query.slot); } - // rjf: if this is the top of the query stack, unhook from panel - if(panel->query_view_stack_top == view) + // rjf: determine if command is ready to run + B32 command_ready = 1; + if(ws->query_cmd_spec->info.query.slot != DF_CmdParamSlot_Null && + !df_cmd_params_has_slot(&ws->query_cmd_params, ws->query_cmd_spec->info.query.slot)) { - panel->query_view_stack_top = &df_g_nil_view; + command_ready = 0; } - // rjf: release - df_view_release(view); + // rjf: end this query + { + DF_CmdParams p = df_cmd_params_from_window(ws); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CancelQuery)); + } + + // rjf: push command if possible + if(command_ready) + { + df_push_cmd__root(&ws->query_cmd_params, ws->query_cmd_spec); + } + }break; + case DF_CoreCmdKind_CancelQuery: + { + arena_clear(ws->query_cmd_arena); + ws->query_cmd_spec = &df_g_nil_cmd_spec; + MemoryZeroStruct(&ws->query_cmd_params); + for(DF_View *v = ws->query_view_stack_top, *next = 0; !df_view_is_nil(v); v = next) + { + next = v->next; + df_view_release(v); + } + ws->query_view_stack_top = &df_g_nil_view; }break; //- rjf: developer commands @@ -2987,7 +2759,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D scratch_end(scratch); } + ////////////////////////////// //- rjf: process view-level commands on leaf panels + // ProfScope("dispatch view-level commands") { for(DF_Panel *panel = ws->root_panel; @@ -2998,42 +2772,25 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { continue; } - - // rjf: dispatch to query views - for(DF_View *view = panel->query_view_stack_top; - !df_view_is_nil(view); - view = view->callee_view) + DF_View *view = df_view_from_handle(panel->selected_tab_view); + if(!df_view_is_nil(view)) { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd_spec); - DF_ViewCmdFunctionType *do_view_cmds_function = view_spec->info.cmd_hook; + DF_ViewCmdFunctionType *do_view_cmds_function = view->spec->info.cmd_hook; do_view_cmds_function(ws, panel, view, cmds); } - - // rjf: dispatch to stable views - for(DF_View *view_stack_top = panel->first_stable_view; - !df_view_is_nil(view_stack_top); - view_stack_top = view_stack_top->next) - { - for(DF_View *view = view_stack_top; - !df_view_is_nil(view); - view = view->callee_view) - { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd_spec); - DF_ViewCmdFunctionType *do_view_cmds_function = view_spec->info.cmd_hook; - do_view_cmds_function(ws, panel, view, cmds); - } - } } } + ////////////////////////////// //- rjf: build UI + // UI_Box *autocomp_box = &ui_g_nil_box; UI_Box *hover_eval_box = &ui_g_nil_box; ProfScope("build UI") { + //////////////////////////// //- rjf: set up + // { // rjf: gather font info F_Tag main_font = df_font_from_slot(DF_FontSlot_Main); @@ -3070,14 +2827,18 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D ui_push_blur_size(10.f); } + //////////////////////////// //- rjf: calculate top-level rectangles + // Rng2F32 window_rect = os_client_rect_from_window(ws->os); Vec2F32 window_rect_dim = dim_2f32(window_rect); Rng2F32 top_bar_rect = r2f32p(window_rect.x0, window_rect.y0, window_rect.x0+window_rect_dim.x, window_rect.y0+ui_top_pref_height().value); Rng2F32 bottom_bar_rect = r2f32p(window_rect.x0, window_rect_dim.y - ui_top_pref_height().value, window_rect.x0+window_rect_dim.x, window_rect.y0+window_rect_dim.y); Rng2F32 content_rect = r2f32p(window_rect.x0, top_bar_rect.y1, window_rect.x0+window_rect_dim.x, bottom_bar_rect.y0); + //////////////////////////// //- rjf: drag/drop visualization tooltips + // B32 drag_active = df_drag_is_active(); if(drag_active && window_is_focused) { @@ -3124,7 +2885,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D scratch_end(scratch); } + //////////////////////////// //- rjf: entity drop completion ctx menu + // { UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_AltBackground)) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_AltText)) @@ -3189,7 +2952,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: developer menu + // if(ws->dev_menu_is_open) UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_PaneF(r2f32p(30, 30, 30+ui_top_font_size()*100, ui_top_font_size()*150), "###dev_ctx_menu") @@ -3285,7 +3050,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: universal ctx menus + // UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_AltBackground)) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_AltText)) UI_BorderColor(df_rgba_from_theme_color(DF_ThemeColor_AltBorder)) @@ -3576,7 +3343,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_CmdParams p = df_cmd_params_from_window(ws); p.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Open); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } ui_ctx_menu_close(); } @@ -3810,7 +3577,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { DF_View *view = df_view_from_handle(ws->tab_ctx_menu_view); DF_IconKind view_icon = df_icon_kind_from_view(view); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); String8 display_name = df_display_string_from_view(scratch.arena, ctrl_ctx, view); @@ -3867,9 +3634,11 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D scratch_end(scratch); } + //////////////////////////// //- rjf: confirmation popup + // { - if(df_gfx_state->confirm_t > 0.005f) UI_Focus(1) UI_TextAlignment(UI_TextAlign_Center) + if(df_gfx_state->confirm_t > 0.005f) UI_TextAlignment(UI_TextAlign_Center) { Vec2F32 window_dim = dim_2f32(window_rect); UI_Box *bg_box = &ui_g_nil_box; @@ -3916,7 +3685,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: build auto-complete lister + // ProfScope("build autocomplete lister") if(!ws->autocomp_force_closed && !ui_key_match(ws->autocomp_root_key, ui_key_zero()) && ws->autocomp_last_frame_idx+1 >= df_frame_index()) { @@ -4044,7 +3815,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } //- rjf: build - if(item_array.count != 0) UI_Focus(1) + if(item_array.count != 0) { F32 row_height_px = floor_f32(ui_top_font_size()*2.5f); ui_set_next_fixed_x(autocomp_root_box->rect.x0); @@ -4055,8 +3826,12 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D ui_set_next_corner_radius_01(ui_top_font_size()*0.25f); ui_set_next_corner_radius_11(ui_top_font_size()*0.25f); ui_set_next_corner_radius_10(ui_top_font_size()*0.25f); - autocomp_box = ui_build_box_from_stringf(UI_BoxFlag_DefaultFocusNavY|UI_BoxFlag_Clip|UI_BoxFlag_RoundChildrenByParent|UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackgroundBlur|UI_BoxFlag_DrawDropShadow|UI_BoxFlag_DrawBackground, "autocomp_box"); + UI_Focus(UI_FocusKind_On) + { + autocomp_box = ui_build_box_from_stringf(UI_BoxFlag_DefaultFocusNavY|UI_BoxFlag_Clip|UI_BoxFlag_RoundChildrenByParent|UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackgroundBlur|UI_BoxFlag_DrawDropShadow|UI_BoxFlag_DrawBackground, "autocomp_box"); + } UI_Parent(autocomp_box) UI_WidthFill UI_PrefHeight(ui_px(row_height_px, 1.f)) UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_HoverCursor(OS_Cursor_HandPoint) + UI_Focus(UI_FocusKind_Null) { for(U64 idx = 0; idx < item_array.count; idx += 1) { @@ -4084,45 +3859,57 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: build hover eval + // ProfScope("build hover eval") { - // find panel/view pair that the mouse is on and disable hover if that view is scrolling + B32 build_hover_eval = hover_eval_is_open; + + // rjf: disable hover eval if queries are active + if(query_is_open) + { + build_hover_eval = 0; + } + + // rjf: disable hover eval if hovered view is actively scrolling if(hover_eval_is_open) { - for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) + for(DF_Panel *panel = ws->root_panel; + !df_panel_is_nil(panel); + panel = df_panel_rec_df_pre(panel).next) { - if(!df_panel_is_nil(panel->first)) + if(!df_panel_is_nil(panel->first)) { continue; } + Rng2F32 panel_rect = df_rect_from_panel(content_rect, ws->root_panel, panel); + DF_View *view = df_view_from_handle(panel->selected_tab_view); + if(!df_view_is_nil(view) && + contains_2f32(panel_rect, ui_mouse()) && + abs_f32(view->scroll_pos.x.off) > 0.01f || + abs_f32(view->scroll_pos.y.off) > 0.01f) { - continue; - } - DF_View *view = df_selected_view_from_panel(panel); - if (!df_view_is_nil(view)) - { - Rng2F32 panel_rect = df_rect_from_panel(content_rect, ws->root_panel, panel); - if(contains_2f32(panel_rect, ws->ui->mouse)) - { - if(abs_f32(view->scroll_pos.x.off) > 0.01f || - abs_f32(view->scroll_pos.y.off) > 0.01f) - { - hover_eval_is_open = 0; - ws->hover_eval_first_frame_idx = df_frame_index(); - } - } + build_hover_eval = 0; + ws->hover_eval_first_frame_idx = df_frame_index(); } } } + // rjf: reset open animation if(ws->hover_eval_string.size == 0) { ws->hover_eval_num_visible_rows_t = 0; } + + // rjf: reset animation, but request frames if we're waiting to open if(ws->hover_eval_string.size != 0 && !hover_eval_is_open && ws->hover_eval_last_frame_idx < ws->hover_eval_first_frame_idx+20 && df_frame_index()-ws->hover_eval_last_frame_idx < 50) { df_gfx_request_frame(); ws->hover_eval_num_visible_rows_t = 0; } - if(ws->hover_eval_string.size != 0 && hover_eval_is_open) UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Main)) + + // rjf: build hover eval + if(build_hover_eval && ws->hover_eval_string.size != 0 && hover_eval_is_open) + UI_Font(df_font_from_slot(DF_FontSlot_Code)) + UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Main)) { Temp scratch = scratch_begin(&arena, 1); DBGI_Scope *scope = dbgi_scope_open(); @@ -4137,7 +3924,8 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_Eval eval = df_eval_from_string(scratch.arena, scope, &ctrl_ctx, &parse_ctx, expr); //- rjf: build if good - if(!tg_key_match(eval.type_key, tg_key_zero()) && !ui_any_ctx_menu_is_open()) UI_Focus(hover_eval_is_open && !ui_any_ctx_menu_is_open() && !any_query_is_focused) + if(!tg_key_match(eval.type_key, tg_key_zero()) && !ui_any_ctx_menu_is_open()) + UI_Focus((hover_eval_is_open && !ui_any_ctx_menu_is_open() && !query_is_open) ? UI_FocusKind_Null : UI_FocusKind_Off) { //- rjf: eval -> viz artifacts F32 row_height = ui_top_font_size()*2.f; @@ -4172,18 +3960,21 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D ui_set_next_corner_radius_10(corner_radius); ui_set_next_corner_radius_11(corner_radius); ui_set_next_child_layout_axis(Axis2_Y); - hover_eval_box = ui_build_box_from_stringf(UI_BoxFlag_DrawBorder| - UI_BoxFlag_DrawBackground| - UI_BoxFlag_DrawBackgroundBlur| - UI_BoxFlag_DrawDropShadow| - UI_BoxFlag_Clip| - UI_BoxFlag_AllowOverflowY| - UI_BoxFlag_ViewScroll| - UI_BoxFlag_Floating| - UI_BoxFlag_AnimatePos| - UI_BoxFlag_Clickable| - UI_BoxFlag_DefaultFocusNav, - "###hover_eval"); + UI_Focus(UI_FocusKind_On) + { + hover_eval_box = ui_build_box_from_stringf(UI_BoxFlag_DrawBorder| + UI_BoxFlag_DrawBackground| + UI_BoxFlag_DrawBackgroundBlur| + UI_BoxFlag_DrawDropShadow| + UI_BoxFlag_Clip| + UI_BoxFlag_AllowOverflowY| + UI_BoxFlag_ViewScroll| + UI_BoxFlag_Floating| + UI_BoxFlag_AnimatePos| + UI_BoxFlag_Clickable| + UI_BoxFlag_DefaultFocusNav, + "###hover_eval"); + } //- rjf: build contents UI_Parent(hover_eval_box) UI_PrefHeight(ui_px(row_height, 1.f)) @@ -4313,16 +4104,19 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: top bar + // ProfScope("build top bar") { ui_set_next_flags(UI_BoxFlag_DefaultFocusNav); UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_AltBackground)) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_AltText)) UI_BorderColor(df_rgba_from_theme_color(DF_ThemeColor_AltBorder)) - UI_Focus(ws->menu_bar_focused && window_is_focused && !ui_any_ctx_menu_is_open() && !hover_eval_is_open) + UI_Focus((ws->menu_bar_focused && window_is_focused && !ui_any_ctx_menu_is_open() && !hover_eval_is_open) ? UI_FocusKind_On : UI_FocusKind_Null) UI_Pane(top_bar_rect, str8_lit("###top_bar")) UI_WidthFill UI_Row + UI_Focus(UI_FocusKind_Null) { MemoryZeroArray(ui_top_parent()->parent->corner_radii); @@ -4543,7 +4337,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D UI_Padding(ui_pct(1, 0)) { ui_labelf("Search for commands by pressing "); - DF_CmdSpec *spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Commands); + DF_CmdSpec *spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand); UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_PlainText)) UI_Flags(UI_BoxFlag_DrawBorder) UI_TextAlignment(UI_TextAlign_Center) @@ -4717,7 +4511,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_CmdParams p = df_cmd_params_from_window(ws); p.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_LoadUser); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } } @@ -4747,7 +4541,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_CmdParams p = df_cmd_params_from_window(ws); p.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_LoadProfile); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } } @@ -4890,7 +4684,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: bottom bar + // ProfScope("build bottom bar") { B32 is_running = df_ctrl_targets_running() && df_ctrl_last_run_frame_idx() < df_frame_index(); @@ -5102,7 +4898,207 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// + //- rjf: prepare query view stack for the in-progress command + // + if(!df_cmd_spec_is_nil(ws->query_cmd_spec)) + { + DF_CmdSpec *cmd_spec = ws->query_cmd_spec; + DF_CmdParamSlot first_missing_slot = cmd_spec->info.query.slot; + DF_ViewSpec *view_spec = df_view_spec_from_cmd_param_slot(first_missing_slot); + if(ws->query_view_stack_top->spec != view_spec || + df_view_is_nil(ws->query_view_stack_top)) + { + Temp scratch = scratch_begin(&arena, 1); + + // rjf: clear existing query stack + for(DF_View *query_view = ws->query_view_stack_top, *next = 0; + !df_view_is_nil(query_view); + query_view = next) + { + next = query_view->next; + df_view_release(query_view); + } + + // rjf: determine default query + String8 default_query = {0}; + switch(first_missing_slot) + { + default:{}break; + case DF_CmdParamSlot_FilePath: + { + default_query = path_normalized_from_string(scratch.arena, df_current_path()); + default_query = push_str8f(scratch.arena, "%S/", default_query); + }break; + } + + // rjf: construct & push new view + DF_View *view = df_view_alloc(); + df_view_equip_spec(view, view_spec, &df_g_nil_entity, default_query, &df_g_nil_cfg_node); + ws->query_view_stack_top = view; + view->next = &df_g_nil_view; + + scratch_end(scratch); + } + } + + //////////////////////////// + //- rjf: animate query info + // + { + F32 rate = 1 - pow_f32(2, (-40.f * df_dt())); + F32 query_view_t_target = !df_view_is_nil(ws->query_view_stack_top); + F32 diff = abs_f32(query_view_t_target - ws->query_view_t); + if(diff > 0.005f) + { + df_gfx_request_frame(); + } + if(diff < 0.005f) + { + ws->query_view_t = query_view_t_target; + } + ws->query_view_t += (query_view_t_target - ws->query_view_t) * rate; + } + + //////////////////////////// + //- rjf: build query + // + if(!df_view_is_nil(ws->query_view_stack_top)) UI_Focus((window_is_focused && !ui_any_ctx_menu_is_open() && !ws->menu_bar_focused) ? UI_FocusKind_On : UI_FocusKind_Off) + { + DF_View *view = ws->query_view_stack_top; + DF_CmdSpec *cmd_spec = ws->query_cmd_spec; + DF_CmdQuery *query = &cmd_spec->info.query; + + //- rjf: calculate rectangles + Vec2F32 window_center = center_2f32(window_rect); + F32 query_container_width = dim_2f32(window_rect).x*0.5f; + F32 query_container_margin = ui_top_font_size()*8.f; + F32 query_line_edit_height = ui_top_font_size()*3.f; + Rng2F32 query_container_rect = r2f32p(window_center.x - query_container_width/2, + window_rect.y0 + query_container_margin, + window_center.x + query_container_width/2, + window_rect.y1 - query_container_margin); + if(ws->query_view_stack_top->spec == &df_g_nil_view_spec) + { + query_container_rect.y1 = query_container_rect.y0 + query_line_edit_height; + } + query_container_rect.y1 = mix_1f32(query_container_rect.y0, query_container_rect.y1, ws->query_view_t); + Rng2F32 query_container_content_rect = r2f32p(query_container_rect.x0, + query_container_rect.y0+query_line_edit_height, + query_container_rect.x1, + query_container_rect.y1); + + //- rjf: build floating query view container + UI_Box *query_container_box = &ui_g_nil_box; + UI_Rect(query_container_rect) UI_CornerRadius(ui_top_font_size()*0.2f) UI_ChildLayoutAxis(Axis2_Y) + { + query_container_box = ui_build_box_from_stringf(UI_BoxFlag_Floating| + UI_BoxFlag_AllowOverflow| + UI_BoxFlag_Clickable| + UI_BoxFlag_Clip| + UI_BoxFlag_DrawBorder| + UI_BoxFlag_DrawBackground| + UI_BoxFlag_DrawBackgroundBlur| + UI_BoxFlag_DrawDropShadow, + "panel_query_container"); + } + + //- rjf: build query text input + UI_Parent(query_container_box) + UI_WidthFill UI_PrefHeight(ui_px(query_line_edit_height, 1.f)) + { + ui_set_next_flags(UI_BoxFlag_DrawDropShadow|UI_BoxFlag_DrawBorder); + UI_Row + { + UI_PrefWidth(ui_text_dim(10.f, 1.f)) + { + ui_spacer(ui_em(0.5f, 1.f)); + DF_IconKind icon_kind = ws->query_cmd_spec->info.canonical_icon_kind; + if(icon_kind != DF_IconKind_Null) + { + UI_Font(df_font_from_slot(DF_FontSlot_Icons)) ui_label(df_g_icon_kind_text_table[icon_kind]); + } + ui_labelf("%S", ws->query_cmd_spec->info.display_name); + ui_spacer(ui_em(0.5f, 1.f)); + } + UI_Font((query->flags & DF_CmdQueryFlag_CodeInput) ? df_font_from_slot(DF_FontSlot_Code) : ui_top_font()) + { + UI_Signal sig = df_line_edit(DF_LineEditFlag_Border| + (DF_LineEditFlag_CodeContents * !!(query->flags & DF_CmdQueryFlag_CodeInput)), + 0, + &view->query_cursor, + &view->query_mark, + view->query_buffer, + sizeof(view->query_buffer), + &view->query_string_size, + 0, + str8(view->query_buffer, view->query_string_size), + str8_lit("###query_text_input")); + if(sig.pressed) + { + DF_CmdParams p = df_cmd_params_from_window(ws); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); + } + } + } + } + + //- rjf: build query view + UI_Parent(query_container_box) UI_WidthFill UI_Focus(UI_FocusKind_Null) + { + DF_ViewSpec *view_spec = view->spec; + DF_ViewUIFunctionType *build_view_ui_function = view_spec->info.ui_hook; + build_view_ui_function(ws, &df_g_nil_panel, view, query_container_content_rect); + } + + //- rjf: query submission + if(ui_is_focus_active()) + { + DF_View *view = ws->query_view_stack_top; + if(os_key_press(events, ws->os, 0, OS_Key_Esc)) + { + DF_CmdParams params = df_cmd_params_from_window(ws); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CancelQuery)); + } + else if(os_key_press(events, ws->os, 0, OS_Key_Return)) + { + Temp scratch = scratch_begin(&arena, 1); + DF_CmdParams params = df_cmd_params_from_window(ws); + DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); + String8 error = df_cmd_params_apply_spec_query(scratch.arena, &ctrl_ctx, ¶ms, ws->query_cmd_spec, str8(view->query_buffer, view->query_string_size)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); + if(error.size != 0) + { + DF_CmdParams p = df_cmd_params_from_window(ws); + p.string = error; + df_cmd_params_mark_slot(&p, DF_CmdParamSlot_String); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error)); + } + scratch_end(scratch); + } + } + + //- rjf: take fallthrough interaction in query view + { + UI_Signal sig = ui_signal_from_box(query_container_box); + if(sig.pressed) + { + DF_CmdParams p = df_cmd_params_from_window(ws); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); + } + } + + //- rjf: build darkening overlay for rest of screen + UI_BackgroundColor(mix_4f32(df_rgba_from_theme_color(DF_ThemeColor_InactivePanelOverlay), v4f32(0, 0, 0, 0), 1-ws->query_view_t)) + UI_Rect(window_rect) + { + ui_build_box_from_key(UI_BoxFlag_DrawBackground, ui_key_zero()); + } + } + + //////////////////////////// //- rjf: panel non-leaf UI (drag boundaries) + // B32 is_changing_panel_boundaries = 0; ProfScope("non-leaf panel UI") for(DF_Panel *panel = ws->root_panel; @@ -5188,811 +5184,665 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: panel leaf UI + // ProfScope("leaf panel UI") for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) { - //- rjf: continue on non-leaf panels - if(!df_panel_is_nil(panel->first)) + if(!df_panel_is_nil(panel->first)) {continue;} + B32 panel_is_focused = (window_is_focused && + !ws->menu_bar_focused && + !query_is_open && + !ui_any_ctx_menu_is_open() && + !hover_eval_is_open && + ws->focused_panel == panel); + UI_Focus(panel_is_focused ? UI_FocusKind_Null : UI_FocusKind_Off) { - continue; - } - - //- rjf: grab rect & dimensions & info - Rng2F32 panel_rect = df_rect_from_panel(content_rect, ws->root_panel, panel); - panel_rect = pad_2f32(panel_rect, -1.f); - F32 tab_bar_rheight = ui_em(3.0f, 1.f).value; - F32 tab_bar_vheight = ui_em(2.6f, 1.f).value; - F32 tab_bar_rv_diff = tab_bar_rheight - tab_bar_vheight; - F32 tab_spacing = ui_em(0.4f, 1.f).value; - Rng2F32 tab_bar_rect = r2f32p(panel_rect.x0, panel_rect.y0, panel_rect.x1, panel_rect.y0 + tab_bar_rheight); - Rng2F32 content_rect = r2f32p(panel_rect.x0, panel_rect.y0+tab_bar_vheight, panel_rect.x1, panel_rect.y1); - if(panel->tab_side == Side_Max) - { - tab_bar_rect.y0 = panel_rect.y1 - tab_bar_rheight; - tab_bar_rect.y1 = panel_rect.y1; - content_rect.y0 = panel_rect.y0; - content_rect.y1 = panel_rect.y1 - tab_bar_vheight; - } - if(panel->hide_tab_bar) - { - content_rect = panel_rect; - } - - //- rjf: grab view that is receiving a query from the user - DF_View *query_view = df_query_view_from_panel(panel); - - //- rjf: extract query view command/view specs - DF_CmdSpec *query_cmd_spec = query_view->cmd_spec; - DF_ViewSpec *query_view_spec = df_view_spec_from_cmd_spec(query_cmd_spec); - - //- rjf: determine focus - B32 ctx_menu_is_focused = ui_any_ctx_menu_is_open(); - B32 panel_is_focused = (ws->focused_panel == panel); - B32 query_is_focused = (panel_is_focused && !df_view_is_nil(query_view)); - - //- rjf: begin panel content window - UI_Box *panel_box = &ui_g_nil_box; - UI_Rect(content_rect) UI_ChildLayoutAxis(Axis2_Y) UI_CornerRadius(0) - { - Vec4F32 bg_color = df_rgba_from_theme_color(DF_ThemeColor_PlainBackground); - bg_color.x *= bg_color.w; - bg_color.y *= bg_color.w; - bg_color.z *= bg_color.w; - bg_color.w = 1; - UI_BackgroundColor(bg_color) UI_Focus(window_is_focused && !ctx_menu_is_focused && panel_is_focused && !ws->menu_bar_focused && (!hover_eval_is_open || any_query_is_focused)) + ////////////////////////// + //- rjf: calculate UI rectangles + // + Rng2F32 panel_rect = df_rect_from_panel(content_rect, ws->root_panel, panel); + panel_rect = pad_2f32(panel_rect, -1.f); + F32 tab_bar_rheight = ui_top_font_size()*3.f; + F32 tab_bar_vheight = ui_top_font_size()*2.6f; + F32 tab_bar_rv_diff = tab_bar_rheight - tab_bar_vheight; + F32 tab_spacing = ui_top_font_size()*0.4f; + Rng2F32 tab_bar_rect = r2f32p(panel_rect.x0, panel_rect.y0, panel_rect.x1, panel_rect.y0 + tab_bar_rheight); + Rng2F32 content_rect = r2f32p(panel_rect.x0, panel_rect.y0+tab_bar_vheight, panel_rect.x1, panel_rect.y1); + if(panel->tab_side == Side_Max) { - UI_Key panel_key = df_ui_key_from_panel(panel); - if(!panel_is_focused) - { - ui_set_next_overlay_color(df_rgba_from_theme_color(DF_ThemeColor_InactivePanelOverlay)); - } - panel_box = ui_build_box_from_key(UI_BoxFlag_MouseClickable| - UI_BoxFlag_Clip| - UI_BoxFlag_DrawBorder| - UI_BoxFlag_DrawBackground| - (!panel_is_focused*UI_BoxFlag_DrawOverlay), - panel_key); - ui_push_parent(panel_box); + tab_bar_rect.y0 = panel_rect.y1 - tab_bar_rheight; + tab_bar_rect.y1 = panel_rect.y1; + content_rect.y0 = panel_rect.y0; + content_rect.y1 = panel_rect.y1 - tab_bar_vheight; } - ui_push_pref_width(ui_pct(1, 0)); - } - - //- rjf: build minified floating tab indicator - if(panel->hide_tab_bar != 0) - { - F32 tab_size = ui_top_font_size()*2.f; - Rng2F32 tab_rect = r2f32p(0, 0, tab_size, tab_size); + + ////////////////////////// + //- rjf: build panel container box + // + UI_Box *panel_box = &ui_g_nil_box; + UI_Rect(content_rect) UI_ChildLayoutAxis(Axis2_Y) UI_CornerRadius(0) UI_Focus(UI_FocusKind_On) { - Vec4F32 tab_color = df_rgba_from_theme_color(DF_ThemeColor_TabActive); - if(ws->focused_panel != panel) + UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_PlainBackground)) { - tab_color.w *= 0.5f; - } - ui_set_next_background_color(tab_color); - ui_set_next_hover_cursor(OS_Cursor_HandPoint); - UI_Box *tab_box = &ui_g_nil_box; - UI_Rect(tab_rect) UI_CornerRadius11(tab_size/2) - { - tab_box = ui_build_box_from_stringf(UI_BoxFlag_FloatingX| - UI_BoxFlag_FloatingY| - UI_BoxFlag_DrawBorder| - UI_BoxFlag_DrawBackground| - UI_BoxFlag_DrawDropShadow| - UI_BoxFlag_DrawHotEffects| - UI_BoxFlag_DrawActiveEffects| - UI_BoxFlag_Clickable, "###tab_%p", panel); - } - UI_Signal sig = ui_signal_from_box(tab_box); - UI_Parent(tab_box) - { - UI_WidthFill UI_TextAlignment(UI_TextAlign_Center) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - UI_Font(ui_icon_font()) + UI_Key panel_key = df_ui_key_from_panel(panel); + if(ws->focused_panel != panel) { - ui_label(df_g_icon_kind_text_table[DF_IconKind_Info]); + ui_set_next_overlay_color(df_rgba_from_theme_color(DF_ThemeColor_InactivePanelOverlay)); } + panel_box = ui_build_box_from_key(UI_BoxFlag_MouseClickable| + UI_BoxFlag_Clip| + UI_BoxFlag_DrawBorder| + UI_BoxFlag_DrawBackground| + ((ws->focused_panel != panel)*UI_BoxFlag_DrawOverlay), + panel_key); } + } + +#if 0 + //- rjf: panel query ui + if(!df_view_is_nil(query_view)) UI_PrefHeight(ui_em(2.5f, 1.f)) + { + DF_IconKind icon_kind = query_cmd_spec->info.canonical_icon_kind; - // rjf: hover tooltip - if(sig.hovering) + // rjf: begin + ui_set_next_background_color(df_rgba_from_theme_color(DF_ThemeColor_QueryBar)); + ui_set_next_flags(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawDropShadow); + if(query_view_spec == &df_g_nil_view_spec) { - Temp scratch = scratch_begin(&arena, 1); - DF_View *view = panel->selected_stable_view; - DF_IconKind icon_kind = df_icon_kind_from_view(view); - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); - String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view); - if(label.size != 0) UI_Tooltip UI_PrefWidth(ui_children_sum(1)) UI_Row + F32 padding = ui_em(5.25f, 1.f).value; + F32 corner_radius = ui_top_font_size() * 0.2f; + F32 width = dim_2f32(content_rect).x*0.7f; + width = Max(width, ui_top_font_size()*40); + width = Min(width, dim_2f32(content_rect).x - padding*2); + ui_set_next_fixed_x(padding/2); + ui_set_next_fixed_y(padding/2); + ui_set_next_fixed_width(width); + ui_set_next_fixed_height(ui_em(2.5f, 1.f).value); + ui_set_next_corner_radius_00(corner_radius); + ui_set_next_corner_radius_01(corner_radius); + ui_set_next_corner_radius_10(corner_radius); + ui_set_next_corner_radius_11(corner_radius); + ui_set_next_flags(ui_top_flags()|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY); + } + ui_named_row_begin(str8_lit("query_bar")); + + // rjf: build contents + UI_TextAlignment(UI_TextAlign_Center) + UI_PrefWidth(ui_text_dim(10, 1)) + UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) + { + if(icon_kind != DF_IconKind_Null) { - if(icon_kind != DF_IconKind_Null) - { - UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - UI_Font(df_font_from_slot(DF_FontSlot_Icons)) - UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) - UI_TextAlignment(UI_TextAlign_Center) - UI_PrefWidth(ui_em(2.25f, 1.f)) - ui_label(df_g_icon_kind_text_table[icon_kind]); - } - UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - UI_PrefWidth(ui_text_dim(10, 1)) - ui_label(label); + ui_spacer(ui_em(0.3f, 1.f)); + UI_Font(df_font_from_slot(DF_FontSlot_Icons)) + UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) + UI_PrefWidth(ui_em(2.25f, 1.f)) + UI_HeightFill + ui_label(df_g_icon_kind_text_table[icon_kind]); } - scratch_end(scratch); + ui_labelf("%S", query_cmd_spec->info.display_name); } - - // rjf: consume events for tab clicking + B32 query_is_code = !!(query_cmd_spec->info.flags & DF_CmdSpecFlag_QueryIsCode); + UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_PlainBackground)) + UI_CornerRadius00(ui_em(0.6f, 1.f).value) + UI_CornerRadius01(ui_em(0.6f, 1.f).value) + UI_WidthFill + UI_Focus(!ctx_menu_is_focused && panel_is_focused && query_is_focused && !ws->menu_bar_focused) + UI_Font(query_is_code ? df_font_from_slot(DF_FontSlot_Code) : ui_top_font()) { - DF_View *view = panel->selected_stable_view; + query_view->query.str = query_view->query_buffer; + UI_Signal sig = df_line_edit(query_is_code*DF_LineEditFlag_CodeContents, 0, &query_view->query_cursor, &query_view->query_mark, query_view->query_buffer, sizeof(query_view->query_buffer), &query_view->query.size, 0, query_view->query, str8_lit("###cmd_query_str")); if(sig.pressed) { DF_CmdParams p = df_cmd_params_from_panel(ws, panel); df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); } - else if(sig.dragging && !df_drag_is_active() && length_2f32(ui_drag_delta()) > 10.f) - { - DF_DragDropPayload payload = {0}; - { - payload.key = sig.box->key; - payload.panel = df_handle_from_panel(panel); - payload.view = df_handle_from_view(view); - } - df_drag_begin(&payload); - } - else if(sig.right_clicked) - { - ui_ctx_menu_open(ws->tab_ctx_menu_key, sig.box->key, v2f32(0, sig.box->rect.y1-sig.box->rect.y0)); - ws->tab_ctx_menu_view = df_handle_from_view(view); - } } + + // rjf: end + ui_named_row_end(); } - } - - //- rjf: panel query ui - if(!df_view_is_nil(query_view)) UI_PrefHeight(ui_em(2.5f, 1.f)) - { - DF_IconKind icon_kind = query_cmd_spec->info.canonical_icon_kind; +#endif - // rjf: begin - ui_set_next_background_color(df_rgba_from_theme_color(DF_ThemeColor_QueryBar)); - ui_set_next_flags(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawDropShadow); - if(query_view_spec == &df_g_nil_view_spec) + ////////////////////////// + //- rjf: flash animation for stable view + // + UI_Parent(panel_box) { - F32 padding = ui_em(5.25f, 1.f).value; - F32 corner_radius = ui_top_font_size() * 0.2f; - F32 width = dim_2f32(content_rect).x*0.7f; - width = Max(width, ui_top_font_size()*40); - width = Min(width, dim_2f32(content_rect).x - padding*2); - ui_set_next_fixed_x(padding/2); - ui_set_next_fixed_y(padding/2); - ui_set_next_fixed_width(width); - ui_set_next_fixed_height(ui_em(2.5f, 1.f).value); - ui_set_next_corner_radius_00(corner_radius); - ui_set_next_corner_radius_01(corner_radius); - ui_set_next_corner_radius_10(corner_radius); - ui_set_next_corner_radius_11(corner_radius); - ui_set_next_flags(ui_top_flags()|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY); - } - ui_named_row_begin(str8_lit("query_bar")); - - // rjf: build contents - UI_TextAlignment(UI_TextAlign_Center) - UI_PrefWidth(ui_text_dim(10, 1)) - UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - { - if(icon_kind != DF_IconKind_Null) + DF_View *view = df_view_from_handle(panel->selected_tab_view); + if(view->flash_t >= 0.001f) { - ui_spacer(ui_em(0.3f, 1.f)); - UI_Font(df_font_from_slot(DF_FontSlot_Icons)) - UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) - UI_PrefWidth(ui_em(2.25f, 1.f)) - UI_HeightFill - ui_label(df_g_icon_kind_text_table[icon_kind]); - } - ui_labelf("%S", query_cmd_spec->info.display_name); - } - B32 query_is_code = !!(query_cmd_spec->info.flags & DF_CmdSpecFlag_QueryIsCode); - UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_PlainBackground)) - UI_CornerRadius00(ui_em(0.6f, 1.f).value) - UI_CornerRadius01(ui_em(0.6f, 1.f).value) - UI_WidthFill - UI_Focus(!ctx_menu_is_focused && panel_is_focused && query_is_focused && !ws->menu_bar_focused) - UI_Font(query_is_code ? df_font_from_slot(DF_FontSlot_Code) : ui_top_font()) - { - query_view->query.str = query_view->query_buffer; - UI_Signal sig = df_line_edit(query_is_code*DF_LineEditFlag_CodeContents, 0, &query_view->query_cursor, &query_view->query_mark, query_view->query_buffer, sizeof(query_view->query_buffer), &query_view->query.size, 0, query_view->query, str8_lit("###cmd_query_str")); - if(sig.pressed) - { - DF_CmdParams p = df_cmd_params_from_panel(ws, panel); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); + UI_Box *panel_box = ui_top_parent(); + Rng2F32 panel_rect = panel_box->rect; + Vec2F32 panel_rect_dim = dim_2f32(panel_rect); + Vec4F32 color = df_rgba_from_theme_color(DF_ThemeColor_Highlight0); + color.w *= view->flash_t; + color.w *= 0.35f; + ui_set_next_fixed_x(0); + ui_set_next_fixed_y(0); + ui_set_next_fixed_width(panel_rect_dim.x); + ui_set_next_fixed_height(panel_rect_dim.y); + ui_set_next_background_color(color); + ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); } } - // rjf: end - ui_named_row_end(); - } - - //- rjf: flash animation for stable view - { - DF_View *view = panel->selected_stable_view; - if(view->flash_t >= 0.001f) + ////////////////////////// + //- rjf: loading animation for stable view + // + UI_Parent(panel_box) { - UI_Box *panel_box = ui_top_parent(); - Rng2F32 panel_rect = panel_box->rect; - Vec2F32 panel_rect_dim = dim_2f32(panel_rect); - Vec4F32 color = df_rgba_from_theme_color(DF_ThemeColor_Highlight0); - color.w *= view->flash_t; - color.w *= 0.35f; - ui_set_next_fixed_x(0); - ui_set_next_fixed_y(0); - ui_set_next_fixed_width(panel_rect_dim.x); - ui_set_next_fixed_height(panel_rect_dim.y); - ui_set_next_background_color(color); - ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); - } - } - - //- rjf: loading animation for stable view - { - DF_View *view = panel->selected_stable_view; - if(view->loading_t >= 0.001f) - { - // rjf: set up dimensions - F32 edge_padding = 30.f; - F32 width = ui_top_font_size() * 10; - F32 height = ui_top_font_size() * 1.f; - F32 min_thickness = ui_top_font_size()/2; - F32 trail = ui_top_font_size() * 4; - F32 t = pow_f32(sin_f32((F32)df_time_in_seconds() / 1.8f), 2.f); - F64 v = 1.f - abs_f32(0.5f - t); - UI_Box *panel_box = ui_top_parent(); - Rng2F32 panel_rect = panel_box->rect; - - // rjf: colors - Vec4F32 bg_color = v4f32(0.1f, 0.1f, 0.1f, 1); - Vec4F32 bd_color = df_rgba_from_theme_color(DF_ThemeColor_PlainBorder); - Vec4F32 hl_color = df_rgba_from_theme_color(DF_ThemeColor_Highlight0); - bg_color.w *= view->loading_t; - bd_color.w *= view->loading_t; - hl_color.w *= view->loading_t; - - // rjf: grab animation params - F32 bg_work_indicator_t = 1.f; - - // rjf: build indicator - UI_CornerRadius(height/3.f) + DF_View *view = df_view_from_handle(panel->selected_tab_view); + if(view->loading_t >= 0.001f) { - // rjf: rects - Rng2F32 indicator_region_rect = - r2f32p((panel_rect.x0 + panel_rect.x1)/2 - width/2 - panel_rect.x0, - (panel_rect.y0 + panel_rect.y1)/2 - height/2 - panel_rect.y0, - (panel_rect.x0 + panel_rect.x1)/2 + width/2 - panel_rect.x0, - (panel_rect.y0 + panel_rect.y1)/2 + height/2 - panel_rect.y0); - Rng2F32 indicator_rect = - r2f32p(indicator_region_rect.x0 + width*t - min_thickness/2 - trail*v, - indicator_region_rect.y0, - indicator_region_rect.x0 + width*t + min_thickness/2 + trail*v, - indicator_region_rect.y1); - indicator_rect.x0 = Clamp(indicator_region_rect.x0, indicator_rect.x0, indicator_region_rect.x1); - indicator_rect.x1 = Clamp(indicator_region_rect.x0, indicator_rect.x1, indicator_region_rect.x1); - indicator_rect = pad_2f32(indicator_rect, -1.f); + // rjf: set up dimensions + F32 edge_padding = 30.f; + F32 width = ui_top_font_size() * 10; + F32 height = ui_top_font_size() * 1.f; + F32 min_thickness = ui_top_font_size()/2; + F32 trail = ui_top_font_size() * 4; + F32 t = pow_f32(sin_f32((F32)df_time_in_seconds() / 1.8f), 2.f); + F64 v = 1.f - abs_f32(0.5f - t); + Rng2F32 panel_rect = panel_box->rect; - // rjf: does the view have loading *progress* info? -> draw extra progress layer - if(view->loading_progress_v != view->loading_progress_v_target) + // rjf: colors + Vec4F32 bg_color = v4f32(0.1f, 0.1f, 0.1f, 1); + Vec4F32 bd_color = df_rgba_from_theme_color(DF_ThemeColor_PlainBorder); + Vec4F32 hl_color = df_rgba_from_theme_color(DF_ThemeColor_Highlight0); + bg_color.w *= view->loading_t; + bd_color.w *= view->loading_t; + hl_color.w *= view->loading_t; + + // rjf: grab animation params + F32 bg_work_indicator_t = 1.f; + + // rjf: build indicator + UI_CornerRadius(height/3.f) { - F64 pct_done_f64 = ((F64)view->loading_progress_v/(F64)view->loading_progress_v_target); - F32 pct_done = (F32)pct_done_f64; - ui_set_next_background_color(v4f32(1, 1, 1, 0.2f*view->loading_t)); + // rjf: rects + Rng2F32 indicator_region_rect = + r2f32p((panel_rect.x0 + panel_rect.x1)/2 - width/2 - panel_rect.x0, + (panel_rect.y0 + panel_rect.y1)/2 - height/2 - panel_rect.y0, + (panel_rect.x0 + panel_rect.x1)/2 + width/2 - panel_rect.x0, + (panel_rect.y0 + panel_rect.y1)/2 + height/2 - panel_rect.y0); + Rng2F32 indicator_rect = + r2f32p(indicator_region_rect.x0 + width*t - min_thickness/2 - trail*v, + indicator_region_rect.y0, + indicator_region_rect.x0 + width*t + min_thickness/2 + trail*v, + indicator_region_rect.y1); + indicator_rect.x0 = Clamp(indicator_region_rect.x0, indicator_rect.x0, indicator_region_rect.x1); + indicator_rect.x1 = Clamp(indicator_region_rect.x0, indicator_rect.x1, indicator_region_rect.x1); + indicator_rect = pad_2f32(indicator_rect, -1.f); + + // rjf: does the view have loading *progress* info? -> draw extra progress layer + if(view->loading_progress_v != view->loading_progress_v_target) + { + F64 pct_done_f64 = ((F64)view->loading_progress_v/(F64)view->loading_progress_v_target); + F32 pct_done = (F32)pct_done_f64; + ui_set_next_background_color(v4f32(1, 1, 1, 0.2f*view->loading_t)); + ui_set_next_fixed_x(indicator_region_rect.x0); + ui_set_next_fixed_y(indicator_region_rect.y0); + ui_set_next_fixed_width(dim_2f32(indicator_region_rect).x*pct_done); + ui_set_next_fixed_height(dim_2f32(indicator_region_rect).y); + ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); + } + + // rjf: fill + ui_set_next_background_color(hl_color); + ui_set_next_fixed_x(indicator_rect.x0); + ui_set_next_fixed_y(indicator_rect.y0); + ui_set_next_fixed_width(dim_2f32(indicator_rect).x); + ui_set_next_fixed_height(dim_2f32(indicator_rect).y); + ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); + + // rjf: animated bar + ui_set_next_background_color(bg_color); + ui_set_next_border_color(bd_color); ui_set_next_fixed_x(indicator_region_rect.x0); ui_set_next_fixed_y(indicator_region_rect.y0); - ui_set_next_fixed_width(dim_2f32(indicator_region_rect).x*pct_done); + ui_set_next_fixed_width(dim_2f32(indicator_region_rect).x); ui_set_next_fixed_height(dim_2f32(indicator_region_rect).y); - ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); + UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBorder|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY|UI_BoxFlag_Clickable, "bg_system_status"); + UI_Signal sig = ui_signal_from_box(box); } - // rjf: fill - ui_set_next_background_color(hl_color); - ui_set_next_fixed_x(indicator_rect.x0); - ui_set_next_fixed_y(indicator_rect.y0); - ui_set_next_fixed_width(dim_2f32(indicator_rect).x); - ui_set_next_fixed_height(dim_2f32(indicator_rect).y); - ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); - - // rjf: animated bar - ui_set_next_background_color(bg_color); - ui_set_next_border_color(bd_color); - ui_set_next_fixed_x(indicator_region_rect.x0); - ui_set_next_fixed_y(indicator_region_rect.y0); - ui_set_next_fixed_width(dim_2f32(indicator_region_rect).x); - ui_set_next_fixed_height(dim_2f32(indicator_region_rect).y); - UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBorder|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY|UI_BoxFlag_Clickable, "bg_system_status"); - UI_Signal sig = ui_signal_from_box(box); + // rjf: build background + UI_WidthFill UI_HeightFill + { + ui_set_next_background_color(bg_color); + ui_set_next_blur_size(10.f*view->loading_t); + ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBackgroundBlur|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); + } + } + } + + ////////////////////////// + //- rjf: build selected tab view + // + UI_Parent(panel_box) + UI_Focus(panel_is_focused ? UI_FocusKind_Null : UI_FocusKind_Off) + UI_WidthFill + { + //- rjf: build view container + UI_Box *view_container_box = &ui_g_nil_box; + UI_FixedWidth(dim_2f32(content_rect).x) + UI_FixedHeight(dim_2f32(content_rect).y) + UI_ChildLayoutAxis(Axis2_Y) + { + view_container_box = ui_build_box_from_key(0, ui_key_zero()); } - // rjf: build background - UI_WidthFill UI_HeightFill + //- rjf: build empty view + UI_Parent(view_container_box) if(df_view_is_nil(df_view_from_handle(panel->selected_tab_view))) { - ui_set_next_background_color(bg_color); - ui_set_next_blur_size(10.f*view->loading_t); - ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBackgroundBlur|UI_BoxFlag_FloatingX|UI_BoxFlag_FloatingY, ui_key_zero()); + DF_VIEW_UI_FUNCTION_NAME(Empty)(ws, panel, &df_g_nil_view, content_rect); + } + + //- rjf: build tab view + UI_Parent(view_container_box) if(!df_view_is_nil(df_view_from_handle(panel->selected_tab_view))) + { + DF_View *view = df_view_from_handle(panel->selected_tab_view); + DF_ViewSpec *view_spec = view->spec; + DF_ViewUIFunctionType *build_view_ui_function = view_spec->info.ui_hook; + build_view_ui_function(ws, panel, view, content_rect); } } - } - - //- rjf: determine which view to build ui for - B32 should_do_query_view = !df_view_is_nil(query_view) && query_view_spec != &df_g_nil_view_spec; - B32 should_do_empty_view = (df_view_is_nil(panel->selected_stable_view) && df_view_is_nil(panel->query_view_stack_top)); - B32 should_do_stable_view = (!df_view_is_nil(panel->selected_stable_view) && (df_view_is_nil(query_view) || query_view_spec == &df_g_nil_view_spec)); - - //- rjf: build view container - UI_Box *view_container_box = &ui_g_nil_box; - UI_Focus(should_do_query_view || should_do_empty_view || (should_do_stable_view && !query_is_focused)) - UI_FixedWidth(dim_2f32(content_rect).x) - UI_FixedHeight(dim_2f32(content_rect).y) - UI_ChildLayoutAxis(Axis2_Y) - { - view_container_box = ui_build_box_from_key(0, ui_key_zero()); - } - - //- rjf: empty view - UI_Parent(view_container_box) if(should_do_empty_view) - { - DF_VIEW_UI_FUNCTION_NAME(Empty)(ws, panel, &df_g_nil_view, content_rect); - } - - //- rjf: view for query - UI_Parent(view_container_box) if(should_do_query_view) - { - DF_View *view = query_view; - DF_ViewUIFunctionType *build_view_ui_function = query_view_spec->info.ui_hook; - build_view_ui_function(ws, panel, view, content_rect); - } - - //- rjf: selected stable tab view - UI_Parent(view_container_box) if(should_do_stable_view) - { - DF_View *view = panel->selected_stable_view; - for(DF_View *v = view; !df_view_is_nil(v); v = v->callee_view) + + ////////////////////////// + //- rjf: consume panel fallthrough interaction events + // + UI_Signal panel_sig = ui_signal_from_box(panel_box); + if(panel_sig.pressed) { - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(v->cmd_spec); - if(view_spec != &df_g_nil_view_spec) - { - view = v; - } + DF_CmdParams p = df_cmd_params_from_panel(ws, panel); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); } - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd_spec); - DF_ViewUIFunctionType *build_view_ui_function = view_spec->info.ui_hook; - build_view_ui_function(ws, panel, view, content_rect); - } - - //- rjf: end panel parent - ui_pop_pref_width(); - ui_pop_parent(); - - //- rjf: panel fallthrough interaction - UI_Signal panel_sig = ui_signal_from_box(panel_box); - if(panel_sig.pressed) - { - DF_CmdParams p = df_cmd_params_from_panel(ws, panel); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); - } - - //- rjf: build tab bar - if(panel->hide_tab_bar == 0) UI_Focus(0) - { - Temp scratch = scratch_begin(&arena, 1); - // rjf: types - typedef struct DropSite DropSite; - struct DropSite - { - F32 p; - DF_View *prev_view; - }; - - // rjf: prep output data - DF_View *next_selected_stable_view = panel->selected_stable_view; - UI_Box *tab_bar_box = &ui_g_nil_box; - U64 drop_site_count = panel->stable_view_count+1; - DropSite *drop_sites = push_array(scratch.arena, DropSite, drop_site_count); - F32 drop_site_max_p = 0; - U64 view_idx = 0; - - // rjf: build - UI_Rect(tab_bar_rect) UI_CornerRadius(0) - { - tab_bar_box = ui_build_box_from_stringf(UI_BoxFlag_Clip|UI_BoxFlag_ViewScroll|UI_BoxFlag_Clickable, "tab_bar_%p", panel); - } - UI_Parent(tab_bar_box) UI_PrefHeight(ui_pct(1, 0)) + ////////////////////////// + //- rjf: build tab bar + // + UI_Focus(UI_FocusKind_Off) { Temp scratch = scratch_begin(&arena, 1); - F32 corner_radius = ui_em(0.6f, 1.f).value; - ui_spacer(ui_px(1.f, 1.f)); - // rjf: build tab list ctx menu - UI_Key tab_list_ctx_menu_key = ui_key_from_stringf(ui_key_zero(), "###tab_list_ctx_menu_%p", panel); - UI_CtxMenu(tab_list_ctx_menu_key) UI_PrefWidth(ui_em(22.f, 1.f)) UI_PrefHeight(ui_em(2.25f, 1.f)) + // rjf: types + typedef struct DropSite DropSite; + struct DropSite { - for(DF_View *view = panel->first_stable_view; !df_view_is_nil(view); view = view->next) - { - B32 view_is_selected = view == panel->selected_stable_view; - DF_IconKind icon_kind = df_icon_kind_from_view(view); - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); - String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view); - if(view_is_selected) - { - ui_set_next_background_color(df_rgba_from_theme_color(DF_ThemeColor_TabActive)); - } - ui_set_next_hover_cursor(OS_Cursor_HandPoint); - UI_Box *tab_list_item_box = ui_build_box_from_stringf(UI_BoxFlag_DrawHotEffects| - UI_BoxFlag_DrawActiveEffects| - UI_BoxFlag_DrawBorder| - UI_BoxFlag_DrawBackground| - UI_BoxFlag_Clickable, - "###tab_list_item_box_%p", view); - UI_Parent(tab_list_item_box) - { - UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - UI_Font(df_font_from_slot(DF_FontSlot_Icons)) - UI_PrefWidth(ui_em(3.f, 1.f)) - UI_TextAlignment(UI_TextAlign_Center) - ui_label(df_g_icon_kind_text_table[icon_kind]); - UI_PrefWidth(ui_text_dim(10.f, 1.f)) - ui_label(label); - } - UI_Signal sig = ui_signal_from_box(tab_list_item_box); - if(sig.clicked) - { - next_selected_stable_view = view; - DF_CmdParams p = df_cmd_params_from_panel(ws, panel); - df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); - } - } + F32 p; + DF_View *prev_view; + }; + + // rjf: prep output data + DF_View *next_selected_tab_view = df_view_from_handle(panel->selected_tab_view); + UI_Box *tab_bar_box = &ui_g_nil_box; + U64 drop_site_count = panel->tab_view_count+1; + DropSite *drop_sites = push_array(scratch.arena, DropSite, drop_site_count); + F32 drop_site_max_p = 0; + U64 view_idx = 0; + + // rjf: build + UI_Rect(tab_bar_rect) UI_CornerRadius(0) + { + tab_bar_box = ui_build_box_from_stringf(UI_BoxFlag_Clip|UI_BoxFlag_ViewScroll|UI_BoxFlag_Clickable, "tab_bar_%p", panel); } - - // rjf: build tab list button - if(panel->stable_view_count > 5) UI_PrefWidth(ui_em(2.25f, 1.f)) UI_PrefHeight(ui_px(tab_bar_vheight, 1)) + UI_Parent(tab_bar_box) UI_PrefHeight(ui_pct(1, 0)) { - UI_Signal sig = df_icon_buttonf(DF_IconKind_List, "###tab_list_%p", panel); - if(sig.clicked) + Temp scratch = scratch_begin(&arena, 1); + F32 corner_radius = ui_em(0.6f, 1.f).value; + ui_spacer(ui_px(1.f, 1.f)); + + // rjf: build tab list ctx menu + UI_Key tab_list_ctx_menu_key = ui_key_from_stringf(ui_key_zero(), "###tab_list_ctx_menu_%p", panel); + UI_CtxMenu(tab_list_ctx_menu_key) UI_PrefWidth(ui_em(22.f, 1.f)) UI_PrefHeight(ui_em(2.25f, 1.f)) { - if(ui_ctx_menu_is_open(tab_list_ctx_menu_key)) + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next) { - ui_ctx_menu_close(); - } - else - { - ui_ctx_menu_open(tab_list_ctx_menu_key, sig.box->key, v2f32(0, dim_2f32(sig.box->rect).y)); - } - } - } - - // rjf: build tabs - UI_PrefWidth(ui_em(18.f, 0.5f)) - UI_CornerRadius00(panel->tab_side == Side_Min ? corner_radius : 0) - UI_CornerRadius01(panel->tab_side == Side_Min ? 0 : corner_radius) - UI_CornerRadius10(panel->tab_side == Side_Min ? corner_radius : 0) - UI_CornerRadius11(panel->tab_side == Side_Min ? 0 : corner_radius) - for(DF_View *view = panel->first_stable_view; !df_view_is_nil(view); view = view->next, view_idx += 1) - { - temp_end(scratch); - - // rjf: gather info for this tab - B32 view_is_selected = view == panel->selected_stable_view; - DF_IconKind icon_kind = df_icon_kind_from_view(view); - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); - String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view); - - // rjf: begin vertical region for this tab - ui_set_next_child_layout_axis(Axis2_Y); - UI_Box *tab_column_box = ui_build_box_from_stringf(!is_changing_panel_boundaries*UI_BoxFlag_AnimatePosX, "tab_column_%p", view); - - // rjf: build tab container box - UI_Parent(tab_column_box) UI_PrefHeight(ui_px(tab_bar_vheight, 1)) - { - if((!view_is_selected && panel->tab_side == Side_Min) || - (view_is_selected && panel->tab_side == Side_Max)) - { - ui_spacer(ui_px(tab_bar_rv_diff, 1.f)); - } - else - { - ui_spacer(ui_px(1.f, 1.f)); - } - Vec4F32 bg_color = df_rgba_from_theme_color(view_is_selected ? DF_ThemeColor_TabActive : DF_ThemeColor_TabInactive); - if(view_is_selected && panel != ws->focused_panel) - { - bg_color.w *= 0.5f; - } - ui_set_next_hover_cursor(OS_Cursor_HandPoint); - ui_set_next_background_color(bg_color); - ui_set_next_border_color(mix_4f32(v4f32(bg_color.x, bg_color.y, bg_color.z, bg_color.w), v4f32(1, 1, 1, 0.2f), 0.5f)); - UI_Box *tab_box = ui_build_box_from_stringf(UI_BoxFlag_DrawHotEffects| - UI_BoxFlag_DrawBackground| - UI_BoxFlag_DrawBorder| - (UI_BoxFlag_DrawDropShadow*view_is_selected)| - UI_BoxFlag_AnimatePosY| - UI_BoxFlag_Clickable, - "tab_%p", view); - - // rjf: build tab contents - UI_Parent(tab_box) - { - if(icon_kind != DF_IconKind_Null) + B32 view_is_selected = (view == df_view_from_handle(panel->selected_tab_view)); + DF_IconKind icon_kind = df_icon_kind_from_view(view); + DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); + String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view); + if(view_is_selected) + { + ui_set_next_background_color(df_rgba_from_theme_color(DF_ThemeColor_TabActive)); + } + ui_set_next_hover_cursor(OS_Cursor_HandPoint); + UI_Box *tab_list_item_box = ui_build_box_from_stringf(UI_BoxFlag_DrawHotEffects| + UI_BoxFlag_DrawActiveEffects| + UI_BoxFlag_DrawBorder| + UI_BoxFlag_DrawBackground| + UI_BoxFlag_Clickable, + "###tab_list_item_box_%p", view); + UI_Parent(tab_list_item_box) { UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) UI_Font(df_font_from_slot(DF_FontSlot_Icons)) - UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) + UI_PrefWidth(ui_em(3.f, 1.f)) UI_TextAlignment(UI_TextAlign_Center) - UI_PrefWidth(ui_em(2.25f, 1.f)) ui_label(df_g_icon_kind_text_table[icon_kind]); + UI_PrefWidth(ui_text_dim(10.f, 1.f)) + ui_label(label); } - UI_TextColor(df_rgba_from_theme_color(view_is_selected ? DF_ThemeColor_PlainText : DF_ThemeColor_WeakText)) - UI_PrefWidth(ui_pct(1, 0)) - ui_label(label); - UI_PrefWidth(ui_em(2.35f, 1.f)) UI_TextAlignment(UI_TextAlign_Center) - UI_Font(df_font_from_slot(DF_FontSlot_Icons)) - UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)*0.75f) - UI_BackgroundColor(v4f32(0, 0, 0, 0)) - UI_CornerRadius00(0) - UI_CornerRadius01(0) - if(ui_buttonf("%S###close_view_%p", df_g_icon_kind_text_table[DF_IconKind_X], view).clicked) + UI_Signal sig = ui_signal_from_box(tab_list_item_box); + if(sig.clicked) { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CloseTab)); - } - } - - // rjf: consume events for tab clicking - { - UI_Signal sig = ui_signal_from_box(tab_box); - if(sig.pressed) - { - next_selected_stable_view = view; + next_selected_tab_view = view; DF_CmdParams p = df_cmd_params_from_panel(ws, panel); df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); } - else if(sig.dragging && !df_drag_is_active() && length_2f32(ui_drag_delta()) > 10.f) + } + } + + // rjf: build tab list button + if(panel->tab_view_count > 5) UI_PrefWidth(ui_em(2.25f, 1.f)) UI_PrefHeight(ui_px(tab_bar_vheight, 1)) + { + UI_Signal sig = df_icon_buttonf(DF_IconKind_List, "###tab_list_%p", panel); + if(sig.clicked) + { + if(ui_ctx_menu_is_open(tab_list_ctx_menu_key)) { - DF_DragDropPayload payload = {0}; - { - payload.key = sig.box->key; - payload.panel = df_handle_from_panel(panel); - payload.view = df_handle_from_view(view); - } - df_drag_begin(&payload); + ui_ctx_menu_close(); } - else if(sig.right_clicked) + else { - ui_ctx_menu_open(ws->tab_ctx_menu_key, sig.box->key, v2f32(0, sig.box->rect.y1 - sig.box->rect.y0)); - ws->tab_ctx_menu_view = df_handle_from_view(view); - } - if(sig.released) - { - df_panel_notify_mutation(ws, panel); + ui_ctx_menu_open(tab_list_ctx_menu_key, sig.box->key, v2f32(0, dim_2f32(sig.box->rect).y)); } } } - // rjf: space for next tab - if(!df_view_is_nil(view->next)) + // rjf: build tabs + UI_PrefWidth(ui_em(18.f, 0.5f)) + UI_CornerRadius00(panel->tab_side == Side_Min ? corner_radius : 0) + UI_CornerRadius01(panel->tab_side == Side_Min ? 0 : corner_radius) + UI_CornerRadius10(panel->tab_side == Side_Min ? corner_radius : 0) + UI_CornerRadius11(panel->tab_side == Side_Min ? 0 : corner_radius) + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next, view_idx += 1) { - ui_spacer(ui_em(0.15f, 1.f)); + temp_end(scratch); + + // rjf: gather info for this tab + B32 view_is_selected = (view == df_view_from_handle(panel->selected_tab_view)); + DF_IconKind icon_kind = df_icon_kind_from_view(view); + DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); + String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view); + + // rjf: begin vertical region for this tab + ui_set_next_child_layout_axis(Axis2_Y); + UI_Box *tab_column_box = ui_build_box_from_stringf(!is_changing_panel_boundaries*UI_BoxFlag_AnimatePosX, "tab_column_%p", view); + + // rjf: build tab container box + UI_Parent(tab_column_box) UI_PrefHeight(ui_px(tab_bar_vheight, 1)) + { + if((!view_is_selected && panel->tab_side == Side_Min) || + (view_is_selected && panel->tab_side == Side_Max)) + { + ui_spacer(ui_px(tab_bar_rv_diff, 1.f)); + } + else + { + ui_spacer(ui_px(1.f, 1.f)); + } + Vec4F32 bg_color = df_rgba_from_theme_color(view_is_selected ? DF_ThemeColor_TabActive : DF_ThemeColor_TabInactive); + if(view_is_selected && panel != ws->focused_panel) + { + bg_color.w *= 0.5f; + } + ui_set_next_hover_cursor(OS_Cursor_HandPoint); + ui_set_next_background_color(bg_color); + ui_set_next_border_color(mix_4f32(v4f32(bg_color.x, bg_color.y, bg_color.z, bg_color.w), v4f32(1, 1, 1, 0.2f), 0.5f)); + UI_Box *tab_box = ui_build_box_from_stringf(UI_BoxFlag_DrawHotEffects| + UI_BoxFlag_DrawBackground| + UI_BoxFlag_DrawBorder| + (UI_BoxFlag_DrawDropShadow*view_is_selected)| + UI_BoxFlag_AnimatePosY| + UI_BoxFlag_Clickable, + "tab_%p", view); + + // rjf: build tab contents + UI_Parent(tab_box) + { + if(icon_kind != DF_IconKind_Null) + { + UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) + UI_Font(df_font_from_slot(DF_FontSlot_Icons)) + UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) + UI_TextAlignment(UI_TextAlign_Center) + UI_PrefWidth(ui_em(2.25f, 1.f)) + ui_label(df_g_icon_kind_text_table[icon_kind]); + } + UI_TextColor(df_rgba_from_theme_color(view_is_selected ? DF_ThemeColor_PlainText : DF_ThemeColor_WeakText)) + UI_PrefWidth(ui_pct(1, 0)) + ui_label(label); + UI_PrefWidth(ui_em(2.35f, 1.f)) UI_TextAlignment(UI_TextAlign_Center) + UI_Font(df_font_from_slot(DF_FontSlot_Icons)) + UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)*0.75f) + UI_BackgroundColor(v4f32(0, 0, 0, 0)) + UI_CornerRadius00(0) + UI_CornerRadius01(0) + if(ui_buttonf("%S###close_view_%p", df_g_icon_kind_text_table[DF_IconKind_X], view).clicked) + { + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CloseTab)); + } + } + + // rjf: consume events for tab clicking + { + UI_Signal sig = ui_signal_from_box(tab_box); + if(sig.pressed) + { + next_selected_tab_view = view; + DF_CmdParams p = df_cmd_params_from_panel(ws, panel); + df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); + } + else if(sig.dragging && !df_drag_is_active() && length_2f32(ui_drag_delta()) > 10.f) + { + DF_DragDropPayload payload = {0}; + { + payload.key = sig.box->key; + payload.panel = df_handle_from_panel(panel); + payload.view = df_handle_from_view(view); + } + df_drag_begin(&payload); + } + else if(sig.right_clicked) + { + ui_ctx_menu_open(ws->tab_ctx_menu_key, sig.box->key, v2f32(0, sig.box->rect.y1 - sig.box->rect.y0)); + ws->tab_ctx_menu_view = df_handle_from_view(view); + } + if(sig.released) + { + df_panel_notify_mutation(ws, panel); + } + } + } + + // rjf: space for next tab + if(!df_view_is_nil(view->next)) + { + ui_spacer(ui_em(0.15f, 1.f)); + } + + // rjf: store off drop-site + drop_sites[view_idx].p = tab_column_box->rect.x0 - tab_spacing/2; + drop_sites[view_idx].prev_view = view->prev; + drop_site_max_p = Max(tab_column_box->rect.x1, drop_site_max_p); } - // rjf: store off drop-site - drop_sites[view_idx].p = tab_column_box->rect.x0 - tab_spacing/2; - drop_sites[view_idx].prev_view = view->prev; - drop_site_max_p = Max(tab_column_box->rect.x1, drop_site_max_p); + scratch_end(scratch); + } + + // rjf: interact with tab bar + ui_signal_from_box(tab_bar_box); + + // rjf: fill out last drop site + { + drop_sites[drop_site_count-1].p = drop_site_max_p; + drop_sites[drop_site_count-1].prev_view = panel->last_tab_view; + } + + // rjf: more precise drop-sites on tab bar + { + Vec2F32 mouse = os_mouse_from_window(ws->os); + DF_View *view = df_view_from_handle(df_g_drag_drop_payload.view); + if(df_drag_is_active() && window_is_focused && contains_2f32(panel_rect, mouse) && !df_view_is_nil(view)) + { + // rjf: mouse => hovered drop site + F32 min_distance = 0; + DropSite *active_drop_site = 0; + for(U64 drop_site_idx = 0; drop_site_idx < drop_site_count; drop_site_idx += 1) + { + F32 distance = abs_f32(drop_sites[drop_site_idx].p - mouse.x); + if(drop_site_idx == 0 || distance < min_distance) + { + active_drop_site = &drop_sites[drop_site_idx]; + min_distance = distance; + } + } + + // rjf: vis + DF_Panel *drag_panel = df_panel_from_handle(df_g_drag_drop_payload.panel); + if(!df_view_is_nil(view) && + active_drop_site != 0 && + (panel != drag_panel)) + { + tab_bar_box->flags |= UI_BoxFlag_DrawOverlay; + tab_bar_box->overlay_color = df_rgba_from_theme_color(DF_ThemeColor_DropSiteOverlay); + + if(panel->tab_view_count != 0) + { + D_Bucket *bucket = d_bucket_make(); + D_BucketScope(bucket) + { + d_rect(r2f32p(active_drop_site->p - tab_spacing/2, + tab_bar_box->rect.y0, + active_drop_site->p + tab_spacing/2, + tab_bar_box->rect.y1), + v4f32(1, 1, 1, 1), + 2.f, 0, 1.f); + } + ui_box_equip_draw_bucket(tab_bar_box, bucket); + } + } + + // rjf: drop + DF_DragDropPayload payload = df_g_drag_drop_payload; + if((active_drop_site != 0 && df_drag_drop(&payload)) || df_panel_from_handle(payload.panel) == panel) + { + DF_View *view = df_view_from_handle(payload.view); + DF_Panel *src_panel = df_panel_from_handle(payload.panel); + if(!df_panel_is_nil(panel) && !df_view_is_nil(view)) + { + DF_CmdParams params = df_cmd_params_from_window(ws); + params.panel = df_handle_from_panel(src_panel); + params.dest_panel = df_handle_from_panel(panel); + params.view = df_handle_from_view(view); + params.prev_view = df_handle_from_view(active_drop_site->prev_view); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Panel); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_DestPanel); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_View); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_PrevView); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_MoveTab)); + } + } + } + } + + // rjf: apply tab change + { + panel->selected_tab_view = df_handle_from_view(next_selected_tab_view); } scratch_end(scratch); } - // rjf: interact with tab bar - ui_signal_from_box(tab_bar_box); - - // rjf: fill out last drop site + ////////////////////////// + //- rjf: less granular panel for tabs & entities drop-site + // + if(df_drag_is_active() && window_is_focused && contains_2f32(panel_rect, os_mouse_from_window(ws->os))) { - drop_sites[drop_site_count-1].p = drop_site_max_p; - drop_sites[drop_site_count-1].prev_view = panel->last_stable_view; - } - - // rjf: more precise drop-sites on tab bar - { - Vec2F32 mouse = os_mouse_from_window(ws->os); - DF_View *view = df_view_from_handle(df_g_drag_drop_payload.view); - if(df_drag_is_active() && window_is_focused && contains_2f32(panel_rect, mouse) && !df_view_is_nil(view)) + DF_DragDropPayload *payload = &df_g_drag_drop_payload; + DF_View *dragged_view = df_view_from_handle(payload->view); + B32 view_is_in_panel = 0; + for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next) { - // rjf: mouse => hovered drop site - F32 min_distance = 0; - DropSite *active_drop_site = 0; - for(U64 drop_site_idx = 0; drop_site_idx < drop_site_count; drop_site_idx += 1) + if(view == dragged_view) { - F32 distance = abs_f32(drop_sites[drop_site_idx].p - mouse.x); - if(drop_site_idx == 0 || distance < min_distance) - { - active_drop_site = &drop_sites[drop_site_idx]; - min_distance = distance; - } + view_is_in_panel = 1; + break; } - + } + + if(view_is_in_panel == 0) + { // rjf: vis - DF_Panel *drag_panel = df_panel_from_handle(df_g_drag_drop_payload.panel); - if(!df_view_is_nil(view) && - active_drop_site != 0 && - (panel != drag_panel)) { - tab_bar_box->flags |= UI_BoxFlag_DrawOverlay; - tab_bar_box->overlay_color = df_rgba_from_theme_color(DF_ThemeColor_DropSiteOverlay); - - if(panel->stable_view_count != 0) - { - D_Bucket *bucket = d_bucket_make(); - D_BucketScope(bucket) - { - d_rect(r2f32p(active_drop_site->p - tab_spacing/2, - tab_bar_box->rect.y0, - active_drop_site->p + tab_spacing/2, - tab_bar_box->rect.y1), - v4f32(1, 1, 1, 1), - 2.f, 0, 1.f); - } - ui_box_equip_draw_bucket(tab_bar_box, bucket); - } + panel_box->flags |= UI_BoxFlag_DrawOverlay; + panel_box->overlay_color = df_rgba_from_theme_color(DF_ThemeColor_DropSiteOverlay); } // rjf: drop - DF_DragDropPayload payload = df_g_drag_drop_payload; - if((active_drop_site != 0 && df_drag_drop(&payload)) || df_panel_from_handle(payload.panel) == panel) { - DF_View *view = df_view_from_handle(payload.view); - DF_Panel *src_panel = df_panel_from_handle(payload.panel); - if(!df_panel_is_nil(panel) && !df_view_is_nil(view)) + DF_DragDropPayload payload = {0}; + if(df_drag_drop(&payload)) { - DF_CmdParams params = df_cmd_params_from_window(ws); - params.panel = df_handle_from_panel(src_panel); - params.dest_panel = df_handle_from_panel(panel); - params.view = df_handle_from_view(view); - params.prev_view = df_handle_from_view(active_drop_site->prev_view); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Panel); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_DestPanel); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_View); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_PrevView); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_MoveTab)); - } - } - } - } - - // rjf: apply tab change - { - panel->selected_stable_view = next_selected_stable_view; - } - - scratch_end(scratch); - } - - //- rjf: less granular panel for tabs & entities drop-site - if(df_drag_is_active() && window_is_focused && contains_2f32(panel_rect, os_mouse_from_window(ws->os))) - { - DF_DragDropPayload *payload = &df_g_drag_drop_payload; - DF_View *dragged_view = df_view_from_handle(payload->view); - B32 view_is_in_panel = 0; - for(DF_View *view = panel->first_stable_view; !df_view_is_nil(view); view = view->next) - { - if(view == dragged_view) - { - view_is_in_panel = 1; - break; - } - } - - if(view_is_in_panel == 0) - { - // rjf: vis - { - panel_box->flags |= UI_BoxFlag_DrawOverlay; - panel_box->overlay_color = df_rgba_from_theme_color(DF_ThemeColor_DropSiteOverlay); - } - - // rjf: drop - { - DF_DragDropPayload payload = {0}; - if(df_drag_drop(&payload)) - { - DF_Panel *src_panel = df_panel_from_handle(payload.panel); - DF_View *view = df_view_from_handle(payload.view); - DF_Entity *entity = df_entity_from_handle(payload.entity); - - // rjf: view drop - if(!df_view_is_nil(view)) - { - DF_CmdParams params = df_cmd_params_from_window(ws); - params.prev_view = df_handle_from_view(panel->last_stable_view); - params.panel = df_handle_from_panel(src_panel); - params.dest_panel = df_handle_from_panel(panel); - params.view = df_handle_from_view(view); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_PrevView); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Panel); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_DestPanel); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_View); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_MoveTab)); - df_panel_notify_mutation(ws, panel); - } - - // rjf: entity drop - if(!df_entity_is_nil(entity)) - { - DF_CmdParams params = df_cmd_params_from_window(ws); - params.panel = df_handle_from_panel(panel); - params.text_point = payload.text_point; - params.entity = df_handle_from_entity(entity); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Panel); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_TextPoint); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_SpawnEntityView)); - ui_ctx_menu_open(ws->drop_completion_ctx_menu_key, ui_key_zero(), sub_2f32(ui_mouse(), v2f32(2, 2))); - ws->drop_completion_entity = df_handle_from_entity(entity); - ws->drop_completion_panel = df_handle_from_panel(panel); + DF_Panel *src_panel = df_panel_from_handle(payload.panel); + DF_View *view = df_view_from_handle(payload.view); + DF_Entity *entity = df_entity_from_handle(payload.entity); + + // rjf: view drop + if(!df_view_is_nil(view)) + { + DF_CmdParams params = df_cmd_params_from_window(ws); + params.prev_view = df_handle_from_view(panel->last_tab_view); + params.panel = df_handle_from_panel(src_panel); + params.dest_panel = df_handle_from_panel(panel); + params.view = df_handle_from_view(view); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_PrevView); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Panel); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_DestPanel); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_View); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_MoveTab)); + df_panel_notify_mutation(ws, panel); + } + + // rjf: entity drop + if(!df_entity_is_nil(entity)) + { + DF_CmdParams params = df_cmd_params_from_window(ws); + params.panel = df_handle_from_panel(panel); + params.text_point = payload.text_point; + params.entity = df_handle_from_entity(entity); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Panel); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_TextPoint); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_SpawnEntityView)); + ui_ctx_menu_open(ws->drop_completion_ctx_menu_key, ui_key_zero(), sub_2f32(ui_mouse(), v2f32(2, 2))); + ws->drop_completion_entity = df_handle_from_entity(entity); + ws->drop_completion_panel = df_handle_from_panel(panel); + } } } } } } - - //- rjf: panel query submission - if(panel_is_focused && !ctx_menu_is_focused) - { - DF_View *view = df_selected_view_from_panel(panel); - if(!df_view_is_nil(view) && - view->cmd_spec->info.query_rule != DF_CmdQueryRule_Null) - { - B32 submit = os_key_press(events, ws->os, 0, OS_Key_Return); - B32 cancel = os_key_press(events, ws->os, 0, OS_Key_Esc); - if(submit) - { - Temp scratch = scratch_begin(&arena, 1); - DF_CmdParams params = df_cmd_params_from_view(ws, panel, df_view_caller_root_from_view(view)); - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); - String8 error = df_cmd_params_apply_spec_query(scratch.arena, &ctrl_ctx, ¶ms, view->cmd_spec, view->query); - if(error.size == 0) - { - df_push_cmd__root(¶ms, view->cmd_spec); - } - else - { - DF_CmdParams params = df_cmd_params_from_window(ws); - params.string = error; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_String); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Error)); - } - scratch_end(scratch); - } - if(submit || cancel) - { - DF_CmdSpec *spec = view->cmd_spec; - if(cancel || !(spec->info.flags & DF_CmdSpecFlag_RunKeepsQuery)) - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - } - } - } - } + //////////////////////////// //- rjf: animate panel pcts + // { F32 rate = 1 - pow_f32(2, (-50.f * df_dt())); for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) { - if(abs_f32(panel->off_pct_of_parent.x) > 0.01f || - abs_f32(panel->off_pct_of_parent.y) > 0.01f || - abs_f32(panel->size_pct_of_parent_target.x - panel->size_pct_of_parent.x) > 0.01f || - abs_f32(panel->size_pct_of_parent_target.y - panel->size_pct_of_parent.y) > 0.01f) + if(abs_f32(panel->off_pct_of_parent.x) > 0.005f || + abs_f32(panel->off_pct_of_parent.y) > 0.005f || + abs_f32(panel->size_pct_of_parent_target.x - panel->size_pct_of_parent.x) > 0.005f || + abs_f32(panel->size_pct_of_parent_target.y - panel->size_pct_of_parent.y) > 0.005f) { df_gfx_request_frame(); } @@ -6003,7 +5853,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: animate views + // { F32 rate = 1 - pow_f32(2, (-10.f * df_dt())); F32 fast_rate = 1 - pow_f32(2, (-40.f * df_dt())); @@ -6011,31 +5863,12 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next) { - if(!df_view_is_nil(panel->query_view_stack_top)) + U64 list_firsts_count = 1 + !!(panel == ws->root_panel); + DF_View *list_firsts[2] = {panel->first_tab_view, ws->query_view_stack_top}; + for(U64 idx = 0; idx < list_firsts_count; idx += 1) { - if(abs_f32(panel->query_view_stack_top->scroll_pos.x.off) > 0.01f || - abs_f32(panel->query_view_stack_top->scroll_pos.y.off) > 0.01f) - { - df_gfx_request_frame(); - } - panel->query_view_stack_top->scroll_pos.x.off -= panel->query_view_stack_top->scroll_pos.x.off*fast_rate; - panel->query_view_stack_top->scroll_pos.y.off -= panel->query_view_stack_top->scroll_pos.y.off*fast_rate; - if(abs_f32(panel->query_view_stack_top->scroll_pos.x.off) < 0.005f) - { - panel->query_view_stack_top->scroll_pos.x.off = 0; - } - if(abs_f32(panel->query_view_stack_top->scroll_pos.y.off) < 0.005f) - { - panel->query_view_stack_top->scroll_pos.y.off = 0; - } - } - for(DF_View *stable_view = panel->first_stable_view; - !df_view_is_nil(stable_view); - stable_view = stable_view->next) - { - for(DF_View *view = stable_view; - !df_view_is_nil(view); - view = view->callee_view) + DF_View *list_first = list_firsts[idx]; + for(DF_View *view = list_first; !df_view_is_nil(view); view = view->next) { if(abs_f32(view->loading_t_target - view->loading_t) > 0.01f || abs_f32(0 - view->flash_t) > 0.01f || @@ -6044,7 +5877,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { df_gfx_request_frame(); } - if(view->loading_t_target != 0 && view == panel->selected_stable_view) + if(view->loading_t_target != 0 && view == df_view_from_handle(panel->selected_tab_view)) { df_gfx_request_frame(); } @@ -6060,7 +5893,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D { view->scroll_pos.y.off = 0; } - if(view == panel->selected_stable_view) + if(view == df_view_from_handle(panel->selected_tab_view)) { view->loading_t_target = 0; } @@ -6069,14 +5902,18 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + //////////////////////////// //- rjf: drag/drop cancelling + // if(df_drag_is_active() && os_key_press(events, ws->os, 0, OS_Key_Esc)) { df_drag_kill(); ui_kill_action(); } + //////////////////////////// //- rjf: font size changing + // for(OS_Event *event = events->first; event != 0; event = event->next) { if(os_handle_match(event->window, ws->os) && event->kind == OS_EventKind_Scroll && event->flags & OS_EventFlag_Ctrl) @@ -6097,7 +5934,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } ui_end_build(); + ////////////////////////////// //- rjf: ensure hover eval is in-bounds + // if(!ui_box_is_nil(hover_eval_box)) { UI_Box *root = hover_eval_box; @@ -6122,7 +5961,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + ////////////////////////////// //- rjf: attach autocomp box to root + // if(!ui_box_is_nil(autocomp_box)) { UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key); @@ -6142,7 +5983,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + ////////////////////////////// //- rjf: hover eval cancelling + // if(ws->hover_eval_string.size != 0 && os_key_press(events, ws->os, 0, OS_Key_Esc)) { MemoryZeroStruct(&ws->hover_eval_string); @@ -6150,13 +5993,17 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D df_gfx_request_frame(); } + ////////////////////////////// //- rjf: animate + // if(ui_animating_from_state(ws->ui)) { df_gfx_request_frame(); } + ////////////////////////////// //- rjf: draw UI + // ws->draw_bucket = d_bucket_make(); D_BucketScope(ws->draw_bucket) ProfScope("draw UI") @@ -6761,7 +6608,9 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D scratch_end(scratch); } + ////////////////////////////// //- rjf: show window after first frame + // { if(ws->frames_alive == 0) { @@ -8180,8 +8029,6 @@ df_cfg_strings_from_gfx(Arena *arena, String8 root_path, DF_CfgSrc source) struct { String8 key; B32 value; } options[] = { {str8_lit_comp("tabs_on_bottom"), p->tab_side == Side_Max}, - {str8_lit_comp("disable_tab_bar"), p->hide_tab_bar}, - {str8_lit_comp("history_mode"), p->history_tab_bar_mode}, }; B32 has_options = 0; for(U64 op_idx = 0; op_idx < ArrayCount(options); op_idx += 1) @@ -8206,15 +8053,13 @@ df_cfg_strings_from_gfx(Arena *arena, String8 root_path, DF_CfgSrc source) } // rjf: views - for(DF_View *view = p->first_stable_view; !df_view_is_nil(view); view = view->next) + for(DF_View *view = p->first_tab_view; !df_view_is_nil(view); view = view->next) { - DF_CmdSpec *cmd_spec = view->cmd_spec; - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd_spec); - String8 view_string = cmd_spec->info.string; - DF_Entity *view_entity = df_entity_from_handle(view->cmd_entity); + String8 view_string = view->spec->info.name; + DF_Entity *view_entity = df_entity_from_handle(view->entity); // rjf: serialize views which can be serialized - if(view_spec->info.flags & DF_ViewSpecFlag_CanSerialize) + if(view->spec->info.flags & DF_ViewSpecFlag_CanSerialize) { str8_list_pushf(arena, &strs, "%.*s", indentation*2, indent_str.str); @@ -8223,11 +8068,11 @@ df_cfg_strings_from_gfx(Arena *arena, String8 root_path, DF_CfgSrc source) // rjf: serialize view parameterizations str8_list_push(arena, &strs, str8_lit(": {")); - if(view == p->selected_stable_view) + if(view == df_view_from_handle(p->selected_tab_view)) { str8_list_push(arena, &strs, str8_lit("selected ")); } - if(view_spec->info.flags & DF_ViewSpecFlag_CanSerializeEntityPath) + if(view->spec->info.flags & DF_ViewSpecFlag_CanSerializeEntityPath) { if(view_entity->kind == DF_EntityKind_File) { @@ -8237,7 +8082,7 @@ df_cfg_strings_from_gfx(Arena *arena, String8 root_path, DF_CfgSrc source) str8_list_pushf(arena, &strs, "\"%S\"", entity_path_rel); } } - String8 view_state_string = view_spec->info.string_from_state_hook(arena, view); + String8 view_state_string = view->spec->info.string_from_state_hook(arena, view); str8_list_push(arena, &strs, view_state_string); str8_list_push(arena, &strs, str8_lit("}\n")); } @@ -8562,7 +8407,7 @@ df_cmd_list_menu_buttons(DF_Window *ws, U64 count, DF_CoreCmdKind *cmds, U32 *fa DF_CmdParams params = df_cmd_params_from_window(ws); params.cmd_spec = spec; df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); ui_ctx_menu_close(); ws->menu_bar_focused = 0; } @@ -9190,7 +9035,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ //- rjf: build margins // UI_Box *margin_container_box = &ui_g_nil_box; - if(params->flags & DF_CodeSliceFlag_Margin) UI_Parent(top_container_box) ProfScope("build margins") + if(params->flags & DF_CodeSliceFlag_Margin) UI_Focus(UI_FocusKind_Off) UI_Parent(top_container_box) ProfScope("build margins") { ui_set_next_pref_width(ui_px(params->margin_width_px, 1)); ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f)); @@ -9514,7 +9359,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ //- rjf: build main text container box, for mouse interaction on both lines & line numbers // UI_Box *text_container_box = &ui_g_nil_box; - UI_Parent(top_container_box) + UI_Parent(top_container_box) UI_Focus(UI_FocusKind_Off) { ui_set_next_hover_cursor(ctrlified ? OS_Cursor_HandPoint : OS_Cursor_IBar); ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f)); @@ -9541,7 +9386,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ //- rjf: produce per-line extra annotation containers // UI_Box **line_extras_boxes = push_array(scratch.arena, UI_Box *, dim_1s64(params->line_num_range)+1); - UI_PrefWidth(ui_children_sum(1)) UI_PrefHeight(ui_px(params->line_height_px, 1.f)) UI_Parent(text_container_box) + UI_PrefWidth(ui_children_sum(1)) UI_PrefHeight(ui_px(params->line_height_px, 1.f)) UI_Parent(text_container_box) UI_Focus(UI_FocusKind_Off) { U64 line_idx = 0; for(S64 line_num = params->line_num_range.min; @@ -9557,6 +9402,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ ////////////////////////////// //- rjf: build watch pin annotations // + UI_Focus(UI_FocusKind_Off) { DBGI_Scope *scope = dbgi_scope_open(); U64 line_idx = 0; @@ -9885,7 +9731,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ ////////////////////////////// //- rjf: build line numbers // - if(params->flags & DF_CodeSliceFlag_LineNums) UI_Parent(text_container_box) ProfScope("build line numbers") + if(params->flags & DF_CodeSliceFlag_LineNums) UI_Parent(text_container_box) ProfScope("build line numbers") UI_Focus(UI_FocusKind_Off) { TxtRng select_rng = txt_rng(*cursor, *mark); Vec4F32 inactive_color = df_rgba_from_theme_color(DF_ThemeColor_WeakText); @@ -9966,7 +9812,7 @@ df_code_slice(DF_Window *ws, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, DF_ ////////////////////////////// //- rjf: build line text // - UI_Parent(text_container_box) ProfScope("build line text") + UI_Parent(text_container_box) ProfScope("build line text") UI_Focus(UI_FocusKind_Off) { DF_Entity *hovered_line_binary = df_get_hovered_line_info_binary(); U64 hovered_line_voff = df_get_hovered_line_info_voff(); @@ -10690,14 +10536,16 @@ df_line_edit(DF_LineEditFlags flags, S32 depth, TxtPt *cursor, TxtPt *mark, U8 * //- rjf: unpack visual metrics F32 expander_size_px = ui_top_font_size()*1.3f; - //- rjf: get key & disect focus kind + //- rjf: make key UI_Key key = ui_key_from_string(ui_active_seed_key(), string); - B32 is_auto_focus_hot = ui_is_key_auto_focus_hot(key); + + //- rjf: calculate & push focus + B32 is_auto_focus_hot = ui_is_key_auto_focus_hot(key); B32 is_auto_focus_active = ui_is_key_auto_focus_active(key); - if(is_auto_focus_hot) { ui_set_focus_hot(1); } - if(is_auto_focus_active) { ui_set_focus_active(1); } - B32 is_focus_hot = ui_is_focus_hot(); - B32 is_focus_active = ui_is_focus_active(); + if(is_auto_focus_hot) { ui_push_focus_hot(UI_FocusKind_On); } + if(is_auto_focus_active) { ui_push_focus_active(UI_FocusKind_On); } + B32 is_focus_hot = ui_is_focus_hot(); + B32 is_focus_active = ui_is_focus_active(); //- rjf: build top-level box if(is_focus_active) @@ -10979,6 +10827,10 @@ df_line_edit(DF_LineEditFlags flags, S32 depth, TxtPt *cursor, TxtPt *mark, U8 * } } + //- rjf: pop focus + if(is_auto_focus_hot) { ui_pop_focus_hot(); } + if(is_auto_focus_active) { ui_pop_focus_active(); } + return sig; } @@ -11025,8 +10877,6 @@ df_gfx_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, DF_StateDe df_gfx_state->view_rule_spec_table = push_array(arena, DF_GfxViewRuleSpec *, df_state->view_rule_spec_table_size); df_gfx_state->view_rule_block_slots_count = 1024; df_gfx_state->view_rule_block_slots = push_array(arena, DF_ViewRuleBlockSlot, df_gfx_state->view_rule_block_slots_count); - df_gfx_state->cmd2view_slot_count = 256; - df_gfx_state->cmd2view_slots = push_array(arena, DF_String2ViewSlot, df_gfx_state->cmd2view_slot_count); df_gfx_state->string_search_arena = arena_alloc(); df_gfx_state->repaint_hook = window_repaint_entry_point; df_gfx_state->cfg_main_font_path_arena = arena_alloc(); @@ -11045,11 +10895,14 @@ df_gfx_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, DF_StateDe df_register_gfx_view_rule_specs(array); } - // rjf: register cmd -> views + // rjf: register cmd param slot -> view specs { - for(U64 idx = 0; idx < ArrayCount(df_g_cmd2view_table_src); idx += 1) + for(U64 idx = 0; idx < ArrayCount(df_g_cmd_param_slot_2_view_spec_src_map); idx += 1) { - df_register_cmd2view(df_g_cmd2view_table_src[idx], df_g_cmd2view_table_dst[idx]); + DF_CmdParamSlot slot = df_g_cmd_param_slot_2_view_spec_src_map[idx]; + String8 view_spec_name = df_g_cmd_param_slot_2_view_spec_dst_map[idx]; + DF_ViewSpec *view_spec = df_view_spec_from_string(view_spec_name); + df_gfx_state->cmd_param_slot_view_spec_table[slot] = view_spec; } } @@ -11202,6 +11055,7 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds) DLLRemove(df_gfx_state->first_window, df_gfx_state->last_window, ws); r_window_unequip(ws->os, ws->r); os_window_close(ws->os); + arena_release(ws->query_cmd_arena); arena_release(ws->hover_eval_arena); arena_release(ws->arena); SLLStackPush(df_gfx_state->free_window, ws); @@ -11258,7 +11112,7 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds) DF_CmdParams p = params; p.window = df_handle_from_window(window); p.panel = df_handle_from_panel(window->focused_panel); - p.view = df_handle_from_view(window->focused_panel->selected_stable_view); + p.view = df_handle_from_view(df_view_from_handle(window->focused_panel->selected_tab_view)); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Window); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Panel); df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View); @@ -11489,23 +11343,13 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds) { panel->tab_side = Side_Max; } - if(op->first == &df_g_nil_cfg_node && str8_match(op->string, str8_lit("disable_tab_bar"), StringMatchFlag_CaseInsensitive)) - { - panel->hide_tab_bar = 1; - panel->history_tab_bar_mode = 1; - } - if(op->first == &df_g_nil_cfg_node && str8_match(op->string, str8_lit("history_mode"), StringMatchFlag_CaseInsensitive)) - { - panel->history_tab_bar_mode = 1; - } } // rjf: apply panel views/tabs/commands DF_View *selected_view = &df_g_nil_view; for(DF_CfgNode *op = n->first; op != &df_g_nil_cfg_node; op = op->next) { - DF_CmdSpec *cmd_spec = df_cmd_spec_from_string(op->string); - DF_ViewSpec *view_spec = df_view_spec_from_cmd_spec(cmd_spec); + DF_ViewSpec *view_spec = df_view_spec_from_string(op->string); if(view_spec == &df_g_nil_view_spec || has_panel_children != 0) { continue; @@ -11518,40 +11362,28 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds) if(view_spec_flags & DF_ViewSpecFlag_CanSerialize) { // rjf: allocate view - B32 view_has_cmd_setup = 0; view = df_view_alloc(); // rjf: check if this view is selected view_is_selected = df_cfg_node_child_from_string(op, str8_lit("selected"), StringMatchFlag_CaseInsensitive) != &df_g_nil_cfg_node; // rjf: read entity path + DF_Entity *entity = &df_g_nil_entity; if(view_spec_flags & DF_ViewSpecFlag_CanSerializeEntityPath) { String8 saved_path = df_first_cfg_node_child_from_flags(op, DF_CfgNodeFlag_StringLiteral)->string; String8 saved_path_absolute = path_absolute_dst_from_relative_dst_src(scratch.arena, saved_path, cfg_folder); - DF_Entity *file = df_entity_from_path(saved_path_absolute, DF_EntityFromPathFlag_All); - if(!df_entity_is_nil(file)) - { - DF_CmdParams p = df_cmd_params_zero(); - p.entity = df_handle_from_entity(file); - df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Entity); - df_view_equip_command(view, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PendingEntity), &p, str8_lit(""), op); - view_has_cmd_setup = 1; - } + entity = df_entity_from_path(saved_path_absolute, DF_EntityFromPathFlag_All); } - // rjf: default view setup - if(view_has_cmd_setup == 0) - { - DF_CmdParams p = df_cmd_params_zero(); - df_view_equip_command(view, cmd_spec, &p, str8_lit(""), op); - } + // rjf: set up view + df_view_equip_spec(view, view_spec, entity, str8_lit(""), op); } // rjf: insert if(!df_view_is_nil(view)) { - df_panel_insert_stable_view(panel, panel->last_stable_view, view); + df_panel_insert_tab_view(panel, panel->last_tab_view, view); if(view_is_selected) { selected_view = view; @@ -11562,7 +11394,7 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds) // rjf: select selected view if(!df_view_is_nil(selected_view)) { - panel->selected_stable_view = selected_view; + panel->selected_tab_view = df_handle_from_view(selected_view); } // rjf: recurse from this panel @@ -11661,6 +11493,14 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds) { cmd_spec = spec; } + else for(U64 idx = 0; idx < ArrayCount(df_g_binding_version_remap_old_name_table); idx += 1) + { + if(str8_match(df_g_binding_version_remap_old_name_table[idx], child->string, StringMatchFlag_CaseInsensitive)) + { + String8 new_name = df_g_binding_version_remap_new_name_table[idx]; + cmd_spec = df_cmd_spec_from_string(new_name); + } + } OS_Key k = df_os_key_from_cfg_string(child->string); if(k != OS_Key_Null) { diff --git a/src/df/gfx/df_gfx.h b/src/df/gfx/df_gfx.h index e208950a..59a134f7 100644 --- a/src/df/gfx/df_gfx.h +++ b/src/df/gfx/df_gfx.h @@ -176,6 +176,7 @@ struct DF_ViewSpecInfo String8 name; String8 display_string; DF_NameKind name_kind; + DF_IconKind icon_kind; DF_ViewSetupFunctionType *setup_hook; DF_ViewStringFromStateFunctionType *string_from_state_hook; DF_ViewCmdFunctionType *cmd_hook; @@ -213,10 +214,6 @@ struct DF_View DF_View *next; DF_View *prev; - // rjf: call stack links (views can call into other views) - DF_View *callee_view; - DF_View *caller_view; - // rjf: allocation info U64 generation; @@ -241,15 +238,15 @@ struct DF_View DF_ArenaExt *last_arena_ext; void *user_data; - // rjf: command data - DF_CmdSpec *cmd_spec; - DF_Handle cmd_entity; + // rjf: view kind info + DF_ViewSpec *spec; + DF_Handle entity; // rjf: query -> params data - String8 query; TxtPt query_cursor; TxtPt query_mark; U8 query_buffer[1024]; + U64 query_string_size; }; //////////////////////////////// @@ -277,18 +274,13 @@ struct DF_Panel Vec2F32 size_pct_of_parent_target; // rjf: tab params - B32 hide_tab_bar; - B32 history_tab_bar_mode; Side tab_side; - // rjf: query view stack - DF_View *query_view_stack_top; - // rjf: stable view stacks (tabs) - DF_View *first_stable_view; - DF_View *last_stable_view; - U64 stable_view_count; - DF_View *selected_stable_view; + DF_View *first_tab_view; + DF_View *last_tab_view; + U64 tab_view_count; + DF_Handle selected_tab_view; }; typedef struct DF_PanelRec DF_PanelRec; @@ -572,6 +564,13 @@ struct DF_Window F32 autocomp_num_visible_rows_t; S64 autocomp_cursor_num; + // rjf: query view stack + Arena *query_cmd_arena; + DF_CmdSpec *query_cmd_spec; + DF_CmdParams query_cmd_params; + DF_View *query_view_stack_top; + F32 query_view_t; + // rjf: hover eval stable state TxtPt hover_eval_txt_cursor; TxtPt hover_eval_txt_mark; @@ -707,9 +706,8 @@ struct DF_GfxState DF_ViewRuleBlockSlot *view_rule_block_slots; DF_ViewRuleBlockNode *free_view_rule_block_node; - // rjf: cmd -> view table - U64 cmd2view_slot_count; - DF_String2ViewSlot *cmd2view_slots; + // rjf: cmd param slot -> view spec table + DF_ViewSpec *cmd_param_slot_view_spec_table[DF_CmdParamSlot_COUNT]; // rjf: windows OS_WindowRepaintFunctionType *repaint_hook; @@ -753,6 +751,7 @@ read_only global DF_ViewSpec df_g_nil_view_spec = {0}, {0}, DF_NameKind_Null, + DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Null), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Null), DF_VIEW_CMD_FUNCTION_NAME(Null), @@ -767,8 +766,6 @@ read_only global DF_GfxViewRuleSpec df_g_nil_gfx_view_rule_spec = read_only global DF_View df_g_nil_view = { - &df_g_nil_view, - &df_g_nil_view, &df_g_nil_view, &df_g_nil_view, 0, @@ -783,7 +780,7 @@ read_only global DF_View df_g_nil_view = 0, 0, 0, - &df_g_nil_cmd_spec, + &df_g_nil_view_spec, {0}, }; @@ -812,7 +809,11 @@ internal DF_FuzzyMatchRangeList df_fuzzy_match_find(Arena *arena, String8List ne internal B32 df_view_is_nil(DF_View *view); internal DF_Handle df_handle_from_view(DF_View *view); internal DF_View *df_view_from_handle(DF_Handle handle); -internal DF_View *df_view_caller_root_from_view(DF_View *view); + +//////////////////////////////// +//~ rjf: View Spec Type Functions + +internal DF_GfxViewKind df_gfx_view_kind_from_string(String8 string); //////////////////////////////// //~ rjf: Panel Type Functions @@ -840,12 +841,8 @@ internal Rng2F32 df_rect_from_panel_child(Rng2F32 parent_rect, DF_Panel *parent, internal Rng2F32 df_rect_from_panel(Rng2F32 root_rect, DF_Panel *root, DF_Panel *panel); //- rjf: view ownership insertion/removal -internal void df_panel_history_new_branch(DF_Panel *panel); -internal void df_panel_insert_stable_view(DF_Panel *panel, DF_View *prev_view, DF_View *view); -internal void df_panel_remove_stable_view(DF_Panel *panel, DF_View *view); -internal DF_View *df_selected_view_stack_from_panel(DF_Panel *panel); -internal DF_View *df_selected_view_from_panel(DF_Panel *panel); -internal DF_View *df_query_view_from_panel(DF_Panel *panel); +internal void df_panel_insert_tab_view(DF_Panel *panel, DF_View *prev_view, DF_View *view); +internal void df_panel_remove_tab_view(DF_Panel *panel, DF_View *view); //- rjf: icons & display strings internal String8 df_display_string_from_view(Arena *arena, DF_CtrlCtx ctrl_ctx, DF_View *view); @@ -871,6 +868,7 @@ internal B32 df_prefer_dasm_from_window(DF_Window *window); internal DF_CmdParams df_cmd_params_from_window(DF_Window *window); internal DF_CmdParams df_cmd_params_from_panel(DF_Window *window, DF_Panel *panel); internal DF_CmdParams df_cmd_params_from_view(DF_Window *window, DF_Panel *panel, DF_View *view); +internal DF_CmdParams df_cmd_params_copy(Arena *arena, DF_CmdParams *src); //////////////////////////////// //~ rjf: Global Cross-Window UI Interaction State Functions @@ -889,10 +887,9 @@ internal U64 df_get_hovered_line_info_voff(void); //~ rjf: View Spec State Functions internal void df_register_view_specs(DF_ViewSpecInfoArray specs); -internal void df_register_cmd2view(String8 cmd_name, String8 view_name); internal DF_ViewSpec *df_view_spec_from_string(String8 string); internal DF_ViewSpec *df_view_spec_from_gfx_view_kind(DF_GfxViewKind gfx_view_kind); -internal DF_ViewSpec *df_view_spec_from_cmd_spec(DF_CmdSpec *cmd_spec); +internal DF_ViewSpec *df_view_spec_from_cmd_param_slot(DF_CmdParamSlot slot); //////////////////////////////// //~ rjf: View Rule Spec State Functions @@ -904,9 +901,8 @@ internal DF_GfxViewRuleSpec *df_gfx_view_rule_spec_from_string(String8 string); //~ rjf: View State Functions internal DF_View *df_view_alloc(void); -internal void df_view_release_single(DF_View *view); internal void df_view_release(DF_View *view); -internal void df_view_equip_command(DF_View *view, DF_CmdSpec *spec, DF_CmdParams *params, String8 default_query, DF_CfgNode *cfg_root); +internal void df_view_equip_spec(DF_View *view, DF_ViewSpec *spec, DF_Entity *entity, String8 default_query, DF_CfgNode *cfg_root); internal void df_view_equip_loading_info(DF_View *view, B32 is_loading, U64 progress_v, U64 progress_target); internal void df_view_clear_user_state(DF_View *view); internal void *df_view_get_or_push_user_state(DF_View *view, U64 size); diff --git a/src/df/gfx/df_gfx.mdesk b/src/df/gfx/df_gfx.mdesk index 3939404b..b9b9537c 100644 --- a/src/df/gfx/df_gfx.mdesk +++ b/src/df/gfx/df_gfx.mdesk @@ -156,44 +156,52 @@ DF_DefaultBindingTable: { "attach" F6 0 shift 0 } //- rjf: view drivers - { "commands" F1 0 0 0 } - { "scheduler" S 0 0 alt } + { "run_command" F1 0 0 0 } //- rjf: developer commands { "clear_diag_log" D ctrl 0 alt } { "open_diag_log" D ctrl 0 0 } } +//////////////////////////////// +//~ rjf: Binding Version Remap Table + +@table(old_name new_name) +DF_BindingVersionRemapTable: +{ + {"commands" "run_command"} +} + //////////////////////////////// //~ rjf: Gfx Layer View Kinds -@table(name, name_lower, display_string, name_kind, parameterized_by_entity, can_serialize, can_serialize_entity_path, inc_in_docs, docs_desc) +@table(name, name_lower, display_string, name_kind, icon, parameterized_by_entity, can_serialize, can_serialize_entity_path, inc_in_docs, docs_desc) DF_GfxViewTable: { - { Null "null" "" Null 0 0 0 0 "" } - { Empty "empty" "" Null 0 0 0 0 "" } - { Commands "commands" "Commands" Null 0 0 0 0 "" } - { FileSystem "file_system" "File System" Null 0 0 0 0 "" } - { SystemProcesses "system_processes" "System Processes" Null 0 0 0 0 "" } - { EntityLister "entity_lister" "Entity List" EntityKindName 0 0 0 0 "" } - { Target "target" "Target" EntityName 1 0 0 0 "" } - { Targets "targets" "Targets" Null 0 1 0 1 "Displays a list of all targets, as well as controls for enabling, disabling, launching, editing, or deleting each target. For more information on targets, read the `Targets` section." } - { FilePathMap "file_path_map" "File Path Map" Null 0 1 0 1 "Displays a table of *path maps*. Each path map is a pair of file or folder paths, one being a 'source' path, and one being a 'destination' path. These pairs are used by the debugger when automatically searching for specific files - for instance, when attempting to snap to a source code location specified by debug info. If debug info refers to a path on the machine on which a target executable was originally built, but that path is not valid on the debugger machine, but some alternative path exists, then path maps may be used to redirect the debugger from the debug info's specified paths to the associated appropriate debugger machine file paths." } - { Scheduler "scheduler" "Scheduler" Null 0 1 0 1 "Displays all processes and threads to which the debugger is currently attached, and contains controls for selecting and freezing threads." } - { CallStack "call_stack" "Call Stack" Null 0 1 0 1 "Displays the call stack of the currently selected thread. Each frame in the call stack contains the associated module, function name, and return address. Allows selection of a particular call stack frame other than the top." } - { Modules "modules" "Modules" Null 0 1 0 1 "Displays a table of all modules currently loaded by any process to which the debugger is attached. This table displays each module's name, virtual address range in the containing process' address space, and which debug info file is being used by the debugger for the associated module." } - { PendingEntity "pending_entity" "Pending Entity" EntityName 1 0 0 0 "" } - { Code "code" "Code" EntityName 1 1 1 0 "" } - { Disassembly "disassembly" "Disassembly" Null 0 1 0 1 "Displays disassembled instructions in a textual form from the selected thread's containing process virtual address space." } - { Watch "watch" "Watch" Null 0 1 0 1 "The familiar 'watch window' debugger interface. Allows the inputting of a number of expressions. Each expression in the table is evaluated within the context of the selected thread's selected call stack frame. If applicable (depending on visualization rules and the expression's type), these expressions may be hierarchically expanded, which displays children as more rows in the table. The values of these expressions may also be edited, and if possible, can be used to write to registers or memory in attached processes. Also contains a new *view rule* column, not found in other major debuggers, which allows per-row specification of various visualization rules. These view rules may be used to visualize and inspect the evaluation of expressions in a variety of ways. To learn more, read the 'View Rules' section." } - { Locals "locals" "Locals" Null 0 1 0 1 "Nearly identical to `Watch`, but automatically filled with local variables found within the selected call stack frame of the selected thread, according to the associated debug info. View rules and evaluation values can be edited, like in `Watch`, but unlike `Watch`, expressions cannot be edited or added to the table." } - { Registers "registers" "Registers" Null 0 1 0 1 "Nearly identical to `Watch`, but automatically filled with all register names according to the selected thread's architecture. View rules and evaluation values can be edited, like in `Watch`, but unlike `Watch`, expressions cannot be edited or added to the table." } - { Output "output" "Output" Null 0 1 0 1 "Displays textual output from the selected thread's containing process." } - { Memory "memory" "Memory" Null 0 1 1 1 "A familiar hex-editor-like interface for viewing memory of attached processes." } - { Breakpoints "breakpoints" "Breakpoints" Null 0 1 0 1 "Displays a table of all breakpoints, containing information about each breakpoint's name, location, and hit count. Also contains per-breakpoint controls for enabling, deleting, or editing each breakpoint. For more information on breakpoints and their features, read the 'Breakpoints' section." } - { WatchPins "watch_pins" "Watch Pins" Null 0 1 0 1 "Displays a table of all watch pins (watched expressions, like those found in `Watch`, but instead of being within a table, being pinned to some source code location, like breakpoints). This table contains each pin's name, location, and controls for editing or deleting each pin." } - { ExceptionFilters "exception_filters" "Exception Filters" Null 0 1 0 1 "An interface which controls whether or not the debugger will halt attached processes upon encountering specific exception codes for the first time." } - { Theme "theme" "Theme" Null 0 1 0 1 "An interface for modifying the colors used in the debugger's UI. Allows selecting a theme preset, loading a theme from a file, and modifying individual colors within a theme." } + { Null "null" "" Null Null 0 0 0 0 "" } + { Empty "empty" "" Null Null 0 0 0 0 "" } + { Commands "commands" "Commands" Null List 0 0 0 0 "" } + { FileSystem "file_system" "File System" Null FileOutline 0 0 0 0 "" } + { SystemProcesses "system_processes" "System Processes" Null Null 0 0 0 0 "" } + { EntityLister "entity_lister" "Entity List" EntityKindName Null 0 0 0 0 "" } + { Target "target" "Target" EntityName Target 1 0 0 0 "" } + { Targets "targets" "Targets" Null Target 0 1 0 1 "Displays a list of all targets, as well as controls for enabling, disabling, launching, editing, or deleting each target. For more information on targets, read the `Targets` section." } + { FilePathMap "file_path_map" "File Path Map" Null FileOutline 0 1 0 1 "Displays a table of *path maps*. Each path map is a pair of file or folder paths, one being a 'source' path, and one being a 'destination' path. These pairs are used by the debugger when automatically searching for specific files - for instance, when attempting to snap to a source code location specified by debug info. If debug info refers to a path on the machine on which a target executable was originally built, but that path is not valid on the debugger machine, but some alternative path exists, then path maps may be used to redirect the debugger from the debug info's specified paths to the associated appropriate debugger machine file paths." } + { Scheduler "scheduler" "Scheduler" Null Scheduler 0 1 0 1 "Displays all processes and threads to which the debugger is currently attached, and contains controls for selecting and freezing threads." } + { CallStack "call_stack" "Call Stack" Null Thread 0 1 0 1 "Displays the call stack of the currently selected thread. Each frame in the call stack contains the associated module, function name, and return address. Allows selection of a particular call stack frame other than the top." } + { Modules "modules" "Modules" Null Module 0 1 0 1 "Displays a table of all modules currently loaded by any process to which the debugger is attached. This table displays each module's name, virtual address range in the containing process' address space, and which debug info file is being used by the debugger for the associated module." } + { PendingEntity "pending_entity" "Pending Entity" EntityName FileOutline 1 0 0 0 "" } + { Code "code" "Code" EntityName FileOutline 1 1 1 0 "" } + { Disassembly "disassembly" "Disassembly" Null Glasses 0 1 0 1 "Displays disassembled instructions in a textual form from the selected thread's containing process virtual address space." } + { Watch "watch" "Watch" Null Binoculars 0 1 0 1 "The familiar 'watch window' debugger interface. Allows the inputting of a number of expressions. Each expression in the table is evaluated within the context of the selected thread's selected call stack frame. If applicable (depending on visualization rules and the expression's type), these expressions may be hierarchically expanded, which displays children as more rows in the table. The values of these expressions may also be edited, and if possible, can be used to write to registers or memory in attached processes. Also contains a new *view rule* column, not found in other major debuggers, which allows per-row specification of various visualization rules. These view rules may be used to visualize and inspect the evaluation of expressions in a variety of ways. To learn more, read the 'View Rules' section." } + { Locals "locals" "Locals" Null Binoculars 0 1 0 1 "Nearly identical to `Watch`, but automatically filled with local variables found within the selected call stack frame of the selected thread, according to the associated debug info. View rules and evaluation values can be edited, like in `Watch`, but unlike `Watch`, expressions cannot be edited or added to the table." } + { Registers "registers" "Registers" Null Binoculars 0 1 0 1 "Nearly identical to `Watch`, but automatically filled with all register names according to the selected thread's architecture. View rules and evaluation values can be edited, like in `Watch`, but unlike `Watch`, expressions cannot be edited or added to the table." } + { Output "output" "Output" Null List 0 1 0 1 "Displays textual output from the selected thread's containing process." } + { Memory "memory" "Memory" Null Grid 0 1 1 1 "A familiar hex-editor-like interface for viewing memory of attached processes." } + { Breakpoints "breakpoints" "Breakpoints" Null CircleFilled 0 1 0 1 "Displays a table of all breakpoints, containing information about each breakpoint's name, location, and hit count. Also contains per-breakpoint controls for enabling, deleting, or editing each breakpoint. For more information on breakpoints and their features, read the 'Breakpoints' section." } + { WatchPins "watch_pins" "Watch Pins" Null Pin 0 1 0 1 "Displays a table of all watch pins (watched expressions, like those found in `Watch`, but instead of being within a table, being pinned to some source code location, like breakpoints). This table contains each pin's name, location, and controls for editing or deleting each pin." } + { ExceptionFilters "exception_filters" "Exception Filters" Null Gear 0 1 0 1 "An interface which controls whether or not the debugger will halt attached processes upon encountering specific exception codes for the first time." } + { Theme "theme" "Theme" Null Palette 0 1 0 1 "An interface for modifying the colors used in the debugger's UI. Allows selecting a theme preset, loading a theme from a file, and modifying individual colors within a theme." } } //////////////////////////////// @@ -259,6 +267,19 @@ DF_CmdSpec2ViewSpecMap: {"open_diag_log" "entity_lister" DiagLog } } +//////////////////////////////// +//~ rjf: Command Parameter Slot -> View + +@table(slot view_spec) +DF_CmdParamSlot2ViewSpecMap: +{ + {Entity "entity_lister" } + {EntityList "entity_lister" } + {FilePath "file_system" } + {CmdSpec "commands" } + {ID "system_processes" } +} + //////////////////////////////// //~ rjf: Built-In Graphical View Rule Extensions // @@ -344,6 +365,15 @@ DF_ThemeTable: {DropShadow "Drop Shadow" drop_shadow } } +//////////////////////////////// +//~ rjf: Theme Color Version Remap Table + +@table(old_name new_name) +DF_ThemeColorVersionRemapTable: +{ + +} + //////////////////////////////// //~ rjf: Theme Presets @@ -530,6 +560,20 @@ df_g_cmd2view_table_dst: @expand(DF_CmdSpec2ViewSpecMap a) `str8_lit_comp("$(a.view)"),` } +//- rjf: cmd param slot -> view spec tables + +@table_gen_data(type: DF_CmdParamSlot, fallback:`DF_CmdParamSlot_Null`) +df_g_cmd_param_slot_2_view_spec_src_map: +{ + @expand(DF_CmdParamSlot2ViewSpecMap a) `DF_CmdParamSlot_$(a.slot),` +} + +@table_gen_data(type: String8, fallback:`{0}`) +df_g_cmd_param_slot_2_view_spec_dst_map: +{ + @expand(DF_CmdParamSlot2ViewSpecMap a) `str8_lit_comp("$(a.view_spec)"),` +} + //- rjf: default bindings table @table_gen_data(type: DF_StringBindingPair, fallback: `{0}`) @@ -538,6 +582,20 @@ df_g_default_binding_table: @expand(DF_DefaultBindingTable a) ```{str8_lit_comp("$(a.name)"), {OS_Key_$(a.key), 0 $(a.ctrl != 0 -> `|OS_EventFlag_Ctrl`) $(a.shift != 0 -> `|OS_EventFlag_Shift`) $(a.alt != 0 -> `|OS_EventFlag_Alt`)}},```; } +//- rjf: binding version remap tables + +@table_gen_data(type: String8, fallback: `{0}`) +df_g_binding_version_remap_old_name_table: +{ + @expand(DF_BindingVersionRemapTable a) `str8_lit_comp("$(a.old_name)"),` +} + +@table_gen_data(type: String8, fallback: `{0}`) +df_g_binding_version_remap_new_name_table: +{ + @expand(DF_BindingVersionRemapTable a) `str8_lit_comp("$(a.new_name)"),` +} + //- rjf: view hook forward declares @table_gen @@ -577,7 +635,7 @@ df_g_gfx_view_rule_spec_info_table: @table_gen_data(type: DF_ViewSpecInfo, fallback: `{0}`) df_g_gfx_view_kind_spec_info_table: { - @expand(DF_GfxViewTable a) ```{(0|$(a.parameterized_by_entity)*DF_ViewSpecFlag_ParameterizedByEntity|$(a.can_serialize)*DF_ViewSpecFlag_CanSerialize|$(a.can_serialize_entity_path)*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("$(a.name_lower)"), str8_lit_comp("$(a.display_string)"), DF_NameKind_$(a.name_kind), DF_VIEW_SETUP_FUNCTION_NAME($(a.name)), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME($(a.name)), DF_VIEW_CMD_FUNCTION_NAME($(a.name)), DF_VIEW_UI_FUNCTION_NAME($(a.name))},```; + @expand(DF_GfxViewTable a) ```{(0|$(a.parameterized_by_entity)*DF_ViewSpecFlag_ParameterizedByEntity|$(a.can_serialize)*DF_ViewSpecFlag_CanSerialize|$(a.can_serialize_entity_path)*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("$(a.name_lower)"), str8_lit_comp("$(a.display_string)"), DF_NameKind_$(a.name_kind), DF_IconKind_$(a.icon), DF_VIEW_SETUP_FUNCTION_NAME($(a.name)), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME($(a.name)), DF_VIEW_CMD_FUNCTION_NAME($(a.name)), DF_VIEW_UI_FUNCTION_NAME($(a.name))},```; } //- rjf: theme color string tables diff --git a/src/df/gfx/df_views.c b/src/df/gfx/df_views.c index 3e3c7ec8..528f9d95 100644 --- a/src/df/gfx/df_views.c +++ b/src/df/gfx/df_views.c @@ -800,49 +800,52 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW B32 edit_end = 0; B32 edit_submit = 0; String8 edit_autocomplete_string = {0}; - if(!ewv->input_editing && ui_is_focus_active()) + UI_Focus(UI_FocusKind_On) { - UI_NavActionList *nav_actions = ui_nav_actions(); - for(UI_NavActionNode *n = nav_actions->first; n != 0; n = n->next) + if(!ewv->input_editing && ui_is_focus_active()) { - if(n->v.insertion.size != 0 || n->v.flags & UI_NavActionFlag_Paste) + UI_NavActionList *nav_actions = ui_nav_actions(); + for(UI_NavActionNode *n = nav_actions->first; n != 0; n = n->next) + { + if(n->v.insertion.size != 0 || n->v.flags & UI_NavActionFlag_Paste) + { + edit_begin = 1; + break; + } + } + if(os_key_press(ui_events(), ui_window(), 0, OS_Key_F2)) { edit_begin = 1; - break; + } + if(os_key_press(ui_events(), ui_window(), 0, OS_Key_Return)) + { + edit_begin_or_expand = 1; } } - if(os_key_press(ui_events(), ui_window(), 0, OS_Key_F2)) + if(ewv->input_editing && ui_is_focus_active()) { - edit_begin = 1; - } - if(os_key_press(ui_events(), ui_window(), 0, OS_Key_Return)) - { - edit_begin_or_expand = 1; - } - } - if(ewv->input_editing && ui_is_focus_active()) - { - if(os_key_press(ui_events(), ui_window(), 0, OS_Key_Esc)) - { - edit_end = 1; - edit_commit = 0; - } - if(os_key_press(ui_events(), ui_window(), 0, OS_Key_Return)) - { - edit_end = 1; - edit_commit = 1; - edit_submit = 1; - } - UI_NavActionList *nav_actions = ui_nav_actions(); - for(UI_NavActionNode *n = nav_actions->first; n != 0; n = n->next) - { - if(n->v.flags & UI_NavActionFlag_ReplaceAndCommit) + if(os_key_press(ui_events(), ui_window(), 0, OS_Key_Esc)) { - edit_commit = 1; edit_end = 1; - edit_autocomplete_string = n->v.insertion; - ui_nav_eat_action_node(nav_actions, n); - break; + edit_commit = 0; + } + if(os_key_press(ui_events(), ui_window(), 0, OS_Key_Return)) + { + edit_end = 1; + edit_commit = 1; + edit_submit = 1; + } + UI_NavActionList *nav_actions = ui_nav_actions(); + for(UI_NavActionNode *n = nav_actions->first; n != 0; n = n->next) + { + if(n->v.flags & UI_NavActionFlag_ReplaceAndCommit) + { + edit_commit = 1; + edit_end = 1; + edit_autocomplete_string = n->v.insertion; + ui_nav_eat_action_node(nav_actions, n); + break; + } } } } @@ -890,8 +893,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW disabled_flags |= UI_BoxFlag_Disabled; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) + UI_Focus(UI_FocusKind_On) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, ewv->input_editing ? 0 : &cursor, &visible_row_rng, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) UI_TableF(ArrayCount(col_pcts), col_pcts, "table_header") { next_cursor = cursor; @@ -996,7 +1000,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW } //- rjf: build canvas row - if(row->flags & DF_EvalVizRowFlag_Canvas) UI_FocusHot(row_selected) + if(row->flags & DF_EvalVizRowFlag_Canvas) UI_FocusHot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off) { ui_set_next_flags(disabled_flags); ui_set_next_pref_width(ui_pct(1, 0)); @@ -1051,7 +1055,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW // rjf: build UI_Signal sig = {0}; B32 next_expanded = row_expanded; - UI_TableCell UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { B32 expr_editing_active = ui_is_focus_active(); B32 is_inherited = (row->inherited_type_key_chain.count != 0); @@ -1200,7 +1206,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW // rjf: build UI_Signal sig = {0}; - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { // rjf: errors? -> show errors if(value_is_error) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_FailureBackground)) UI_Font(df_font_from_slot(DF_FontSlot_Main)) @@ -1280,7 +1288,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW //- rjf: type { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_Type); - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { TG_Key key = row->eval.type_key; String8 string = tg_string_from_key(scratch.arena, parse_ctx.type_graph, parse_ctx.rdbg, key); @@ -1318,7 +1328,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW // rjf: build UI_Signal sig = {0}; B32 rule_editing_active = 0; - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { rule_editing_active = ui_is_focus_active(); sig = df_line_editf(DF_LineEditFlag_CodeContents|DF_LineEditFlag_NoBackground, 0, &ewv->input_cursor, &ewv->input_mark, ewv->input_buffer, sizeof(ewv->input_buffer), &ewv->input_size, 0, view_rule, "###view_rule_%I64x", row_hash); @@ -1378,7 +1390,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW // rjf: build UI_Signal sig = {0}; B32 expr_editing_active = 0; - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { expr_editing_active = ui_is_focus_active(); sig = df_line_editf(DF_LineEditFlag_CodeContents|DF_LineEditFlag_NoBackground, 0, &ewv->input_cursor, &ewv->input_mark, ewv->input_buffer, sizeof(ewv->input_buffer), &ewv->input_size, 0, str8_lit(""), "###empty_row_expr"); @@ -1413,7 +1427,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW //- rjf: value { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_Value); - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###val_BLANK"); UI_Signal sig = ui_signal_from_box(box); @@ -1429,7 +1445,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW //- rjf: type { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_Type); - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###type_BLANK"); UI_Signal sig = ui_signal_from_box(box); @@ -1445,7 +1463,9 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW //- rjf: view rule { B32 cell_selected = (row_selected && cursor.x == DF_EvalWatchViewColumnKind_ViewRule); - UI_TableCell UI_Font(code_font) UI_FocusHot(cell_selected) UI_FocusActive(cell_selected && ewv->input_editing) + UI_TableCell UI_Font(code_font) + UI_FocusHot(cell_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((cell_selected && ewv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###view_rule_BLANK"); UI_Signal sig = ui_signal_from_box(box); @@ -1677,8 +1697,9 @@ DF_VIEW_UI_FUNCTION_DEF(Empty) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - UI_WidthFill UI_HeightFill UI_Column UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - UI_Padding(ui_pct(1, 0)) + ui_set_next_flags(UI_BoxFlag_DefaultFocusNav); + UI_Focus(UI_FocusKind_On) UI_WidthFill UI_HeightFill UI_NamedColumn(str8_lit("empty_view")) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) + UI_Padding(ui_pct(1, 0)) UI_Focus(UI_FocusKind_Null) { DF_EntityList targets = df_push_active_target_list(scratch.arena); DF_EntityList processes = df_query_cached_entity_list_with_kind(DF_EntityKind_Process); @@ -1707,7 +1728,7 @@ DF_VIEW_UI_FUNCTION_DEF(Empty) DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_AddTarget); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } }break; @@ -1771,7 +1792,7 @@ DF_VIEW_UI_FUNCTION_DEF(Empty) UI_Padding(ui_pct(1, 0)) { ui_labelf("use"); - DF_CmdSpec *spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Commands); + DF_CmdSpec *spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand); UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_PlainText)) UI_Flags(UI_BoxFlag_DrawBorder) UI_TextAlignment(UI_TextAlign_Center) @@ -1803,30 +1824,22 @@ DF_VIEW_UI_FUNCTION_DEF(Commands) DF_CmdsViewState *cv = df_view_user_state(view, DF_CmdsViewState); //- rjf: build filtered array of commands - DF_CmdListerItemList cmd_list = df_cmd_lister_item_list_from_needle(scratch.arena, view->query); + String8 query = str8(view->query_buffer, view->query_string_size); + DF_CmdListerItemList cmd_list = df_cmd_lister_item_list_from_needle(scratch.arena, query); DF_CmdListerItemArray cmd_array = df_cmd_lister_item_array_from_list(scratch.arena, cmd_list); df_cmd_lister_item_array_sort_by_strength__in_place(cmd_array); //- rjf: submit best match when hitting enter w/ no selection if(cv->selected_cmd_spec == &df_g_nil_cmd_spec && os_key_press(ui_events(), ui_window(), 0, OS_Key_Return)) { - // rjf: complete view + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + if(cmd_array.count > 0) { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: perform fast path - { - DF_CmdParams params = df_cmd_params_from_panel(ws, panel); - if(cmd_array.count > 0) - { - DF_CmdListerItem *item = &cmd_array.v[0]; - params.cmd_spec = item->cmd_spec; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - } - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + DF_CmdListerItem *item = &cmd_array.v[0]; + params.cmd_spec = item->cmd_spec; + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); } + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } //- rjf: selected kind -> cursor @@ -1854,7 +1867,8 @@ DF_VIEW_UI_FUNCTION_DEF(Commands) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { //- rjf: build buttons for(S64 row_idx = visible_row_range.min; @@ -1895,18 +1909,6 @@ DF_VIEW_UI_FUNCTION_DEF(Commands) UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Code)) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) ui_label(item->cmd_spec->info.string); - - ui_spacer(ui_pct(1, 0)); - - // rjf: args - UI_TextAlignment(UI_TextAlign_Right) - UI_Font(df_font_from_slot(DF_FontSlot_Code)) - UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Code)) - UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - { - String8 args = df_g_cmd_query_rule_kind_arg_desc_table[item->cmd_spec->info.query_rule]; - ui_label(args.size != 0 ? args : str8_lit("(no arguments)")); - } } } @@ -1914,7 +1916,7 @@ DF_VIEW_UI_FUNCTION_DEF(Commands) ui_set_next_hover_cursor(OS_Cursor_HandPoint); ui_set_next_child_layout_axis(Axis2_X); UI_Box *box = &ui_g_nil_box; - UI_Focus(cursor.y == row_idx+1) + UI_Focus(cursor.y == row_idx+1 ? UI_FocusKind_On : UI_FocusKind_Off) { box = ui_build_box_from_stringf(UI_BoxFlag_Clickable| UI_BoxFlag_DrawBorder| @@ -1973,19 +1975,10 @@ DF_VIEW_UI_FUNCTION_DEF(Commands) UI_Signal sig = ui_signal_from_box(box); if(sig.clicked) { - // rjf: complete view - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: do fast path - { - DF_CmdParams params = df_cmd_params_from_panel(ws, panel); - params.cmd_spec = item->cmd_spec; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); - } + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + params.cmd_spec = item->cmd_spec; + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } if(sig.right_clicked) { @@ -2028,7 +2021,7 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - String8 query = view->query; + String8 query = str8(view->query_buffer, view->query_string_size); String8 query_normalized = path_normalized_from_string(scratch.arena, query); B32 query_has_slash = (query.size != 0 && char_to_correct_slash(query.str[query.size-1]) == '/'); String8 query_normalized_with_opt_slash = push_str8f(scratch.arena, "%S%s", query_normalized, query_has_slash ? "/" : ""); @@ -2190,19 +2183,10 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) // rjf: command search part is empty, but directory matches some file: if(path_query_path_props.created != 0 && path_query.search.size == 0) { - // rjf: view return - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: send activation command - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, df_view_caller_root_from_view(view)); - params.file_path = query_normalized_with_opt_slash; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); - df_push_cmd__root(¶ms, view->cmd_spec); - } + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + params.file_path = query_normalized_with_opt_slash; + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } // rjf: command argument exactly matches some file: @@ -2212,25 +2196,16 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) if(query_normalized_with_opt_slash_props.flags & FilePropertyFlag_IsFolder) { String8 new_path = push_str8f(scratch.arena, "%S%S/", path_query.path, path_query.search); - DF_CmdParams params = df_cmd_params_zero(); - df_view_equip_command(view, view->cmd_spec, ¶ms, new_path, &df_g_nil_cfg_node); + df_view_equip_spec(view, view->spec, df_entity_from_handle(view->entity), new_path, &df_g_nil_cfg_node); } // rjf: is a file -> complete view else { - // rjf: view return - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: send activation command - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, df_view_caller_root_from_view(view)); - params.file_path = query_normalized_with_opt_slash; - df_push_cmd__root(¶ms, view->cmd_spec); - } + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + params.file_path = query_normalized_with_opt_slash; + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } } @@ -2242,43 +2217,22 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) { String8 existing_path = str8_chop_last_slash(path_query.path); String8 new_path = push_str8f(scratch.arena, "%S/%S/", existing_path, files[0].filename); - DF_CmdParams params = df_cmd_params_zero(); - df_view_equip_command(view, view->cmd_spec, ¶ms, new_path, &df_g_nil_cfg_node); + df_view_equip_spec(view, view->spec, df_entity_from_handle(view->entity), new_path, &df_g_nil_cfg_node); } else { - // rjf: view return - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: send activation command - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, df_view_caller_root_from_view(view)); - params.file_path = push_str8f(scratch.arena, "%S%S", path_query.path, filename); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); - df_push_cmd__root(¶ms, view->cmd_spec); - } + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + params.file_path = push_str8f(scratch.arena, "%S%S", path_query.path, filename); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } } // rjf: command argument does not match any file, and lister is empty (new file) else { - // rjf: view return - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: send activation command - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, df_view_caller_root_from_view(view)); - params.file_path = query_normalized_with_opt_slash; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); - df_push_cmd__root(¶ms, view->cmd_spec); - } + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } } @@ -2289,7 +2243,7 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) { col_pcts[idx] = &fs->col_pcts[idx]; } - UI_Focus(0) UI_TableF(ArrayCount(fs->col_pcts), col_pcts, "###fs_tbl") + UI_PrefHeight(ui_px(row_height_px, 1)) UI_Focus(UI_FocusKind_Off) UI_TableF(ArrayCount(fs->col_pcts), col_pcts, "###fs_tbl") { UI_TableVector UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) { @@ -2348,20 +2302,21 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) Vec2F32 content_dim = dim_2f32(rect); scroll_list_params.flags = UI_ScrollListFlag_All; scroll_list_params.row_height_px = row_height_px; - scroll_list_params.dim_px = v2f32(content_dim.x, content_dim.y-row_height_px*2); + scroll_list_params.dim_px = v2f32(content_dim.x, content_dim.y-row_height_px); scroll_list_params.cursor_range = r2s64(v2s64(0, 0), v2s64(0, file_count+1)); scroll_list_params.item_range = r1s64(0, file_count+1); scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &ps->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &ps->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { // rjf: up-one-directory button (at idx 0) if(visible_row_range.min == 0) { // rjf: build UI_Signal sig = {0}; - UI_FocusHot(ps->cursor.y == row_num) + UI_FocusHot(ps->cursor.y == row_num ? UI_FocusKind_On : UI_FocusKind_Off) { sig = ui_buttonf("###up_one"); } @@ -2392,8 +2347,7 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) String8 new_path = str8_chop_last_slash(str8_chop_last_slash(path_query.path)); new_path = path_normalized_from_string(scratch.arena, new_path); String8 new_cmd = push_str8f(scratch.arena, "%S/", new_path); - DF_CmdParams params = df_cmd_params_zero(); - df_view_equip_command(view, view->cmd_spec, ¶ms, new_cmd, &df_g_nil_cfg_node); + df_view_equip_spec(view, view->spec, df_entity_from_handle(view->entity), new_cmd, &df_g_nil_cfg_node); } } @@ -2408,7 +2362,7 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) // rjf: make button UI_Signal file_sig = {0}; - UI_FocusHot(file_kb_focus) + UI_FocusHot(file_kb_focus ? UI_FocusKind_On : UI_FocusKind_Off) { file_sig = ui_buttonf("##%S_%p", file->filename, view); } @@ -2475,24 +2429,14 @@ DF_VIEW_UI_FUNCTION_DEF(FileSystem) if(file->props.flags & FilePropertyFlag_IsFolder) { String8 new_cmd = push_str8f(scratch.arena, "%S/", new_path); - DF_CmdParams params = df_cmd_params_zero(); - df_view_equip_command(view, view->cmd_spec, ¶ms, new_cmd, &df_g_nil_cfg_node); + df_view_equip_spec(view, view->spec, df_entity_from_handle(view->entity), new_cmd, &df_g_nil_cfg_node); } else { - // rjf: view return - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - } - - // rjf: send activation command - { - DF_CmdParams params = df_cmd_params_from_view(ws, panel, df_view_caller_root_from_view(view)); - params.file_path = new_path; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); - df_push_cmd__root(¶ms, view->cmd_spec); - } + DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); + params.file_path = new_path; + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_FilePath); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } } } @@ -2544,13 +2488,14 @@ DF_VIEW_UI_FUNCTION_DEF(SystemProcesses) } //- rjf: gather list of filtered process infos + String8 query = str8(view->query_buffer, view->query_string_size); DF_ProcessInfoArray process_info_array = sp->cached_process_array; - if(sp->need_initial_gather || !str8_match(sp->cached_process_arg, view->query, 0)) + if(sp->need_initial_gather || !str8_match(sp->cached_process_arg, query, 0)) { arena_clear(sp->cached_process_arena); sp->need_initial_gather = 0; - sp->cached_process_arg = push_str8_copy(sp->cached_process_arena, view->query); - DF_ProcessInfoList list = df_process_info_list_from_query(sp->cached_process_arena, view->query); + sp->cached_process_arg = push_str8_copy(sp->cached_process_arena, query); + DF_ProcessInfoList list = df_process_info_list_from_query(sp->cached_process_arena, query); sp->cached_process_array = df_process_info_array_from_list(sp->cached_process_arena, list); process_info_array = sp->cached_process_array; df_process_info_array_sort_by_strength__in_place(process_info_array); @@ -2563,8 +2508,7 @@ DF_VIEW_UI_FUNCTION_DEF(SystemProcesses) DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.id = info->info.pid; df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_ID); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - df_push_cmd__root(¶ms, view->cmd_spec); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } //- rjf: selected PID -> cursor @@ -2587,13 +2531,15 @@ DF_VIEW_UI_FUNCTION_DEF(SystemProcesses) Vec2F32 content_dim = dim_2f32(rect); scroll_list_params.flags = UI_ScrollListFlag_All; scroll_list_params.row_height_px = row_height_px; - scroll_list_params.dim_px = v2f32(content_dim.x, content_dim.y-row_height_px); + scroll_list_params.dim_px = v2f32(content_dim.x, content_dim.y); scroll_list_params.cursor_range = r2s64(v2s64(0, 0), v2s64(0, process_info_array.count)); scroll_list_params.item_range = r1s64(0, process_info_array.count); scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { //- rjf: build rows for(U64 idx = visible_row_range.min; @@ -2603,7 +2549,7 @@ DF_VIEW_UI_FUNCTION_DEF(SystemProcesses) DF_ProcessInfo *info = &process_info_array.v[idx]; B32 is_attached = info->is_attached; UI_Signal sig = {0}; - UI_FocusHot(cursor.y == idx+1) + UI_FocusHot(cursor.y == idx+1 ? UI_FocusKind_On : UI_FocusKind_Off) { sig = ui_buttonf("###proc_%i", info->info.pid); } @@ -2648,8 +2594,7 @@ DF_VIEW_UI_FUNCTION_DEF(SystemProcesses) DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.id = info->info.pid; df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_ID); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - df_push_cmd__root(¶ms, view->cmd_spec); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } } } @@ -2691,9 +2636,9 @@ DF_VIEW_UI_FUNCTION_DEF(EntityLister) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - DF_CmdSpec *spec = view->cmd_spec; - DF_EntityKind entity_kind = (DF_EntityKind)spec->info.query_info_u64[0]; - DF_EntityFlags entity_flags_omit = spec->info.query_info_u64[1]; + DF_CmdSpec *spec = ws->query_cmd_spec; + DF_EntityKind entity_kind = spec->info.query.entity_kind; + DF_EntityFlags entity_flags_omit = DF_EntityFlag_IsFolder; F32 row_height_px = floor_f32(ui_top_font_size()*2.5f); F32 scroll_bar_dim = floor_f32(ui_top_font_size()*1.5f); @@ -2708,7 +2653,8 @@ DF_VIEW_UI_FUNCTION_DEF(EntityLister) DF_Entity *selected_entity = df_entity_from_handle(selected_entity_handle); //- rjf: build filtered array of entities - DF_EntityListerItemList ent_list = df_entity_lister_item_list_from_needle(scratch.arena, entity_kind, entity_flags_omit, view->query); + String8 query = str8(view->query_buffer, view->query_string_size); + DF_EntityListerItemList ent_list = df_entity_lister_item_list_from_needle(scratch.arena, entity_kind, entity_flags_omit, query); DF_EntityListerItemArray ent_arr = df_entity_lister_item_array_from_list(scratch.arena, ent_list); df_entity_lister_item_array_sort_by_strength__in_place(ent_arr); @@ -2719,9 +2665,9 @@ DF_VIEW_UI_FUNCTION_DEF(EntityLister) DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.entity = df_handle_from_entity(ent); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_EntityList); df_handle_list_push(scratch.arena, ¶ms.entity_list, params.entity); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - df_push_cmd__root(¶ms, view->cmd_spec); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } //- rjf: selected entity -> cursor @@ -2744,13 +2690,15 @@ DF_VIEW_UI_FUNCTION_DEF(EntityLister) Vec2F32 content_dim = dim_2f32(rect); scroll_list_params.flags = UI_ScrollListFlag_All; scroll_list_params.row_height_px = row_height_px; - scroll_list_params.dim_px = v2f32(content_dim.x, content_dim.y-row_height_px); + scroll_list_params.dim_px = v2f32(content_dim.x, content_dim.y); scroll_list_params.cursor_range = r2s64(v2s64(0, 0), v2s64(0, ent_arr.count)); scroll_list_params.item_range = r1s64(0, ent_arr.count); scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { for(S64 idx = visible_row_range.min; idx <= visible_row_range.max && idx < ent_arr.count; @@ -2761,7 +2709,7 @@ DF_VIEW_UI_FUNCTION_DEF(EntityLister) ui_set_next_hover_cursor(OS_Cursor_HandPoint); ui_set_next_child_layout_axis(Axis2_X); UI_Box *box = &ui_g_nil_box; - UI_FocusHot(idx+1 == cursor.y) + UI_FocusHot(idx+1 == cursor.y ? UI_FocusKind_On : UI_FocusKind_Off) { box = ui_build_box_from_stringf(UI_BoxFlag_Clickable| UI_BoxFlag_DrawBorder| @@ -2796,9 +2744,9 @@ DF_VIEW_UI_FUNCTION_DEF(EntityLister) DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.entity = df_handle_from_entity(ent); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity); + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_EntityList); df_handle_list_push(scratch.arena, ¶ms.entity_list, params.entity); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ViewReturn)); - df_push_cmd__root(¶ms, view->cmd_spec); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CompleteQuery)); } } } @@ -2829,21 +2777,21 @@ DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Target) DF_VIEW_CMD_FUNCTION_DEF(Target) { DF_TargetViewState *tv = df_view_user_state(view, DF_TargetViewState); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); // rjf: process commands for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + if(df_panel_from_handle(cmd->params.panel) != panel) { continue; } // rjf: process command + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default:break; @@ -2870,8 +2818,7 @@ DF_VIEW_UI_FUNCTION_DEF(Target) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - ui_set_focus_active(1); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); DF_EntityList custom_entry_points = df_push_entity_child_list_with_kind(scratch.arena, entity, DF_EntityKind_EntryPointName); F32 row_height_px = floor_f32(ui_top_font_size()*2.5f); @@ -2907,7 +2854,7 @@ DF_VIEW_UI_FUNCTION_DEF(Target) B32 edit_end = 0; B32 edit_commit = 0; B32 edit_submit = 0; - if(ui_is_focus_active()) + UI_Focus(UI_FocusKind_On) if(ui_is_focus_active()) { if(!tv->input_editing) { @@ -2959,7 +2906,9 @@ DF_VIEW_UI_FUNCTION_DEF(Target) DF_EntityKind commit_storage_child_kind = DF_EntityKind_Nil; Vec2S64 next_cursor = tv->cursor; UI_ScrollListSignal scroll_list_sig = {0}; - UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, tv->input_editing ? 0 : &tv->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, tv->input_editing ? 0 : &tv->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { next_cursor = tv->cursor; F32 *col_pcts[] = {&tv->key_pct, &tv->value_pct}; @@ -3024,7 +2973,8 @@ DF_VIEW_UI_FUNCTION_DEF(Target) // rjf: build main editor ui UI_Signal sig = {0}; - UI_FocusHot(value_selected) UI_FocusActive(value_selected && tv->input_editing) + UI_FocusHot(value_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((value_selected && tv->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { sig = df_line_editf(DF_LineEditFlag_NoBackground, 0, &tv->input_cursor, &tv->input_mark, tv->input_buffer, sizeof(tv->input_buffer), &tv->input_size, 0, kv_info[idx].current_text, "###kv_editor_%i", (S32)idx); edit_commit = edit_commit || sig.commit; @@ -3072,13 +3022,14 @@ DF_VIEW_UI_FUNCTION_DEF(Target) // rjf: browse button to fill text field if(has_browse) UI_PrefWidth(ui_text_dim(10, 1)) { - UI_FocusHot(row_selected && next_cursor.x == 1) UI_TextAlignment(UI_TextAlign_Center) + UI_FocusHot((row_selected && next_cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) + UI_TextAlignment(UI_TextAlign_Center) if(ui_buttonf("Browse...").clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); tv->pick_dst_kind = kv_info[idx].storage_child_kind; } } @@ -3123,7 +3074,6 @@ DF_VIEW_UI_FUNCTION_DEF(Target) //- rjf: apply moves to selection tv->cursor = next_cursor; - ui_unset_focus_active(); scratch_end(scratch); ProfEnd(); } @@ -3197,19 +3147,22 @@ DF_VIEW_UI_FUNCTION_DEF(Targets) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { // rjf: add new ctrl if(visible_row_range.min == 0) { UI_Signal add_sig = {0}; - UI_FocusHot(cursor.y == 1) add_sig = df_icon_buttonf(DF_IconKind_Add, "Add New Target"); + UI_FocusHot(cursor.y == 1 ? UI_FocusKind_On : UI_FocusKind_Off) + add_sig = df_icon_buttonf(DF_IconKind_Add, "Add New Target"); if(add_sig.clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_AddTarget); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } } @@ -3223,14 +3176,15 @@ DF_VIEW_UI_FUNCTION_DEF(Targets) B32 row_selected = ((U64)cursor.y == row_idx+1); // rjf: enabled - UI_PrefWidth(ui_em(2.25f, 1)) UI_FocusHot(row_selected && cursor.x == 0) + UI_PrefWidth(ui_em(2.25f, 1)) + UI_FocusHot((row_selected && cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) if(df_icon_buttonf(target->b32 ? DF_IconKind_CheckFilled : DF_IconKind_CheckHollow, "###ebl_%p", target).clicked) { df_entity_equip_b32(target, !target->b32); } // rjf: target name - UI_WidthFill UI_FocusHot(row_selected && cursor.x == 1) + UI_WidthFill UI_FocusHot((row_selected && cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, target); } @@ -3254,7 +3208,7 @@ DF_VIEW_UI_FUNCTION_DEF(Targets) for(U64 ctrl_idx = 0; ctrl_idx < ArrayCount(ctrls); ctrl_idx += 1) { UI_Signal sig = {0}; - UI_FocusHot(row_selected && cursor.x == 2+ctrl_idx) + UI_FocusHot((row_selected && cursor.x == 2+ctrl_idx) ? UI_FocusKind_On : UI_FocusKind_Off) { sig = df_icon_buttonf(ctrls[ctrl_idx].icon, "###%p_ctrl_%i", target, (int)ctrl_idx); } @@ -3314,15 +3268,16 @@ DF_VIEW_CMD_FUNCTION_DEF(FilePathMap) for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } //rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default:break; @@ -3348,7 +3303,6 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - ui_set_focus_active(1); DF_EntityList maps_list = df_query_cached_entity_list_with_kind(DF_EntityKind_OverrideFileLink); DF_EntityArray maps = df_entity_array_from_list(scratch.arena, &maps_list); F32 row_height_px = floor_f32(ui_top_font_size()*2.5f); @@ -3411,7 +3365,9 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, fpms->input_editing ? 0 : &fpms->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, fpms->input_editing ? 0 : &fpms->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) UI_TableF(ArrayCount(col_pcts), col_pcts, "###tbl") { next_cursor = fpms->cursor; @@ -3457,7 +3413,8 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) // rjf: build UI_Signal sig = {0}; - UI_FocusHot(value_selected) UI_FocusActive(value_selected && fpms->input_editing) + UI_FocusHot(value_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((value_selected && fpms->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { sig = df_line_editf(DF_LineEditFlag_NoBackground, 0, &fpms->input_cursor, &fpms->input_mark, fpms->input_buffer, sizeof(fpms->input_buffer), &fpms->input_size, 0, map_src_path, "###src_editor_%p", map); edit_commit = edit_commit || sig.commit; @@ -3498,13 +3455,14 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) } //- rjf: browse button - UI_FocusHot(row_selected && fpms->cursor.x == 1) UI_PrefWidth(ui_text_dim(10, 1)) + UI_FocusHot((row_selected && fpms->cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) + UI_PrefWidth(ui_text_dim(10, 1)) if(ui_buttonf("Browse...").clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); fpms->pick_file_dst_map = df_handle_from_entity(map); fpms->pick_file_dst_side = Side_Min; } @@ -3529,7 +3487,8 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) // rjf: build UI_Signal sig = {0}; - UI_FocusHot(value_selected) UI_FocusActive(value_selected && fpms->input_editing) + UI_FocusHot(value_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((value_selected && fpms->input_editing) ? UI_FocusKind_On : UI_FocusKind_Off) { sig = df_line_editf(DF_LineEditFlag_NoBackground, 0, &fpms->input_cursor, &fpms->input_mark, fpms->input_buffer, sizeof(fpms->input_buffer), &fpms->input_size, 0, map_dst_path, "###dst_editor_%p", map); edit_commit = edit_commit || sig.commit; @@ -3571,13 +3530,14 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) //- rjf: browse button { - UI_FocusHot(row_selected && fpms->cursor.x == 3) UI_PrefWidth(ui_text_dim(10, 1)) + UI_FocusHot((row_selected && fpms->cursor.x == 3) ? UI_FocusKind_On : UI_FocusKind_Off) + UI_PrefWidth(ui_text_dim(10, 1)) if(ui_buttonf("Browse...").clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); fpms->pick_file_dst_map = df_handle_from_entity(map); fpms->pick_file_dst_side = Side_Max; } @@ -3615,7 +3575,6 @@ DF_VIEW_UI_FUNCTION_DEF(FilePathMap) //- rjf: apply moves to selection fpms->cursor = next_cursor; - ui_unset_focus_active(); scratch_end(scratch); ProfEnd(); } @@ -3704,7 +3663,9 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) UI_TableF(0, 0, "scheduler_table") { Vec2S64 next_cursor = cursor; @@ -3733,7 +3694,7 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) UI_NamedTableVectorF("entity_row_%p", entity) { UI_TableCellSized(ui_em(1.5f*depth, 1.f)) {} - UI_TableCellSized(ui_em(2.25f, 1.f)) UI_FocusHot(row_is_selected && cursor.x == 0) + UI_TableCellSized(ui_em(2.25f, 1.f)) UI_FocusHot((row_is_selected && cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) { B32 frozen_by_solo_mode = (entity->kind == DF_EntityKind_Thread && entity != df_entity_from_handle(ctrl_ctx.thread) && df_state->ctrl_solo_stepping_mode); B32 frozen = df_entity_is_frozen(entity); @@ -3762,7 +3723,8 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(cmd_kind)); } } - UI_TableCellSized(ui_pct(1, 0)) UI_FocusHot(row_is_selected && desc_col_rng.min <= cursor.x && cursor.x <= desc_col_rng.max) + UI_TableCellSized(ui_pct(1, 0)) + UI_FocusHot((row_is_selected && desc_col_rng.min <= cursor.x && cursor.x <= desc_col_rng.max) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, entity); } @@ -3775,7 +3737,7 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) }break; case DF_EntityKind_Process: { - UI_TableCellSized(ui_children_sum(1.f)) UI_FocusHot(row_is_selected && cursor.x == 2) + UI_TableCellSized(ui_children_sum(1.f)) UI_FocusHot((row_is_selected && cursor.x == 2) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_PrefWidth(ui_text_dim(10, 1)) UI_TextAlignment(UI_TextAlign_Center) @@ -3787,7 +3749,7 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Detach)); } } - UI_TableCellSized(ui_em(2.25f, 1.f)) UI_FocusHot(row_is_selected && cursor.x == 3) + UI_TableCellSized(ui_em(2.25f, 1.f)) UI_FocusHot((row_is_selected && cursor.x == 3) ? UI_FocusKind_On : UI_FocusKind_Off) { if(df_icon_buttonf(DF_IconKind_Redo, "###retry").clicked) { @@ -3797,7 +3759,7 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_Restart)); } } - UI_TableCellSized(ui_em(2.25f, 1.f)) UI_FocusHot(row_is_selected && cursor.x == 4) + UI_TableCellSized(ui_em(2.25f, 1.f)) UI_FocusHot((row_is_selected && cursor.x == 4) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_FailureBackground)) UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_FailureText)) @@ -3813,7 +3775,7 @@ DF_VIEW_UI_FUNCTION_DEF(Scheduler) }break; case DF_EntityKind_Thread: { - UI_TableCellSized(ui_children_sum(1.f)) UI_FocusHot(row_is_selected && cursor.x >= 2) + UI_TableCellSized(ui_children_sum(1.f)) UI_FocusHot((row_is_selected && cursor.x >= 2) ? UI_FocusKind_On : UI_FocusKind_Off) { DF_Entity *process = df_entity_ancestor_from_kind(entity, DF_EntityKind_Process); U64 rip_vaddr = df_query_cached_rip_from_thread(entity); @@ -3852,7 +3814,6 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - ui_set_focus_active(1); DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); DF_Entity *thread = df_entity_from_handle(ctrl_ctx.thread); U64 selected_unwind_count = ctrl_ctx.unwind_count; @@ -3897,7 +3858,9 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cs->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cs->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { Vec2S64 next_cursor = cs->cursor; @@ -3950,7 +3913,7 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack) UI_TextColor(thread_color) UI_WidthFill UI_TextAlignment(UI_TextAlign_Center) - UI_FocusHot(row_selected && cs->cursor.x == 0) + UI_FocusHot((row_selected && cs->cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) { String8 selected_string = selected_unwind_count == frame_idx ? df_g_icon_kind_text_table[DF_IconKind_RightArrow] : str8_lit(""); UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_DrawText, "%S###selection_%i", selected_string, @@ -3972,13 +3935,14 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack) } // rjf: build cell for module - UI_TableCell UI_FocusHot(row_selected && cs->cursor.x == 1) + UI_TableCell UI_FocusHot((row_selected && cs->cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, module); } // rjf: build cell for function name - UI_TableCell UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_FocusHot(row_selected && cs->cursor.x == 2) + UI_TableCell UI_Font(df_font_from_slot(DF_FontSlot_Code)) + UI_FocusHot((row_selected && cs->cursor.x == 2) ? UI_FocusKind_On : UI_FocusKind_Off) { String8 symbol = df_symbol_name_from_process_vaddr(scratch.arena, process, rip_vaddr); if(symbol.size == 0) @@ -4004,7 +3968,8 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack) } // rjf: build cell for rip - UI_TableCell UI_FocusHot(row_selected && cs->cursor.x == 3) + UI_TableCell + UI_FocusHot((row_selected && cs->cursor.x == 3) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_DrawText|UI_BoxFlag_Clickable, "0x%I64x", rip_vaddr); UI_Signal sig = ui_signal_from_box(box); @@ -4036,7 +4001,6 @@ DF_VIEW_UI_FUNCTION_DEF(CallStack) } } - ui_unset_focus_active(); scratch_end(scratch); ProfEnd(); } @@ -4065,15 +4029,16 @@ DF_VIEW_CMD_FUNCTION_DEF(Modules) for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } //rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default:break; @@ -4098,7 +4063,6 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - ui_set_focus_active(1); DBGI_Scope *scope = dbgi_scope_open(); //- rjf: get state @@ -4196,7 +4160,9 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, mv->txt_editing ? 0 : &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, mv->txt_editing ? 0 : &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) UI_TableF(ArrayCount(col_pcts), col_pcts, "modules_table") { Vec2S64 next_cursor = cursor; @@ -4215,7 +4181,7 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) { UI_NamedTableVectorF("process_%p", entity) { - UI_TableCellSized(ui_pct(1, 0)) UI_FocusHot(row_is_selected) + UI_TableCellSized(ui_pct(1, 0)) UI_FocusHot((row_is_selected) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, entity); } @@ -4229,11 +4195,11 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) { ui_labelf("%I64u", idx_in_process); } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 0) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, entity); } - UI_TableCell UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_FocusHot(row_is_selected && cursor.x == 1) + UI_TableCell UI_Font(df_font_from_slot(DF_FontSlot_Code)) UI_FocusHot((row_is_selected && cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Box *range_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_DrawText, "[0x%I64x, 0x%I64x)###vaddr_range_%p", entity->vaddr_rng.min, entity->vaddr_rng.max, entity); UI_Signal sig = ui_signal_from_box(range_box); @@ -4266,7 +4232,9 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) // rjf: build UI_Signal sig = {0}; - UI_FocusHot(txt_is_selected) UI_FocusActive(txt_is_selected && mv->txt_editing) UI_WidthFill + UI_FocusHot(txt_is_selected ? UI_FocusKind_On : UI_FocusKind_Off) + UI_FocusActive((txt_is_selected && mv->txt_editing) ? UI_FocusKind_On : UI_FocusKind_Off) + UI_WidthFill { UI_TextColor(!dbgi_is_valid ? df_rgba_from_theme_color(DF_ThemeColor_FailureBackground) : ui_top_text_color()) sig = df_line_editf(DF_LineEditFlag_NoBackground, 0, &mv->txt_cursor, &mv->txt_mark, mv->txt_buffer, sizeof(mv->txt_buffer), &mv->txt_size, 0, dbgi->dbg_path, "###dbg_path_%p", entity); @@ -4300,14 +4268,14 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) } // rjf: build browse button - UI_FocusHot(brw_is_selected) UI_PrefWidth(ui_text_dim(10, 1)) + UI_FocusHot(brw_is_selected ? UI_FocusKind_On : UI_FocusKind_Off) UI_PrefWidth(ui_text_dim(10, 1)) { if(ui_buttonf("Browse...").clicked || (brw_is_selected && edit_begin)) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); mv->pick_file_dst_entity = df_handle_from_entity(entity); } } @@ -4346,7 +4314,6 @@ DF_VIEW_UI_FUNCTION_DEF(Modules) mv->selected_entity = (1 <= cursor.y && cursor.y <= entities.count) ? df_handle_from_entity(entities.v[cursor.y-1]) : df_handle_zero(); dbgi_scope_close(scope); - ui_unset_focus_active(); scratch_end(scratch); ProfEnd(); } @@ -4376,15 +4343,16 @@ DF_VIEW_CMD_FUNCTION_DEF(PendingEntity) for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } // rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default:break; @@ -4397,7 +4365,7 @@ DF_VIEW_CMD_FUNCTION_DEF(PendingEntity) if(!df_entity_is_nil(missing_file) && pick_string.size != 0) { DF_Entity *replacement = df_entity_from_path(pick_string, DF_EntityFromPathFlag_OpenAsNeeded|DF_EntityFromPathFlag_OpenMissing); - view->cmd_entity = df_handle_from_entity(replacement); + view->entity = df_handle_from_entity(replacement); DF_CmdParams p = df_cmd_params_from_view(ws, panel, view); p.entity = df_handle_from_entity(missing_file); p.file_path = pick_string; @@ -4419,8 +4387,8 @@ DF_VIEW_CMD_FUNCTION_DEF(PendingEntity) } //- rjf: determine if entity is ready, and which viewer to use - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); - DF_CoreCmdKind viewer_cmd_kind = DF_CoreCmdKind_Null; + DF_Entity *entity = df_entity_from_handle(view->entity); + DF_GfxViewKind viewer_kind = DF_GfxViewKind_Null; B32 entity_is_ready = 0; switch(entity->kind) { @@ -4428,7 +4396,7 @@ DF_VIEW_CMD_FUNCTION_DEF(PendingEntity) case DF_EntityKind_File: { entity_is_ready = 1; - viewer_cmd_kind = DF_CoreCmdKind_Code; + viewer_kind = DF_GfxViewKind_Code; }break; } @@ -4452,22 +4420,19 @@ DF_VIEW_CMD_FUNCTION_DEF(PendingEntity) } //- rjf: if entity is ready, replace this view with the correct one, if any viewer is specified - if(entity_is_ready && viewer_cmd_kind != DF_CoreCmdKind_Null) + if(entity_is_ready && viewer_kind != DF_GfxViewKind_Null) { - DF_CmdSpec *spec = df_cmd_spec_from_string(cfg_root->string); - if(df_cmd_spec_is_nil(spec)) + DF_ViewSpec *view_spec = df_view_spec_from_string(cfg_root->string); + if(view_spec == &df_g_nil_view_spec) { - spec = df_cmd_spec_from_core_cmd_kind(viewer_cmd_kind); + view_spec = df_view_spec_from_gfx_view_kind(viewer_kind); } - DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - params.entity = df_handle_from_entity(entity); - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity); - df_view_equip_command(view, spec, ¶ms, str8_lit(""), cfg_root); + df_view_equip_spec(view, view_spec, entity, str8_lit(""), cfg_root); df_panel_notify_mutation(ws, panel); } //- rjf: if entity is ready, but we have no viewer for it, then just close this tab - if(entity_is_ready && viewer_cmd_kind == DF_CoreCmdKind_Null) + if(entity_is_ready && viewer_kind == DF_GfxViewKind_Null) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CloseTab)); @@ -4480,7 +4445,7 @@ DF_VIEW_UI_FUNCTION_DEF(PendingEntity) { // rjf: grab state DF_PendingEntityViewState *pves = df_view_user_state(view, DF_PendingEntityViewState); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); // rjf: entity is missing -> notify user if(entity->flags & DF_EntityFlag_IsMissing) @@ -4505,13 +4470,13 @@ DF_VIEW_UI_FUNCTION_DEF(PendingEntity) UI_BorderColor(df_rgba_from_theme_color(DF_ThemeColor_ActionBorder)) UI_CornerRadius(ui_top_font_size()/3) UI_PrefWidth(ui_text_dim(10, 1)) - UI_Focus(1) + UI_Focus(UI_FocusKind_On) if(ui_buttonf("Find alternative...").clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); pves->pick_file_override_target = df_handle_from_entity(entity); } scratch_end(scratch); @@ -4569,19 +4534,20 @@ DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Code) DF_VIEW_CMD_FUNCTION_DEF(Code) { DF_CodeViewState *tv = df_view_user_state(view, DF_CodeViewState); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } // rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default: break; @@ -4610,7 +4576,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Code) case DF_CoreCmdKind_ToggleBreakpointAtCursor: { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - params.entity = view->cmd_entity; + params.entity = view->entity; params.text_point = tv->cursor; df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_TextBreakpoint)); tv->contain_cursor = 1; @@ -4618,7 +4584,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Code) case DF_CoreCmdKind_ToggleWatchPinAtCursor: { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - params.entity = view->cmd_entity; + params.entity = view->entity; params.text_point = tv->cursor; params.string = cmd->params.string; df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ToggleWatchPin)); @@ -4732,7 +4698,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Code) if(!df_entity_is_nil(missing_file) && pick_string.size != 0) { DF_Entity *replacement = df_entity_from_path(pick_string, DF_EntityFromPathFlag_OpenAsNeeded|DF_EntityFromPathFlag_OpenMissing); - view->cmd_entity = df_handle_from_entity(replacement); + view->entity = df_handle_from_entity(replacement); DF_CmdParams p = df_cmd_params_from_view(ws, panel, view); p.entity = df_handle_from_entity(missing_file); p.file_path = pick_string; @@ -4751,12 +4717,11 @@ DF_VIEW_UI_FUNCTION_DEF(Code) Temp scratch = scratch_begin(0, 0); DBGI_Scope *scope = dbgi_scope_open(); DF_CodeViewState *tv = df_view_user_state(view, DF_CodeViewState); - ui_set_focus_active(1); ////////////////////////////// //- rjf: extract invariants // - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); F_Tag code_font = df_font_from_slot(DF_FontSlot_Code); F32 code_font_size = df_font_size_from_slot(ws, DF_FontSlot_Code); @@ -4845,17 +4810,13 @@ DF_VIEW_UI_FUNCTION_DEF(Code) Side search_query_side = Side_Invalid; B32 search_query_is_active = 0; { - for(DF_View *v = view->callee_view; !df_view_is_nil(v); v = v->callee_view) + DF_CoreCmdKind query_cmd_kind = df_core_cmd_kind_from_string(ws->query_cmd_spec->info.string); + if(query_cmd_kind == DF_CoreCmdKind_FindTextForward || + query_cmd_kind == DF_CoreCmdKind_FindTextBackward) { - DF_CoreCmdKind query_core_cmd_kind = df_core_cmd_kind_from_string(v->cmd_spec->info.string); - if(query_core_cmd_kind == DF_CoreCmdKind_FindTextForward || - query_core_cmd_kind == DF_CoreCmdKind_FindTextBackward) - { - search_query = v->query; - search_query_is_active = 1; - search_query_side = (query_core_cmd_kind == DF_CoreCmdKind_FindTextForward) ? Side_Max : Side_Min; - break; - } + search_query = str8(ws->query_view_stack_top->query_buffer, ws->query_view_stack_top->query_string_size); + search_query_is_active = 1; + search_query_side = (query_cmd_kind == DF_CoreCmdKind_FindTextForward) ? Side_Max : Side_Min; } } @@ -4974,13 +4935,13 @@ DF_VIEW_UI_FUNCTION_DEF(Code) UI_BorderColor(df_rgba_from_theme_color(DF_ThemeColor_ActionBorder)) UI_CornerRadius(ui_top_font_size()/3) UI_PrefWidth(ui_text_dim(10, 1)) - UI_Focus(1) + UI_Focus(UI_FocusKind_On) if(ui_buttonf("Find alternative...").clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); tv->pick_file_override_target = df_handle_from_entity(entity); } scratch_end(scratch); @@ -5170,9 +5131,12 @@ DF_VIEW_UI_FUNCTION_DEF(Code) //- rjf: do keyboard interaction // B32 snap[Axis2_COUNT] = {0}; - if(txti_buffer_is_ready && is_focused) + UI_Focus(UI_FocusKind_On) { - snap[Axis2_X] = snap[Axis2_Y] = df_do_txti_controls(txti_handle, ClampBot(num_possible_visible_lines, 10) - 10, &tv->cursor, &tv->mark, &tv->preferred_column); + if(txti_buffer_is_ready && ui_is_focus_active()) + { + snap[Axis2_X] = snap[Axis2_Y] = df_do_txti_controls(txti_handle, ClampBot(num_possible_visible_lines, 10) - 10, &tv->cursor, &tv->mark, &tv->preferred_column); + } } ////////////////////////////// @@ -5186,7 +5150,7 @@ DF_VIEW_UI_FUNCTION_DEF(Code) //- rjf: build code slice DF_CodeSliceSignal sig = {0}; - UI_Focus(is_focused) + UI_Focus(UI_FocusKind_On) { sig = df_code_slicef(ws, &ctrl_ctx, &parse_ctx, &code_slice_params, &tv->cursor, &tv->mark, &tv->preferred_column, "txt_view_%p", view); } @@ -5601,7 +5565,6 @@ DF_VIEW_UI_FUNCTION_DEF(Code) } } - ui_unset_focus_active(); dbgi_scope_close(scope); scratch_end(scratch); ProfEnd(); @@ -5637,15 +5600,16 @@ DF_VIEW_CMD_FUNCTION_DEF(Disassembly) { DF_Cmd *cmd = &n->cmd; DF_CmdParams params = cmd->params; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } // rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default: break; @@ -5810,7 +5774,6 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly) Temp scratch = scratch_begin(0, 0); DBGI_Scope *scope = dbgi_scope_open(); DF_DisasmViewState *dv = df_view_user_state(view, DF_DisasmViewState); - ui_set_focus_active(1); ////////////////////////////// //- rjf: extract invariants @@ -5908,17 +5871,13 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly) Side search_query_side = Side_Invalid; B32 search_query_is_active = 0; { - for(DF_View *v = view->callee_view; !df_view_is_nil(v); v = v->callee_view) + DF_CoreCmdKind query_cmd_kind = df_core_cmd_kind_from_string(ws->query_cmd_spec->info.string); + if(query_cmd_kind == DF_CoreCmdKind_FindTextForward || + query_cmd_kind == DF_CoreCmdKind_FindTextBackward) { - DF_CoreCmdKind query_core_cmd_kind = df_core_cmd_kind_from_string(v->cmd_spec->info.string); - if(query_core_cmd_kind == DF_CoreCmdKind_FindTextForward || - query_core_cmd_kind == DF_CoreCmdKind_FindTextBackward) - { - search_query = v->query; - search_query_is_active = 1; - search_query_side = (query_core_cmd_kind == DF_CoreCmdKind_FindTextForward) ? Side_Max : Side_Min; - break; - } + search_query = str8(ws->query_view_stack_top->query_buffer, ws->query_view_stack_top->query_string_size); + search_query_is_active = 1; + search_query_side = (query_cmd_kind == DF_CoreCmdKind_FindTextForward) ? Side_Max : Side_Min; } } @@ -6110,7 +6069,7 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly) //- rjf: build code slice DF_CodeSliceSignal sig = {0}; - UI_Focus(is_focused) + UI_Focus(is_focused ? UI_FocusKind_On : UI_FocusKind_Off) { sig = df_code_slicef(ws, &ctrl_ctx, &parse_ctx, &code_slice_params, &dv->cursor, &dv->mark, &dv->preferred_column, "dasm_slice_%p", view); } @@ -6406,7 +6365,6 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly) } } - ui_unset_focus_active(); dbgi_scope_close(scope); scratch_end(scratch); ProfEnd(); @@ -6481,10 +6439,8 @@ DF_VIEW_CMD_FUNCTION_DEF(Watch) DF_VIEW_UI_FUNCTION_DEF(Watch) { ProfBeginFunction(); - ui_set_focus_active(1); DF_EvalWatchViewState *ewv = df_view_user_state(view, DF_EvalWatchViewState); df_eval_watch_view_build(ws, panel, view, ewv, 1, 10, rect); - ui_unset_focus_active(); ProfEnd(); } @@ -6501,7 +6457,6 @@ DF_VIEW_CMD_FUNCTION_DEF(Locals) {} DF_VIEW_UI_FUNCTION_DEF(Locals) { ProfBeginFunction(); - ui_set_focus_active(1); // rjf: gather state DF_EvalThreadDerivedReadOnlyWatchViewState *ls = df_view_user_state(view, DF_EvalThreadDerivedReadOnlyWatchViewState); @@ -6560,7 +6515,6 @@ DF_VIEW_UI_FUNCTION_DEF(Locals) // rjf: build df_eval_watch_view_build(ws, panel, view, &ls->ewv, 0, 10, rect); - ui_unset_focus_active(); ProfEnd(); } @@ -6573,7 +6527,6 @@ DF_VIEW_CMD_FUNCTION_DEF(Registers) {} DF_VIEW_UI_FUNCTION_DEF(Registers) { ProfBeginFunction(); - ui_set_focus_active(1); // rjf: gather state DF_RegistersViewState *rv = df_view_user_state(view, DF_RegistersViewState); @@ -6614,7 +6567,6 @@ DF_VIEW_UI_FUNCTION_DEF(Registers) // rjf: build df_eval_watch_view_build(ws, panel, view, &rva->ewv, 0, 16, rect); - ui_unset_focus_active(); ProfEnd(); } @@ -6646,19 +6598,20 @@ DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Output) DF_VIEW_CMD_FUNCTION_DEF(Output) { DF_CodeViewState *tv = df_view_user_state(view, DF_CodeViewState); - DF_Entity *entity = df_entity_from_handle(view->cmd_entity); + DF_Entity *entity = df_entity_from_handle(view->entity); for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } // rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default: break; @@ -6687,7 +6640,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Output) case DF_CoreCmdKind_ToggleBreakpointAtCursor: { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - params.entity = view->cmd_entity; + params.entity = view->entity; params.text_point = tv->cursor; df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_TextBreakpoint)); tv->contain_cursor = 1; @@ -6695,7 +6648,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Output) case DF_CoreCmdKind_ToggleWatchPinAtCursor: { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); - params.entity = view->cmd_entity; + params.entity = view->entity; params.text_point = tv->cursor; params.string = cmd->params.string; df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ToggleWatchPin)); @@ -6711,7 +6664,6 @@ DF_VIEW_UI_FUNCTION_DEF(Output) Temp scratch = scratch_begin(0, 0); DBGI_Scope *scope = dbgi_scope_open(); DF_CodeViewState *tv = df_view_user_state(view, DF_CodeViewState); - ui_set_focus_active(1); ////////////////////////////// //- rjf: extract invariants @@ -6804,17 +6756,13 @@ DF_VIEW_UI_FUNCTION_DEF(Output) Side search_query_side = Side_Invalid; B32 search_query_is_active = 0; { - for(DF_View *v = view->callee_view; !df_view_is_nil(v); v = v->callee_view) + DF_CoreCmdKind query_cmd_kind = df_core_cmd_kind_from_string(ws->query_cmd_spec->info.string); + if(query_cmd_kind == DF_CoreCmdKind_FindTextForward || + query_cmd_kind == DF_CoreCmdKind_FindTextBackward) { - DF_CoreCmdKind query_core_cmd_kind = df_core_cmd_kind_from_string(v->cmd_spec->info.string); - if(query_core_cmd_kind == DF_CoreCmdKind_FindTextForward || - query_core_cmd_kind == DF_CoreCmdKind_FindTextBackward) - { - search_query = v->query; - search_query_is_active = 1; - search_query_side = (query_core_cmd_kind == DF_CoreCmdKind_FindTextForward) ? Side_Max : Side_Min; - break; - } + search_query = str8(ws->query_view_stack_top->query_buffer, ws->query_view_stack_top->query_string_size); + search_query_is_active = 1; + search_query_side = (query_cmd_kind == DF_CoreCmdKind_FindTextForward) ? Side_Max : Side_Min; } } @@ -7044,7 +6992,7 @@ DF_VIEW_UI_FUNCTION_DEF(Output) //- rjf: build code slice DF_CodeSliceSignal sig = {0}; - UI_Focus(is_focused) + UI_Focus(is_focused ? UI_FocusKind_On : UI_FocusKind_Off) { sig = df_code_slicef(ws, &ctrl_ctx, &parse_ctx, &code_slice_params, &tv->cursor, &tv->mark, &tv->preferred_column, "txt_view_%p", view); } @@ -7263,7 +7211,6 @@ DF_VIEW_UI_FUNCTION_DEF(Output) } } - ui_unset_focus_active(); dbgi_scope_close(scope); scratch_end(scratch); ProfEnd(); @@ -7397,7 +7344,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory) ////////////////////////////// //- rjf: take keyboard controls // - UI_Focus(1) if(ui_is_focus_active()) + UI_Focus(UI_FocusKind_On) if(ui_is_focus_active()) { U64 next_cursor = mv->cursor; U64 next_mark = mv->mark; @@ -8198,7 +8145,9 @@ DF_VIEW_UI_FUNCTION_DEF(Breakpoints) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) UI_TableF(ArrayCount(col_pcts), col_pcts, "breakpoints_table") { if(visible_row_range.min == 0) UI_TableVector UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) @@ -8216,18 +8165,18 @@ DF_VIEW_UI_FUNCTION_DEF(Breakpoints) B32 row_is_selected = (cursor.y == (S64)(idx)); UI_NamedTableVectorF("breakpoint_%p", entity) { - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 0) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) { if(df_icon_buttonf(entity->b32 ? DF_IconKind_CheckFilled : DF_IconKind_CheckHollow, "###ebl_%p", entity).clicked) { df_entity_equip_b32(entity, !entity->b32); } } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 1) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, entity); } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 2) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 2) ? UI_FocusKind_On : UI_FocusKind_Off) { B32 loc_is_code = 0; String8 loc_string = {0}; @@ -8272,7 +8221,7 @@ DF_VIEW_UI_FUNCTION_DEF(Breakpoints) df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); } } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 3) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 3) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "###cnd_%p", entity); UI_Parent(box) @@ -8288,7 +8237,7 @@ DF_VIEW_UI_FUNCTION_DEF(Breakpoints) df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); } } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 4) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 4) ? UI_FocusKind_On : UI_FocusKind_Off) { if(df_icon_buttonf(DF_IconKind_Trash, "###del_%p", entity).clicked) { @@ -8365,7 +8314,9 @@ DF_VIEW_UI_FUNCTION_DEF(WatchPins) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) UI_TableF(ArrayCount(col_pcts), col_pcts, "pins_table") { if(visible_row_range.min == 0) UI_TableVector UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) @@ -8381,11 +8332,11 @@ DF_VIEW_UI_FUNCTION_DEF(WatchPins) B32 row_is_selected = (cursor.y == (S64)(idx)); UI_NamedTableVectorF("pin_%p", entity) { - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 0) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) { df_entity_desc_button(ws, entity); } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 1) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) { String8 loc_string = {0}; DF_Entity *file_parent = df_entity_ancestor_from_kind(entity, DF_EntityKind_File); @@ -8415,7 +8366,7 @@ DF_VIEW_UI_FUNCTION_DEF(WatchPins) df_push_cmd__root(&p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_FocusPanel)); } } - UI_TableCell UI_FocusHot(row_is_selected && cursor.x == 2) + UI_TableCell UI_FocusHot((row_is_selected && cursor.x == 2) ? UI_FocusKind_On : UI_FocusKind_Off) { if(df_icon_buttonf(DF_IconKind_Trash, "###del_%p", entity).clicked) { @@ -8529,9 +8480,12 @@ DF_VIEW_UI_FUNCTION_DEF(ExceptionFilters) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &sv->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &sv->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { - for(S64 row = visible_row_range.min; row <= visible_row_range.max && row < opts.count; row += 1) UI_FocusHot(sv->cursor.y == row+1) + for(S64 row = visible_row_range.min; row <= visible_row_range.max && row < opts.count; row += 1) + UI_FocusHot(sv->cursor.y == row+1 ? UI_FocusKind_On : UI_FocusKind_Off) { DF_ExceptionFiltersOption *opt = &opts.v[row]; UI_Signal sig = df_icon_buttonf(opt->is_enabled ? DF_IconKind_CheckFilled : DF_IconKind_CheckHollow, "%S", opt->name); @@ -8568,15 +8522,16 @@ DF_VIEW_CMD_FUNCTION_DEF(Theme) for(DF_CmdNode *n = cmds->first; n != 0; n = n->next) { DF_Cmd *cmd = &n->cmd; - DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); - // rjf: mismatched view => skip - if(df_view_caller_root_from_view(df_view_from_handle(cmd->params.view)) != view) + // rjf: mismatched window/panel => skip + if(df_window_from_handle(cmd->params.window) != ws || + df_panel_from_handle(cmd->params.panel) != panel) { continue; } //rjf: process + DF_CoreCmdKind core_cmd_kind = df_core_cmd_kind_from_string(cmd->spec->info.string); switch(core_cmd_kind) { default:break; @@ -8846,7 +8801,7 @@ DF_VIEW_UI_FUNCTION_DEF(Theme) UI_PrefHeight(ui_px(row_height_px, 1.f)) UI_Row { // rjf: preset selector - UI_FocusHot(sv->cursor.y == 1 && sv->cursor.x == 0) + UI_FocusHot((sv->cursor.y == 1 && sv->cursor.x == 0) ? UI_FocusKind_On : UI_FocusKind_Off) { UI_Signal preset_sig = df_icon_buttonf(DF_IconKind_Palette, "Apply Preset"); if(preset_sig.clicked) @@ -8856,14 +8811,14 @@ DF_VIEW_UI_FUNCTION_DEF(Theme) } // rjf: load-from-file - UI_FocusHot(sv->cursor.y == 1 && sv->cursor.x == 1) + UI_FocusHot((sv->cursor.y == 1 && sv->cursor.x == 1) ? UI_FocusKind_On : UI_FocusKind_Off) { if(df_icon_buttonf(DF_IconKind_FileOutline, "Load From File").clicked) { DF_CmdParams params = df_cmd_params_from_view(ws, panel, view); params.cmd_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_PickFile); df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand)); } } } @@ -8881,12 +8836,15 @@ DF_VIEW_UI_FUNCTION_DEF(Theme) scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1; } UI_ScrollListSignal scroll_list_sig = {0}; - UI_Focus(1) UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &sv->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_On) + UI_ScrollList(&scroll_list_params, &view->scroll_pos.y, &sv->cursor, &visible_row_range, &scroll_list_sig) + UI_Focus(UI_FocusKind_Null) { for(S64 row = visible_row_range.min; row <= visible_row_range.max; row += 1) { DF_ThemeColor color = (DF_ThemeColor)(row+1); - if(DF_ThemeColor_Null < color && color < DF_ThemeColor_COUNT) UI_FocusHot(sv->cursor.y == row+2) + if(DF_ThemeColor_Null < color && color < DF_ThemeColor_COUNT) + UI_FocusHot(sv->cursor.y == row+2 ? UI_FocusKind_On : UI_FocusKind_Off) { Vec4F32 rgba = df_rgba_from_theme_color(color); Vec3F32 rgb = v3f32(rgba.x, rgba.y, rgba.z); diff --git a/src/df/gfx/generated/df_gfx.meta.h b/src/df/gfx/generated/df_gfx.meta.h index b66fe31e..c98a637a 100644 --- a/src/df/gfx/generated/df_gfx.meta.h +++ b/src/df/gfx/generated/df_gfx.meta.h @@ -879,6 +879,24 @@ str8_lit_comp("entity_lister"), str8_lit_comp("entity_lister"), }; +DF_CmdParamSlot df_g_cmd_param_slot_2_view_spec_src_map[] = +{ +DF_CmdParamSlot_Entity, +DF_CmdParamSlot_EntityList, +DF_CmdParamSlot_FilePath, +DF_CmdParamSlot_CmdSpec, +DF_CmdParamSlot_ID, +}; + +String8 df_g_cmd_param_slot_2_view_spec_dst_map[] = +{ +str8_lit_comp("entity_lister"), +str8_lit_comp("entity_lister"), +str8_lit_comp("file_system"), +str8_lit_comp("commands"), +str8_lit_comp("system_processes"), +}; + DF_StringBindingPair df_g_default_binding_table[] = { {str8_lit_comp("kill_all"), {OS_Key_F5, 0 |OS_EventFlag_Shift }}, @@ -975,38 +993,47 @@ DF_StringBindingPair df_g_default_binding_table[] = {str8_lit_comp("toggle_breakpoint_cursor"), {OS_Key_F9, 0 }}, {str8_lit_comp("add_target"), {OS_Key_T, 0 |OS_EventFlag_Ctrl }}, {str8_lit_comp("attach"), {OS_Key_F6, 0 |OS_EventFlag_Shift }}, -{str8_lit_comp("commands"), {OS_Key_F1, 0 }}, -{str8_lit_comp("scheduler"), {OS_Key_S, 0 |OS_EventFlag_Alt}}, +{str8_lit_comp("run_command"), {OS_Key_F1, 0 }}, {str8_lit_comp("clear_diag_log"), {OS_Key_D, 0 |OS_EventFlag_Ctrl |OS_EventFlag_Alt}}, {str8_lit_comp("open_diag_log"), {OS_Key_D, 0 |OS_EventFlag_Ctrl }}, }; +String8 df_g_binding_version_remap_old_name_table[] = +{ +str8_lit_comp("commands"), +}; + +String8 df_g_binding_version_remap_new_name_table[] = +{ +str8_lit_comp("run_command"), +}; + DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[] = { -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("null"), str8_lit_comp(""), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Null), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Null), DF_VIEW_CMD_FUNCTION_NAME(Null), DF_VIEW_UI_FUNCTION_NAME(Null)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("empty"), str8_lit_comp(""), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Empty), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Empty), DF_VIEW_CMD_FUNCTION_NAME(Empty), DF_VIEW_UI_FUNCTION_NAME(Empty)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("commands"), str8_lit_comp("Commands"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Commands), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Commands), DF_VIEW_CMD_FUNCTION_NAME(Commands), DF_VIEW_UI_FUNCTION_NAME(Commands)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("file_system"), str8_lit_comp("File System"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(FileSystem), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(FileSystem), DF_VIEW_CMD_FUNCTION_NAME(FileSystem), DF_VIEW_UI_FUNCTION_NAME(FileSystem)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("system_processes"), str8_lit_comp("System Processes"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(SystemProcesses), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(SystemProcesses), DF_VIEW_CMD_FUNCTION_NAME(SystemProcesses), DF_VIEW_UI_FUNCTION_NAME(SystemProcesses)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("entity_lister"), str8_lit_comp("Entity List"), DF_NameKind_EntityKindName, DF_VIEW_SETUP_FUNCTION_NAME(EntityLister), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(EntityLister), DF_VIEW_CMD_FUNCTION_NAME(EntityLister), DF_VIEW_UI_FUNCTION_NAME(EntityLister)}, -{(0|1*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("target"), str8_lit_comp("Target"), DF_NameKind_EntityName, DF_VIEW_SETUP_FUNCTION_NAME(Target), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Target), DF_VIEW_CMD_FUNCTION_NAME(Target), DF_VIEW_UI_FUNCTION_NAME(Target)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("targets"), str8_lit_comp("Targets"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Targets), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Targets), DF_VIEW_CMD_FUNCTION_NAME(Targets), DF_VIEW_UI_FUNCTION_NAME(Targets)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("file_path_map"), str8_lit_comp("File Path Map"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(FilePathMap), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(FilePathMap), DF_VIEW_CMD_FUNCTION_NAME(FilePathMap), DF_VIEW_UI_FUNCTION_NAME(FilePathMap)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("scheduler"), str8_lit_comp("Scheduler"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Scheduler), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Scheduler), DF_VIEW_CMD_FUNCTION_NAME(Scheduler), DF_VIEW_UI_FUNCTION_NAME(Scheduler)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("call_stack"), str8_lit_comp("Call Stack"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(CallStack), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(CallStack), DF_VIEW_CMD_FUNCTION_NAME(CallStack), DF_VIEW_UI_FUNCTION_NAME(CallStack)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("modules"), str8_lit_comp("Modules"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Modules), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Modules), DF_VIEW_CMD_FUNCTION_NAME(Modules), DF_VIEW_UI_FUNCTION_NAME(Modules)}, -{(0|1*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("pending_entity"), str8_lit_comp("Pending Entity"), DF_NameKind_EntityName, DF_VIEW_SETUP_FUNCTION_NAME(PendingEntity), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(PendingEntity), DF_VIEW_CMD_FUNCTION_NAME(PendingEntity), DF_VIEW_UI_FUNCTION_NAME(PendingEntity)}, -{(0|1*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("code"), str8_lit_comp("Code"), DF_NameKind_EntityName, DF_VIEW_SETUP_FUNCTION_NAME(Code), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Code), DF_VIEW_CMD_FUNCTION_NAME(Code), DF_VIEW_UI_FUNCTION_NAME(Code)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("disassembly"), str8_lit_comp("Disassembly"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Disassembly), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Disassembly), DF_VIEW_CMD_FUNCTION_NAME(Disassembly), DF_VIEW_UI_FUNCTION_NAME(Disassembly)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("watch"), str8_lit_comp("Watch"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Watch), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Watch), DF_VIEW_CMD_FUNCTION_NAME(Watch), DF_VIEW_UI_FUNCTION_NAME(Watch)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("locals"), str8_lit_comp("Locals"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Locals), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Locals), DF_VIEW_CMD_FUNCTION_NAME(Locals), DF_VIEW_UI_FUNCTION_NAME(Locals)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("registers"), str8_lit_comp("Registers"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Registers), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Registers), DF_VIEW_CMD_FUNCTION_NAME(Registers), DF_VIEW_UI_FUNCTION_NAME(Registers)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("output"), str8_lit_comp("Output"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Output), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Output), DF_VIEW_CMD_FUNCTION_NAME(Output), DF_VIEW_UI_FUNCTION_NAME(Output)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("memory"), str8_lit_comp("Memory"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Memory), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Memory), DF_VIEW_CMD_FUNCTION_NAME(Memory), DF_VIEW_UI_FUNCTION_NAME(Memory)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("breakpoints"), str8_lit_comp("Breakpoints"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Breakpoints), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Breakpoints), DF_VIEW_CMD_FUNCTION_NAME(Breakpoints), DF_VIEW_UI_FUNCTION_NAME(Breakpoints)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("watch_pins"), str8_lit_comp("Watch Pins"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(WatchPins), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(WatchPins), DF_VIEW_CMD_FUNCTION_NAME(WatchPins), DF_VIEW_UI_FUNCTION_NAME(WatchPins)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("exception_filters"), str8_lit_comp("Exception Filters"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(ExceptionFilters), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(ExceptionFilters), DF_VIEW_CMD_FUNCTION_NAME(ExceptionFilters), DF_VIEW_UI_FUNCTION_NAME(ExceptionFilters)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("theme"), str8_lit_comp("Theme"), DF_NameKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Theme), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Theme), DF_VIEW_CMD_FUNCTION_NAME(Theme), DF_VIEW_UI_FUNCTION_NAME(Theme)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("null"), str8_lit_comp(""), DF_NameKind_Null, DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Null), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Null), DF_VIEW_CMD_FUNCTION_NAME(Null), DF_VIEW_UI_FUNCTION_NAME(Null)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("empty"), str8_lit_comp(""), DF_NameKind_Null, DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Empty), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Empty), DF_VIEW_CMD_FUNCTION_NAME(Empty), DF_VIEW_UI_FUNCTION_NAME(Empty)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("commands"), str8_lit_comp("Commands"), DF_NameKind_Null, DF_IconKind_List, DF_VIEW_SETUP_FUNCTION_NAME(Commands), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Commands), DF_VIEW_CMD_FUNCTION_NAME(Commands), DF_VIEW_UI_FUNCTION_NAME(Commands)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("file_system"), str8_lit_comp("File System"), DF_NameKind_Null, DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(FileSystem), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(FileSystem), DF_VIEW_CMD_FUNCTION_NAME(FileSystem), DF_VIEW_UI_FUNCTION_NAME(FileSystem)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("system_processes"), str8_lit_comp("System Processes"), DF_NameKind_Null, DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(SystemProcesses), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(SystemProcesses), DF_VIEW_CMD_FUNCTION_NAME(SystemProcesses), DF_VIEW_UI_FUNCTION_NAME(SystemProcesses)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("entity_lister"), str8_lit_comp("Entity List"), DF_NameKind_EntityKindName, DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(EntityLister), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(EntityLister), DF_VIEW_CMD_FUNCTION_NAME(EntityLister), DF_VIEW_UI_FUNCTION_NAME(EntityLister)}, +{(0|1*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("target"), str8_lit_comp("Target"), DF_NameKind_EntityName, DF_IconKind_Target, DF_VIEW_SETUP_FUNCTION_NAME(Target), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Target), DF_VIEW_CMD_FUNCTION_NAME(Target), DF_VIEW_UI_FUNCTION_NAME(Target)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("targets"), str8_lit_comp("Targets"), DF_NameKind_Null, DF_IconKind_Target, DF_VIEW_SETUP_FUNCTION_NAME(Targets), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Targets), DF_VIEW_CMD_FUNCTION_NAME(Targets), DF_VIEW_UI_FUNCTION_NAME(Targets)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("file_path_map"), str8_lit_comp("File Path Map"), DF_NameKind_Null, DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(FilePathMap), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(FilePathMap), DF_VIEW_CMD_FUNCTION_NAME(FilePathMap), DF_VIEW_UI_FUNCTION_NAME(FilePathMap)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("scheduler"), str8_lit_comp("Scheduler"), DF_NameKind_Null, DF_IconKind_Scheduler, DF_VIEW_SETUP_FUNCTION_NAME(Scheduler), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Scheduler), DF_VIEW_CMD_FUNCTION_NAME(Scheduler), DF_VIEW_UI_FUNCTION_NAME(Scheduler)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("call_stack"), str8_lit_comp("Call Stack"), DF_NameKind_Null, DF_IconKind_Thread, DF_VIEW_SETUP_FUNCTION_NAME(CallStack), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(CallStack), DF_VIEW_CMD_FUNCTION_NAME(CallStack), DF_VIEW_UI_FUNCTION_NAME(CallStack)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("modules"), str8_lit_comp("Modules"), DF_NameKind_Null, DF_IconKind_Module, DF_VIEW_SETUP_FUNCTION_NAME(Modules), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Modules), DF_VIEW_CMD_FUNCTION_NAME(Modules), DF_VIEW_UI_FUNCTION_NAME(Modules)}, +{(0|1*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("pending_entity"), str8_lit_comp("Pending Entity"), DF_NameKind_EntityName, DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(PendingEntity), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(PendingEntity), DF_VIEW_CMD_FUNCTION_NAME(PendingEntity), DF_VIEW_UI_FUNCTION_NAME(PendingEntity)}, +{(0|1*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("code"), str8_lit_comp("Code"), DF_NameKind_EntityName, DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(Code), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Code), DF_VIEW_CMD_FUNCTION_NAME(Code), DF_VIEW_UI_FUNCTION_NAME(Code)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("disassembly"), str8_lit_comp("Disassembly"), DF_NameKind_Null, DF_IconKind_Glasses, DF_VIEW_SETUP_FUNCTION_NAME(Disassembly), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Disassembly), DF_VIEW_CMD_FUNCTION_NAME(Disassembly), DF_VIEW_UI_FUNCTION_NAME(Disassembly)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("watch"), str8_lit_comp("Watch"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Watch), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Watch), DF_VIEW_CMD_FUNCTION_NAME(Watch), DF_VIEW_UI_FUNCTION_NAME(Watch)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("locals"), str8_lit_comp("Locals"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Locals), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Locals), DF_VIEW_CMD_FUNCTION_NAME(Locals), DF_VIEW_UI_FUNCTION_NAME(Locals)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("registers"), str8_lit_comp("Registers"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Registers), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Registers), DF_VIEW_CMD_FUNCTION_NAME(Registers), DF_VIEW_UI_FUNCTION_NAME(Registers)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("output"), str8_lit_comp("Output"), DF_NameKind_Null, DF_IconKind_List, DF_VIEW_SETUP_FUNCTION_NAME(Output), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Output), DF_VIEW_CMD_FUNCTION_NAME(Output), DF_VIEW_UI_FUNCTION_NAME(Output)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("memory"), str8_lit_comp("Memory"), DF_NameKind_Null, DF_IconKind_Grid, DF_VIEW_SETUP_FUNCTION_NAME(Memory), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Memory), DF_VIEW_CMD_FUNCTION_NAME(Memory), DF_VIEW_UI_FUNCTION_NAME(Memory)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("breakpoints"), str8_lit_comp("Breakpoints"), DF_NameKind_Null, DF_IconKind_CircleFilled, DF_VIEW_SETUP_FUNCTION_NAME(Breakpoints), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Breakpoints), DF_VIEW_CMD_FUNCTION_NAME(Breakpoints), DF_VIEW_UI_FUNCTION_NAME(Breakpoints)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("watch_pins"), str8_lit_comp("Watch Pins"), DF_NameKind_Null, DF_IconKind_Pin, DF_VIEW_SETUP_FUNCTION_NAME(WatchPins), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(WatchPins), DF_VIEW_CMD_FUNCTION_NAME(WatchPins), DF_VIEW_UI_FUNCTION_NAME(WatchPins)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("exception_filters"), str8_lit_comp("Exception Filters"), DF_NameKind_Null, DF_IconKind_Gear, DF_VIEW_SETUP_FUNCTION_NAME(ExceptionFilters), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(ExceptionFilters), DF_VIEW_CMD_FUNCTION_NAME(ExceptionFilters), DF_VIEW_UI_FUNCTION_NAME(ExceptionFilters)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanSerializeEntityPath), str8_lit_comp("theme"), str8_lit_comp("Theme"), DF_NameKind_Null, DF_IconKind_Palette, DF_VIEW_SETUP_FUNCTION_NAME(Theme), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(Theme), DF_VIEW_CMD_FUNCTION_NAME(Theme), DF_VIEW_UI_FUNCTION_NAME(Theme)}, }; String8 df_g_theme_color_display_string_table[] = diff --git a/src/raddbg/raddbg.c b/src/raddbg/raddbg.c index e01e18ee..862561f6 100644 --- a/src/raddbg/raddbg.c +++ b/src/raddbg/raddbg.c @@ -134,12 +134,16 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data) DF_CmdSpecList spec_candidates = df_cmd_spec_list_from_binding(scratch.arena, binding); if(spec_candidates.first != 0 && !df_cmd_spec_is_nil(spec_candidates.first->spec)) { + DF_CmdSpec *run_spec = df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_RunCommand); DF_CmdSpec *spec = spec_candidates.first->spec; - params.cmd_spec = spec; - df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); + if(run_spec != spec) + { + params.cmd_spec = spec; + df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_CmdSpec); + } U32 hit_char = os_codepoint_from_event_flags_and_key(event->flags, event->key); os_eat_event(&events, event); - df_push_cmd__root(¶ms, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_CommandFastPath)); + df_push_cmd__root(¶ms, run_spec); if(event->flags & OS_EventFlag_Alt) { window->menu_bar_focus_press_started = 0; diff --git a/src/raddbg/raddbg.h b/src/raddbg/raddbg.h index 12b35f39..e0125aec 100644 --- a/src/raddbg/raddbg.h +++ b/src/raddbg/raddbg.h @@ -76,6 +76,9 @@ // [ ] Globals, Thread-Locals, Types Views // [ ] Watch Window Filtering // +// [ ] investigate /DEBUG:FASTLINK - can we somehow alert that we do not +// support it? +// // [ ] escaping in config files - breakpoint labels etc. // [ ] focus changing between query bar & panel content via mouse // diff --git a/src/ui/generated/ui.meta.c b/src/ui/generated/ui.meta.c index 1f13055a..051e6604 100644 --- a/src/ui/generated/ui.meta.c +++ b/src/ui/generated/ui.meta.c @@ -3,133 +3,173 @@ //- GENERATED CODE -internal UI_Box * ui_push_parent(UI_Box * v) {return UI_StackPush(parent, v);} -internal Axis2 ui_push_child_layout_axis(Axis2 v) {return UI_StackPush(child_layout_axis, v);} -internal F32 ui_push_fixed_x(F32 v) {return UI_StackPush(fixed_x, v);} -internal F32 ui_push_fixed_y(F32 v) {return UI_StackPush(fixed_y, v);} -internal F32 ui_push_fixed_width(F32 v) {return UI_StackPush(fixed_width, v);} -internal F32 ui_push_fixed_height(F32 v) {return UI_StackPush(fixed_height, v);} -internal UI_Size ui_push_pref_width(UI_Size v) {return UI_StackPush(pref_width, v);} -internal UI_Size ui_push_pref_height(UI_Size v) {return UI_StackPush(pref_height, v);} -internal UI_BoxFlags ui_push_flags(UI_BoxFlags v) {return UI_StackPush(flags, v);} -internal U32 ui_push_fastpath_codepoint(U32 v) {return UI_StackPush(fastpath_codepoint, v);} -internal Vec4F32 ui_push_background_color(Vec4F32 v) {return UI_StackPush(background_color, v);} -internal Vec4F32 ui_push_text_color(Vec4F32 v) {return UI_StackPush(text_color, v);} -internal Vec4F32 ui_push_border_color(Vec4F32 v) {return UI_StackPush(border_color, v);} -internal Vec4F32 ui_push_overlay_color(Vec4F32 v) {return UI_StackPush(overlay_color, v);} -internal Vec4F32 ui_push_text_select_color(Vec4F32 v) {return UI_StackPush(text_select_color, v);} -internal Vec4F32 ui_push_text_cursor_color(Vec4F32 v) {return UI_StackPush(text_cursor_color, v);} -internal OS_Cursor ui_push_hover_cursor(OS_Cursor v) {return UI_StackPush(hover_cursor, v);} -internal F_Tag ui_push_font(F_Tag v) {return UI_StackPush(font, v);} -internal F32 ui_push_font_size(F32 v) {return UI_StackPush(font_size, v);} -internal F32 ui_push_corner_radius_00(F32 v) {return UI_StackPush(corner_radius_00, v);} -internal F32 ui_push_corner_radius_01(F32 v) {return UI_StackPush(corner_radius_01, v);} -internal F32 ui_push_corner_radius_10(F32 v) {return UI_StackPush(corner_radius_10, v);} -internal F32 ui_push_corner_radius_11(F32 v) {return UI_StackPush(corner_radius_11, v);} -internal F32 ui_push_blur_size(F32 v) {return UI_StackPush(blur_size, v);} -internal F32 ui_push_text_padding(F32 v) {return UI_StackPush(text_padding, v);} -internal UI_TextAlign ui_push_text_alignment(UI_TextAlign v) {return UI_StackPush(text_alignment, v);} -internal UI_Box * ui_pop_parent(void) {UI_Box * popped; return UI_StackPop(parent, popped);} -internal Axis2 ui_pop_child_layout_axis(void) {Axis2 popped; return UI_StackPop(child_layout_axis, popped);} -internal F32 ui_pop_fixed_x(void) {F32 popped; return UI_StackPop(fixed_x, popped);} -internal F32 ui_pop_fixed_y(void) {F32 popped; return UI_StackPop(fixed_y, popped);} -internal F32 ui_pop_fixed_width(void) {F32 popped; return UI_StackPop(fixed_width, popped);} -internal F32 ui_pop_fixed_height(void) {F32 popped; return UI_StackPop(fixed_height, popped);} -internal UI_Size ui_pop_pref_width(void) {UI_Size popped; return UI_StackPop(pref_width, popped);} -internal UI_Size ui_pop_pref_height(void) {UI_Size popped; return UI_StackPop(pref_height, popped);} -internal UI_BoxFlags ui_pop_flags(void) {UI_BoxFlags popped; return UI_StackPop(flags, popped);} -internal U32 ui_pop_fastpath_codepoint(void) {U32 popped; return UI_StackPop(fastpath_codepoint, popped);} -internal Vec4F32 ui_pop_background_color(void) {Vec4F32 popped; return UI_StackPop(background_color, popped);} -internal Vec4F32 ui_pop_text_color(void) {Vec4F32 popped; return UI_StackPop(text_color, popped);} -internal Vec4F32 ui_pop_border_color(void) {Vec4F32 popped; return UI_StackPop(border_color, popped);} -internal Vec4F32 ui_pop_overlay_color(void) {Vec4F32 popped; return UI_StackPop(overlay_color, popped);} -internal Vec4F32 ui_pop_text_select_color(void) {Vec4F32 popped; return UI_StackPop(text_select_color, popped);} -internal Vec4F32 ui_pop_text_cursor_color(void) {Vec4F32 popped; return UI_StackPop(text_cursor_color, popped);} -internal OS_Cursor ui_pop_hover_cursor(void) {OS_Cursor popped; return UI_StackPop(hover_cursor, popped);} -internal F_Tag ui_pop_font(void) {F_Tag popped; return UI_StackPop(font, popped);} -internal F32 ui_pop_font_size(void) {F32 popped; return UI_StackPop(font_size, popped);} -internal F32 ui_pop_corner_radius_00(void) {F32 popped; return UI_StackPop(corner_radius_00, popped);} -internal F32 ui_pop_corner_radius_01(void) {F32 popped; return UI_StackPop(corner_radius_01, popped);} -internal F32 ui_pop_corner_radius_10(void) {F32 popped; return UI_StackPop(corner_radius_10, popped);} -internal F32 ui_pop_corner_radius_11(void) {F32 popped; return UI_StackPop(corner_radius_11, popped);} -internal F32 ui_pop_blur_size(void) {F32 popped; return UI_StackPop(blur_size, popped);} -internal F32 ui_pop_text_padding(void) {F32 popped; return UI_StackPop(text_padding, popped);} -internal UI_TextAlign ui_pop_text_alignment(void) {UI_TextAlign popped; return UI_StackPop(text_alignment, popped);} -internal UI_Box * ui_top_parent(void) {return UI_StackTop(parent);} -internal Axis2 ui_top_child_layout_axis(void) {return UI_StackTop(child_layout_axis);} -internal F32 ui_top_fixed_x(void) {return UI_StackTop(fixed_x);} -internal F32 ui_top_fixed_y(void) {return UI_StackTop(fixed_y);} -internal F32 ui_top_fixed_width(void) {return UI_StackTop(fixed_width);} -internal F32 ui_top_fixed_height(void) {return UI_StackTop(fixed_height);} -internal UI_Size ui_top_pref_width(void) {return UI_StackTop(pref_width);} -internal UI_Size ui_top_pref_height(void) {return UI_StackTop(pref_height);} -internal UI_BoxFlags ui_top_flags(void) {return UI_StackTop(flags);} -internal U32 ui_top_fastpath_codepoint(void) {return UI_StackTop(fastpath_codepoint);} -internal Vec4F32 ui_top_background_color(void) {return UI_StackTop(background_color);} -internal Vec4F32 ui_top_text_color(void) {return UI_StackTop(text_color);} -internal Vec4F32 ui_top_border_color(void) {return UI_StackTop(border_color);} -internal Vec4F32 ui_top_overlay_color(void) {return UI_StackTop(overlay_color);} -internal Vec4F32 ui_top_text_select_color(void) {return UI_StackTop(text_select_color);} -internal Vec4F32 ui_top_text_cursor_color(void) {return UI_StackTop(text_cursor_color);} -internal OS_Cursor ui_top_hover_cursor(void) {return UI_StackTop(hover_cursor);} -internal F_Tag ui_top_font(void) {return UI_StackTop(font);} -internal F32 ui_top_font_size(void) {return UI_StackTop(font_size);} -internal F32 ui_top_corner_radius_00(void) {return UI_StackTop(corner_radius_00);} -internal F32 ui_top_corner_radius_01(void) {return UI_StackTop(corner_radius_01);} -internal F32 ui_top_corner_radius_10(void) {return UI_StackTop(corner_radius_10);} -internal F32 ui_top_corner_radius_11(void) {return UI_StackTop(corner_radius_11);} -internal F32 ui_top_blur_size(void) {return UI_StackTop(blur_size);} -internal F32 ui_top_text_padding(void) {return UI_StackTop(text_padding);} -internal UI_TextAlign ui_top_text_alignment(void) {return UI_StackTop(text_alignment);} -internal UI_Box * ui_bottom_parent(void) {return UI_StackBottom(parent);} -internal Axis2 ui_bottom_child_layout_axis(void) {return UI_StackBottom(child_layout_axis);} -internal F32 ui_bottom_fixed_x(void) {return UI_StackBottom(fixed_x);} -internal F32 ui_bottom_fixed_y(void) {return UI_StackBottom(fixed_y);} -internal F32 ui_bottom_fixed_width(void) {return UI_StackBottom(fixed_width);} -internal F32 ui_bottom_fixed_height(void) {return UI_StackBottom(fixed_height);} -internal UI_Size ui_bottom_pref_width(void) {return UI_StackBottom(pref_width);} -internal UI_Size ui_bottom_pref_height(void) {return UI_StackBottom(pref_height);} -internal UI_BoxFlags ui_bottom_flags(void) {return UI_StackBottom(flags);} -internal U32 ui_bottom_fastpath_codepoint(void) {return UI_StackBottom(fastpath_codepoint);} -internal Vec4F32 ui_bottom_background_color(void) {return UI_StackBottom(background_color);} -internal Vec4F32 ui_bottom_text_color(void) {return UI_StackBottom(text_color);} -internal Vec4F32 ui_bottom_border_color(void) {return UI_StackBottom(border_color);} -internal Vec4F32 ui_bottom_overlay_color(void) {return UI_StackBottom(overlay_color);} -internal Vec4F32 ui_bottom_text_select_color(void) {return UI_StackBottom(text_select_color);} -internal Vec4F32 ui_bottom_text_cursor_color(void) {return UI_StackBottom(text_cursor_color);} -internal OS_Cursor ui_bottom_hover_cursor(void) {return UI_StackBottom(hover_cursor);} -internal F_Tag ui_bottom_font(void) {return UI_StackBottom(font);} -internal F32 ui_bottom_font_size(void) {return UI_StackBottom(font_size);} -internal F32 ui_bottom_corner_radius_00(void) {return UI_StackBottom(corner_radius_00);} -internal F32 ui_bottom_corner_radius_01(void) {return UI_StackBottom(corner_radius_01);} -internal F32 ui_bottom_corner_radius_10(void) {return UI_StackBottom(corner_radius_10);} -internal F32 ui_bottom_corner_radius_11(void) {return UI_StackBottom(corner_radius_11);} -internal F32 ui_bottom_blur_size(void) {return UI_StackBottom(blur_size);} -internal F32 ui_bottom_text_padding(void) {return UI_StackBottom(text_padding);} -internal UI_TextAlign ui_bottom_text_alignment(void) {return UI_StackBottom(text_alignment);} -internal UI_Box * ui_set_next_parent(UI_Box * v) {return UI_StackSetNext(parent, v);} -internal Axis2 ui_set_next_child_layout_axis(Axis2 v) {return UI_StackSetNext(child_layout_axis, v);} -internal F32 ui_set_next_fixed_x(F32 v) {return UI_StackSetNext(fixed_x, v);} -internal F32 ui_set_next_fixed_y(F32 v) {return UI_StackSetNext(fixed_y, v);} -internal F32 ui_set_next_fixed_width(F32 v) {return UI_StackSetNext(fixed_width, v);} -internal F32 ui_set_next_fixed_height(F32 v) {return UI_StackSetNext(fixed_height, v);} -internal UI_Size ui_set_next_pref_width(UI_Size v) {return UI_StackSetNext(pref_width, v);} -internal UI_Size ui_set_next_pref_height(UI_Size v) {return UI_StackSetNext(pref_height, v);} -internal UI_BoxFlags ui_set_next_flags(UI_BoxFlags v) {return UI_StackSetNext(flags, v);} -internal U32 ui_set_next_fastpath_codepoint(U32 v) {return UI_StackSetNext(fastpath_codepoint, v);} -internal Vec4F32 ui_set_next_background_color(Vec4F32 v) {return UI_StackSetNext(background_color, v);} -internal Vec4F32 ui_set_next_text_color(Vec4F32 v) {return UI_StackSetNext(text_color, v);} -internal Vec4F32 ui_set_next_border_color(Vec4F32 v) {return UI_StackSetNext(border_color, v);} -internal Vec4F32 ui_set_next_overlay_color(Vec4F32 v) {return UI_StackSetNext(overlay_color, v);} -internal Vec4F32 ui_set_next_text_select_color(Vec4F32 v) {return UI_StackSetNext(text_select_color, v);} -internal Vec4F32 ui_set_next_text_cursor_color(Vec4F32 v) {return UI_StackSetNext(text_cursor_color, v);} -internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v) {return UI_StackSetNext(hover_cursor, v);} -internal F_Tag ui_set_next_font(F_Tag v) {return UI_StackSetNext(font, v);} -internal F32 ui_set_next_font_size(F32 v) {return UI_StackSetNext(font_size, v);} -internal F32 ui_set_next_corner_radius_00(F32 v) {return UI_StackSetNext(corner_radius_00, v);} -internal F32 ui_set_next_corner_radius_01(F32 v) {return UI_StackSetNext(corner_radius_01, v);} -internal F32 ui_set_next_corner_radius_10(F32 v) {return UI_StackSetNext(corner_radius_10, v);} -internal F32 ui_set_next_corner_radius_11(F32 v) {return UI_StackSetNext(corner_radius_11, v);} -internal F32 ui_set_next_blur_size(F32 v) {return UI_StackSetNext(blur_size, v);} -internal F32 ui_set_next_text_padding(F32 v) {return UI_StackSetNext(text_padding, v);} -internal UI_TextAlign ui_set_next_text_alignment(UI_TextAlign v) {return UI_StackSetNext(text_alignment, v);} +#if 0 +#define UI_Parent(v) DeferLoop(ui_push_parent(v), ui_pop_parent()) +#define UI_ChildLayoutAxis(v) DeferLoop(ui_push_child_layout_axis(v), ui_pop_child_layout_axis()) +#define UI_FixedX(v) DeferLoop(ui_push_fixed_x(v), ui_pop_fixed_x()) +#define UI_FixedY(v) DeferLoop(ui_push_fixed_y(v), ui_pop_fixed_y()) +#define UI_FixedWidth(v) DeferLoop(ui_push_fixed_width(v), ui_pop_fixed_width()) +#define UI_FixedHeight(v) DeferLoop(ui_push_fixed_height(v), ui_pop_fixed_height()) +#define UI_PrefWidth(v) DeferLoop(ui_push_pref_width(v), ui_pop_pref_width()) +#define UI_PrefHeight(v) DeferLoop(ui_push_pref_height(v), ui_pop_pref_height()) +#define UI_Flags(v) DeferLoop(ui_push_flags(v), ui_pop_flags()) +#define UI_FocusHot(v) DeferLoop(ui_push_focus_hot(v), ui_pop_focus_hot()) +#define UI_FocusActive(v) DeferLoop(ui_push_focus_active(v), ui_pop_focus_active()) +#define UI_FastpathCodepoint(v) DeferLoop(ui_push_fastpath_codepoint(v), ui_pop_fastpath_codepoint()) +#define UI_BackgroundColor(v) DeferLoop(ui_push_background_color(v), ui_pop_background_color()) +#define UI_TextColor(v) DeferLoop(ui_push_text_color(v), ui_pop_text_color()) +#define UI_BorderColor(v) DeferLoop(ui_push_border_color(v), ui_pop_border_color()) +#define UI_OverlayColor(v) DeferLoop(ui_push_overlay_color(v), ui_pop_overlay_color()) +#define UI_TextSelectColor(v) DeferLoop(ui_push_text_select_color(v), ui_pop_text_select_color()) +#define UI_TextCursorColor(v) DeferLoop(ui_push_text_cursor_color(v), ui_pop_text_cursor_color()) +#define UI_HoverCursor(v) DeferLoop(ui_push_hover_cursor(v), ui_pop_hover_cursor()) +#define UI_Font(v) DeferLoop(ui_push_font(v), ui_pop_font()) +#define UI_FontSize(v) DeferLoop(ui_push_font_size(v), ui_pop_font_size()) +#define UI_CornerRadius00(v) DeferLoop(ui_push_corner_radius_00(v), ui_pop_corner_radius_00()) +#define UI_CornerRadius01(v) DeferLoop(ui_push_corner_radius_01(v), ui_pop_corner_radius_01()) +#define UI_CornerRadius10(v) DeferLoop(ui_push_corner_radius_10(v), ui_pop_corner_radius_10()) +#define UI_CornerRadius11(v) DeferLoop(ui_push_corner_radius_11(v), ui_pop_corner_radius_11()) +#define UI_BlurSize(v) DeferLoop(ui_push_blur_size(v), ui_pop_blur_size()) +#define UI_TextPadding(v) DeferLoop(ui_push_text_padding(v), ui_pop_text_padding()) +#define UI_TextAlignment(v) DeferLoop(ui_push_text_alignment(v), ui_pop_text_alignment()) +#endif +internal UI_Box * ui_top_parent(void) { UI_StackTopImpl(ui_state, Parent, parent) } +internal Axis2 ui_top_child_layout_axis(void) { UI_StackTopImpl(ui_state, ChildLayoutAxis, child_layout_axis) } +internal F32 ui_top_fixed_x(void) { UI_StackTopImpl(ui_state, FixedX, fixed_x) } +internal F32 ui_top_fixed_y(void) { UI_StackTopImpl(ui_state, FixedY, fixed_y) } +internal F32 ui_top_fixed_width(void) { UI_StackTopImpl(ui_state, FixedWidth, fixed_width) } +internal F32 ui_top_fixed_height(void) { UI_StackTopImpl(ui_state, FixedHeight, fixed_height) } +internal UI_Size ui_top_pref_width(void) { UI_StackTopImpl(ui_state, PrefWidth, pref_width) } +internal UI_Size ui_top_pref_height(void) { UI_StackTopImpl(ui_state, PrefHeight, pref_height) } +internal UI_BoxFlags ui_top_flags(void) { UI_StackTopImpl(ui_state, Flags, flags) } +internal UI_FocusKind ui_top_focus_hot(void) { UI_StackTopImpl(ui_state, FocusHot, focus_hot) } +internal UI_FocusKind ui_top_focus_active(void) { UI_StackTopImpl(ui_state, FocusActive, focus_active) } +internal U32 ui_top_fastpath_codepoint(void) { UI_StackTopImpl(ui_state, FastpathCodepoint, fastpath_codepoint) } +internal Vec4F32 ui_top_background_color(void) { UI_StackTopImpl(ui_state, BackgroundColor, background_color) } +internal Vec4F32 ui_top_text_color(void) { UI_StackTopImpl(ui_state, TextColor, text_color) } +internal Vec4F32 ui_top_border_color(void) { UI_StackTopImpl(ui_state, BorderColor, border_color) } +internal Vec4F32 ui_top_overlay_color(void) { UI_StackTopImpl(ui_state, OverlayColor, overlay_color) } +internal Vec4F32 ui_top_text_select_color(void) { UI_StackTopImpl(ui_state, TextSelectColor, text_select_color) } +internal Vec4F32 ui_top_text_cursor_color(void) { UI_StackTopImpl(ui_state, TextCursorColor, text_cursor_color) } +internal OS_Cursor ui_top_hover_cursor(void) { UI_StackTopImpl(ui_state, HoverCursor, hover_cursor) } +internal F_Tag ui_top_font(void) { UI_StackTopImpl(ui_state, Font, font) } +internal F32 ui_top_font_size(void) { UI_StackTopImpl(ui_state, FontSize, font_size) } +internal F32 ui_top_corner_radius_00(void) { UI_StackTopImpl(ui_state, CornerRadius00, corner_radius_00) } +internal F32 ui_top_corner_radius_01(void) { UI_StackTopImpl(ui_state, CornerRadius01, corner_radius_01) } +internal F32 ui_top_corner_radius_10(void) { UI_StackTopImpl(ui_state, CornerRadius10, corner_radius_10) } +internal F32 ui_top_corner_radius_11(void) { UI_StackTopImpl(ui_state, CornerRadius11, corner_radius_11) } +internal F32 ui_top_blur_size(void) { UI_StackTopImpl(ui_state, BlurSize, blur_size) } +internal F32 ui_top_text_padding(void) { UI_StackTopImpl(ui_state, TextPadding, text_padding) } +internal UI_TextAlign ui_top_text_alignment(void) { UI_StackTopImpl(ui_state, TextAlignment, text_alignment) } +internal UI_Box * ui_bottom_parent(void) { UI_StackBottomImpl(ui_state, Parent, parent) } +internal Axis2 ui_bottom_child_layout_axis(void) { UI_StackBottomImpl(ui_state, ChildLayoutAxis, child_layout_axis) } +internal F32 ui_bottom_fixed_x(void) { UI_StackBottomImpl(ui_state, FixedX, fixed_x) } +internal F32 ui_bottom_fixed_y(void) { UI_StackBottomImpl(ui_state, FixedY, fixed_y) } +internal F32 ui_bottom_fixed_width(void) { UI_StackBottomImpl(ui_state, FixedWidth, fixed_width) } +internal F32 ui_bottom_fixed_height(void) { UI_StackBottomImpl(ui_state, FixedHeight, fixed_height) } +internal UI_Size ui_bottom_pref_width(void) { UI_StackBottomImpl(ui_state, PrefWidth, pref_width) } +internal UI_Size ui_bottom_pref_height(void) { UI_StackBottomImpl(ui_state, PrefHeight, pref_height) } +internal UI_BoxFlags ui_bottom_flags(void) { UI_StackBottomImpl(ui_state, Flags, flags) } +internal UI_FocusKind ui_bottom_focus_hot(void) { UI_StackBottomImpl(ui_state, FocusHot, focus_hot) } +internal UI_FocusKind ui_bottom_focus_active(void) { UI_StackBottomImpl(ui_state, FocusActive, focus_active) } +internal U32 ui_bottom_fastpath_codepoint(void) { UI_StackBottomImpl(ui_state, FastpathCodepoint, fastpath_codepoint) } +internal Vec4F32 ui_bottom_background_color(void) { UI_StackBottomImpl(ui_state, BackgroundColor, background_color) } +internal Vec4F32 ui_bottom_text_color(void) { UI_StackBottomImpl(ui_state, TextColor, text_color) } +internal Vec4F32 ui_bottom_border_color(void) { UI_StackBottomImpl(ui_state, BorderColor, border_color) } +internal Vec4F32 ui_bottom_overlay_color(void) { UI_StackBottomImpl(ui_state, OverlayColor, overlay_color) } +internal Vec4F32 ui_bottom_text_select_color(void) { UI_StackBottomImpl(ui_state, TextSelectColor, text_select_color) } +internal Vec4F32 ui_bottom_text_cursor_color(void) { UI_StackBottomImpl(ui_state, TextCursorColor, text_cursor_color) } +internal OS_Cursor ui_bottom_hover_cursor(void) { UI_StackBottomImpl(ui_state, HoverCursor, hover_cursor) } +internal F_Tag ui_bottom_font(void) { UI_StackBottomImpl(ui_state, Font, font) } +internal F32 ui_bottom_font_size(void) { UI_StackBottomImpl(ui_state, FontSize, font_size) } +internal F32 ui_bottom_corner_radius_00(void) { UI_StackBottomImpl(ui_state, CornerRadius00, corner_radius_00) } +internal F32 ui_bottom_corner_radius_01(void) { UI_StackBottomImpl(ui_state, CornerRadius01, corner_radius_01) } +internal F32 ui_bottom_corner_radius_10(void) { UI_StackBottomImpl(ui_state, CornerRadius10, corner_radius_10) } +internal F32 ui_bottom_corner_radius_11(void) { UI_StackBottomImpl(ui_state, CornerRadius11, corner_radius_11) } +internal F32 ui_bottom_blur_size(void) { UI_StackBottomImpl(ui_state, BlurSize, blur_size) } +internal F32 ui_bottom_text_padding(void) { UI_StackBottomImpl(ui_state, TextPadding, text_padding) } +internal UI_TextAlign ui_bottom_text_alignment(void) { UI_StackBottomImpl(ui_state, TextAlignment, text_alignment) } +internal UI_Box * ui_push_parent(UI_Box * v) { UI_StackPushImpl(ui_state, Parent, parent, UI_Box *, v) } +internal Axis2 ui_push_child_layout_axis(Axis2 v) { UI_StackPushImpl(ui_state, ChildLayoutAxis, child_layout_axis, Axis2, v) } +internal F32 ui_push_fixed_x(F32 v) { UI_StackPushImpl(ui_state, FixedX, fixed_x, F32, v) } +internal F32 ui_push_fixed_y(F32 v) { UI_StackPushImpl(ui_state, FixedY, fixed_y, F32, v) } +internal F32 ui_push_fixed_width(F32 v) { UI_StackPushImpl(ui_state, FixedWidth, fixed_width, F32, v) } +internal F32 ui_push_fixed_height(F32 v) { UI_StackPushImpl(ui_state, FixedHeight, fixed_height, F32, v) } +internal UI_Size ui_push_pref_width(UI_Size v) { UI_StackPushImpl(ui_state, PrefWidth, pref_width, UI_Size, v) } +internal UI_Size ui_push_pref_height(UI_Size v) { UI_StackPushImpl(ui_state, PrefHeight, pref_height, UI_Size, v) } +internal UI_BoxFlags ui_push_flags(UI_BoxFlags v) { UI_StackPushImpl(ui_state, Flags, flags, UI_BoxFlags, v) } +internal UI_FocusKind ui_push_focus_hot(UI_FocusKind v) { UI_StackPushImpl(ui_state, FocusHot, focus_hot, UI_FocusKind, v) } +internal UI_FocusKind ui_push_focus_active(UI_FocusKind v) { UI_StackPushImpl(ui_state, FocusActive, focus_active, UI_FocusKind, v) } +internal U32 ui_push_fastpath_codepoint(U32 v) { UI_StackPushImpl(ui_state, FastpathCodepoint, fastpath_codepoint, U32, v) } +internal Vec4F32 ui_push_background_color(Vec4F32 v) { UI_StackPushImpl(ui_state, BackgroundColor, background_color, Vec4F32, v) } +internal Vec4F32 ui_push_text_color(Vec4F32 v) { UI_StackPushImpl(ui_state, TextColor, text_color, Vec4F32, v) } +internal Vec4F32 ui_push_border_color(Vec4F32 v) { UI_StackPushImpl(ui_state, BorderColor, border_color, Vec4F32, v) } +internal Vec4F32 ui_push_overlay_color(Vec4F32 v) { UI_StackPushImpl(ui_state, OverlayColor, overlay_color, Vec4F32, v) } +internal Vec4F32 ui_push_text_select_color(Vec4F32 v) { UI_StackPushImpl(ui_state, TextSelectColor, text_select_color, Vec4F32, v) } +internal Vec4F32 ui_push_text_cursor_color(Vec4F32 v) { UI_StackPushImpl(ui_state, TextCursorColor, text_cursor_color, Vec4F32, v) } +internal OS_Cursor ui_push_hover_cursor(OS_Cursor v) { UI_StackPushImpl(ui_state, HoverCursor, hover_cursor, OS_Cursor, v) } +internal F_Tag ui_push_font(F_Tag v) { UI_StackPushImpl(ui_state, Font, font, F_Tag, v) } +internal F32 ui_push_font_size(F32 v) { UI_StackPushImpl(ui_state, FontSize, font_size, F32, v) } +internal F32 ui_push_corner_radius_00(F32 v) { UI_StackPushImpl(ui_state, CornerRadius00, corner_radius_00, F32, v) } +internal F32 ui_push_corner_radius_01(F32 v) { UI_StackPushImpl(ui_state, CornerRadius01, corner_radius_01, F32, v) } +internal F32 ui_push_corner_radius_10(F32 v) { UI_StackPushImpl(ui_state, CornerRadius10, corner_radius_10, F32, v) } +internal F32 ui_push_corner_radius_11(F32 v) { UI_StackPushImpl(ui_state, CornerRadius11, corner_radius_11, F32, v) } +internal F32 ui_push_blur_size(F32 v) { UI_StackPushImpl(ui_state, BlurSize, blur_size, F32, v) } +internal F32 ui_push_text_padding(F32 v) { UI_StackPushImpl(ui_state, TextPadding, text_padding, F32, v) } +internal UI_TextAlign ui_push_text_alignment(UI_TextAlign v) { UI_StackPushImpl(ui_state, TextAlignment, text_alignment, UI_TextAlign, v) } +internal UI_Box * ui_pop_parent(void) { UI_StackPopImpl(ui_state, Parent, parent) } +internal Axis2 ui_pop_child_layout_axis(void) { UI_StackPopImpl(ui_state, ChildLayoutAxis, child_layout_axis) } +internal F32 ui_pop_fixed_x(void) { UI_StackPopImpl(ui_state, FixedX, fixed_x) } +internal F32 ui_pop_fixed_y(void) { UI_StackPopImpl(ui_state, FixedY, fixed_y) } +internal F32 ui_pop_fixed_width(void) { UI_StackPopImpl(ui_state, FixedWidth, fixed_width) } +internal F32 ui_pop_fixed_height(void) { UI_StackPopImpl(ui_state, FixedHeight, fixed_height) } +internal UI_Size ui_pop_pref_width(void) { UI_StackPopImpl(ui_state, PrefWidth, pref_width) } +internal UI_Size ui_pop_pref_height(void) { UI_StackPopImpl(ui_state, PrefHeight, pref_height) } +internal UI_BoxFlags ui_pop_flags(void) { UI_StackPopImpl(ui_state, Flags, flags) } +internal UI_FocusKind ui_pop_focus_hot(void) { UI_StackPopImpl(ui_state, FocusHot, focus_hot) } +internal UI_FocusKind ui_pop_focus_active(void) { UI_StackPopImpl(ui_state, FocusActive, focus_active) } +internal U32 ui_pop_fastpath_codepoint(void) { UI_StackPopImpl(ui_state, FastpathCodepoint, fastpath_codepoint) } +internal Vec4F32 ui_pop_background_color(void) { UI_StackPopImpl(ui_state, BackgroundColor, background_color) } +internal Vec4F32 ui_pop_text_color(void) { UI_StackPopImpl(ui_state, TextColor, text_color) } +internal Vec4F32 ui_pop_border_color(void) { UI_StackPopImpl(ui_state, BorderColor, border_color) } +internal Vec4F32 ui_pop_overlay_color(void) { UI_StackPopImpl(ui_state, OverlayColor, overlay_color) } +internal Vec4F32 ui_pop_text_select_color(void) { UI_StackPopImpl(ui_state, TextSelectColor, text_select_color) } +internal Vec4F32 ui_pop_text_cursor_color(void) { UI_StackPopImpl(ui_state, TextCursorColor, text_cursor_color) } +internal OS_Cursor ui_pop_hover_cursor(void) { UI_StackPopImpl(ui_state, HoverCursor, hover_cursor) } +internal F_Tag ui_pop_font(void) { UI_StackPopImpl(ui_state, Font, font) } +internal F32 ui_pop_font_size(void) { UI_StackPopImpl(ui_state, FontSize, font_size) } +internal F32 ui_pop_corner_radius_00(void) { UI_StackPopImpl(ui_state, CornerRadius00, corner_radius_00) } +internal F32 ui_pop_corner_radius_01(void) { UI_StackPopImpl(ui_state, CornerRadius01, corner_radius_01) } +internal F32 ui_pop_corner_radius_10(void) { UI_StackPopImpl(ui_state, CornerRadius10, corner_radius_10) } +internal F32 ui_pop_corner_radius_11(void) { UI_StackPopImpl(ui_state, CornerRadius11, corner_radius_11) } +internal F32 ui_pop_blur_size(void) { UI_StackPopImpl(ui_state, BlurSize, blur_size) } +internal F32 ui_pop_text_padding(void) { UI_StackPopImpl(ui_state, TextPadding, text_padding) } +internal UI_TextAlign ui_pop_text_alignment(void) { UI_StackPopImpl(ui_state, TextAlignment, text_alignment) } +internal UI_Box * ui_set_next_parent(UI_Box * v) { UI_StackSetNextImpl(ui_state, Parent, parent, UI_Box *, v) } +internal Axis2 ui_set_next_child_layout_axis(Axis2 v) { UI_StackSetNextImpl(ui_state, ChildLayoutAxis, child_layout_axis, Axis2, v) } +internal F32 ui_set_next_fixed_x(F32 v) { UI_StackSetNextImpl(ui_state, FixedX, fixed_x, F32, v) } +internal F32 ui_set_next_fixed_y(F32 v) { UI_StackSetNextImpl(ui_state, FixedY, fixed_y, F32, v) } +internal F32 ui_set_next_fixed_width(F32 v) { UI_StackSetNextImpl(ui_state, FixedWidth, fixed_width, F32, v) } +internal F32 ui_set_next_fixed_height(F32 v) { UI_StackSetNextImpl(ui_state, FixedHeight, fixed_height, F32, v) } +internal UI_Size ui_set_next_pref_width(UI_Size v) { UI_StackSetNextImpl(ui_state, PrefWidth, pref_width, UI_Size, v) } +internal UI_Size ui_set_next_pref_height(UI_Size v) { UI_StackSetNextImpl(ui_state, PrefHeight, pref_height, UI_Size, v) } +internal UI_BoxFlags ui_set_next_flags(UI_BoxFlags v) { UI_StackSetNextImpl(ui_state, Flags, flags, UI_BoxFlags, v) } +internal UI_FocusKind ui_set_next_focus_hot(UI_FocusKind v) { UI_StackSetNextImpl(ui_state, FocusHot, focus_hot, UI_FocusKind, v) } +internal UI_FocusKind ui_set_next_focus_active(UI_FocusKind v) { UI_StackSetNextImpl(ui_state, FocusActive, focus_active, UI_FocusKind, v) } +internal U32 ui_set_next_fastpath_codepoint(U32 v) { UI_StackSetNextImpl(ui_state, FastpathCodepoint, fastpath_codepoint, U32, v) } +internal Vec4F32 ui_set_next_background_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, BackgroundColor, background_color, Vec4F32, v) } +internal Vec4F32 ui_set_next_text_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, TextColor, text_color, Vec4F32, v) } +internal Vec4F32 ui_set_next_border_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, BorderColor, border_color, Vec4F32, v) } +internal Vec4F32 ui_set_next_overlay_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, OverlayColor, overlay_color, Vec4F32, v) } +internal Vec4F32 ui_set_next_text_select_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, TextSelectColor, text_select_color, Vec4F32, v) } +internal Vec4F32 ui_set_next_text_cursor_color(Vec4F32 v) { UI_StackSetNextImpl(ui_state, TextCursorColor, text_cursor_color, Vec4F32, v) } +internal OS_Cursor ui_set_next_hover_cursor(OS_Cursor v) { UI_StackSetNextImpl(ui_state, HoverCursor, hover_cursor, OS_Cursor, v) } +internal F_Tag ui_set_next_font(F_Tag v) { UI_StackSetNextImpl(ui_state, Font, font, F_Tag, v) } +internal F32 ui_set_next_font_size(F32 v) { UI_StackSetNextImpl(ui_state, FontSize, font_size, F32, v) } +internal F32 ui_set_next_corner_radius_00(F32 v) { UI_StackSetNextImpl(ui_state, CornerRadius00, corner_radius_00, F32, v) } +internal F32 ui_set_next_corner_radius_01(F32 v) { UI_StackSetNextImpl(ui_state, CornerRadius01, corner_radius_01, F32, v) } +internal F32 ui_set_next_corner_radius_10(F32 v) { UI_StackSetNextImpl(ui_state, CornerRadius10, corner_radius_10, F32, v) } +internal F32 ui_set_next_corner_radius_11(F32 v) { UI_StackSetNextImpl(ui_state, CornerRadius11, corner_radius_11, F32, v) } +internal F32 ui_set_next_blur_size(F32 v) { UI_StackSetNextImpl(ui_state, BlurSize, blur_size, F32, v) } +internal F32 ui_set_next_text_padding(F32 v) { UI_StackSetNextImpl(ui_state, TextPadding, text_padding, F32, v) } +internal UI_TextAlign ui_set_next_text_alignment(UI_TextAlign v) { UI_StackSetNextImpl(ui_state, TextAlignment, text_alignment, UI_TextAlign, v) } diff --git a/src/ui/generated/ui.meta.h b/src/ui/generated/ui.meta.h index 3625e587..a8c4568e 100644 --- a/src/ui/generated/ui.meta.h +++ b/src/ui/generated/ui.meta.h @@ -6,142 +6,188 @@ #ifndef UI_META_H #define UI_META_H -#define UI_StackDecls struct{\ -struct { UI_Box * active; UI_Box * v[64]; U64 count; B32 auto_pop; } parent;\ -struct { Axis2 active; Axis2 v[64]; U64 count; B32 auto_pop; } child_layout_axis;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } fixed_x;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } fixed_y;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } fixed_width;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } fixed_height;\ -struct { UI_Size active; UI_Size v[64]; U64 count; B32 auto_pop; } pref_width;\ -struct { UI_Size active; UI_Size v[64]; U64 count; B32 auto_pop; } pref_height;\ -struct { UI_BoxFlags active; UI_BoxFlags v[64]; U64 count; B32 auto_pop; } flags;\ -struct { U32 active; U32 v[64]; U64 count; B32 auto_pop; } fastpath_codepoint;\ -struct { Vec4F32 active; Vec4F32 v[64]; U64 count; B32 auto_pop; } background_color;\ -struct { Vec4F32 active; Vec4F32 v[64]; U64 count; B32 auto_pop; } text_color;\ -struct { Vec4F32 active; Vec4F32 v[64]; U64 count; B32 auto_pop; } border_color;\ -struct { Vec4F32 active; Vec4F32 v[64]; U64 count; B32 auto_pop; } overlay_color;\ -struct { Vec4F32 active; Vec4F32 v[64]; U64 count; B32 auto_pop; } text_select_color;\ -struct { Vec4F32 active; Vec4F32 v[64]; U64 count; B32 auto_pop; } text_cursor_color;\ -struct { OS_Cursor active; OS_Cursor v[64]; U64 count; B32 auto_pop; } hover_cursor;\ -struct { F_Tag active; F_Tag v[64]; U64 count; B32 auto_pop; } font;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } font_size;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } corner_radius_00;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } corner_radius_01;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } corner_radius_10;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } corner_radius_11;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } blur_size;\ -struct { F32 active; F32 v[64]; U64 count; B32 auto_pop; } text_padding;\ -struct { UI_TextAlign active; UI_TextAlign v[64]; U64 count; B32 auto_pop; } text_alignment;\ +typedef struct UI_ParentNode UI_ParentNode; struct UI_ParentNode{UI_ParentNode *next; UI_Box * v;}; +typedef struct UI_ChildLayoutAxisNode UI_ChildLayoutAxisNode; struct UI_ChildLayoutAxisNode{UI_ChildLayoutAxisNode *next; Axis2 v;}; +typedef struct UI_FixedXNode UI_FixedXNode; struct UI_FixedXNode{UI_FixedXNode *next; F32 v;}; +typedef struct UI_FixedYNode UI_FixedYNode; struct UI_FixedYNode{UI_FixedYNode *next; F32 v;}; +typedef struct UI_FixedWidthNode UI_FixedWidthNode; struct UI_FixedWidthNode{UI_FixedWidthNode *next; F32 v;}; +typedef struct UI_FixedHeightNode UI_FixedHeightNode; struct UI_FixedHeightNode{UI_FixedHeightNode *next; F32 v;}; +typedef struct UI_PrefWidthNode UI_PrefWidthNode; struct UI_PrefWidthNode{UI_PrefWidthNode *next; UI_Size v;}; +typedef struct UI_PrefHeightNode UI_PrefHeightNode; struct UI_PrefHeightNode{UI_PrefHeightNode *next; UI_Size v;}; +typedef struct UI_FlagsNode UI_FlagsNode; struct UI_FlagsNode{UI_FlagsNode *next; UI_BoxFlags v;}; +typedef struct UI_FocusHotNode UI_FocusHotNode; struct UI_FocusHotNode{UI_FocusHotNode *next; UI_FocusKind v;}; +typedef struct UI_FocusActiveNode UI_FocusActiveNode; struct UI_FocusActiveNode{UI_FocusActiveNode *next; UI_FocusKind v;}; +typedef struct UI_FastpathCodepointNode UI_FastpathCodepointNode; struct UI_FastpathCodepointNode{UI_FastpathCodepointNode *next; U32 v;}; +typedef struct UI_BackgroundColorNode UI_BackgroundColorNode; struct UI_BackgroundColorNode{UI_BackgroundColorNode *next; Vec4F32 v;}; +typedef struct UI_TextColorNode UI_TextColorNode; struct UI_TextColorNode{UI_TextColorNode *next; Vec4F32 v;}; +typedef struct UI_BorderColorNode UI_BorderColorNode; struct UI_BorderColorNode{UI_BorderColorNode *next; Vec4F32 v;}; +typedef struct UI_OverlayColorNode UI_OverlayColorNode; struct UI_OverlayColorNode{UI_OverlayColorNode *next; Vec4F32 v;}; +typedef struct UI_TextSelectColorNode UI_TextSelectColorNode; struct UI_TextSelectColorNode{UI_TextSelectColorNode *next; Vec4F32 v;}; +typedef struct UI_TextCursorColorNode UI_TextCursorColorNode; struct UI_TextCursorColorNode{UI_TextCursorColorNode *next; Vec4F32 v;}; +typedef struct UI_HoverCursorNode UI_HoverCursorNode; struct UI_HoverCursorNode{UI_HoverCursorNode *next; OS_Cursor v;}; +typedef struct UI_FontNode UI_FontNode; struct UI_FontNode{UI_FontNode *next; F_Tag v;}; +typedef struct UI_FontSizeNode UI_FontSizeNode; struct UI_FontSizeNode{UI_FontSizeNode *next; F32 v;}; +typedef struct UI_CornerRadius00Node UI_CornerRadius00Node; struct UI_CornerRadius00Node{UI_CornerRadius00Node *next; F32 v;}; +typedef struct UI_CornerRadius01Node UI_CornerRadius01Node; struct UI_CornerRadius01Node{UI_CornerRadius01Node *next; F32 v;}; +typedef struct UI_CornerRadius10Node UI_CornerRadius10Node; struct UI_CornerRadius10Node{UI_CornerRadius10Node *next; F32 v;}; +typedef struct UI_CornerRadius11Node UI_CornerRadius11Node; struct UI_CornerRadius11Node{UI_CornerRadius11Node *next; F32 v;}; +typedef struct UI_BlurSizeNode UI_BlurSizeNode; struct UI_BlurSizeNode{UI_BlurSizeNode *next; F32 v;}; +typedef struct UI_TextPaddingNode UI_TextPaddingNode; struct UI_TextPaddingNode{UI_TextPaddingNode *next; F32 v;}; +typedef struct UI_TextAlignmentNode UI_TextAlignmentNode; struct UI_TextAlignmentNode{UI_TextAlignmentNode *next; UI_TextAlign v;}; +#define UI_DeclStackNils \ +struct\ +{\ +UI_ParentNode parent_nil_stack_top;\ +UI_ChildLayoutAxisNode child_layout_axis_nil_stack_top;\ +UI_FixedXNode fixed_x_nil_stack_top;\ +UI_FixedYNode fixed_y_nil_stack_top;\ +UI_FixedWidthNode fixed_width_nil_stack_top;\ +UI_FixedHeightNode fixed_height_nil_stack_top;\ +UI_PrefWidthNode pref_width_nil_stack_top;\ +UI_PrefHeightNode pref_height_nil_stack_top;\ +UI_FlagsNode flags_nil_stack_top;\ +UI_FocusHotNode focus_hot_nil_stack_top;\ +UI_FocusActiveNode focus_active_nil_stack_top;\ +UI_FastpathCodepointNode fastpath_codepoint_nil_stack_top;\ +UI_BackgroundColorNode background_color_nil_stack_top;\ +UI_TextColorNode text_color_nil_stack_top;\ +UI_BorderColorNode border_color_nil_stack_top;\ +UI_OverlayColorNode overlay_color_nil_stack_top;\ +UI_TextSelectColorNode text_select_color_nil_stack_top;\ +UI_TextCursorColorNode text_cursor_color_nil_stack_top;\ +UI_HoverCursorNode hover_cursor_nil_stack_top;\ +UI_FontNode font_nil_stack_top;\ +UI_FontSizeNode font_size_nil_stack_top;\ +UI_CornerRadius00Node corner_radius_00_nil_stack_top;\ +UI_CornerRadius01Node corner_radius_01_nil_stack_top;\ +UI_CornerRadius10Node corner_radius_10_nil_stack_top;\ +UI_CornerRadius11Node corner_radius_11_nil_stack_top;\ +UI_BlurSizeNode blur_size_nil_stack_top;\ +UI_TextPaddingNode text_padding_nil_stack_top;\ +UI_TextAlignmentNode text_alignment_nil_stack_top;\ } -#define UI_ZeroAllStacks(ui_state) do{\ -MemoryZeroStruct(&ui_state->parent);\ -MemoryZeroStruct(&ui_state->child_layout_axis);\ -MemoryZeroStruct(&ui_state->fixed_x);\ -MemoryZeroStruct(&ui_state->fixed_y);\ -MemoryZeroStruct(&ui_state->fixed_width);\ -MemoryZeroStruct(&ui_state->fixed_height);\ -MemoryZeroStruct(&ui_state->pref_width);\ -MemoryZeroStruct(&ui_state->pref_height);\ -MemoryZeroStruct(&ui_state->flags);\ -MemoryZeroStruct(&ui_state->fastpath_codepoint);\ -MemoryZeroStruct(&ui_state->background_color);\ -MemoryZeroStruct(&ui_state->text_color);\ -MemoryZeroStruct(&ui_state->border_color);\ -MemoryZeroStruct(&ui_state->overlay_color);\ -MemoryZeroStruct(&ui_state->text_select_color);\ -MemoryZeroStruct(&ui_state->text_cursor_color);\ -MemoryZeroStruct(&ui_state->hover_cursor);\ -MemoryZeroStruct(&ui_state->font);\ -MemoryZeroStruct(&ui_state->font_size);\ -MemoryZeroStruct(&ui_state->corner_radius_00);\ -MemoryZeroStruct(&ui_state->corner_radius_01);\ -MemoryZeroStruct(&ui_state->corner_radius_10);\ -MemoryZeroStruct(&ui_state->corner_radius_11);\ -MemoryZeroStruct(&ui_state->blur_size);\ -MemoryZeroStruct(&ui_state->text_padding);\ -MemoryZeroStruct(&ui_state->text_alignment);\ -} while(0) -#define UI_AutoPopAllStacks(ui_state) do{\ -if(ui_state->parent.auto_pop) {ui_state->parent.auto_pop = 0; ui_pop_parent();}\ -if(ui_state->child_layout_axis.auto_pop) {ui_state->child_layout_axis.auto_pop = 0; ui_pop_child_layout_axis();}\ -if(ui_state->fixed_x.auto_pop) {ui_state->fixed_x.auto_pop = 0; ui_pop_fixed_x();}\ -if(ui_state->fixed_y.auto_pop) {ui_state->fixed_y.auto_pop = 0; ui_pop_fixed_y();}\ -if(ui_state->fixed_width.auto_pop) {ui_state->fixed_width.auto_pop = 0; ui_pop_fixed_width();}\ -if(ui_state->fixed_height.auto_pop) {ui_state->fixed_height.auto_pop = 0; ui_pop_fixed_height();}\ -if(ui_state->pref_width.auto_pop) {ui_state->pref_width.auto_pop = 0; ui_pop_pref_width();}\ -if(ui_state->pref_height.auto_pop) {ui_state->pref_height.auto_pop = 0; ui_pop_pref_height();}\ -if(ui_state->flags.auto_pop) {ui_state->flags.auto_pop = 0; ui_pop_flags();}\ -if(ui_state->fastpath_codepoint.auto_pop) {ui_state->fastpath_codepoint.auto_pop = 0; ui_pop_fastpath_codepoint();}\ -if(ui_state->background_color.auto_pop) {ui_state->background_color.auto_pop = 0; ui_pop_background_color();}\ -if(ui_state->text_color.auto_pop) {ui_state->text_color.auto_pop = 0; ui_pop_text_color();}\ -if(ui_state->border_color.auto_pop) {ui_state->border_color.auto_pop = 0; ui_pop_border_color();}\ -if(ui_state->overlay_color.auto_pop) {ui_state->overlay_color.auto_pop = 0; ui_pop_overlay_color();}\ -if(ui_state->text_select_color.auto_pop) {ui_state->text_select_color.auto_pop = 0; ui_pop_text_select_color();}\ -if(ui_state->text_cursor_color.auto_pop) {ui_state->text_cursor_color.auto_pop = 0; ui_pop_text_cursor_color();}\ -if(ui_state->hover_cursor.auto_pop) {ui_state->hover_cursor.auto_pop = 0; ui_pop_hover_cursor();}\ -if(ui_state->font.auto_pop) {ui_state->font.auto_pop = 0; ui_pop_font();}\ -if(ui_state->font_size.auto_pop) {ui_state->font_size.auto_pop = 0; ui_pop_font_size();}\ -if(ui_state->corner_radius_00.auto_pop) {ui_state->corner_radius_00.auto_pop = 0; ui_pop_corner_radius_00();}\ -if(ui_state->corner_radius_01.auto_pop) {ui_state->corner_radius_01.auto_pop = 0; ui_pop_corner_radius_01();}\ -if(ui_state->corner_radius_10.auto_pop) {ui_state->corner_radius_10.auto_pop = 0; ui_pop_corner_radius_10();}\ -if(ui_state->corner_radius_11.auto_pop) {ui_state->corner_radius_11.auto_pop = 0; ui_pop_corner_radius_11();}\ -if(ui_state->blur_size.auto_pop) {ui_state->blur_size.auto_pop = 0; ui_pop_blur_size();}\ -if(ui_state->text_padding.auto_pop) {ui_state->text_padding.auto_pop = 0; ui_pop_text_padding();}\ -if(ui_state->text_alignment.auto_pop) {ui_state->text_alignment.auto_pop = 0; ui_pop_text_alignment();}\ -} while(0) -internal UI_Box * ui_push_parent(UI_Box * v); -internal Axis2 ui_push_child_layout_axis(Axis2 v); -internal F32 ui_push_fixed_x(F32 v); -internal F32 ui_push_fixed_y(F32 v); -internal F32 ui_push_fixed_width(F32 v); -internal F32 ui_push_fixed_height(F32 v); -internal UI_Size ui_push_pref_width(UI_Size v); -internal UI_Size ui_push_pref_height(UI_Size v); -internal UI_BoxFlags ui_push_flags(UI_BoxFlags v); -internal U32 ui_push_fastpath_codepoint(U32 v); -internal Vec4F32 ui_push_background_color(Vec4F32 v); -internal Vec4F32 ui_push_text_color(Vec4F32 v); -internal Vec4F32 ui_push_border_color(Vec4F32 v); -internal Vec4F32 ui_push_overlay_color(Vec4F32 v); -internal Vec4F32 ui_push_text_select_color(Vec4F32 v); -internal Vec4F32 ui_push_text_cursor_color(Vec4F32 v); -internal OS_Cursor ui_push_hover_cursor(OS_Cursor v); -internal F_Tag ui_push_font(F_Tag v); -internal F32 ui_push_font_size(F32 v); -internal F32 ui_push_corner_radius_00(F32 v); -internal F32 ui_push_corner_radius_01(F32 v); -internal F32 ui_push_corner_radius_10(F32 v); -internal F32 ui_push_corner_radius_11(F32 v); -internal F32 ui_push_blur_size(F32 v); -internal F32 ui_push_text_padding(F32 v); -internal UI_TextAlign ui_push_text_alignment(UI_TextAlign v); -internal UI_Box * ui_pop_parent(void); -internal Axis2 ui_pop_child_layout_axis(void); -internal F32 ui_pop_fixed_x(void); -internal F32 ui_pop_fixed_y(void); -internal F32 ui_pop_fixed_width(void); -internal F32 ui_pop_fixed_height(void); -internal UI_Size ui_pop_pref_width(void); -internal UI_Size ui_pop_pref_height(void); -internal UI_BoxFlags ui_pop_flags(void); -internal U32 ui_pop_fastpath_codepoint(void); -internal Vec4F32 ui_pop_background_color(void); -internal Vec4F32 ui_pop_text_color(void); -internal Vec4F32 ui_pop_border_color(void); -internal Vec4F32 ui_pop_overlay_color(void); -internal Vec4F32 ui_pop_text_select_color(void); -internal Vec4F32 ui_pop_text_cursor_color(void); -internal OS_Cursor ui_pop_hover_cursor(void); -internal F_Tag ui_pop_font(void); -internal F32 ui_pop_font_size(void); -internal F32 ui_pop_corner_radius_00(void); -internal F32 ui_pop_corner_radius_01(void); -internal F32 ui_pop_corner_radius_10(void); -internal F32 ui_pop_corner_radius_11(void); -internal F32 ui_pop_blur_size(void); -internal F32 ui_pop_text_padding(void); -internal UI_TextAlign ui_pop_text_alignment(void); +#define UI_InitStackNils(state) \ +state->parent_nil_stack_top.v = &ui_g_nil_box;\ +state->child_layout_axis_nil_stack_top.v = Axis2_X;\ +state->fixed_x_nil_stack_top.v = 0;\ +state->fixed_y_nil_stack_top.v = 0;\ +state->fixed_width_nil_stack_top.v = 0;\ +state->fixed_height_nil_stack_top.v = 0;\ +state->pref_width_nil_stack_top.v = ui_px(250.f, 1.f);\ +state->pref_height_nil_stack_top.v = ui_px(30.f, 1.f);\ +state->flags_nil_stack_top.v = 0;\ +state->focus_hot_nil_stack_top.v = UI_FocusKind_Null;\ +state->focus_active_nil_stack_top.v = UI_FocusKind_Null;\ +state->fastpath_codepoint_nil_stack_top.v = 0;\ +state->background_color_nil_stack_top.v = v4f32(1, 0, 1, 1);\ +state->text_color_nil_stack_top.v = v4f32(1, 0, 1, 1);\ +state->border_color_nil_stack_top.v = v4f32(1, 0, 1, 1);\ +state->overlay_color_nil_stack_top.v = v4f32(1, 0, 1, 1);\ +state->text_select_color_nil_stack_top.v = v4f32(1, 0, 1, 1);\ +state->text_cursor_color_nil_stack_top.v = v4f32(1, 0, 1, 1);\ +state->hover_cursor_nil_stack_top.v = OS_Cursor_Pointer;\ +state->font_nil_stack_top.v = f_tag_zero();\ +state->font_size_nil_stack_top.v = 24.f;\ +state->corner_radius_00_nil_stack_top.v = 0;\ +state->corner_radius_01_nil_stack_top.v = 0;\ +state->corner_radius_10_nil_stack_top.v = 0;\ +state->corner_radius_11_nil_stack_top.v = 0;\ +state->blur_size_nil_stack_top.v = 0;\ +state->text_padding_nil_stack_top.v = 2;\ +state->text_alignment_nil_stack_top.v = UI_TextAlign_Left;\ + +#define UI_DeclStacks \ +struct\ +{\ +struct { UI_ParentNode *top; UI_Box * bottom_val; UI_ParentNode *free; B32 auto_pop; } parent_stack;\ +struct { UI_ChildLayoutAxisNode *top; Axis2 bottom_val; UI_ChildLayoutAxisNode *free; B32 auto_pop; } child_layout_axis_stack;\ +struct { UI_FixedXNode *top; F32 bottom_val; UI_FixedXNode *free; B32 auto_pop; } fixed_x_stack;\ +struct { UI_FixedYNode *top; F32 bottom_val; UI_FixedYNode *free; B32 auto_pop; } fixed_y_stack;\ +struct { UI_FixedWidthNode *top; F32 bottom_val; UI_FixedWidthNode *free; B32 auto_pop; } fixed_width_stack;\ +struct { UI_FixedHeightNode *top; F32 bottom_val; UI_FixedHeightNode *free; B32 auto_pop; } fixed_height_stack;\ +struct { UI_PrefWidthNode *top; UI_Size bottom_val; UI_PrefWidthNode *free; B32 auto_pop; } pref_width_stack;\ +struct { UI_PrefHeightNode *top; UI_Size bottom_val; UI_PrefHeightNode *free; B32 auto_pop; } pref_height_stack;\ +struct { UI_FlagsNode *top; UI_BoxFlags bottom_val; UI_FlagsNode *free; B32 auto_pop; } flags_stack;\ +struct { UI_FocusHotNode *top; UI_FocusKind bottom_val; UI_FocusHotNode *free; B32 auto_pop; } focus_hot_stack;\ +struct { UI_FocusActiveNode *top; UI_FocusKind bottom_val; UI_FocusActiveNode *free; B32 auto_pop; } focus_active_stack;\ +struct { UI_FastpathCodepointNode *top; U32 bottom_val; UI_FastpathCodepointNode *free; B32 auto_pop; } fastpath_codepoint_stack;\ +struct { UI_BackgroundColorNode *top; Vec4F32 bottom_val; UI_BackgroundColorNode *free; B32 auto_pop; } background_color_stack;\ +struct { UI_TextColorNode *top; Vec4F32 bottom_val; UI_TextColorNode *free; B32 auto_pop; } text_color_stack;\ +struct { UI_BorderColorNode *top; Vec4F32 bottom_val; UI_BorderColorNode *free; B32 auto_pop; } border_color_stack;\ +struct { UI_OverlayColorNode *top; Vec4F32 bottom_val; UI_OverlayColorNode *free; B32 auto_pop; } overlay_color_stack;\ +struct { UI_TextSelectColorNode *top; Vec4F32 bottom_val; UI_TextSelectColorNode *free; B32 auto_pop; } text_select_color_stack;\ +struct { UI_TextCursorColorNode *top; Vec4F32 bottom_val; UI_TextCursorColorNode *free; B32 auto_pop; } text_cursor_color_stack;\ +struct { UI_HoverCursorNode *top; OS_Cursor bottom_val; UI_HoverCursorNode *free; B32 auto_pop; } hover_cursor_stack;\ +struct { UI_FontNode *top; F_Tag bottom_val; UI_FontNode *free; B32 auto_pop; } font_stack;\ +struct { UI_FontSizeNode *top; F32 bottom_val; UI_FontSizeNode *free; B32 auto_pop; } font_size_stack;\ +struct { UI_CornerRadius00Node *top; F32 bottom_val; UI_CornerRadius00Node *free; B32 auto_pop; } corner_radius_00_stack;\ +struct { UI_CornerRadius01Node *top; F32 bottom_val; UI_CornerRadius01Node *free; B32 auto_pop; } corner_radius_01_stack;\ +struct { UI_CornerRadius10Node *top; F32 bottom_val; UI_CornerRadius10Node *free; B32 auto_pop; } corner_radius_10_stack;\ +struct { UI_CornerRadius11Node *top; F32 bottom_val; UI_CornerRadius11Node *free; B32 auto_pop; } corner_radius_11_stack;\ +struct { UI_BlurSizeNode *top; F32 bottom_val; UI_BlurSizeNode *free; B32 auto_pop; } blur_size_stack;\ +struct { UI_TextPaddingNode *top; F32 bottom_val; UI_TextPaddingNode *free; B32 auto_pop; } text_padding_stack;\ +struct { UI_TextAlignmentNode *top; UI_TextAlign bottom_val; UI_TextAlignmentNode *free; B32 auto_pop; } text_alignment_stack;\ +} +#define UI_InitStacks(state) \ +state->parent_stack.top = &state->parent_nil_stack_top; state->parent_stack.bottom_val = &ui_g_nil_box; state->parent_stack.free = 0; state->parent_stack.auto_pop = 0;\ +state->child_layout_axis_stack.top = &state->child_layout_axis_nil_stack_top; state->child_layout_axis_stack.bottom_val = Axis2_X; state->child_layout_axis_stack.free = 0; state->child_layout_axis_stack.auto_pop = 0;\ +state->fixed_x_stack.top = &state->fixed_x_nil_stack_top; state->fixed_x_stack.bottom_val = 0; state->fixed_x_stack.free = 0; state->fixed_x_stack.auto_pop = 0;\ +state->fixed_y_stack.top = &state->fixed_y_nil_stack_top; state->fixed_y_stack.bottom_val = 0; state->fixed_y_stack.free = 0; state->fixed_y_stack.auto_pop = 0;\ +state->fixed_width_stack.top = &state->fixed_width_nil_stack_top; state->fixed_width_stack.bottom_val = 0; state->fixed_width_stack.free = 0; state->fixed_width_stack.auto_pop = 0;\ +state->fixed_height_stack.top = &state->fixed_height_nil_stack_top; state->fixed_height_stack.bottom_val = 0; state->fixed_height_stack.free = 0; state->fixed_height_stack.auto_pop = 0;\ +state->pref_width_stack.top = &state->pref_width_nil_stack_top; state->pref_width_stack.bottom_val = ui_px(250.f, 1.f); state->pref_width_stack.free = 0; state->pref_width_stack.auto_pop = 0;\ +state->pref_height_stack.top = &state->pref_height_nil_stack_top; state->pref_height_stack.bottom_val = ui_px(30.f, 1.f); state->pref_height_stack.free = 0; state->pref_height_stack.auto_pop = 0;\ +state->flags_stack.top = &state->flags_nil_stack_top; state->flags_stack.bottom_val = 0; state->flags_stack.free = 0; state->flags_stack.auto_pop = 0;\ +state->focus_hot_stack.top = &state->focus_hot_nil_stack_top; state->focus_hot_stack.bottom_val = UI_FocusKind_Null; state->focus_hot_stack.free = 0; state->focus_hot_stack.auto_pop = 0;\ +state->focus_active_stack.top = &state->focus_active_nil_stack_top; state->focus_active_stack.bottom_val = UI_FocusKind_Null; state->focus_active_stack.free = 0; state->focus_active_stack.auto_pop = 0;\ +state->fastpath_codepoint_stack.top = &state->fastpath_codepoint_nil_stack_top; state->fastpath_codepoint_stack.bottom_val = 0; state->fastpath_codepoint_stack.free = 0; state->fastpath_codepoint_stack.auto_pop = 0;\ +state->background_color_stack.top = &state->background_color_nil_stack_top; state->background_color_stack.bottom_val = v4f32(1, 0, 1, 1); state->background_color_stack.free = 0; state->background_color_stack.auto_pop = 0;\ +state->text_color_stack.top = &state->text_color_nil_stack_top; state->text_color_stack.bottom_val = v4f32(1, 0, 1, 1); state->text_color_stack.free = 0; state->text_color_stack.auto_pop = 0;\ +state->border_color_stack.top = &state->border_color_nil_stack_top; state->border_color_stack.bottom_val = v4f32(1, 0, 1, 1); state->border_color_stack.free = 0; state->border_color_stack.auto_pop = 0;\ +state->overlay_color_stack.top = &state->overlay_color_nil_stack_top; state->overlay_color_stack.bottom_val = v4f32(1, 0, 1, 1); state->overlay_color_stack.free = 0; state->overlay_color_stack.auto_pop = 0;\ +state->text_select_color_stack.top = &state->text_select_color_nil_stack_top; state->text_select_color_stack.bottom_val = v4f32(1, 0, 1, 1); state->text_select_color_stack.free = 0; state->text_select_color_stack.auto_pop = 0;\ +state->text_cursor_color_stack.top = &state->text_cursor_color_nil_stack_top; state->text_cursor_color_stack.bottom_val = v4f32(1, 0, 1, 1); state->text_cursor_color_stack.free = 0; state->text_cursor_color_stack.auto_pop = 0;\ +state->hover_cursor_stack.top = &state->hover_cursor_nil_stack_top; state->hover_cursor_stack.bottom_val = OS_Cursor_Pointer; state->hover_cursor_stack.free = 0; state->hover_cursor_stack.auto_pop = 0;\ +state->font_stack.top = &state->font_nil_stack_top; state->font_stack.bottom_val = f_tag_zero(); state->font_stack.free = 0; state->font_stack.auto_pop = 0;\ +state->font_size_stack.top = &state->font_size_nil_stack_top; state->font_size_stack.bottom_val = 24.f; state->font_size_stack.free = 0; state->font_size_stack.auto_pop = 0;\ +state->corner_radius_00_stack.top = &state->corner_radius_00_nil_stack_top; state->corner_radius_00_stack.bottom_val = 0; state->corner_radius_00_stack.free = 0; state->corner_radius_00_stack.auto_pop = 0;\ +state->corner_radius_01_stack.top = &state->corner_radius_01_nil_stack_top; state->corner_radius_01_stack.bottom_val = 0; state->corner_radius_01_stack.free = 0; state->corner_radius_01_stack.auto_pop = 0;\ +state->corner_radius_10_stack.top = &state->corner_radius_10_nil_stack_top; state->corner_radius_10_stack.bottom_val = 0; state->corner_radius_10_stack.free = 0; state->corner_radius_10_stack.auto_pop = 0;\ +state->corner_radius_11_stack.top = &state->corner_radius_11_nil_stack_top; state->corner_radius_11_stack.bottom_val = 0; state->corner_radius_11_stack.free = 0; state->corner_radius_11_stack.auto_pop = 0;\ +state->blur_size_stack.top = &state->blur_size_nil_stack_top; state->blur_size_stack.bottom_val = 0; state->blur_size_stack.free = 0; state->blur_size_stack.auto_pop = 0;\ +state->text_padding_stack.top = &state->text_padding_nil_stack_top; state->text_padding_stack.bottom_val = 2; state->text_padding_stack.free = 0; state->text_padding_stack.auto_pop = 0;\ +state->text_alignment_stack.top = &state->text_alignment_nil_stack_top; state->text_alignment_stack.bottom_val = UI_TextAlign_Left; state->text_alignment_stack.free = 0; state->text_alignment_stack.auto_pop = 0;\ + +#define UI_AutoPopStacks(state) \ +if(state->parent_stack.auto_pop) { ui_pop_parent(); state->parent_stack.auto_pop = 0; }\ +if(state->child_layout_axis_stack.auto_pop) { ui_pop_child_layout_axis(); state->child_layout_axis_stack.auto_pop = 0; }\ +if(state->fixed_x_stack.auto_pop) { ui_pop_fixed_x(); state->fixed_x_stack.auto_pop = 0; }\ +if(state->fixed_y_stack.auto_pop) { ui_pop_fixed_y(); state->fixed_y_stack.auto_pop = 0; }\ +if(state->fixed_width_stack.auto_pop) { ui_pop_fixed_width(); state->fixed_width_stack.auto_pop = 0; }\ +if(state->fixed_height_stack.auto_pop) { ui_pop_fixed_height(); state->fixed_height_stack.auto_pop = 0; }\ +if(state->pref_width_stack.auto_pop) { ui_pop_pref_width(); state->pref_width_stack.auto_pop = 0; }\ +if(state->pref_height_stack.auto_pop) { ui_pop_pref_height(); state->pref_height_stack.auto_pop = 0; }\ +if(state->flags_stack.auto_pop) { ui_pop_flags(); state->flags_stack.auto_pop = 0; }\ +if(state->focus_hot_stack.auto_pop) { ui_pop_focus_hot(); state->focus_hot_stack.auto_pop = 0; }\ +if(state->focus_active_stack.auto_pop) { ui_pop_focus_active(); state->focus_active_stack.auto_pop = 0; }\ +if(state->fastpath_codepoint_stack.auto_pop) { ui_pop_fastpath_codepoint(); state->fastpath_codepoint_stack.auto_pop = 0; }\ +if(state->background_color_stack.auto_pop) { ui_pop_background_color(); state->background_color_stack.auto_pop = 0; }\ +if(state->text_color_stack.auto_pop) { ui_pop_text_color(); state->text_color_stack.auto_pop = 0; }\ +if(state->border_color_stack.auto_pop) { ui_pop_border_color(); state->border_color_stack.auto_pop = 0; }\ +if(state->overlay_color_stack.auto_pop) { ui_pop_overlay_color(); state->overlay_color_stack.auto_pop = 0; }\ +if(state->text_select_color_stack.auto_pop) { ui_pop_text_select_color(); state->text_select_color_stack.auto_pop = 0; }\ +if(state->text_cursor_color_stack.auto_pop) { ui_pop_text_cursor_color(); state->text_cursor_color_stack.auto_pop = 0; }\ +if(state->hover_cursor_stack.auto_pop) { ui_pop_hover_cursor(); state->hover_cursor_stack.auto_pop = 0; }\ +if(state->font_stack.auto_pop) { ui_pop_font(); state->font_stack.auto_pop = 0; }\ +if(state->font_size_stack.auto_pop) { ui_pop_font_size(); state->font_size_stack.auto_pop = 0; }\ +if(state->corner_radius_00_stack.auto_pop) { ui_pop_corner_radius_00(); state->corner_radius_00_stack.auto_pop = 0; }\ +if(state->corner_radius_01_stack.auto_pop) { ui_pop_corner_radius_01(); state->corner_radius_01_stack.auto_pop = 0; }\ +if(state->corner_radius_10_stack.auto_pop) { ui_pop_corner_radius_10(); state->corner_radius_10_stack.auto_pop = 0; }\ +if(state->corner_radius_11_stack.auto_pop) { ui_pop_corner_radius_11(); state->corner_radius_11_stack.auto_pop = 0; }\ +if(state->blur_size_stack.auto_pop) { ui_pop_blur_size(); state->blur_size_stack.auto_pop = 0; }\ +if(state->text_padding_stack.auto_pop) { ui_pop_text_padding(); state->text_padding_stack.auto_pop = 0; }\ +if(state->text_alignment_stack.auto_pop) { ui_pop_text_alignment(); state->text_alignment_stack.auto_pop = 0; }\ + internal UI_Box * ui_top_parent(void); internal Axis2 ui_top_child_layout_axis(void); internal F32 ui_top_fixed_x(void); @@ -151,6 +197,8 @@ internal F32 ui_top_fixed_height(void); internal UI_Size ui_top_pref_width(void); internal UI_Size ui_top_pref_height(void); internal UI_BoxFlags ui_top_flags(void); +internal UI_FocusKind ui_top_focus_hot(void); +internal UI_FocusKind ui_top_focus_active(void); internal U32 ui_top_fastpath_codepoint(void); internal Vec4F32 ui_top_background_color(void); internal Vec4F32 ui_top_text_color(void); @@ -177,6 +225,8 @@ internal F32 ui_bottom_fixed_height(void); internal UI_Size ui_bottom_pref_width(void); internal UI_Size ui_bottom_pref_height(void); internal UI_BoxFlags ui_bottom_flags(void); +internal UI_FocusKind ui_bottom_focus_hot(void); +internal UI_FocusKind ui_bottom_focus_active(void); internal U32 ui_bottom_fastpath_codepoint(void); internal Vec4F32 ui_bottom_background_color(void); internal Vec4F32 ui_bottom_text_color(void); @@ -194,6 +244,62 @@ internal F32 ui_bottom_corner_radius_11(void); internal F32 ui_bottom_blur_size(void); internal F32 ui_bottom_text_padding(void); internal UI_TextAlign ui_bottom_text_alignment(void); +internal UI_Box * ui_push_parent(UI_Box * v); +internal Axis2 ui_push_child_layout_axis(Axis2 v); +internal F32 ui_push_fixed_x(F32 v); +internal F32 ui_push_fixed_y(F32 v); +internal F32 ui_push_fixed_width(F32 v); +internal F32 ui_push_fixed_height(F32 v); +internal UI_Size ui_push_pref_width(UI_Size v); +internal UI_Size ui_push_pref_height(UI_Size v); +internal UI_BoxFlags ui_push_flags(UI_BoxFlags v); +internal UI_FocusKind ui_push_focus_hot(UI_FocusKind v); +internal UI_FocusKind ui_push_focus_active(UI_FocusKind v); +internal U32 ui_push_fastpath_codepoint(U32 v); +internal Vec4F32 ui_push_background_color(Vec4F32 v); +internal Vec4F32 ui_push_text_color(Vec4F32 v); +internal Vec4F32 ui_push_border_color(Vec4F32 v); +internal Vec4F32 ui_push_overlay_color(Vec4F32 v); +internal Vec4F32 ui_push_text_select_color(Vec4F32 v); +internal Vec4F32 ui_push_text_cursor_color(Vec4F32 v); +internal OS_Cursor ui_push_hover_cursor(OS_Cursor v); +internal F_Tag ui_push_font(F_Tag v); +internal F32 ui_push_font_size(F32 v); +internal F32 ui_push_corner_radius_00(F32 v); +internal F32 ui_push_corner_radius_01(F32 v); +internal F32 ui_push_corner_radius_10(F32 v); +internal F32 ui_push_corner_radius_11(F32 v); +internal F32 ui_push_blur_size(F32 v); +internal F32 ui_push_text_padding(F32 v); +internal UI_TextAlign ui_push_text_alignment(UI_TextAlign v); +internal UI_Box * ui_pop_parent(void); +internal Axis2 ui_pop_child_layout_axis(void); +internal F32 ui_pop_fixed_x(void); +internal F32 ui_pop_fixed_y(void); +internal F32 ui_pop_fixed_width(void); +internal F32 ui_pop_fixed_height(void); +internal UI_Size ui_pop_pref_width(void); +internal UI_Size ui_pop_pref_height(void); +internal UI_BoxFlags ui_pop_flags(void); +internal UI_FocusKind ui_pop_focus_hot(void); +internal UI_FocusKind ui_pop_focus_active(void); +internal U32 ui_pop_fastpath_codepoint(void); +internal Vec4F32 ui_pop_background_color(void); +internal Vec4F32 ui_pop_text_color(void); +internal Vec4F32 ui_pop_border_color(void); +internal Vec4F32 ui_pop_overlay_color(void); +internal Vec4F32 ui_pop_text_select_color(void); +internal Vec4F32 ui_pop_text_cursor_color(void); +internal OS_Cursor ui_pop_hover_cursor(void); +internal F_Tag ui_pop_font(void); +internal F32 ui_pop_font_size(void); +internal F32 ui_pop_corner_radius_00(void); +internal F32 ui_pop_corner_radius_01(void); +internal F32 ui_pop_corner_radius_10(void); +internal F32 ui_pop_corner_radius_11(void); +internal F32 ui_pop_blur_size(void); +internal F32 ui_pop_text_padding(void); +internal UI_TextAlign ui_pop_text_alignment(void); internal UI_Box * ui_set_next_parent(UI_Box * v); internal Axis2 ui_set_next_child_layout_axis(Axis2 v); internal F32 ui_set_next_fixed_x(F32 v); @@ -203,6 +309,8 @@ internal F32 ui_set_next_fixed_height(F32 v); internal UI_Size ui_set_next_pref_width(UI_Size v); internal UI_Size ui_set_next_pref_height(UI_Size v); internal UI_BoxFlags ui_set_next_flags(UI_BoxFlags v); +internal UI_FocusKind ui_set_next_focus_hot(UI_FocusKind v); +internal UI_FocusKind ui_set_next_focus_active(UI_FocusKind v); internal U32 ui_set_next_fastpath_codepoint(U32 v); internal Vec4F32 ui_set_next_background_color(Vec4F32 v); internal Vec4F32 ui_set_next_text_color(Vec4F32 v); @@ -220,33 +328,5 @@ internal F32 ui_set_next_corner_radius_11(F32 v); internal F32 ui_set_next_blur_size(F32 v); internal F32 ui_set_next_text_padding(F32 v); internal UI_TextAlign ui_set_next_text_alignment(UI_TextAlign v); -#if 0 -#define UI_Parent(v) DeferLoop(ui_push_parent(v), ui_pop_parent()) -#define UI_ChildLayoutAxis(v) DeferLoop(ui_push_child_layout_axis(v), ui_pop_child_layout_axis()) -#define UI_FixedX(v) DeferLoop(ui_push_fixed_x(v), ui_pop_fixed_x()) -#define UI_FixedY(v) DeferLoop(ui_push_fixed_y(v), ui_pop_fixed_y()) -#define UI_FixedWidth(v) DeferLoop(ui_push_fixed_width(v), ui_pop_fixed_width()) -#define UI_FixedHeight(v) DeferLoop(ui_push_fixed_height(v), ui_pop_fixed_height()) -#define UI_PrefWidth(v) DeferLoop(ui_push_pref_width(v), ui_pop_pref_width()) -#define UI_PrefHeight(v) DeferLoop(ui_push_pref_height(v), ui_pop_pref_height()) -#define UI_Flags(v) DeferLoop(ui_push_flags(v), ui_pop_flags()) -#define UI_FastpathCodepoint(v) DeferLoop(ui_push_fastpath_codepoint(v), ui_pop_fastpath_codepoint()) -#define UI_BackgroundColor(v) DeferLoop(ui_push_background_color(v), ui_pop_background_color()) -#define UI_TextColor(v) DeferLoop(ui_push_text_color(v), ui_pop_text_color()) -#define UI_BorderColor(v) DeferLoop(ui_push_border_color(v), ui_pop_border_color()) -#define UI_OverlayColor(v) DeferLoop(ui_push_overlay_color(v), ui_pop_overlay_color()) -#define UI_TextSelectColor(v) DeferLoop(ui_push_text_select_color(v), ui_pop_text_select_color()) -#define UI_TextCursorColor(v) DeferLoop(ui_push_text_cursor_color(v), ui_pop_text_cursor_color()) -#define UI_HoverCursor(v) DeferLoop(ui_push_hover_cursor(v), ui_pop_hover_cursor()) -#define UI_Font(v) DeferLoop(ui_push_font(v), ui_pop_font()) -#define UI_FontSize(v) DeferLoop(ui_push_font_size(v), ui_pop_font_size()) -#define UI_CornerRadius00(v) DeferLoop(ui_push_corner_radius_00(v), ui_pop_corner_radius_00()) -#define UI_CornerRadius01(v) DeferLoop(ui_push_corner_radius_01(v), ui_pop_corner_radius_01()) -#define UI_CornerRadius10(v) DeferLoop(ui_push_corner_radius_10(v), ui_pop_corner_radius_10()) -#define UI_CornerRadius11(v) DeferLoop(ui_push_corner_radius_11(v), ui_pop_corner_radius_11()) -#define UI_BlurSize(v) DeferLoop(ui_push_blur_size(v), ui_pop_blur_size()) -#define UI_TextPadding(v) DeferLoop(ui_push_text_padding(v), ui_pop_text_padding()) -#define UI_TextAlignment(v) DeferLoop(ui_push_text_alignment(v), ui_pop_text_alignment()) -#endif #endif // UI_META_H diff --git a/src/ui/ui.mdesk b/src/ui/ui.mdesk index bfc946b4..7cc9b156 100644 --- a/src/ui/ui.mdesk +++ b/src/ui/ui.mdesk @@ -1,114 +1,157 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -@table(name, name_lower, type) +//- rjf: stack table + +@table(name, name_lower, type, default) UI_StackTable: { //- rjf: parents - { Parent parent `UI_Box *` } + { Parent parent `UI_Box *` `&ui_g_nil_box` } //- rjf: layout params - { ChildLayoutAxis child_layout_axis Axis2 } + { ChildLayoutAxis child_layout_axis Axis2 `Axis2_X` } //- rjf: size/position - { FixedX fixed_x F32 } - { FixedY fixed_y F32 } - { FixedWidth fixed_width F32 } - { FixedHeight fixed_height F32 } - { PrefWidth pref_width UI_Size } - { PrefHeight pref_height UI_Size } + { FixedX fixed_x F32 0 } + { FixedY fixed_y F32 0 } + { FixedWidth fixed_width F32 0 } + { FixedHeight fixed_height F32 0 } + { PrefWidth pref_width UI_Size `ui_px(250.f, 1.f)`} + { PrefHeight pref_height UI_Size `ui_px(30.f, 1.f)` } //- rjf: flags - { Flags flags UI_BoxFlags } + { Flags flags UI_BoxFlags 0 } //- rjf: interaction - { FastpathCodepoint fastpath_codepoint U32 } + { FocusHot focus_hot UI_FocusKind UI_FocusKind_Null } + { FocusActive focus_active UI_FocusKind UI_FocusKind_Null } + { FastpathCodepoint fastpath_codepoint U32 0 } //- rjf: colors - { BackgroundColor background_color Vec4F32 } - { TextColor text_color Vec4F32 } - { BorderColor border_color Vec4F32 } - { OverlayColor overlay_color Vec4F32 } - { TextSelectColor text_select_color Vec4F32 } - { TextCursorColor text_cursor_color Vec4F32 } + { BackgroundColor background_color Vec4F32 `v4f32(1, 0, 1, 1)`} + { TextColor text_color Vec4F32 `v4f32(1, 0, 1, 1)`} + { BorderColor border_color Vec4F32 `v4f32(1, 0, 1, 1)`} + { OverlayColor overlay_color Vec4F32 `v4f32(1, 0, 1, 1)`} + { TextSelectColor text_select_color Vec4F32 `v4f32(1, 0, 1, 1)`} + { TextCursorColor text_cursor_color Vec4F32 `v4f32(1, 0, 1, 1)`} //- rjf: hover cursor - { HoverCursor hover_cursor OS_Cursor } + { HoverCursor hover_cursor OS_Cursor OS_Cursor_Pointer } //- rjf: font - { Font font F_Tag } - { FontSize font_size F32 } + { Font font F_Tag `f_tag_zero()` } + { FontSize font_size F32 24.f } //- rjf: corner radii - { CornerRadius00 corner_radius_00 F32 } - { CornerRadius01 corner_radius_01 F32 } - { CornerRadius10 corner_radius_10 F32 } - { CornerRadius11 corner_radius_11 F32 } + { CornerRadius00 corner_radius_00 F32 0 } + { CornerRadius01 corner_radius_01 F32 0 } + { CornerRadius10 corner_radius_10 F32 0 } + { CornerRadius11 corner_radius_11 F32 0 } //- rjf: blur size - { BlurSize blur_size F32 } + { BlurSize blur_size F32 0 } //- rjf: text parameters - { TextPadding text_padding F32 } - { TextAlignment text_alignment UI_TextAlign } + { TextPadding text_padding F32 2 } + { TextAlignment text_alignment UI_TextAlign UI_TextAlign_Left } } +//- rjf: declaring stack node types + @table_gen { - `#define UI_StackDecls struct{\\`; - @expand(UI_StackTable a) - `struct { $(a.type) active; $(a.type) v[64]; U64 count; B32 auto_pop; } $(a.name_lower);\\`; - `}`; + @expand(UI_StackTable a) `typedef struct UI_$(a.name)Node UI_$(a.name)Node; struct UI_$(a.name)Node{UI_$(a.name)Node *next; $(a.type) v;};` } +//- rjf: declaring all default stack tops + @table_gen { - `#define UI_ZeroAllStacks(ui_state) do{\\`; - @expand(UI_StackTable a) - `MemoryZeroStruct(&ui_state->$(a.name_lower));\\`; - `} while(0)`; + `#define UI_DeclStackNils \\`; + `struct\\`; + `{\\`; + @expand(UI_StackTable a) `UI_$(a.name)Node $(a.name_lower)_nil_stack_top;\\`; + `}`; } +//- rjf: initializing all default stack tops + @table_gen { - `#define UI_AutoPopAllStacks(ui_state) do{\\`; - @expand(UI_StackTable a) - `if(ui_state->$(a.name_lower).auto_pop) {ui_state->$(a.name_lower).auto_pop = 0; ui_pop_$(a.name_lower)();}\\`; - `} while(0)`; + `#define UI_InitStackNils(state) \\`; + @expand(UI_StackTable a) `state->$(a.name_lower)_nil_stack_top.v = $(a.default);\\`; + ``; } +//- rjf: declaring all stack nodes & free lists + +@table_gen +{ + `#define UI_DeclStacks \\`; + `struct\\`; + `{\\`; + @expand(UI_StackTable a) `struct { UI_$(a.name)Node *top; $(a.type) bottom_val; UI_$(a.name)Node *free; B32 auto_pop; } $(a.name_lower)_stack;\\`; + `}`; +} + +//- rjf: initing all stack nodes + +@table_gen +{ + `#define UI_InitStacks(state) \\`; + @expand(UI_StackTable a) `state->$(a.name_lower)_stack.top = &state->$(a.name_lower)_nil_stack_top; state->$(a.name_lower)_stack.bottom_val = $(a.default); state->$(a.name_lower)_stack.free = 0; state->$(a.name_lower)_stack.auto_pop = 0;\\`; + ``; +} + +//- rjf: auto-popping all stacks + +@table_gen +{ + `#define UI_AutoPopStacks(state) \\` + @expand(UI_StackTable a) + `if(state->$(a.name_lower)_stack.auto_pop) { ui_pop_$(a.name_lower)(); state->$(a.name_lower)_stack.auto_pop = 0; }\\`; + ``; +} + +//- rjf: decls for the stack function operation headers + @table_gen { @expand(UI_StackTable a) - `internal $(a.type) $(=>35) ui_push_$(a.name_lower)($(a.type) v);`; - @expand(UI_StackTable a) - `internal $(a.type) $(=>35) ui_pop_$(a.name_lower)(void);`; - @expand(UI_StackTable a) - `internal $(a.type) $(=>35) ui_top_$(a.name_lower)(void);`; - @expand(UI_StackTable a) - `internal $(a.type) $(=>35) ui_bottom_$(a.name_lower)(void);`; - @expand(UI_StackTable a) - `internal $(a.type) $(=>35) ui_set_next_$(a.name_lower)($(a.type) v);`; + `internal $(a.type) $(=>35) ui_top_$(a.name_lower)(void);` + @expand(UI_StackTable a) + `internal $(a.type) $(=>35) ui_bottom_$(a.name_lower)(void);` + @expand(UI_StackTable a) + `internal $(a.type) $(=>35) ui_push_$(a.name_lower)($(a.type) v);` + @expand(UI_StackTable a) + `internal $(a.type) $(=>35) ui_pop_$(a.name_lower)(void);` + @expand(UI_StackTable a) + `internal $(a.type) $(=>35) ui_set_next_$(a.name_lower)($(a.type) v);` } -@table_gen +//- rjf: defer-loop helpers + +@table_gen @c_file { `#if 0`; @expand(UI_StackTable a) - `#define UI_$(a.name)(v) $(=>35) DeferLoop(ui_push_$(a.name_lower)(v), ui_pop_$(a.name_lower)())`; + `#define UI_$(a.name)(v) DeferLoop(ui_push_$(a.name_lower)(v), ui_pop_$(a.name_lower)())` `#endif`; } +//- rjf: decls for the stack operation implementations + @table_gen @c_file { @expand(UI_StackTable a) - `internal $(a.type) ui_push_$(a.name_lower)($(a.type) v) {return UI_StackPush($(a.name_lower), v);}`; + `internal $(a.type) ui_top_$(a.name_lower)(void) { UI_StackTopImpl(ui_state, $(a.name), $(a.name_lower)) }`; @expand(UI_StackTable a) - `internal $(a.type) ui_pop_$(a.name_lower)(void) {$(a.type) popped; return UI_StackPop($(a.name_lower), popped);}`; + `internal $(a.type) ui_bottom_$(a.name_lower)(void) { UI_StackBottomImpl(ui_state, $(a.name), $(a.name_lower)) }`; @expand(UI_StackTable a) - `internal $(a.type) ui_top_$(a.name_lower)(void) {return UI_StackTop($(a.name_lower));}`; + `internal $(a.type) ui_push_$(a.name_lower)($(a.type) v) { UI_StackPushImpl(ui_state, $(a.name), $(a.name_lower), $(a.type), v) }`; @expand(UI_StackTable a) - `internal $(a.type) ui_bottom_$(a.name_lower)(void) {return UI_StackBottom($(a.name_lower));}`; + `internal $(a.type) ui_pop_$(a.name_lower)(void) { UI_StackPopImpl(ui_state, $(a.name), $(a.name_lower)) }`; @expand(UI_StackTable a) - `internal $(a.type) ui_set_next_$(a.name_lower)($(a.type) v) {return UI_StackSetNext($(a.name_lower), v);}`; + `internal $(a.type) ui_set_next_$(a.name_lower)($(a.type) v) { UI_StackSetNextImpl(ui_state, $(a.name), $(a.name_lower), $(a.type), v) }`; } diff --git a/src/ui/ui_basic_widgets.c b/src/ui/ui_basic_widgets.c index b19fa333..266b817b 100644 --- a/src/ui/ui_basic_widgets.c +++ b/src/ui/ui_basic_widgets.c @@ -163,14 +163,18 @@ internal UI_BOX_CUSTOM_DRAW(ui_line_edit_draw) internal UI_Signal ui_line_edit(TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size, U64 *edit_string_size_out, String8 pre_edit_value, String8 string) { - //- rjf: build top-level box + //- rjf: make key UI_Key key = ui_key_from_string(ui_active_seed_key(), string); + + //- rjf: calculate focus B32 is_auto_focus_hot = ui_is_key_auto_focus_hot(key); B32 is_auto_focus_active = ui_is_key_auto_focus_active(key); - if(is_auto_focus_hot) { ui_set_focus_hot(1); } - if(is_auto_focus_active) { ui_set_focus_active(1); } + ui_push_focus_hot(is_auto_focus_hot ? UI_FocusKind_On : UI_FocusKind_Null); + ui_push_focus_active(is_auto_focus_active ? UI_FocusKind_On : UI_FocusKind_Null); B32 is_focus_hot = ui_is_focus_hot(); B32 is_focus_active = ui_is_focus_active(); + + //- rjf: build top-level box ui_set_next_hover_cursor(is_focus_active ? OS_Cursor_IBar : OS_Cursor_HandPoint); UI_Box *box = ui_build_box_from_key(UI_BoxFlag_DrawBackground| UI_BoxFlag_DrawBorder| @@ -303,6 +307,10 @@ ui_line_edit(TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size, box->view_off_target.x += max_delta; } + //- rjf: pop focus + ui_pop_focus_hot(); + ui_pop_focus_active(); + return sig; } @@ -1380,7 +1388,7 @@ ui_scroll_list_begin(UI_ScrollListParams *params, UI_ScrollPt *scroll_pt, Vec2S6 } //- rjf: build vertical scroll bar - UI_Parent(container_box) + UI_Parent(container_box) UI_Focus(UI_FocusKind_Null) { ui_set_next_fixed_width(ui_scroll_list_scroll_bar_dim_px); ui_set_next_fixed_height(ui_scroll_list_dim_px.y); diff --git a/src/ui/ui_core.c b/src/ui/ui_core.c index 7e9760de..12d96464 100644 --- a/src/ui/ui_core.c +++ b/src/ui/ui_core.c @@ -430,6 +430,7 @@ ui_state_alloc(void) ui->drag_state_arena = arena_alloc(); ui->box_table_size = 4096; ui->box_table = push_array(arena, UI_BoxHashSlot, ui->box_table_size); + UI_InitStackNils(ui); return ui; } @@ -603,7 +604,7 @@ ui_begin_build(OS_EventList *events, OS_Handle window, UI_NavActionList *nav_act { //- rjf: reset per-build ui state { - UI_ZeroAllStacks(ui_state); + UI_InitStacks(ui_state); ui_state->root = &ui_g_nil_box; ui_state->ctx_menu_touched_this_frame = 0; ui_state->is_animating = 0; @@ -905,7 +906,8 @@ ui_begin_build(OS_EventList *events, OS_Handle window, UI_NavActionList *nav_act ui_state->ctx_menu_anchor_box_last_pos = anchor_box->rect.p0; } Vec2F32 anchor = add_2f32(ui_state->ctx_menu_anchor_box_last_pos, ui_state->ctx_menu_anchor_off); - UI_FixedX(anchor.x) UI_FixedY(anchor.y) UI_PrefWidth(ui_children_sum(1.f)) UI_PrefHeight(ui_children_sum(1.f)) UI_Focus(ui_state->ctx_menu_open) + UI_FixedX(anchor.x) UI_FixedY(anchor.y) UI_PrefWidth(ui_children_sum(1.f)) UI_PrefHeight(ui_children_sum(1.f)) + UI_Focus(UI_FocusKind_On) { ui_set_next_child_layout_axis(Axis2_Y); ui_state->ctx_menu_root = ui_build_box_from_stringf(UI_BoxFlag_Clickable|UI_BoxFlag_DrawDropShadow|(ui_state->ctx_menu_open*UI_BoxFlag_DefaultFocusNavY), "###ctx_menu_%I64x", window.u64[0]); @@ -1692,49 +1694,18 @@ ui_any_ctx_menu_is_open(void) //- rjf: focus tree coloring -internal void -ui_set_focus_active(B32 check) -{ - ui_state->focus_active_is_set = check; - ui_state->focus_active_is_possible = 1; -} - -internal void -ui_unset_focus_active(void) -{ - ui_state->focus_active_is_set = 0; - ui_state->focus_active_is_possible = 0; -} - -internal void -ui_set_focus_hot(B32 check) -{ - ui_state->focus_hot_is_set = check; - ui_state->focus_hot_is_possible = 1; -} - -internal void -ui_unset_focus_hot(void) -{ - ui_state->focus_hot_is_set = 0; - ui_state->focus_hot_is_possible = 0; -} - internal B32 -ui_is_focus_active(void) +ui_is_focus_hot(void) { - B32 result = ui_state->focus_active_is_set; + B32 result = (ui_state->focus_hot_stack.top->v == UI_FocusKind_On); if(result) { - for(UI_Box *box = ui_top_parent(); !ui_box_is_nil(box); box = box->parent) + for(UI_FocusHotNode *n = ui_state->focus_hot_stack.top; n != 0; n = n->next) { - if(box->flags & UI_BoxFlag_FocusActive) + if(n->v == UI_FocusKind_Off) { - result = !(box->flags & UI_BoxFlag_FocusActiveDisabled); - if(result == 0) - { - break; - } + result = 0; + break; } } } @@ -1742,20 +1713,17 @@ ui_is_focus_active(void) } internal B32 -ui_is_focus_hot(void) +ui_is_focus_active(void) { - B32 result = ui_state->focus_hot_is_set; + B32 result = (ui_state->focus_active_stack.top->v == UI_FocusKind_On); if(result) { - for(UI_Box *box = ui_top_parent(); !ui_box_is_nil(box); box = box->parent) + for(UI_FocusActiveNode *n = ui_state->focus_active_stack.top; n != 0; n = n->next) { - if(box->flags & UI_BoxFlag_FocusHot) + if(n->v == UI_FocusKind_Off) { - result = !(box->flags & UI_BoxFlag_FocusHotDisabled); - if(result == 0) - { - break; - } + result = 0; + break; } } } @@ -1901,8 +1869,8 @@ ui_build_box_from_key(UI_BoxFlags flags, UI_Key key) //- rjf: fill box { box->key = key; - box->flags = flags|ui_state->flags.active; - box->fastpath_codepoint = ui_state->fastpath_codepoint.active; + box->flags = flags|ui_state->flags_stack.top->v; + box->fastpath_codepoint = ui_state->fastpath_codepoint_stack.top->v; if(ui_is_focus_active() && (box->flags & UI_BoxFlag_DefaultFocusNav) && ui_key_match(ui_state->default_nav_root_key, ui_key_zero())) { @@ -1921,87 +1889,77 @@ ui_build_box_from_key(UI_BoxFlags flags, UI_Key key) box->first_disabled_build_index = ui_state->build_index; } - if(ui_state->fixed_x.count != 0) + if(ui_state->fixed_x_stack.top != &ui_state->fixed_x_nil_stack_top) { box->flags |= UI_BoxFlag_FloatingX; - box->fixed_position.x = ui_state->fixed_x.active; + box->fixed_position.x = ui_state->fixed_x_stack.top->v; } - if(ui_state->fixed_y.count != 0) + if(ui_state->fixed_y_stack.top != &ui_state->fixed_y_nil_stack_top) { box->flags |= UI_BoxFlag_FloatingY; - box->fixed_position.y = ui_state->fixed_y.active; + box->fixed_position.y = ui_state->fixed_y_stack.top->v; } - if(ui_state->fixed_width.count != 0) + if(ui_state->fixed_width_stack.top != &ui_state->fixed_width_nil_stack_top) { box->flags |= UI_BoxFlag_FixedWidth; - box->fixed_size.x = ui_state->fixed_width.active; + box->fixed_size.x = ui_state->fixed_width_stack.top->v; } else { - box->pref_size[Axis2_X] = ui_state->pref_width.active; + box->pref_size[Axis2_X] = ui_state->pref_width_stack.top->v; } - if(ui_state->fixed_height.count != 0) + if(ui_state->fixed_height_stack.top != &ui_state->fixed_height_nil_stack_top) { box->flags |= UI_BoxFlag_FixedHeight; - box->fixed_size.y = ui_state->fixed_height.active; + box->fixed_size.y = ui_state->fixed_height_stack.top->v; } else { - box->pref_size[Axis2_Y] = ui_state->pref_height.active; + box->pref_size[Axis2_Y] = ui_state->pref_height_stack.top->v; } B32 is_auto_focus_active = ui_is_key_auto_focus_active(key); B32 is_auto_focus_hot = ui_is_key_auto_focus_hot(key); if(is_auto_focus_active) { - ui_state->focus_active_is_possible = ui_state->focus_active_is_set = 1; + ui_set_next_focus_active(UI_FocusKind_On); } if(is_auto_focus_hot) { - ui_state->focus_hot_is_possible = ui_state->focus_hot_is_set = 1; + ui_set_next_focus_hot(UI_FocusKind_On); } - box->flags |= UI_BoxFlag_FocusHot*!!(ui_state->focus_hot_is_possible); - box->flags |= UI_BoxFlag_FocusActive*!!(ui_state->focus_active_is_possible); - box->flags |= UI_BoxFlag_FocusHotDisabled*(!(ui_state->focus_hot_is_set) && ui_state->focus_hot_is_possible); - box->flags |= UI_BoxFlag_FocusActiveDisabled*(!(ui_state->focus_active_is_set) && ui_state->focus_active_is_possible); - if((box->flags & UI_BoxFlag_FocusHot && ~box->flags & UI_BoxFlag_FocusHotDisabled) || - (box->flags & UI_BoxFlag_FocusActive && ~box->flags & UI_BoxFlag_FocusActiveDisabled)) + box->flags |= UI_BoxFlag_FocusHot * (ui_state->focus_hot_stack.top->v == UI_FocusKind_On); + box->flags |= UI_BoxFlag_FocusActive * (ui_state->focus_active_stack.top->v == UI_FocusKind_On); + if(box->flags & UI_BoxFlag_FocusHot && !ui_is_focus_hot()) { - for(UI_Box *p = box->parent; !ui_box_is_nil(p); p = p->parent) - { - if(p->flags & (UI_BoxFlag_FocusHotDisabled|UI_BoxFlag_FocusActiveDisabled)) - { - box->flags |= (UI_BoxFlag_FocusHotDisabled|UI_BoxFlag_FocusActiveDisabled); - break; - } - } + box->flags |= UI_BoxFlag_FocusHotDisabled; + } + if(box->flags & UI_BoxFlag_FocusActive && !ui_is_focus_active()) + { + box->flags |= UI_BoxFlag_FocusActiveDisabled; } - ui_state->focus_hot_is_set = 0; - ui_state->focus_hot_is_possible = 0; - ui_state->focus_active_is_set = 0; - ui_state->focus_active_is_possible = 0; - box->text_align = ui_state->text_alignment.active; - box->child_layout_axis = ui_state->child_layout_axis.active; - box->background_color = ui_state->background_color.active; - box->text_color = ui_state->text_color.active; - box->border_color = ui_state->border_color.active; - box->overlay_color = ui_state->overlay_color.active; - box->font = ui_state->font.active; - box->font_size = ui_state->font_size.active; - box->corner_radii[Corner_00] = ui_state->corner_radius_00.active; - box->corner_radii[Corner_01] = ui_state->corner_radius_01.active; - box->corner_radii[Corner_10] = ui_state->corner_radius_10.active; - box->corner_radii[Corner_11] = ui_state->corner_radius_11.active; - box->blur_size = ui_state->blur_size.active; - box->text_padding = ui_state->text_padding.active; - box->hover_cursor = ui_state->hover_cursor.active; + box->text_align = ui_state->text_alignment_stack.top->v; + box->child_layout_axis = ui_state->child_layout_axis_stack.top->v; + box->background_color = ui_state->background_color_stack.top->v; + box->text_color = ui_state->text_color_stack.top->v; + box->border_color = ui_state->border_color_stack.top->v; + box->overlay_color = ui_state->overlay_color_stack.top->v; + box->font = ui_state->font_stack.top->v; + box->font_size = ui_state->font_size_stack.top->v; + box->corner_radii[Corner_00] = ui_state->corner_radius_00_stack.top->v; + box->corner_radii[Corner_01] = ui_state->corner_radius_01_stack.top->v; + box->corner_radii[Corner_10] = ui_state->corner_radius_10_stack.top->v; + box->corner_radii[Corner_11] = ui_state->corner_radius_11_stack.top->v; + box->blur_size = ui_state->blur_size_stack.top->v; + box->text_padding = ui_state->text_padding_stack.top->v; + box->hover_cursor = ui_state->hover_cursor_stack.top->v; box->custom_draw = 0; } //- rjf: auto-pop all stacks { - UI_AutoPopAllStacks(ui_state); + UI_AutoPopStacks(ui_state); } //- rjf: return @@ -2603,35 +2561,6 @@ ui_signal_from_box(UI_Box *box) //////////////////////////////// //~ rjf: Stacks -#define UI_StackPush(name, new_top)\ -(\ -(ui_state->name.v[ui_state->name.count] = ui_state->name.active),\ -(ui_state->name.active = new_top),\ -(ui_state->name.count += 1),\ -(ui_state->name.v[ui_state->name.count-1])\ -) -#define UI_StackPop(name, popped)\ -(\ -(ui_state->name.count -= 1),\ -(popped = ui_state->name.active),\ -(ui_state->name.active = ui_state->name.v[ui_state->name.count]),\ -(popped)\ -) -#define UI_StackSetNext(name, new_top)\ -(\ -(ui_state->name.auto_pop) ?\ -(ui_state->name.active = new_top) :\ -(\ -(ui_state->name.v[ui_state->name.count] = ui_state->name.active),\ -(ui_state->name.active = new_top),\ -(ui_state->name.count += 1),\ -(ui_state->name.auto_pop = 1),\ -(ui_state->name.v[ui_state->name.count-1])\ -)\ -) -#define UI_StackTop(name) (ui_state->name.active) -#define UI_StackBottom(name) (ui_state->name.count > 1 ? ui_state->name.v[1] : ui_state->name.active) - //- rjf: helpers internal Rng2F32 @@ -2710,4 +2639,44 @@ ui_pop_corner_radius(void) //////////////////////////////// //~ rjf: Generated Code +#define UI_StackTopImpl(state, name_upper, name_lower) \ +return state->name_lower##_stack.top->v; + +#define UI_StackBottomImpl(state, name_upper, name_lower) \ +return state->name_lower##_stack.bottom_val; + +#define UI_StackPushImpl(state, name_upper, name_lower, type, new_value) \ +UI_##name_upper##Node *node = state->name_lower##_stack.free;\ +if(node != 0) {SLLStackPop(state->name_lower##_stack.free);}\ +else {node = push_array(ui_build_arena(), UI_##name_upper##Node, 1);}\ +type old_value = state->name_lower##_stack.top->v;\ +node->v = new_value;\ +SLLStackPush(state->name_lower##_stack.top, node);\ +if(node->next == &state->name_lower##_nil_stack_top)\ +{\ +state->name_lower##_stack.bottom_val = (new_value);\ +}\ +state->name_lower##_stack.auto_pop = 0;\ +return old_value; + +#define UI_StackPopImpl(state, name_upper, name_lower) \ +UI_##name_upper##Node *popped = state->name_lower##_stack.top;\ +if(popped != &state->name_lower##_nil_stack_top)\ +{\ +SLLStackPop(state->name_lower##_stack.top);\ +SLLStackPush(state->name_lower##_stack.free, popped);\ +state->name_lower##_stack.auto_pop = 0;\ +}\ +return popped->v;\ + +#define UI_StackSetNextImpl(state, name_upper, name_lower, type, new_value) \ +UI_##name_upper##Node *node = state->name_lower##_stack.free;\ +if(node != 0) {SLLStackPop(state->name_lower##_stack.free);}\ +else {node = push_array(ui_build_arena(), UI_##name_upper##Node, 1);}\ +type old_value = state->name_lower##_stack.top->v;\ +node->v = new_value;\ +SLLStackPush(state->name_lower##_stack.top, node);\ +state->name_lower##_stack.auto_pop = 1;\ +return old_value; + #include "generated/ui.meta.c" diff --git a/src/ui/ui_core.h b/src/ui/ui_core.h index 4e642629..f1f72624 100644 --- a/src/ui/ui_core.h +++ b/src/ui/ui_core.h @@ -31,6 +31,18 @@ struct UI_IconInfo String8 icon_kind_text_map[UI_IconKind_COUNT]; }; +//////////////////////////////// +//~ rjf: Focus Types + +typedef enum UI_FocusKind +{ + UI_FocusKind_Null, + UI_FocusKind_Off, + UI_FocusKind_On, + UI_FocusKind_COUNT +} +UI_FocusKind; + //////////////////////////////// //~ rjf: Navigation Types @@ -412,14 +424,9 @@ struct UI_State F32 ctx_menu_open_t; UI_Key ctx_menu_key; - //- rjf: build phase focus masks - B32 focus_hot_is_set; - B32 focus_hot_is_possible; - B32 focus_active_is_set; - B32 focus_active_is_possible; - //- rjf: build phase stacks - UI_StackDecls; + UI_DeclStackNils; + UI_DeclStacks; }; //////////////////////////////// @@ -558,12 +565,8 @@ internal B32 ui_ctx_menu_is_open(UI_Key key); internal B32 ui_any_ctx_menu_is_open(void); //- rjf: focus tree coloring -internal void ui_set_focus_active(B32 check); -internal void ui_unset_focus_active(void); -internal void ui_set_focus_hot(B32 check); -internal void ui_unset_focus_hot(void); -internal B32 ui_is_focus_active(void); internal B32 ui_is_focus_hot(void); +internal B32 ui_is_focus_active(void); //- rjf: implicit auto-managed tree-based focus state internal B32 ui_is_key_auto_focus_active(UI_Key key); @@ -601,58 +604,6 @@ internal UI_Signal ui_signal_from_box(UI_Box *box); //~ rjf: Stacks //- rjf: base -internal UI_Box * ui_push_parent(UI_Box * v); -internal Axis2 ui_push_child_layout_axis(Axis2 v); -internal F32 ui_push_fixed_x(F32 v); -internal F32 ui_push_fixed_y(F32 v); -internal F32 ui_push_fixed_width(F32 v); -internal F32 ui_push_fixed_height(F32 v); -internal UI_Size ui_push_pref_width(UI_Size v); -internal UI_Size ui_push_pref_height(UI_Size v); -internal UI_BoxFlags ui_push_flags(UI_BoxFlags v); -internal U32 ui_push_fastpath_codepoint(U32 v); -internal Vec4F32 ui_push_background_color(Vec4F32 v); -internal Vec4F32 ui_push_text_color(Vec4F32 v); -internal Vec4F32 ui_push_border_color(Vec4F32 v); -internal Vec4F32 ui_push_overlay_color(Vec4F32 v); -internal Vec4F32 ui_push_text_select_color(Vec4F32 v); -internal Vec4F32 ui_push_text_cursor_color(Vec4F32 v); -internal OS_Cursor ui_push_hover_cursor(OS_Cursor v); -internal F_Tag ui_push_font(F_Tag v); -internal F32 ui_push_font_size(F32 v); -internal F32 ui_push_corner_radius_00(F32 v); -internal F32 ui_push_corner_radius_01(F32 v); -internal F32 ui_push_corner_radius_10(F32 v); -internal F32 ui_push_corner_radius_11(F32 v); -internal F32 ui_push_blur_size(F32 v); -internal F32 ui_push_text_padding(F32 v); -internal UI_TextAlign ui_push_text_alignment(UI_TextAlign v); -internal UI_Box * ui_pop_parent(void); -internal Axis2 ui_pop_child_layout_axis(void); -internal F32 ui_pop_fixed_x(void); -internal F32 ui_pop_fixed_y(void); -internal F32 ui_pop_fixed_width(void); -internal F32 ui_pop_fixed_height(void); -internal UI_Size ui_pop_pref_width(void); -internal UI_Size ui_pop_pref_height(void); -internal UI_BoxFlags ui_pop_flags(void); -internal U32 ui_pop_fastpath_codepoint(void); -internal Vec4F32 ui_pop_background_color(void); -internal Vec4F32 ui_pop_text_color(void); -internal Vec4F32 ui_pop_border_color(void); -internal Vec4F32 ui_pop_overlay_color(void); -internal Vec4F32 ui_pop_text_select_color(void); -internal Vec4F32 ui_pop_text_cursor_color(void); -internal OS_Cursor ui_pop_hover_cursor(void); -internal F_Tag ui_pop_font(void); -internal F32 ui_pop_font_size(void); -internal F32 ui_pop_corner_radius_00(void); -internal F32 ui_pop_corner_radius_01(void); -internal F32 ui_pop_corner_radius_10(void); -internal F32 ui_pop_corner_radius_11(void); -internal F32 ui_pop_blur_size(void); -internal F32 ui_pop_text_padding(void); -internal UI_TextAlign ui_pop_text_alignment(void); internal UI_Box * ui_top_parent(void); internal Axis2 ui_top_child_layout_axis(void); internal F32 ui_top_fixed_x(void); @@ -662,6 +613,8 @@ internal F32 ui_top_fixed_height(void); internal UI_Size ui_top_pref_width(void); internal UI_Size ui_top_pref_height(void); internal UI_BoxFlags ui_top_flags(void); +internal UI_FocusKind ui_top_focus_hot(void); +internal UI_FocusKind ui_top_focus_active(void); internal U32 ui_top_fastpath_codepoint(void); internal Vec4F32 ui_top_background_color(void); internal Vec4F32 ui_top_text_color(void); @@ -688,6 +641,8 @@ internal F32 ui_bottom_fixed_height(void); internal UI_Size ui_bottom_pref_width(void); internal UI_Size ui_bottom_pref_height(void); internal UI_BoxFlags ui_bottom_flags(void); +internal UI_FocusKind ui_bottom_focus_hot(void); +internal UI_FocusKind ui_bottom_focus_active(void); internal U32 ui_bottom_fastpath_codepoint(void); internal Vec4F32 ui_bottom_background_color(void); internal Vec4F32 ui_bottom_text_color(void); @@ -705,6 +660,62 @@ internal F32 ui_bottom_corner_radius_11(void); internal F32 ui_bottom_blur_size(void); internal F32 ui_bottom_text_padding(void); internal UI_TextAlign ui_bottom_text_alignment(void); +internal UI_Box * ui_push_parent(UI_Box * v); +internal Axis2 ui_push_child_layout_axis(Axis2 v); +internal F32 ui_push_fixed_x(F32 v); +internal F32 ui_push_fixed_y(F32 v); +internal F32 ui_push_fixed_width(F32 v); +internal F32 ui_push_fixed_height(F32 v); +internal UI_Size ui_push_pref_width(UI_Size v); +internal UI_Size ui_push_pref_height(UI_Size v); +internal UI_BoxFlags ui_push_flags(UI_BoxFlags v); +internal UI_FocusKind ui_push_focus_hot(UI_FocusKind v); +internal UI_FocusKind ui_push_focus_active(UI_FocusKind v); +internal U32 ui_push_fastpath_codepoint(U32 v); +internal Vec4F32 ui_push_background_color(Vec4F32 v); +internal Vec4F32 ui_push_text_color(Vec4F32 v); +internal Vec4F32 ui_push_border_color(Vec4F32 v); +internal Vec4F32 ui_push_overlay_color(Vec4F32 v); +internal Vec4F32 ui_push_text_select_color(Vec4F32 v); +internal Vec4F32 ui_push_text_cursor_color(Vec4F32 v); +internal OS_Cursor ui_push_hover_cursor(OS_Cursor v); +internal F_Tag ui_push_font(F_Tag v); +internal F32 ui_push_font_size(F32 v); +internal F32 ui_push_corner_radius_00(F32 v); +internal F32 ui_push_corner_radius_01(F32 v); +internal F32 ui_push_corner_radius_10(F32 v); +internal F32 ui_push_corner_radius_11(F32 v); +internal F32 ui_push_blur_size(F32 v); +internal F32 ui_push_text_padding(F32 v); +internal UI_TextAlign ui_push_text_alignment(UI_TextAlign v); +internal UI_Box * ui_pop_parent(void); +internal Axis2 ui_pop_child_layout_axis(void); +internal F32 ui_pop_fixed_x(void); +internal F32 ui_pop_fixed_y(void); +internal F32 ui_pop_fixed_width(void); +internal F32 ui_pop_fixed_height(void); +internal UI_Size ui_pop_pref_width(void); +internal UI_Size ui_pop_pref_height(void); +internal UI_BoxFlags ui_pop_flags(void); +internal UI_FocusKind ui_pop_focus_hot(void); +internal UI_FocusKind ui_pop_focus_active(void); +internal U32 ui_pop_fastpath_codepoint(void); +internal Vec4F32 ui_pop_background_color(void); +internal Vec4F32 ui_pop_text_color(void); +internal Vec4F32 ui_pop_border_color(void); +internal Vec4F32 ui_pop_overlay_color(void); +internal Vec4F32 ui_pop_text_select_color(void); +internal Vec4F32 ui_pop_text_cursor_color(void); +internal OS_Cursor ui_pop_hover_cursor(void); +internal F_Tag ui_pop_font(void); +internal F32 ui_pop_font_size(void); +internal F32 ui_pop_corner_radius_00(void); +internal F32 ui_pop_corner_radius_01(void); +internal F32 ui_pop_corner_radius_10(void); +internal F32 ui_pop_corner_radius_11(void); +internal F32 ui_pop_blur_size(void); +internal F32 ui_pop_text_padding(void); +internal UI_TextAlign ui_pop_text_alignment(void); internal UI_Box * ui_set_next_parent(UI_Box * v); internal Axis2 ui_set_next_child_layout_axis(Axis2 v); internal F32 ui_set_next_fixed_x(F32 v); @@ -714,6 +725,8 @@ internal F32 ui_set_next_fixed_height(F32 v); internal UI_Size ui_set_next_pref_width(UI_Size v); internal UI_Size ui_set_next_pref_height(UI_Size v); internal UI_BoxFlags ui_set_next_flags(UI_BoxFlags v); +internal UI_FocusKind ui_set_next_focus_hot(UI_FocusKind v); +internal UI_FocusKind ui_set_next_focus_active(UI_FocusKind v); internal U32 ui_set_next_fastpath_codepoint(U32 v); internal Vec4F32 ui_set_next_background_color(Vec4F32 v); internal Vec4F32 ui_set_next_text_color(Vec4F32 v); @@ -745,32 +758,34 @@ internal void ui_pop_corner_radius(void); //~ rjf: Macro Loop Wrappers //- rjf: stacks (base) -#define UI_Parent(v) DeferLoop(ui_push_parent(v), ui_pop_parent()) -#define UI_ChildLayoutAxis(v) DeferLoop(ui_push_child_layout_axis(v), ui_pop_child_layout_axis()) -#define UI_FixedX(v) DeferLoop(ui_push_fixed_x(v), ui_pop_fixed_x()) -#define UI_FixedY(v) DeferLoop(ui_push_fixed_y(v), ui_pop_fixed_y()) -#define UI_FixedWidth(v) DeferLoop(ui_push_fixed_width(v), ui_pop_fixed_width()) -#define UI_FixedHeight(v) DeferLoop(ui_push_fixed_height(v), ui_pop_fixed_height()) -#define UI_PrefWidth(v) DeferLoop(ui_push_pref_width(v), ui_pop_pref_width()) -#define UI_PrefHeight(v) DeferLoop(ui_push_pref_height(v), ui_pop_pref_height()) -#define UI_Flags(v) DeferLoop(ui_push_flags(v), ui_pop_flags()) -#define UI_FastpathCodepoint(v) DeferLoop(ui_push_fastpath_codepoint(v), ui_pop_fastpath_codepoint()) -#define UI_BackgroundColor(v) DeferLoop(ui_push_background_color(v), ui_pop_background_color()) -#define UI_TextColor(v) DeferLoop(ui_push_text_color(v), ui_pop_text_color()) -#define UI_BorderColor(v) DeferLoop(ui_push_border_color(v), ui_pop_border_color()) -#define UI_OverlayColor(v) DeferLoop(ui_push_overlay_color(v), ui_pop_overlay_color()) -#define UI_TextSelectColor(v) DeferLoop(ui_push_text_select_color(v), ui_pop_text_select_color()) -#define UI_TextCursorColor(v) DeferLoop(ui_push_text_cursor_color(v), ui_pop_text_cursor_color()) -#define UI_HoverCursor(v) DeferLoop(ui_push_hover_cursor(v), ui_pop_hover_cursor()) -#define UI_Font(v) DeferLoop(ui_push_font(v), ui_pop_font()) -#define UI_FontSize(v) DeferLoop(ui_push_font_size(v), ui_pop_font_size()) -#define UI_CornerRadius00(v) DeferLoop(ui_push_corner_radius_00(v), ui_pop_corner_radius_00()) -#define UI_CornerRadius01(v) DeferLoop(ui_push_corner_radius_01(v), ui_pop_corner_radius_01()) -#define UI_CornerRadius10(v) DeferLoop(ui_push_corner_radius_10(v), ui_pop_corner_radius_10()) -#define UI_CornerRadius11(v) DeferLoop(ui_push_corner_radius_11(v), ui_pop_corner_radius_11()) -#define UI_BlurSize(v) DeferLoop(ui_push_blur_size(v), ui_pop_blur_size()) -#define UI_TextPadding(v) DeferLoop(ui_push_text_padding(v), ui_pop_text_padding()) -#define UI_TextAlignment(v) DeferLoop(ui_push_text_alignment(v), ui_pop_text_alignment()) +#define UI_Parent(v) DeferLoop(ui_push_parent(v), ui_pop_parent()) +#define UI_ChildLayoutAxis(v) DeferLoop(ui_push_child_layout_axis(v), ui_pop_child_layout_axis()) +#define UI_FixedX(v) DeferLoop(ui_push_fixed_x(v), ui_pop_fixed_x()) +#define UI_FixedY(v) DeferLoop(ui_push_fixed_y(v), ui_pop_fixed_y()) +#define UI_FixedWidth(v) DeferLoop(ui_push_fixed_width(v), ui_pop_fixed_width()) +#define UI_FixedHeight(v) DeferLoop(ui_push_fixed_height(v), ui_pop_fixed_height()) +#define UI_PrefWidth(v) DeferLoop(ui_push_pref_width(v), ui_pop_pref_width()) +#define UI_PrefHeight(v) DeferLoop(ui_push_pref_height(v), ui_pop_pref_height()) +#define UI_Flags(v) DeferLoop(ui_push_flags(v), ui_pop_flags()) +#define UI_FocusHot(v) DeferLoop(ui_push_focus_hot(v), ui_pop_focus_hot()) +#define UI_FocusActive(v) DeferLoop(ui_push_focus_active(v), ui_pop_focus_active()) +#define UI_FastpathCodepoint(v) DeferLoop(ui_push_fastpath_codepoint(v), ui_pop_fastpath_codepoint()) +#define UI_BackgroundColor(v) DeferLoop(ui_push_background_color(v), ui_pop_background_color()) +#define UI_TextColor(v) DeferLoop(ui_push_text_color(v), ui_pop_text_color()) +#define UI_BorderColor(v) DeferLoop(ui_push_border_color(v), ui_pop_border_color()) +#define UI_OverlayColor(v) DeferLoop(ui_push_overlay_color(v), ui_pop_overlay_color()) +#define UI_TextSelectColor(v) DeferLoop(ui_push_text_select_color(v), ui_pop_text_select_color()) +#define UI_TextCursorColor(v) DeferLoop(ui_push_text_cursor_color(v), ui_pop_text_cursor_color()) +#define UI_HoverCursor(v) DeferLoop(ui_push_hover_cursor(v), ui_pop_hover_cursor()) +#define UI_Font(v) DeferLoop(ui_push_font(v), ui_pop_font()) +#define UI_FontSize(v) DeferLoop(ui_push_font_size(v), ui_pop_font_size()) +#define UI_CornerRadius00(v) DeferLoop(ui_push_corner_radius_00(v), ui_pop_corner_radius_00()) +#define UI_CornerRadius01(v) DeferLoop(ui_push_corner_radius_01(v), ui_pop_corner_radius_01()) +#define UI_CornerRadius10(v) DeferLoop(ui_push_corner_radius_10(v), ui_pop_corner_radius_10()) +#define UI_CornerRadius11(v) DeferLoop(ui_push_corner_radius_11(v), ui_pop_corner_radius_11()) +#define UI_BlurSize(v) DeferLoop(ui_push_blur_size(v), ui_pop_blur_size()) +#define UI_TextPadding(v) DeferLoop(ui_push_text_padding(v), ui_pop_text_padding()) +#define UI_TextAlignment(v) DeferLoop(ui_push_text_alignment(v), ui_pop_text_alignment()) //- rjf: stacks (compositions) #define UI_WidthFill UI_PrefWidth(ui_pct(1.f, 0.f)) @@ -778,6 +793,7 @@ internal void ui_pop_corner_radius(void); #define UI_Rect(r) DeferLoop(ui_push_rect(r), ui_pop_rect()) #define UI_PrefSize(axis, v) DeferLoop(ui_push_pref_size((axis), (v)), ui_pop_pref_size(axis)) #define UI_CornerRadius(v) DeferLoop(ui_push_corner_radius(v), ui_pop_corner_radius()) +#define UI_Focus(kind) DeferLoop((ui_push_focus_hot(kind), ui_push_focus_active(kind)), (ui_pop_focus_hot(), ui_pop_focus_active())) //- rjf: tooltip #define UI_TooltipBase DeferLoop(ui_tooltip_begin_base(), ui_tooltip_end_base()) @@ -786,9 +802,4 @@ internal void ui_pop_corner_radius(void); //- rjf: context menu #define UI_CtxMenu(key) DeferLoopChecked(ui_begin_ctx_menu(key), ui_end_ctx_menu()) -//- rjf: focus -#define UI_FocusHot(is_focused) DeferLoop(ui_set_focus_hot(is_focused), ui_unset_focus_hot()) -#define UI_FocusActive(is_focused) DeferLoop(ui_set_focus_active(is_focused), ui_unset_focus_hot()) -#define UI_Focus(is_focused) UI_FocusHot(is_focused) UI_FocusActive(is_focused) - #endif // UI_H diff --git a/src/unwind/unwind.c b/src/unwind/unwind.c index 20a1c9bb..85704be8 100644 --- a/src/unwind/unwind.c +++ b/src/unwind/unwind.c @@ -248,7 +248,8 @@ unw_pe_x64(String8 bindata, PE_BinInfo *bin, case UNW_PE_OpCode_SPARE_CODE: { - Assert(!"Hit me!"); + result.dead = 1; + // Assert(!"Hit me!"); // TODO(allen): ??? }break;