From ddbb2148a4f03fd6f8069bb63608590fade30dac Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Tue, 29 Apr 2025 09:55:02 -0700 Subject: [PATCH] distinguish tabs vs. views in rd_regs --- src/raddbg/generated/raddbg.meta.c | 11 ++-- src/raddbg/generated/raddbg.meta.h | 7 ++- src/raddbg/raddbg.mdesk | 7 ++- src/raddbg/raddbg_core.c | 96 +++++++++++++++++------------- src/raddbg/raddbg_main.c | 1 + 5 files changed, 69 insertions(+), 53 deletions(-) diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index d8fb5ecb..d6dcf229 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -241,7 +241,7 @@ RD_VocabInfo rd_vocab_info_table[319] = {str8_lit_comp("build_tab"), str8_lit_comp(""), str8_lit_comp("Build Tab"), str8_lit_comp(""), RD_IconKind_Null}, {str8_lit_comp("duplicate_tab"), str8_lit_comp(""), str8_lit_comp("Duplicate Tab"), str8_lit_comp(""), RD_IconKind_Duplicate}, {str8_lit_comp("close_tab"), str8_lit_comp(""), str8_lit_comp("Close Tab"), str8_lit_comp(""), RD_IconKind_X}, -{str8_lit_comp("move_tab"), str8_lit_comp(""), str8_lit_comp("Move Tab"), str8_lit_comp(""), RD_IconKind_Null}, +{str8_lit_comp("move_view"), str8_lit_comp(""), str8_lit_comp("Move View"), str8_lit_comp(""), RD_IconKind_Null}, {str8_lit_comp("tab_bar_top"), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Top"), str8_lit_comp(""), RD_IconKind_UpArrow}, {str8_lit_comp("tab_bar_bottom"), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Bottom"), str8_lit_comp(""), RD_IconKind_DownArrow}, {str8_lit_comp("tab_settings"), str8_lit_comp(""), str8_lit_comp("Tab Settings"), str8_lit_comp(""), RD_IconKind_Gear}, @@ -401,7 +401,7 @@ RD_NameSchemaInfo rd_name_schema_info_table[22] = {str8_lit_comp("thread"), str8_lit_comp("x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':query}")}, }; -Rng1U64 rd_reg_slot_range_table[42] = +Rng1U64 rd_reg_slot_range_table[43] = { {0}, {OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(CTRL_Handle)}, @@ -411,6 +411,7 @@ Rng1U64 rd_reg_slot_range_table[42] = {OffsetOf(RD_Regs, ctrl_entity), OffsetOf(RD_Regs, ctrl_entity) + sizeof(CTRL_Handle)}, {OffsetOf(RD_Regs, window), OffsetOf(RD_Regs, window) + sizeof(RD_CfgID)}, {OffsetOf(RD_Regs, panel), OffsetOf(RD_Regs, panel) + sizeof(RD_CfgID)}, +{OffsetOf(RD_Regs, tab), OffsetOf(RD_Regs, tab) + sizeof(RD_CfgID)}, {OffsetOf(RD_Regs, view), OffsetOf(RD_Regs, view) + sizeof(RD_CfgID)}, {OffsetOf(RD_Regs, prev_tab), OffsetOf(RD_Regs, prev_tab) + sizeof(RD_CfgID)}, {OffsetOf(RD_Regs, dst_panel), OffsetOf(RD_Regs, dst_panel) + sizeof(RD_CfgID)}, @@ -529,9 +530,9 @@ RD_CmdKindInfo rd_cmd_kind_info_table[214] = { str8_lit_comp("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("open_tab"), str8_lit_comp("Opens a new tab."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:tab_commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}}, { str8_lit_comp("build_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("duplicate_tab"), str8_lit_comp("Duplicates a tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_View, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_View, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, +{ str8_lit_comp("duplicate_tab"), str8_lit_comp("Duplicates a tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, +{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, +{ str8_lit_comp("move_view"), str8_lit_comp("Moves a view to a new panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("tab_bar_top"), str8_lit_comp("Anchors a panel's tab bar to the top of the panel."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("tab_bar_bottom"), str8_lit_comp("Anchors a panel's tab bar to the bottom of the panel."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, { str8_lit_comp("tab_settings"), str8_lit_comp("Opens settings for a tab."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, diff --git a/src/raddbg/generated/raddbg.meta.h b/src/raddbg/generated/raddbg.meta.h index af560e67..5f0c9210 100644 --- a/src/raddbg/generated/raddbg.meta.h +++ b/src/raddbg/generated/raddbg.meta.h @@ -16,6 +16,7 @@ RD_RegSlot_Thread, RD_RegSlot_CtrlEntity, RD_RegSlot_Window, RD_RegSlot_Panel, +RD_RegSlot_Tab, RD_RegSlot_View, RD_RegSlot_PrevTab, RD_RegSlot_DstPanel, @@ -137,7 +138,7 @@ RD_CmdKind_OpenTab, RD_CmdKind_BuildTab, RD_CmdKind_DuplicateTab, RD_CmdKind_CloseTab, -RD_CmdKind_MoveTab, +RD_CmdKind_MoveView, RD_CmdKind_TabBarTop, RD_CmdKind_TabBarBottom, RD_CmdKind_TabSettings, @@ -544,6 +545,7 @@ CTRL_Handle thread; CTRL_Handle ctrl_entity; RD_CfgID window; RD_CfgID panel; +RD_CfgID tab; RD_CfgID view; RD_CfgID prev_tab; RD_CfgID dst_panel; @@ -632,6 +634,7 @@ Z(getting_started)\ .ctrl_entity = rd_regs()->ctrl_entity,\ .window = rd_regs()->window,\ .panel = rd_regs()->panel,\ +.tab = rd_regs()->tab,\ .view = rd_regs()->view,\ .prev_tab = rd_regs()->prev_tab,\ .dst_panel = rd_regs()->dst_panel,\ @@ -672,7 +675,7 @@ extern String8 rd_tab_fast_path_view_name_table[20]; extern String8 rd_tab_fast_path_query_name_table[20]; extern RD_VocabInfo rd_vocab_info_table[319]; extern RD_NameSchemaInfo rd_name_schema_info_table[22]; -extern Rng1U64 rd_reg_slot_range_table[42]; +extern Rng1U64 rd_reg_slot_range_table[43]; extern String8 rd_binding_version_remap_old_name_table[8]; extern String8 rd_binding_version_remap_new_name_table[8]; extern String8 rd_icon_kind_text_table[75]; diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index 5c8002c2..01476ca5 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -637,6 +637,7 @@ RD_RegTable: // rjf: cfgs {RD_CfgID window Window } {RD_CfgID panel Panel } + {RD_CfgID tab Tab } {RD_CfgID view View } {RD_CfgID prev_tab PrevTab } {RD_CfgID dst_panel DstPanel } @@ -792,9 +793,9 @@ RD_CmdTable: // | | | | {MoveTabLeft 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" "$tab," } {OpenTab 1 1 0 0 "query:tab_commands" CmdName commands Nil Null 0 0 0 0 0 1 1 Null "open_tab" "Open New Tab" "Opens a new tab." "" "" } {BuildTab 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "build_tab" "Build Tab" "Opens a new tab with the parameterized view specification." "" "" } - {DuplicateTab 1 1 0 0 "" View null Nil Null 0 0 0 0 0 0 0 Duplicate "duplicate_tab" "Duplicate Tab" "Duplicates a tab." "" "$tab," } - {CloseTab 1 1 0 0 "" View null Nil Null 0 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" "$tab," } - {MoveTab 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" "" } + {DuplicateTab 1 1 0 0 "" Tab null Nil Null 0 0 0 0 0 0 0 Duplicate "duplicate_tab" "Duplicate Tab" "Duplicates a tab." "" "$tab," } + {CloseTab 1 1 0 0 "" Tab null Nil Null 0 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" "$tab," } + {MoveView 0 0 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Null "move_view" "Move View" "Moves a view to a new panel." "" "" } {TabBarTop 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" "$tab," } {TabBarBottom 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" "$tab," } {TabSettings 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Gear "tab_settings" "Tab Settings" "Opens settings for a tab." "" "" } diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 88a3f8b6..56f3aa59 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -1229,6 +1229,10 @@ rd_setting_from_name(String8 name) B32 allow_bucket_chains; }; RD_Cfg *view_cfg = rd_cfg_from_id(rd_regs()->view); + if(view_cfg == &rd_nil_cfg) + { + view_cfg = rd_cfg_from_id(rd_regs()->tab); + } CfgSeedTask panel_task = {0, &rd_nil_cfg, 1}; if(panel_task.cfg == &rd_nil_cfg) { panel_task.cfg = rd_cfg_from_id(rd_regs()->panel); } if(panel_task.cfg == &rd_nil_cfg) { panel_task.cfg = rd_cfg_from_id(rd_regs()->window); } @@ -5777,7 +5781,8 @@ rd_window_frame(void) //- rjf: @window_frame_part fill panel/view interaction registers // rd_regs()->panel = panel_tree.focused->cfg->id; - rd_regs()->view = panel_tree.focused->selected_tab->id; + rd_regs()->tab = panel_tree.focused->selected_tab->id; + rd_regs()->view = panel_tree.focused->selected_tab->id; ////////////////////////////// //- rjf: @window_frame_part build UI @@ -5791,7 +5796,7 @@ rd_window_frame(void) { // rjf: get top-level font size info F32 top_level_font_size = 0; - RD_RegsScope(.view = 0) top_level_font_size = rd_setting_f32_from_name(str8_lit("font_size")); + RD_RegsScope(.view = 0, .tab = 0) top_level_font_size = rd_setting_f32_from_name(str8_lit("font_size")); // rjf: build icon info UI_IconInfo icon_info = {0}; @@ -6046,6 +6051,7 @@ rd_window_frame(void) if(rd_drag_is_active() && window_is_focused) RD_RegsScope(.window = rd_state->drag_drop_regs->window, .panel = rd_state->drag_drop_regs->panel, + .tab = 0, .view = rd_state->drag_drop_regs->view) { Temp scratch = scratch_begin(0, 0); @@ -6458,7 +6464,7 @@ rd_window_frame(void) // rjf: determine size of hover evaluation container EV_BlockTree predicted_block_tree = {0}; - RD_RegsScope(.view = view->id) + RD_RegsScope(.view = view->id, .tab = 0) { predicted_block_tree = ev_block_tree_from_eval(scratch.arena, rd_view_eval_view(), str8_zero(), hover_eval); } @@ -6601,7 +6607,7 @@ rd_window_frame(void) // rjf: compute query view's top-level rectangle Rng2F32 rect = {0}; - RD_RegsScope(.view = view->id) + RD_RegsScope(.view = view->id, .tab = 0) { F32 row_height_px = ui_top_font_size() * rd_setting_f32_from_name(str8_lit("row_height")); Vec2F32 content_rect_center = center_2f32(content_rect); @@ -7781,7 +7787,7 @@ rd_window_frame(void) rd_cmd(RD_CmdKind_SplitPanel, .dst_panel = split_panel->cfg->id, .panel = rd_state->drag_drop_regs->panel, - .view = rd_state->drag_drop_regs->view, + .view = rd_state->drag_drop_regs->view, .dir2 = dir); } } @@ -7873,7 +7879,7 @@ rd_window_frame(void) rd_cmd(RD_CmdKind_SplitPanel, .dst_panel = split_panel->cfg->id, .panel = rd_state->drag_drop_regs->panel, - .view = rd_state->drag_drop_regs->view, + .view = rd_state->drag_drop_regs->view, .dir2 = dir); } @@ -8184,7 +8190,7 @@ rd_window_frame(void) } else { - rd_cmd(RD_CmdKind_MoveTab, + rd_cmd(RD_CmdKind_MoveView, .dst_panel = panel->cfg->id, .panel = rd_state->drag_drop_regs->panel, .view = rd_state->drag_drop_regs->view, @@ -8276,7 +8282,8 @@ rd_window_frame(void) { //- rjf: push interaction registers, fill with per-view states rd_push_regs(.panel = panel->cfg->id, - .view = selected_tab->id); + .tab = selected_tab->id, + .view = selected_tab->id); { String8 view_expr = rd_expr_from_cfg(selected_tab); String8 view_file_path = rd_file_path_from_eval_string(rd_frame_arena(), view_expr); @@ -8480,7 +8487,7 @@ rd_window_frame(void) //- rjf: build tab DR_FStrList tab_fstrs = tab_task->fstrs; F32 tab_width_px = tab_task->tab_width; - if(tab != &rd_nil_cfg) RD_RegsScope(.panel = panel->cfg->id, .view = tab->id) + if(tab != &rd_nil_cfg) RD_RegsScope(.panel = panel->cfg->id, .view = tab->id, .tab = tab->id) { // rjf: gather info for this tab B32 tab_is_selected = (tab == panel->selected_tab); @@ -8693,10 +8700,10 @@ rd_window_frame(void) // if(tab_drop_is_active && rd_drag_drop() && rd_state->drag_drop_regs_slot == RD_RegSlot_View) { - rd_cmd(RD_CmdKind_MoveTab, + rd_cmd(RD_CmdKind_MoveView, .dst_panel = panel->cfg->id, .panel = rd_state->drag_drop_regs->panel, - .view = rd_state->drag_drop_regs->view, + .view = rd_state->drag_drop_regs->view, .prev_tab = tab_drop_prev->id); } @@ -8757,11 +8764,11 @@ rd_window_frame(void) ui_eat_event(evt); if(evt->delta_2f32.y < 0) { - rd_cmd(RD_CmdKind_IncFontSize, .view = 0); + rd_cmd(RD_CmdKind_IncFontSize, .tab = 0, .view = 0); } else if(evt->delta_2f32.y > 0) { - rd_cmd(RD_CmdKind_DecFontSize, .view = 0); + rd_cmd(RD_CmdKind_DecFontSize, .tab = 0, .view = 0); } } } @@ -11758,6 +11765,7 @@ rd_frame(void) RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, rd_cfg_from_id(ws->cfg_id)); rd_regs()->window = ws->cfg_id; rd_regs()->panel = panel_tree.focused->cfg->id; + rd_regs()->tab = panel_tree.focused->selected_tab->id; rd_regs()->view = panel_tree.focused->selected_tab->id; scratch_end(scratch); } @@ -12743,7 +12751,7 @@ rd_frame(void) "query:thread_locals, " , tab->id, window->id); - rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1, .do_lister = 1, .do_big_rows = 1, .view = tab->id); + rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1, .do_lister = 1, .do_big_rows = 1, .view = tab->id, .tab = tab->id); }break; //- rjf: command fast paths @@ -13102,7 +13110,7 @@ rd_frame(void) case RD_CmdKind_IncFontSize: { RD_Cfg *cfg = &rd_nil_cfg; - if(cfg == &rd_nil_cfg) { cfg = rd_cfg_from_id(rd_regs()->view); } + if(cfg == &rd_nil_cfg) { cfg = rd_cfg_from_id(rd_regs()->tab); } if(cfg == &rd_nil_cfg) { cfg = rd_cfg_from_id(rd_regs()->window); } if(cfg != &rd_nil_cfg) { @@ -13117,7 +13125,7 @@ rd_frame(void) case RD_CmdKind_DecFontSize: { RD_Cfg *cfg = &rd_nil_cfg; - if(cfg == &rd_nil_cfg) { cfg = rd_cfg_from_id(rd_regs()->view); } + if(cfg == &rd_nil_cfg) { cfg = rd_cfg_from_id(rd_regs()->tab); } if(cfg == &rd_nil_cfg) { cfg = rd_cfg_from_id(rd_regs()->window); } if(cfg != &rd_nil_cfg) { @@ -13272,7 +13280,7 @@ rd_frame(void) { if(!rd_cfg_is_project_filtered(n->v)) { - rd_cmd(RD_CmdKind_FocusTab, .panel = origin_panel->cfg->id, .view = n->v->id); + rd_cmd(RD_CmdKind_FocusTab, .panel = origin_panel->cfg->id, .tab = n->v->id); break; } } @@ -13281,7 +13289,7 @@ rd_frame(void) { rd_cmd(RD_CmdKind_ClosePanel); } - rd_cmd(RD_CmdKind_FocusTab, .panel = new_panel_cfg->id, .view = dragdrop_tab->id); + rd_cmd(RD_CmdKind_FocusTab, .panel = new_panel_cfg->id, .tab = dragdrop_tab->id); } // rjf: focus new panel @@ -13638,7 +13646,7 @@ rd_frame(void) //- rjf: panel tab controls case RD_CmdKind_FocusTab: { - RD_Cfg *tab = rd_cfg_from_id(rd_regs()->view); + RD_Cfg *tab = rd_cfg_from_id(rd_regs()->tab); RD_Cfg *panel = tab->parent; RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, panel); RD_PanelNode *panel_node = rd_panel_node_from_tree_cfg(panel_tree.root, panel); @@ -13690,7 +13698,7 @@ rd_frame(void) } if(next_selected_tab != &rd_nil_cfg) { - rd_cmd(RD_CmdKind_FocusTab, .view = next_selected_tab->id); + rd_cmd(RD_CmdKind_FocusTab, .tab = next_selected_tab->id); } }break; case RD_CmdKind_PrevTab: @@ -13721,13 +13729,13 @@ rd_frame(void) } if(next_selected_tab != &rd_nil_cfg) { - rd_cmd(RD_CmdKind_FocusTab, .view = next_selected_tab->id); + rd_cmd(RD_CmdKind_FocusTab, .tab = next_selected_tab->id); } }break; case RD_CmdKind_MoveTabRight: case RD_CmdKind_MoveTabLeft: { - RD_Cfg *tab = rd_cfg_from_id(rd_regs()->view); + RD_Cfg *tab = rd_cfg_from_id(rd_regs()->tab); RD_Cfg *window = rd_window_from_cfg(tab); RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, window); RD_PanelNode *panel = rd_panel_node_from_tree_cfg(panel_tree.root, tab->parent); @@ -13764,9 +13772,9 @@ rd_frame(void) { new_prev = filtered_tabs.last->v; } - rd_cmd(RD_CmdKind_MoveTab, + rd_cmd(RD_CmdKind_MoveView, .dst_panel = panel->cfg->id, - .view = tab->id, + .view = tab->id, .prev_tab = new_prev->id); }break; case RD_CmdKind_BuildTab: @@ -13781,18 +13789,18 @@ rd_frame(void) RD_Cfg *project = rd_cfg_new(tab, str8_lit("project")); rd_cfg_new(project, rd_state->project_path); } - rd_cmd(RD_CmdKind_FocusTab, .view = tab->id); + rd_cmd(RD_CmdKind_FocusTab, .tab = tab->id); }break; case RD_CmdKind_DuplicateTab: { - RD_Cfg *src = rd_cfg_from_id(rd_regs()->view); + RD_Cfg *src = rd_cfg_from_id(rd_regs()->tab); RD_Cfg *dst = rd_cfg_deep_copy(src); rd_cfg_insert_child(src->parent, src, dst); - rd_cmd(RD_CmdKind_FocusTab, .view = dst->id); + rd_cmd(RD_CmdKind_FocusTab, .tab = dst->id); }break; case RD_CmdKind_CloseTab: { - RD_Cfg *tab = rd_cfg_from_id(rd_regs()->view); + RD_Cfg *tab = rd_cfg_from_id(rd_regs()->tab); RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, tab); RD_PanelNode *panel = rd_panel_node_from_tree_cfg(panel_tree.root, tab->parent); B32 found_selected = 0; @@ -13812,20 +13820,20 @@ rd_frame(void) } } } - rd_cmd(RD_CmdKind_FocusTab, .view = next_selected_tab->id); + rd_cmd(RD_CmdKind_FocusTab, .tab = next_selected_tab->id); rd_cfg_release(tab); }break; - case RD_CmdKind_MoveTab: + case RD_CmdKind_MoveView: { - RD_Cfg *tab = rd_cfg_from_id(rd_regs()->view); + RD_Cfg *view = rd_cfg_from_id(rd_regs()->view); RD_Cfg *prev_tab = rd_cfg_from_id(rd_regs()->prev_tab); - RD_Cfg *src_panel = tab->parent; + RD_Cfg *src_panel = view->parent; RD_Cfg *dst_panel = rd_cfg_from_id(rd_regs()->dst_panel); - if(dst_panel != &rd_nil_cfg && prev_tab != tab) + if(dst_panel != &rd_nil_cfg && prev_tab != view) { - rd_cfg_unhook(src_panel, tab); - rd_cfg_insert_child(dst_panel, prev_tab, tab); - rd_cmd(RD_CmdKind_FocusTab, .panel = dst_panel->id, .view = tab->id); + rd_cfg_unhook(src_panel, view); + rd_cfg_insert_child(dst_panel, prev_tab, view); + rd_cmd(RD_CmdKind_FocusTab, .panel = dst_panel->id, .tab = view->id); rd_cmd(RD_CmdKind_FocusPanel, .panel = dst_panel->id); RD_PanelTree src_panel_tree = rd_panel_tree_from_cfg(scratch.arena, src_panel); RD_PanelNode *src_panel_node = rd_panel_node_from_tree_cfg(src_panel_tree.root, src_panel); @@ -13837,7 +13845,7 @@ rd_frame(void) { if(!rd_cfg_is_project_filtered(n->v)) { - rd_cmd(RD_CmdKind_FocusTab, .panel = src_panel->id, .view = n->v->id); + rd_cmd(RD_CmdKind_FocusTab, .panel = src_panel->id, .tab = n->v->id); src_panel_is_empty = 0; break; } @@ -13861,7 +13869,7 @@ rd_frame(void) }break; case RD_CmdKind_TabSettings: { - String8 expr = push_str8f(scratch.arena, "query:config.$%I64x", rd_regs()->view); + String8 expr = push_str8f(scratch.arena, "query:config.$%I64x", rd_regs()->tab); rd_cmd(RD_CmdKind_PushQuery, .expr = expr, .do_implicit_root = 1, .do_big_rows = 1, .do_lister = 1); }break; @@ -14564,7 +14572,7 @@ rd_frame(void) { RD_Cfg *tab = tab_n->v; if(rd_cfg_is_project_filtered(tab)) { continue; } - RD_RegsScope(.view = tab->id) + RD_RegsScope(.tab = tab->id, .view = tab->id) { if(str8_match(tab->string, str8_lit("text"), 0) && rd_view_cfg_b32_from_string(str8_lit("auto"))) @@ -14629,7 +14637,7 @@ rd_frame(void) { RD_Cfg *tab = tab_n->v; if(rd_cfg_is_project_filtered(tab)) { continue; } - RD_RegsScope(.view = tab->id) + RD_RegsScope(.view = tab->id, .tab = tab->id) { B32 tab_is_selected = (tab == panel->selected_tab); String8 expr_string = rd_expr_from_cfg(tab); @@ -14795,7 +14803,8 @@ rd_frame(void) // rjf: move cursor & snap-to-cursor if(dst_panel != &rd_nil_panel_node) RD_RegsScope(.panel = dst_panel->cfg->id, - .view = dst_tab->id) + .view = dst_tab->id, + .tab = dst_tab->id) { rd_cmd(RD_CmdKind_FocusTab); if(point.line != 0) @@ -14830,6 +14839,7 @@ rd_frame(void) // rjf: move cursor & snap-to-cursor if(dst_panel != &rd_nil_panel_node) RD_RegsScope(.panel = dst_panel->cfg->id, + .tab = dst_tab->id, .view = dst_tab->id) { rd_cmd(RD_CmdKind_FocusTab); @@ -14866,7 +14876,7 @@ rd_frame(void) // rjf: non-floating -> embed in tab parameter else { - view = rd_cfg_from_id(rd_regs()->view); + view = rd_cfg_from_id(rd_regs()->tab); } // rjf: determine if the target view is a lister (and thus already has a command) @@ -16389,7 +16399,7 @@ rd_frame(void) { continue; } - RD_RegsScope(.view = tab->id) + RD_RegsScope(.tab = tab->id, .view = tab->id) { String8 eval_string = rd_expr_from_cfg(tab); String8 file_path = rd_file_path_from_eval_string(scratch.arena, eval_string); diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index e407d0c7..fbecdb5f 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -886,6 +886,7 @@ entry_point(CmdLine *cmd_line) RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, rd_cfg_from_id(dst_ws->cfg_id)); rd_regs()->window = dst_ws->cfg_id; rd_regs()->panel = panel_tree.focused->cfg->id; + rd_regs()->tab = panel_tree.focused->selected_tab->id; rd_regs()->view = panel_tree.focused->selected_tab->id; scratch_end(scratch); }