mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 13:28:40 +00:00
filter panel tabs by project, if applicable; move all tab controls & so on to working based on this filtering mechanism
This commit is contained in:
@@ -6530,6 +6530,10 @@ df_core_init(CmdLine *cmdln, DF_StateDeltaHistory *hist)
|
|||||||
// rjf: unpack command line arguments
|
// rjf: unpack command line arguments
|
||||||
String8 user_cfg_path = cmd_line_string(cmdln, str8_lit("user"));
|
String8 user_cfg_path = cmd_line_string(cmdln, str8_lit("user"));
|
||||||
String8 project_cfg_path = cmd_line_string(cmdln, str8_lit("project"));
|
String8 project_cfg_path = cmd_line_string(cmdln, str8_lit("project"));
|
||||||
|
if(project_cfg_path.size == 0)
|
||||||
|
{
|
||||||
|
project_cfg_path = cmd_line_string(cmdln, str8_lit("profile"));
|
||||||
|
}
|
||||||
{
|
{
|
||||||
String8 user_program_data_path = os_string_from_system_path(scratch.arena, OS_SystemPath_UserProgramData);
|
String8 user_program_data_path = os_string_from_system_path(scratch.arena, OS_SystemPath_UserProgramData);
|
||||||
String8 user_data_folder = push_str8f(scratch.arena, "%S/%S", user_program_data_path, str8_lit("raddbg"));
|
String8 user_data_folder = push_str8f(scratch.arena, "%S/%S", user_program_data_path, str8_lit("raddbg"));
|
||||||
|
|||||||
+190
-48
@@ -74,6 +74,22 @@ df_view_is_nil(DF_View *view)
|
|||||||
return (view == 0 || view == &df_g_nil_view);
|
return (view == 0 || view == &df_g_nil_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal B32
|
||||||
|
df_view_is_project_filtered(DF_View *view)
|
||||||
|
{
|
||||||
|
B32 result = 0;
|
||||||
|
DF_Entity *view_project = df_entity_from_handle(view->project);
|
||||||
|
if(!df_entity_is_nil(view_project))
|
||||||
|
{
|
||||||
|
DF_Entity *current_project = df_entity_from_path(df_cfg_path_from_src(DF_CfgSrc_Project), 0);
|
||||||
|
if(current_project != view_project)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
internal DF_Handle
|
internal DF_Handle
|
||||||
df_handle_from_view(DF_View *view)
|
df_handle_from_view(DF_View *view)
|
||||||
{
|
{
|
||||||
@@ -294,20 +310,56 @@ df_panel_insert_tab_view(DF_Panel *panel, DF_View *prev_view, DF_View *view)
|
|||||||
{
|
{
|
||||||
DLLInsert_NPZ(&df_g_nil_view, panel->first_tab_view, panel->last_tab_view, prev_view, view, next, prev);
|
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->tab_view_count += 1;
|
||||||
panel->selected_tab_view = df_handle_from_view(view);
|
if(!df_view_is_project_filtered(view))
|
||||||
|
{
|
||||||
|
panel->selected_tab_view = df_handle_from_view(view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
df_panel_remove_tab_view(DF_Panel *panel, DF_View *view)
|
df_panel_remove_tab_view(DF_Panel *panel, DF_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)
|
if(df_view_from_handle(panel->selected_tab_view) == view)
|
||||||
{
|
{
|
||||||
panel->selected_tab_view = df_handle_from_view(!df_view_is_nil(view->prev) ? view->prev : view->next);
|
panel->selected_tab_view = df_handle_zero();
|
||||||
|
if(df_handle_match(df_handle_zero(), panel->selected_tab_view))
|
||||||
|
{
|
||||||
|
for(DF_View *v = view->next; !df_view_is_nil(v); v = v->next)
|
||||||
|
{
|
||||||
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
panel->selected_tab_view = df_handle_from_view(v);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(df_handle_match(df_handle_zero(), panel->selected_tab_view))
|
||||||
|
{
|
||||||
|
for(DF_View *v = view->prev; !df_view_is_nil(v); v = v->prev)
|
||||||
|
{
|
||||||
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
panel->selected_tab_view = df_handle_from_view(v);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
DLLRemove_NPZ(&df_g_nil_view, panel->first_tab_view, panel->last_tab_view, view, next, prev);
|
||||||
panel->tab_view_count -= 1;
|
panel->tab_view_count -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal DF_View *
|
||||||
|
df_selected_tab_from_panel(DF_Panel *panel)
|
||||||
|
{
|
||||||
|
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
||||||
|
if(df_view_is_project_filtered(view))
|
||||||
|
{
|
||||||
|
view = &df_g_nil_view;
|
||||||
|
}
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
//- rjf: icons & display strings
|
//- rjf: icons & display strings
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
@@ -417,7 +469,7 @@ df_cmd_params_from_gfx(void)
|
|||||||
{
|
{
|
||||||
p.window = df_handle_from_window(window);
|
p.window = df_handle_from_window(window);
|
||||||
p.panel = df_handle_from_panel(window->focused_panel);
|
p.panel = df_handle_from_panel(window->focused_panel);
|
||||||
p.view = window->focused_panel->selected_tab_view;
|
p.view = df_handle_from_view(df_selected_tab_from_panel(window->focused_panel));
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@@ -426,7 +478,7 @@ internal B32
|
|||||||
df_prefer_dasm_from_window(DF_Window *window)
|
df_prefer_dasm_from_window(DF_Window *window)
|
||||||
{
|
{
|
||||||
DF_Panel *panel = window->focused_panel;
|
DF_Panel *panel = window->focused_panel;
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
||||||
B32 result = 0;
|
B32 result = 0;
|
||||||
if(view_kind == DF_GfxViewKind_Disassembly)
|
if(view_kind == DF_GfxViewKind_Disassembly)
|
||||||
@@ -443,7 +495,7 @@ df_prefer_dasm_from_window(DF_Window *window)
|
|||||||
B32 has_dasm = 0;
|
B32 has_dasm = 0;
|
||||||
for(DF_Panel *p = window->root_panel; !df_panel_is_nil(p); p = df_panel_rec_df_pre(p).next)
|
for(DF_Panel *p = window->root_panel; !df_panel_is_nil(p); p = df_panel_rec_df_pre(p).next)
|
||||||
{
|
{
|
||||||
DF_View *p_view = df_view_from_handle(p->selected_tab_view);
|
DF_View *p_view = df_selected_tab_from_panel(p);
|
||||||
DF_GfxViewKind p_view_kind = df_gfx_view_kind_from_string(p_view->spec->info.name);
|
DF_GfxViewKind p_view_kind = df_gfx_view_kind_from_string(p_view->spec->info.name);
|
||||||
if(p_view_kind == DF_GfxViewKind_Code)
|
if(p_view_kind == DF_GfxViewKind_Code)
|
||||||
{
|
{
|
||||||
@@ -464,7 +516,7 @@ internal DF_CmdParams
|
|||||||
df_cmd_params_from_window(DF_Window *window)
|
df_cmd_params_from_window(DF_Window *window)
|
||||||
{
|
{
|
||||||
DF_CmdParams p = df_cmd_params_zero();
|
DF_CmdParams p = df_cmd_params_zero();
|
||||||
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, df_view_from_handle(window->focused_panel->selected_tab_view));
|
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, df_selected_tab_from_panel(window->focused_panel));
|
||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Window);
|
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_Panel);
|
||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View);
|
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View);
|
||||||
@@ -473,7 +525,7 @@ df_cmd_params_from_window(DF_Window *window)
|
|||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Index);
|
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Index);
|
||||||
p.window = df_handle_from_window(window);
|
p.window = df_handle_from_window(window);
|
||||||
p.panel = df_handle_from_panel(window->focused_panel);
|
p.panel = df_handle_from_panel(window->focused_panel);
|
||||||
p.view = window->focused_panel->selected_tab_view;
|
p.view = df_handle_from_view(df_selected_tab_from_panel(window->focused_panel));
|
||||||
p.prefer_dasm = df_prefer_dasm_from_window(window);
|
p.prefer_dasm = df_prefer_dasm_from_window(window);
|
||||||
p.entity = ctrl_ctx.thread;
|
p.entity = ctrl_ctx.thread;
|
||||||
p.index = ctrl_ctx.unwind_count;
|
p.index = ctrl_ctx.unwind_count;
|
||||||
@@ -484,7 +536,7 @@ internal DF_CmdParams
|
|||||||
df_cmd_params_from_panel(DF_Window *window, DF_Panel *panel)
|
df_cmd_params_from_panel(DF_Window *window, DF_Panel *panel)
|
||||||
{
|
{
|
||||||
DF_CmdParams p = df_cmd_params_zero();
|
DF_CmdParams p = df_cmd_params_zero();
|
||||||
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, df_view_from_handle(panel->selected_tab_view));
|
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(window, df_selected_tab_from_panel(panel));
|
||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Window);
|
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_Panel);
|
||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View);
|
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View);
|
||||||
@@ -493,7 +545,7 @@ df_cmd_params_from_panel(DF_Window *window, DF_Panel *panel)
|
|||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Index);
|
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Index);
|
||||||
p.window = df_handle_from_window(window);
|
p.window = df_handle_from_window(window);
|
||||||
p.panel = df_handle_from_panel(panel);
|
p.panel = df_handle_from_panel(panel);
|
||||||
p.view = panel->selected_tab_view;
|
p.view = df_handle_from_view(df_selected_tab_from_panel(panel));
|
||||||
p.prefer_dasm = df_prefer_dasm_from_window(window);
|
p.prefer_dasm = df_prefer_dasm_from_window(window);
|
||||||
p.entity = ctrl_ctx.thread;
|
p.entity = ctrl_ctx.thread;
|
||||||
p.index = ctrl_ctx.unwind_count;
|
p.index = ctrl_ctx.unwind_count;
|
||||||
@@ -943,6 +995,7 @@ df_panel_release_all_views(DF_Panel *panel)
|
|||||||
}
|
}
|
||||||
panel->first_tab_view = panel->last_tab_view = &df_g_nil_view;
|
panel->first_tab_view = panel->last_tab_view = &df_g_nil_view;
|
||||||
panel->selected_tab_view = df_handle_zero();
|
panel->selected_tab_view = df_handle_zero();
|
||||||
|
panel->tab_view_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -1204,7 +1257,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
DF_View *view = df_view_from_handle(params.view);
|
DF_View *view = df_view_from_handle(params.view);
|
||||||
if(df_view_is_nil(view) && !df_panel_is_nil(panel))
|
if(df_view_is_nil(view) && !df_panel_is_nil(panel))
|
||||||
{
|
{
|
||||||
view = df_view_from_handle(panel->selected_tab_view);
|
view = df_selected_tab_from_panel(panel);
|
||||||
}
|
}
|
||||||
if(!df_view_is_nil(view))
|
if(!df_view_is_nil(view))
|
||||||
{
|
{
|
||||||
@@ -1322,7 +1375,16 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
df_panel_remove_tab_view(move_tab_panel, move_tab);
|
df_panel_remove_tab_view(move_tab_panel, move_tab);
|
||||||
df_panel_insert_tab_view(new_panel, new_panel->last_tab_view, move_tab);
|
df_panel_insert_tab_view(new_panel, new_panel->last_tab_view, move_tab);
|
||||||
new_panel->selected_tab_view = df_handle_from_view(move_tab);
|
new_panel->selected_tab_view = df_handle_from_view(move_tab);
|
||||||
if(df_view_is_nil(move_tab_panel->first_tab_view) && move_tab_panel != ws->root_panel &&
|
B32 move_tab_panel_is_empty = 1;
|
||||||
|
for(DF_View *v = move_tab_panel->first_tab_view; !df_view_is_nil(v); v = v->next)
|
||||||
|
{
|
||||||
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
move_tab_panel_is_empty = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(move_tab_panel_is_empty && move_tab_panel != ws->root_panel &&
|
||||||
move_tab_panel != new_panel->prev && move_tab_panel != new_panel->next)
|
move_tab_panel != new_panel->prev && move_tab_panel != new_panel->next)
|
||||||
{
|
{
|
||||||
DF_CmdParams p = df_cmd_params_from_panel(ws, move_tab_panel);
|
DF_CmdParams p = df_cmd_params_from_panel(ws, move_tab_panel);
|
||||||
@@ -1910,30 +1972,40 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
case DF_CoreCmdKind_NextTab:
|
case DF_CoreCmdKind_NextTab:
|
||||||
{
|
{
|
||||||
DF_Panel *panel = df_panel_from_handle(params.panel);
|
DF_Panel *panel = df_panel_from_handle(params.panel);
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
view = view->next;
|
DF_View *next_view = view;
|
||||||
if(df_view_is_nil(view))
|
for(DF_View *v = view; !df_view_is_nil(v); v = df_view_is_nil(v->next) ? panel->first_tab_view : v->next)
|
||||||
{
|
{
|
||||||
view = panel->first_tab_view;
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
next_view = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
view = next_view;
|
||||||
panel->selected_tab_view = df_handle_from_view(view);
|
panel->selected_tab_view = df_handle_from_view(view);
|
||||||
}break;
|
}break;
|
||||||
case DF_CoreCmdKind_PrevTab:
|
case DF_CoreCmdKind_PrevTab:
|
||||||
{
|
{
|
||||||
DF_Panel *panel = df_panel_from_handle(params.panel);
|
DF_Panel *panel = df_panel_from_handle(params.panel);
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
view = view->prev;
|
DF_View *next_view = view;
|
||||||
if(df_view_is_nil(view))
|
for(DF_View *v = view; !df_view_is_nil(v); v = df_view_is_nil(v->prev) ? panel->last_tab_view : v->prev)
|
||||||
{
|
{
|
||||||
view = panel->last_tab_view;
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
next_view = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
view = next_view;
|
||||||
panel->selected_tab_view = df_handle_from_view(view);
|
panel->selected_tab_view = df_handle_from_view(view);
|
||||||
}break;
|
}break;
|
||||||
case DF_CoreCmdKind_MoveTabRight:
|
case DF_CoreCmdKind_MoveTabRight:
|
||||||
case DF_CoreCmdKind_MoveTabLeft:
|
case DF_CoreCmdKind_MoveTabLeft:
|
||||||
{
|
{
|
||||||
DF_Panel *panel = ws->focused_panel;
|
DF_Panel *panel = ws->focused_panel;
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
DF_View *prev_view = core_cmd_kind == DF_CoreCmdKind_MoveTabRight ? view->next : view->prev->prev;
|
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)
|
if(!df_view_is_nil(prev_view) || core_cmd_kind == DF_CoreCmdKind_MoveTabLeft)
|
||||||
{
|
{
|
||||||
@@ -1986,7 +2058,16 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
df_panel_remove_tab_view(src_panel, view);
|
df_panel_remove_tab_view(src_panel, view);
|
||||||
df_panel_insert_tab_view(dst_panel, prev_view, view);
|
df_panel_insert_tab_view(dst_panel, prev_view, view);
|
||||||
ws->focused_panel = dst_panel;
|
ws->focused_panel = dst_panel;
|
||||||
if(df_view_is_nil(src_panel->first_tab_view) && src_panel != ws->root_panel)
|
B32 src_panel_is_empty = 1;
|
||||||
|
for(DF_View *v = src_panel->first_tab_view; !df_view_is_nil(v); v = v->next)
|
||||||
|
{
|
||||||
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
src_panel_is_empty = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(src_panel_is_empty && src_panel != ws->root_panel)
|
||||||
{
|
{
|
||||||
DF_CmdParams p = df_cmd_params_from_panel(ws, src_panel);
|
DF_CmdParams p = df_cmd_params_from_panel(ws, src_panel);
|
||||||
df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ClosePanel));
|
df_cmd_list_push(arena, cmds, &p, df_cmd_spec_from_core_cmd_kind(DF_CoreCmdKind_ClosePanel));
|
||||||
@@ -2028,7 +2109,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
DF_Entity *file = df_entity_from_handle(params.entity);
|
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)
|
for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next)
|
||||||
{
|
{
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
DF_Entity *view_entity = df_entity_from_handle(view->entity);
|
DF_Entity *view_entity = df_entity_from_handle(view->entity);
|
||||||
if(view_entity == file)
|
if(view_entity == file)
|
||||||
{
|
{
|
||||||
@@ -2039,7 +2120,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
case DF_CoreCmdKind_ReloadActive:
|
case DF_CoreCmdKind_ReloadActive:
|
||||||
{
|
{
|
||||||
DF_Panel *panel = df_panel_from_handle(params.panel);
|
DF_Panel *panel = df_panel_from_handle(params.panel);
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
DF_Entity *entity = df_entity_from_handle(view->entity);
|
DF_Entity *entity = df_entity_from_handle(view->entity);
|
||||||
if(entity->kind == DF_EntityKind_File)
|
if(entity->kind == DF_EntityKind_File)
|
||||||
{
|
{
|
||||||
@@ -2055,6 +2136,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
DF_Panel *panel = df_panel_from_handle(params.panel);
|
DF_Panel *panel = df_panel_from_handle(params.panel);
|
||||||
for(DF_View *v = panel->first_tab_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)
|
||||||
{
|
{
|
||||||
|
if(df_view_is_project_filtered(v)) { continue; }
|
||||||
DF_Entity *v_param_entity = df_entity_from_handle(v->entity);
|
DF_Entity *v_param_entity = df_entity_from_handle(v->entity);
|
||||||
if(v_param_entity == df_entity_from_handle(params.entity))
|
if(v_param_entity == df_entity_from_handle(params.entity))
|
||||||
{
|
{
|
||||||
@@ -2078,7 +2160,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
case DF_CoreCmdKind_SwitchToPartnerFile:
|
case DF_CoreCmdKind_SwitchToPartnerFile:
|
||||||
{
|
{
|
||||||
DF_Panel *panel = df_panel_from_handle(params.panel);
|
DF_Panel *panel = df_panel_from_handle(params.panel);
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
DF_Entity *entity = df_entity_from_handle(view->entity);
|
DF_Entity *entity = df_entity_from_handle(view->entity);
|
||||||
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
||||||
if(view_kind == DF_GfxViewKind_Code && entity->kind == DF_EntityKind_File)
|
if(view_kind == DF_GfxViewKind_Code && entity->kind == DF_EntityKind_File)
|
||||||
@@ -2963,13 +3045,14 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
for(DF_View *view = panel->first_tab_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)
|
||||||
{
|
{
|
||||||
|
if(df_view_is_project_filtered(view)) { continue; }
|
||||||
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
||||||
DF_Entity *viewed_entity = df_entity_from_handle(view->entity);
|
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)
|
if((view_kind == DF_GfxViewKind_Code || view_kind == DF_GfxViewKind_PendingEntity) && viewed_entity == src_code)
|
||||||
{
|
{
|
||||||
panel_w_this_src_code = panel;
|
panel_w_this_src_code = panel;
|
||||||
view_w_this_src_code = view;
|
view_w_this_src_code = view;
|
||||||
if(view == df_view_from_handle(panel->selected_tab_view))
|
if(view == df_selected_tab_from_panel(panel))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2987,6 +3070,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
for(DF_View *view = panel->first_tab_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)
|
||||||
{
|
{
|
||||||
|
if(df_view_is_project_filtered(view)) { continue; }
|
||||||
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
||||||
if(view_kind == DF_GfxViewKind_Code)
|
if(view_kind == DF_GfxViewKind_Code)
|
||||||
{
|
{
|
||||||
@@ -3007,13 +3091,14 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
for(DF_View *view = panel->first_tab_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)
|
||||||
{
|
{
|
||||||
|
if(df_view_is_project_filtered(view)) { continue; }
|
||||||
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
DF_GfxViewKind view_kind = df_gfx_view_kind_from_string(view->spec->info.name);
|
||||||
DF_Entity *viewed_entity = df_entity_from_handle(view->entity);
|
DF_Entity *viewed_entity = df_entity_from_handle(view->entity);
|
||||||
if(view_kind == DF_GfxViewKind_Disassembly)
|
if(view_kind == DF_GfxViewKind_Disassembly)
|
||||||
{
|
{
|
||||||
panel_w_disasm = panel;
|
panel_w_disasm = panel;
|
||||||
view_w_disasm = view;
|
view_w_disasm = view;
|
||||||
if(view == df_view_from_handle(panel->selected_tab_view))
|
if(view == df_selected_tab_from_panel(panel))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3057,7 +3142,16 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
Rng2F32 panel_rect = df_target_rect_from_panel(root_rect, ws->root_panel, panel);
|
Rng2F32 panel_rect = df_target_rect_from_panel(root_rect, ws->root_panel, panel);
|
||||||
Vec2F32 panel_rect_dim = dim_2f32(panel_rect);
|
Vec2F32 panel_rect_dim = dim_2f32(panel_rect);
|
||||||
F32 area = panel_rect_dim.x * panel_rect_dim.y;
|
F32 area = panel_rect_dim.x * panel_rect_dim.y;
|
||||||
if(df_view_is_nil(panel->first_tab_view) && (best_panel_area == 0 || area > best_panel_area))
|
B32 panel_is_empty = 1;
|
||||||
|
for(DF_View *v = panel->first_tab_view; !df_view_is_nil(v); v = v->next)
|
||||||
|
{
|
||||||
|
if(!df_view_is_project_filtered(v))
|
||||||
|
{
|
||||||
|
panel_is_empty = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(panel_is_empty && (best_panel_area == 0 || area > best_panel_area))
|
||||||
{
|
{
|
||||||
best_panel_area = area;
|
best_panel_area = area;
|
||||||
biggest_empty_panel = panel;
|
biggest_empty_panel = panel;
|
||||||
@@ -3091,7 +3185,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
|
|
||||||
// rjf: determine if we need a contain or center
|
// rjf: determine if we need a contain or center
|
||||||
DF_CoreCmdKind cursor_snap_kind = DF_CoreCmdKind_CenterCursor;
|
DF_CoreCmdKind cursor_snap_kind = DF_CoreCmdKind_CenterCursor;
|
||||||
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)
|
if(!df_panel_is_nil(dst_panel) && dst_view == view_w_this_src_code && df_selected_tab_from_panel(dst_panel) == dst_view)
|
||||||
{
|
{
|
||||||
cursor_snap_kind = DF_CoreCmdKind_ContainCursor;
|
cursor_snap_kind = DF_CoreCmdKind_ContainCursor;
|
||||||
}
|
}
|
||||||
@@ -3099,7 +3193,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
// rjf: move cursor & snap-to-cursor
|
// rjf: move cursor & snap-to-cursor
|
||||||
if(!df_panel_is_nil(dst_panel))
|
if(!df_panel_is_nil(dst_panel))
|
||||||
{
|
{
|
||||||
disasm_view_prioritized = (df_view_from_handle(dst_panel->selected_tab_view) == view_w_disasm);
|
disasm_view_prioritized = (df_selected_tab_from_panel(dst_panel) == view_w_disasm);
|
||||||
dst_panel->selected_tab_view = df_handle_from_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);
|
DF_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view);
|
||||||
params.text_point = point;
|
params.text_point = point;
|
||||||
@@ -3139,7 +3233,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
|
|
||||||
// rjf: determine if we need a contain or center
|
// rjf: determine if we need a contain or center
|
||||||
DF_CoreCmdKind cursor_snap_kind = DF_CoreCmdKind_CenterCursor;
|
DF_CoreCmdKind cursor_snap_kind = DF_CoreCmdKind_CenterCursor;
|
||||||
if(dst_view == view_w_disasm && df_view_from_handle(dst_panel->selected_tab_view) == dst_view)
|
if(dst_view == view_w_disasm && df_selected_tab_from_panel(dst_panel) == dst_view)
|
||||||
{
|
{
|
||||||
cursor_snap_kind = DF_CoreCmdKind_ContainCursor;
|
cursor_snap_kind = DF_CoreCmdKind_ContainCursor;
|
||||||
}
|
}
|
||||||
@@ -3167,6 +3261,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
B32 view_is_tab = 0;
|
B32 view_is_tab = 0;
|
||||||
for(DF_View *tab = panel->first_tab_view; !df_view_is_nil(tab); tab = tab->next)
|
for(DF_View *tab = panel->first_tab_view; !df_view_is_nil(tab); tab = tab->next)
|
||||||
{
|
{
|
||||||
|
if(df_view_is_project_filtered(tab)) { continue; }
|
||||||
if(tab == view)
|
if(tab == view)
|
||||||
{
|
{
|
||||||
view_is_tab = 1;
|
view_is_tab = 1;
|
||||||
@@ -3258,6 +3353,48 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- rjf: panels with no selected tabs? -> select.
|
||||||
|
// panels with selected tabs? -> ensure they have active tabs.
|
||||||
|
//
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
|
if(df_view_is_nil(view))
|
||||||
|
{
|
||||||
|
for(DF_View *tab = panel->first_tab_view; !df_view_is_nil(tab); tab = tab->next)
|
||||||
|
{
|
||||||
|
if(!df_view_is_project_filtered(tab))
|
||||||
|
{
|
||||||
|
panel->selected_tab_view = df_handle_from_view(tab);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!df_view_is_nil(view))
|
||||||
|
{
|
||||||
|
B32 found = 0;
|
||||||
|
for(DF_View *tab = panel->first_tab_view; !df_view_is_nil(tab); tab = tab->next)
|
||||||
|
{
|
||||||
|
if(df_view_is_project_filtered(tab)) {continue;}
|
||||||
|
if(tab == view)
|
||||||
|
{
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!found)
|
||||||
|
{
|
||||||
|
panel->selected_tab_view = df_handle_zero();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: process view-level commands on leaf panels
|
//- rjf: process view-level commands on leaf panels
|
||||||
//
|
//
|
||||||
@@ -3271,7 +3408,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
if(!df_view_is_nil(view))
|
if(!df_view_is_nil(view))
|
||||||
{
|
{
|
||||||
DF_ViewCmdFunctionType *do_view_cmds_function = view->spec->info.cmd_hook;
|
DF_ViewCmdFunctionType *do_view_cmds_function = view->spec->info.cmd_hook;
|
||||||
@@ -5702,7 +5839,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
{
|
{
|
||||||
if(!df_panel_is_nil(panel->first)) { continue; }
|
if(!df_panel_is_nil(panel->first)) { continue; }
|
||||||
Rng2F32 panel_rect = df_target_rect_from_panel(content_rect, ws->root_panel, panel);
|
Rng2F32 panel_rect = df_target_rect_from_panel(content_rect, ws->root_panel, panel);
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
if(!df_view_is_nil(view) &&
|
if(!df_view_is_nil(view) &&
|
||||||
contains_2f32(panel_rect, ui_mouse()) &&
|
contains_2f32(panel_rect, ui_mouse()) &&
|
||||||
(abs_f32(view->scroll_pos.x.off) > 0.01f ||
|
(abs_f32(view->scroll_pos.x.off) > 0.01f ||
|
||||||
@@ -6369,7 +6506,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
content_rect.y1 = panel_rect.y1 - tab_bar_vheight;
|
content_rect.y1 = panel_rect.y1 - tab_bar_vheight;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
DF_View *tab = df_view_from_handle(panel->selected_tab_view);
|
DF_View *tab = df_selected_tab_from_panel(panel);
|
||||||
if(tab->is_filtering_t > 0.01f)
|
if(tab->is_filtering_t > 0.01f)
|
||||||
{
|
{
|
||||||
filter_rect.x0 = content_rect.x0;
|
filter_rect.x0 = content_rect.x0;
|
||||||
@@ -6568,7 +6705,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
//- rjf: build filtering box
|
//- rjf: build filtering box
|
||||||
//
|
//
|
||||||
{
|
{
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
UI_Focus(UI_FocusKind_On)
|
UI_Focus(UI_FocusKind_On)
|
||||||
{
|
{
|
||||||
if(view->is_filtering && ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept))
|
if(view->is_filtering && ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept))
|
||||||
@@ -6643,7 +6780,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
//
|
//
|
||||||
UI_Parent(panel_box)
|
UI_Parent(panel_box)
|
||||||
{
|
{
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
if(view->flash_t >= 0.001f)
|
if(view->flash_t >= 0.001f)
|
||||||
{
|
{
|
||||||
UI_Box *panel_box = ui_top_parent();
|
UI_Box *panel_box = ui_top_parent();
|
||||||
@@ -6666,7 +6803,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
//
|
//
|
||||||
UI_Parent(panel_box)
|
UI_Parent(panel_box)
|
||||||
{
|
{
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
if(view->loading_t >= 0.001f)
|
if(view->loading_t >= 0.001f)
|
||||||
{
|
{
|
||||||
// rjf: set up dimensions
|
// rjf: set up dimensions
|
||||||
@@ -6767,15 +6904,15 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: build empty view
|
//- rjf: build empty view
|
||||||
UI_Parent(view_container_box) if(df_view_is_nil(df_view_from_handle(panel->selected_tab_view)))
|
UI_Parent(view_container_box) if(df_view_is_nil(df_selected_tab_from_panel(panel)))
|
||||||
{
|
{
|
||||||
DF_VIEW_UI_FUNCTION_NAME(Empty)(ws, panel, &df_g_nil_view, content_rect);
|
DF_VIEW_UI_FUNCTION_NAME(Empty)(ws, panel, &df_g_nil_view, content_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: build tab view
|
//- rjf: build tab view
|
||||||
UI_Parent(view_container_box) if(!df_view_is_nil(df_view_from_handle(panel->selected_tab_view)))
|
UI_Parent(view_container_box) if(!df_view_is_nil(df_selected_tab_from_panel(panel)))
|
||||||
{
|
{
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
DF_ViewUIFunctionType *build_view_ui_function = view->spec->info.ui_hook;
|
DF_ViewUIFunctionType *build_view_ui_function = view->spec->info.ui_hook;
|
||||||
build_view_ui_function(ws, panel, view, content_rect);
|
build_view_ui_function(ws, panel, view, content_rect);
|
||||||
}
|
}
|
||||||
@@ -6786,7 +6923,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
//
|
//
|
||||||
UI_Focus(UI_FocusKind_On)
|
UI_Focus(UI_FocusKind_On)
|
||||||
{
|
{
|
||||||
DF_View *view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *view = df_selected_tab_from_panel(panel);
|
||||||
if(ui_is_focus_active() && view->spec->info.flags & DF_ViewSpecFlag_TypingAutomaticallyFilters && !view->is_filtering)
|
if(ui_is_focus_active() && view->spec->info.flags & DF_ViewSpecFlag_TypingAutomaticallyFilters && !view->is_filtering)
|
||||||
{
|
{
|
||||||
DF_CmdParams p = df_cmd_params_from_view(ws, panel, view);
|
DF_CmdParams p = df_cmd_params_from_view(ws, panel, view);
|
||||||
@@ -6842,7 +6979,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
};
|
};
|
||||||
|
|
||||||
// rjf: prep output data
|
// rjf: prep output data
|
||||||
DF_View *next_selected_tab_view = df_view_from_handle(panel->selected_tab_view);
|
DF_View *next_selected_tab_view = df_selected_tab_from_panel(panel);
|
||||||
UI_Box *tab_bar_box = &ui_g_nil_box;
|
UI_Box *tab_bar_box = &ui_g_nil_box;
|
||||||
U64 drop_site_count = panel->tab_view_count+1;
|
U64 drop_site_count = panel->tab_view_count+1;
|
||||||
DropSite *drop_sites = push_array(scratch.arena, DropSite, drop_site_count);
|
DropSite *drop_sites = push_array(scratch.arena, DropSite, drop_site_count);
|
||||||
@@ -6874,7 +7011,8 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
{
|
{
|
||||||
for(DF_View *view = panel->first_tab_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)
|
||||||
{
|
{
|
||||||
B32 view_is_selected = (view == df_view_from_handle(panel->selected_tab_view));
|
if(df_view_is_project_filtered(view)) { continue; }
|
||||||
|
B32 view_is_selected = (view == df_selected_tab_from_panel(panel));
|
||||||
DF_IconKind icon_kind = df_icon_kind_from_view(view);
|
DF_IconKind icon_kind = df_icon_kind_from_view(view);
|
||||||
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view);
|
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view);
|
||||||
String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view);
|
String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view);
|
||||||
@@ -6935,6 +7073,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
for(DF_View *view = panel->first_tab_view;; view = view->next, view_idx += 1)
|
for(DF_View *view = panel->first_tab_view;; view = view->next, view_idx += 1)
|
||||||
{
|
{
|
||||||
temp_end(scratch);
|
temp_end(scratch);
|
||||||
|
if(df_view_is_project_filtered(view)) { continue; }
|
||||||
|
|
||||||
// rjf: if before this tab is the prev-view of the current tab drag,
|
// rjf: if before this tab is the prev-view of the current tab drag,
|
||||||
// draw empty space
|
// draw empty space
|
||||||
@@ -6967,7 +7106,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rjf: gather info for this tab
|
// rjf: gather info for this tab
|
||||||
B32 view_is_selected = (view == df_view_from_handle(panel->selected_tab_view));
|
B32 view_is_selected = (view == df_selected_tab_from_panel(panel));
|
||||||
DF_IconKind icon_kind = df_icon_kind_from_view(view);
|
DF_IconKind icon_kind = df_icon_kind_from_view(view);
|
||||||
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view);
|
DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view);
|
||||||
String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view);
|
String8 label = df_display_string_from_view(scratch.arena, ctrl_ctx, view);
|
||||||
@@ -7260,6 +7399,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
B32 view_is_in_panel = 0;
|
B32 view_is_in_panel = 0;
|
||||||
for(DF_View *view = panel->first_tab_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)
|
||||||
{
|
{
|
||||||
|
if(df_view_is_project_filtered(view)) { continue; }
|
||||||
if(view == dragged_view)
|
if(view == dragged_view)
|
||||||
{
|
{
|
||||||
view_is_in_panel = 1;
|
view_is_in_panel = 1;
|
||||||
@@ -7347,7 +7487,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
{
|
{
|
||||||
df_gfx_request_frame();
|
df_gfx_request_frame();
|
||||||
}
|
}
|
||||||
if(view->loading_t_target != 0 && view == df_view_from_handle(panel->selected_tab_view))
|
if(view->loading_t_target != 0 && view == df_selected_tab_from_panel(panel))
|
||||||
{
|
{
|
||||||
df_gfx_request_frame();
|
df_gfx_request_frame();
|
||||||
}
|
}
|
||||||
@@ -7368,7 +7508,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, DF_CmdList *cmds)
|
|||||||
{
|
{
|
||||||
view->is_filtering_t = (F32)!!view->is_filtering;
|
view->is_filtering_t = (F32)!!view->is_filtering;
|
||||||
}
|
}
|
||||||
if(view == df_view_from_handle(panel->selected_tab_view))
|
if(view == df_selected_tab_from_panel(panel))
|
||||||
{
|
{
|
||||||
view->loading_t_target = 0;
|
view->loading_t_target = 0;
|
||||||
}
|
}
|
||||||
@@ -9358,7 +9498,7 @@ df_cfg_strings_from_gfx(Arena *arena, String8 root_path, DF_CfgSrc source)
|
|||||||
|
|
||||||
// rjf: serialize view parameterizations
|
// rjf: serialize view parameterizations
|
||||||
str8_list_push(arena, &strs, str8_lit(": {"));
|
str8_list_push(arena, &strs, str8_lit(": {"));
|
||||||
if(view == df_view_from_handle(p->selected_tab_view))
|
if(view == df_selected_tab_from_panel(p))
|
||||||
{
|
{
|
||||||
str8_list_push(arena, &strs, str8_lit("selected "));
|
str8_list_push(arena, &strs, str8_lit("selected "));
|
||||||
}
|
}
|
||||||
@@ -13163,7 +13303,7 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds)
|
|||||||
DF_CmdParams p = params;
|
DF_CmdParams p = params;
|
||||||
p.window = df_handle_from_window(window);
|
p.window = df_handle_from_window(window);
|
||||||
p.panel = df_handle_from_panel(window->focused_panel);
|
p.panel = df_handle_from_panel(window->focused_panel);
|
||||||
p.view = df_handle_from_view(df_view_from_handle(window->focused_panel->selected_tab_view));
|
p.view = df_handle_from_view(df_selected_tab_from_panel(window->focused_panel));
|
||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_Window);
|
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_Panel);
|
||||||
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View);
|
df_cmd_params_mark_slot(&p, DF_CmdParamSlot_View);
|
||||||
@@ -13454,6 +13594,8 @@ df_gfx_begin_frame(Arena *arena, DF_CmdList *cmds)
|
|||||||
// rjf: insert
|
// rjf: insert
|
||||||
if(!df_view_is_nil(view))
|
if(!df_view_is_nil(view))
|
||||||
{
|
{
|
||||||
|
DF_Entity *current_project = df_entity_from_path(df_cfg_path_from_src(DF_CfgSrc_Project), DF_EntityFromPathFlag_OpenMissing|DF_EntityFromPathFlag_OpenAsNeeded);
|
||||||
|
DF_Entity *view_project = df_entity_from_handle(view->project);
|
||||||
df_panel_insert_tab_view(panel, panel->last_tab_view, view);
|
df_panel_insert_tab_view(panel, panel->last_tab_view, view);
|
||||||
if(view_is_selected)
|
if(view_is_selected)
|
||||||
{
|
{
|
||||||
|
|||||||
+3
-1
@@ -245,7 +245,7 @@ struct DF_Panel
|
|||||||
// rjf: tab params
|
// rjf: tab params
|
||||||
Side tab_side;
|
Side tab_side;
|
||||||
|
|
||||||
// rjf: stable view stacks (tabs)
|
// rjf: stable views (tabs)
|
||||||
DF_View *first_tab_view;
|
DF_View *first_tab_view;
|
||||||
DF_View *last_tab_view;
|
DF_View *last_tab_view;
|
||||||
U64 tab_view_count;
|
U64 tab_view_count;
|
||||||
@@ -803,6 +803,7 @@ internal DF_PathQuery df_path_query_from_string(String8 string);
|
|||||||
//~ rjf: View Type Functions
|
//~ rjf: View Type Functions
|
||||||
|
|
||||||
internal B32 df_view_is_nil(DF_View *view);
|
internal B32 df_view_is_nil(DF_View *view);
|
||||||
|
internal B32 df_view_is_project_filtered(DF_View *view);
|
||||||
internal DF_Handle df_handle_from_view(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_from_handle(DF_Handle handle);
|
||||||
|
|
||||||
@@ -839,6 +840,7 @@ internal Rng2F32 df_target_rect_from_panel(Rng2F32 root_rect, DF_Panel *root, DF
|
|||||||
//- rjf: view ownership insertion/removal
|
//- rjf: view ownership insertion/removal
|
||||||
internal void df_panel_insert_tab_view(DF_Panel *panel, DF_View *prev_view, DF_View *view);
|
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);
|
internal void df_panel_remove_tab_view(DF_Panel *panel, DF_View *view);
|
||||||
|
internal DF_View *df_selected_tab_from_panel(DF_Panel *panel);
|
||||||
|
|
||||||
//- rjf: icons & display strings
|
//- rjf: icons & display strings
|
||||||
internal String8 df_display_string_from_view(Arena *arena, DF_CtrlCtx ctrl_ctx, DF_View *view);
|
internal String8 df_display_string_from_view(Arena *arena, DF_CtrlCtx ctrl_ctx, DF_View *view);
|
||||||
|
|||||||
Reference in New Issue
Block a user