diff --git a/4coder_helper/4coder_jump_parsing.h b/4coder_helper/4coder_jump_parsing.h index 202a3419..62c3ea4d 100644 --- a/4coder_helper/4coder_jump_parsing.h +++ b/4coder_helper/4coder_jump_parsing.h @@ -34,7 +34,7 @@ ms_style_verify(String line, int32_t left_paren_pos, int32_t right_paren_pos){ result = true; } if (result){ - String number = substr(line, left_paren_pos, right_paren_pos - left_paren_pos); + String number = substr(line, left_paren_pos + 1, right_paren_pos - left_paren_pos - 2); if (!str_is_int_s(number)){ result = false; } diff --git a/4ed.cpp b/4ed.cpp index 69fca0e9..237a4c08 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -270,10 +270,6 @@ consume_input(Available_Input *available, i32 input_type, char *consumer){ struct App_Vars{ Models models; - // TODO(allen): This wants to live in - // models with everyone else but the order - // of declaration is a little bit off... - Live_Views live_set; CLI_List cli_processes; @@ -388,15 +384,11 @@ do_feedback_message(System_Functions *system, Models *models, String value, b32 #define COMMAND_DECL(n) internal void command_##n(System_Functions *system, Command_Data *command, Command_Binding binding) internal View* -panel_make_empty(System_Functions *system, App_Vars *vars, Panel *panel){ - Models *models = &vars->models; - View_And_ID new_view; - +panel_make_empty(System_Functions *system, Models *models, Panel *panel){ Assert(panel->view == 0); - new_view = live_set_alloc_view(&vars->live_set, panel, models); + View_And_ID new_view = live_set_alloc_view(&models->live_set, panel, models); view_set_file(system, new_view.view, models->scratch_buffer, models); new_view.view->map = get_map(models, models->scratch_buffer->settings.base_map_id); - return(new_view.view); } @@ -425,18 +417,21 @@ COMMAND_DECL(redo){ } COMMAND_DECL(interactive_new){ + USE_MODELS(models); USE_VIEW(view); - view_show_interactive(system, view, IAct_New, IInt_Sys_File_List, make_lit_string("New: ")); + view_show_interactive(system, view, models, IAct_New, IInt_Sys_File_List, make_lit_string("New: ")); } COMMAND_DECL(interactive_open){ + USE_MODELS(models); USE_VIEW(view); - view_show_interactive(system, view, IAct_Open, IInt_Sys_File_List,make_lit_string("Open: ")); + view_show_interactive(system, view, models, IAct_Open, IInt_Sys_File_List,make_lit_string("Open: ")); } COMMAND_DECL(interactive_open_or_new){ + USE_MODELS(models); USE_VIEW(view); - view_show_interactive(system, view, IAct_OpenOrNew, IInt_Sys_File_List,make_lit_string("Open: ")); + view_show_interactive(system, view, models, IAct_OpenOrNew, IInt_Sys_File_List,make_lit_string("Open: ")); } // TODO(allen): Improvements to reopen @@ -520,10 +515,11 @@ COMMAND_DECL(save){ } COMMAND_DECL(save_as){ + USE_MODELS(models); USE_VIEW(view); REQ_FILE(file, view); - view_show_interactive(system, view, IAct_Save_As, IInt_Sys_File_List, make_lit_string("Save As: ")); + view_show_interactive(system, view, models, IAct_Save_As, IInt_Sys_File_List, make_lit_string("Save As: ")); } COMMAND_DECL(change_active_panel){ @@ -538,15 +534,17 @@ COMMAND_DECL(change_active_panel){ } COMMAND_DECL(interactive_switch_buffer){ + USE_MODELS(models); USE_VIEW(view); - view_show_interactive(system, view, IAct_Switch, IInt_Live_File_List, make_lit_string("Switch Buffer: ")); + view_show_interactive(system, view, models, IAct_Switch, IInt_Live_File_List, make_lit_string("Switch Buffer: ")); } COMMAND_DECL(interactive_kill_buffer){ + USE_MODELS(models); USE_VIEW(view); - view_show_interactive(system, view, IAct_Kill, IInt_Live_File_List, make_lit_string("Kill Buffer: ")); + view_show_interactive(system, view, models, IAct_Kill, IInt_Live_File_List, make_lit_string("Kill Buffer: ")); } COMMAND_DECL(kill_buffer){ @@ -590,12 +588,14 @@ case_change_range(System_Functions *system, Models *models, View *view, Editing_ COMMAND_DECL(open_color_tweaker){ USE_VIEW(view); - view_show_theme(view); + USE_MODELS(models); + view_show_theme(view, models); } COMMAND_DECL(open_debug){ USE_VIEW(view); - view_show_GUI(view, VUI_Debug); + USE_MODELS(models); + view_show_GUI(view, models, VUI_Debug); view->debug_vars = null_debug_vars; } @@ -1042,23 +1042,20 @@ App_Init_Sig(app_init){ models->layout.free_divider = dividers; { - models->live_set = &vars->live_set; + models->live_set.count = 0; + models->live_set.max = panel_max_count; - vars->live_set.count = 0; - vars->live_set.max = panel_max_count; + models->live_set.views = push_array(partition, View, models->live_set.max); - vars->live_set.views = push_array(partition, View, vars->live_set.max); + dll_init_sentinel(&models->live_set.free_sentinel); - dll_init_sentinel(&vars->live_set.free_sentinel); - - i32 max = vars->live_set.max; - View *view = vars->live_set.views; + i32 max = models->live_set.max; + View *view = models->live_set.views; for (i32 i = 0; i < max; ++i, ++view){ - dll_insert(&vars->live_set.free_sentinel, view); + dll_insert(&models->live_set.free_sentinel, view); View_Persistent *persistent = &view->persistent; persistent->id = i; - persistent->models = models; } } @@ -1295,7 +1292,7 @@ App_Init_Sig(app_init){ cmd->models = models; cmd->vars = vars; cmd->system = system; - cmd->live_set = &vars->live_set; + cmd->live_set = &models->live_set; cmd->screen_width = target->width; cmd->screen_height = target->height; @@ -1336,7 +1333,7 @@ App_Init_Sig(app_init){ } Panel_And_ID p = layout_alloc_panel(&models->layout); - panel_make_empty(system, vars, p.panel); + panel_make_empty(system, models, p.panel); models->layout.active_panel = p.id; hot_directory_init(&models->hot_directory, current_directory); @@ -1566,7 +1563,7 @@ App_Step_Sig(app_step){ } } - for (i32 i = proc_free_count - 1; i >= 0; ++i){ + for (i32 i = proc_free_count - 1; i >= 0; --i){ cli_list_free_proc(list, procs_to_free[i]); } @@ -1579,7 +1576,7 @@ App_Step_Sig(app_step){ cmd->models = models; cmd->vars = vars; cmd->system = system; - cmd->live_set = &vars->live_set; + cmd->live_set = &models->live_set; cmd->screen_width = target->width; cmd->screen_height = target->height; @@ -1663,9 +1660,7 @@ App_Step_Sig(app_step){ view = panel->view; } - view_show_interactive(system, view, - IAct_Sure_To_Close, IInt_Sure_To_Close, - make_lit_string("Are you sure?")); + view_show_interactive(system, view, models, IAct_Sure_To_Close, IInt_Sure_To_Close, make_lit_string("Are you sure?")); models->command_coroutine = command_coroutine; } @@ -1861,7 +1856,7 @@ App_Step_Sig(app_step){ view->changed_context_in_step = 0; - View_Step_Result result = step_file_view(system, view, active_view, summary); + View_Step_Result result = step_file_view(system, view, models, active_view, summary); if (result.animating){ app_result.animating = 1; @@ -1901,7 +1896,7 @@ App_Step_Sig(app_step){ max_y = view->gui_max_y; } - Input_Process_Result ip_result = do_step_file_view(system, view, panel->inner, active, &summary, *scroll_vars, view->scroll_region, max_y); + Input_Process_Result ip_result = do_step_file_view(system, view, models, panel->inner, active, &summary, *scroll_vars, view->scroll_region, max_y); if (ip_result.is_animating){ app_result.animating = 1; @@ -2244,7 +2239,7 @@ App_Step_Sig(app_step){ } } - do_render_file_view(system, view, scroll_vars, active_view, panel->inner, active, target, &dead_input); + do_render_file_view(system, view, models, scroll_vars, active_view, panel->inner, active, target, &dead_input); draw_pop_clip(target); diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 226e181f..55b04450 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -102,7 +102,7 @@ fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Live inline void fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Command_Data *cmd){ - fill_view_summary(system, view, vptr, &cmd->vars->live_set, &cmd->models->working_set); + fill_view_summary(system, view, vptr, &cmd->models->live_set, &cmd->models->working_set); } internal Editing_File* @@ -335,7 +335,7 @@ DOC_SEE(Command_Line_Interface_Flag) View *vptr = imp_get_view(cmd, view); if (vptr != 0){ view_set_file(system, vptr, file, models); - view_show_file(vptr); + view_show_file(vptr, models); } } } @@ -1396,7 +1396,7 @@ DOC_SEE(Buffer_Identifier) Try_Kill_Result kill_result = interactive_try_kill_file(system, models, file); if (kill_result == TryKill_NeedDialogue){ if (vptr){ - interactive_begin_sure_to_kill(system, vptr, file); + interactive_begin_sure_to_kill(system, vptr, models, file); } else{ #define MESSAGE "CUSTOM WARNING: the buffer is dirty and no view was specified for a dialogue.\n" @@ -1429,17 +1429,17 @@ internal void internal_get_view_next(Command_Data *cmd, View_Summary *view){ System_Functions *system = cmd->system; Editing_Layout *layout = &cmd->models->layout; - Live_Views *live_set = &cmd->vars->live_set; + Live_Views *live_set = &cmd->models->live_set; int32_t index = view->view_id - 1; if (index >= 0 && index < live_set->max){ View *vptr = live_set->views + index; Panel *panel = vptr->panel; - if (panel){ + if (panel != 0){ panel = panel->next; } - if (panel && panel != &layout->used_sentinel){ - fill_view_summary(system, view, panel->view, &cmd->vars->live_set, &cmd->models->working_set); + if (panel != 0 && panel != &layout->used_sentinel){ + fill_view_summary(system, view, panel->view, live_set, &cmd->models->working_set); } else{ *view = null_view_summary; @@ -1534,12 +1534,13 @@ DOC_SEE(Access_Flag) */{ Command_Data *cmd = (Command_Data*)app->cmd_context; System_Functions *system = cmd->system; - Panel *panel = cmd->models->layout.panels + cmd->models->layout.active_panel; + Models *models = cmd->models; + Panel *panel = models->layout.panels + models->layout.active_panel; Assert(panel->view != 0); View_Summary view = {0}; - fill_view_summary(system, &view, panel->view, &cmd->vars->live_set, &cmd->models->working_set); + fill_view_summary(system, &view, panel->view, &models->live_set, &models->working_set); if (!access_test(view.lock_flags, access)){ view = null_view_summary; } @@ -1598,7 +1599,7 @@ DOC_SEE(View_Split_Position) split.panel->prev_inner = split.panel->inner; models->layout.active_panel = (i32)(split.panel - models->layout.panels); - panel_make_empty(system, cmd->vars, split.panel); + panel_make_empty(system, cmd->models, split.panel); fill_view_summary(system, &result, split.panel->view, cmd); } @@ -1634,7 +1635,7 @@ in the system, the call will fail.) i32 which_child; i32 active; - live_set_free_view(models->live_set, vptr); + live_set_free_view(&models->live_set, vptr, models); panel->view = 0; div = layout_get_divider(&models->layout, panel->parent); @@ -2013,7 +2014,7 @@ DOC_SEE(Set_Buffer_Flag) if (file != vptr->file_data.file){ view_set_file(system, vptr, file, models); if (!(flags & SetBuffer_KeepOriginalGUI)){ - view_show_file(vptr); + view_show_file(vptr, models); } } } diff --git a/4ed_app_models.h b/4ed_app_models.h index 6a69e79c..baf051b2 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -79,9 +79,9 @@ struct Models{ Editing_Layout layout; Working_Set working_set; + Live_Views live_set; Parse_Context_Memory parse_context_memory; - struct Live_Views *live_set; Editing_File *message_buffer; Editing_File *scratch_buffer; diff --git a/4ed_app_target.cpp b/4ed_app_target.cpp index 5fd112a6..be27a980 100644 --- a/4ed_app_target.cpp +++ b/4ed_app_target.cpp @@ -62,6 +62,8 @@ #include "4ed_gui.h" #include "4ed_gui.cpp" #include "4ed_layout.cpp" +#include "4ed_view.cpp" + #include "4ed_app_models.h" #include "4ed_file_view.cpp" #include "4ed.cpp" diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index 3a05622f..cf313124 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -103,152 +103,6 @@ map_get_max_count(Models *models, i32 mapid){ return(count); } -enum Interactive_Action{ - IAct_Open, - IAct_Save_As, - IAct_New, - IAct_OpenOrNew, - IAct_Switch, - IAct_Kill, - IAct_Sure_To_Kill, - IAct_Sure_To_Close -}; - -enum Interactive_Interaction{ - IInt_Sys_File_List, - IInt_Live_File_List, - IInt_Sure_To_Kill, - IInt_Sure_To_Close -}; - -enum View_UI{ - VUI_None, - VUI_Theme, - VUI_Interactive, - VUI_Debug -}; - -enum Debug_Mode{ - DBG_Input, - DBG_Threads_And_Memory, - DBG_View_Inspection -}; - -enum Color_View_Mode{ - CV_Mode_Library, - CV_Mode_Font, - CV_Mode_Global_Font, - CV_Mode_Adjusting -}; - -struct File_Viewing_Data{ - Editing_File *file; - - Full_Cursor temp_highlight; - i32 temp_highlight_end_pos; - b32 show_temp_highlight; - - b32 show_whitespace; - b32 file_locked; -}; -static File_Viewing_Data null_file_viewing_data = {0}; - -struct Scroll_Context{ - Editing_File *file; - GUI_id scroll; - View_UI mode; -}; -inline b32 -context_eq(Scroll_Context a, Scroll_Context b){ - b32 result = 0; - if (gui_id_eq(a.scroll, b.scroll)){ - if (a.file == b.file){ - if (a.mode == b.mode){ - result = 1; - } - } - } - return(result); -} - -struct View_Persistent{ - i32 id; - - Coroutine *coroutine; - Event_Message message_passing_slot; - - // TODO(allen): eliminate this models pointer: explicitly parameterize. - Models *models; -}; - -struct Debug_Vars{ - i32 mode; - i32 inspecting_view_id; -}; -global_const Debug_Vars null_debug_vars = {0}; - -struct View{ - View_Persistent persistent; - - View *next, *prev; - Panel *panel; - b32 in_use; - Command_Map *map; - - File_Viewing_Data file_data; - - i32_Rect file_region_prev; - i32_Rect file_region; - - i32_Rect scroll_region; - File_Edit_Positions *edit_pos; - - View_UI showing_ui; - GUI_Target gui_target; - void *gui_mem; - GUI_Scroll_Vars gui_scroll; - i32 gui_max_y; - i32 list_i; - - b32 hide_scrollbar; - b32 hide_file_bar; - - // interactive stuff - Interactive_Interaction interaction; - Interactive_Action action; - - char dest_[256]; - String dest; - - b32 changed_context_in_step; - - // theme stuff - View *hot_file_view; - u32 *palette; - Color_View_Mode color_mode; - Super_Color color; - b32 p4c_only; - Style_Library inspecting_styles; - b8 import_export_check[64]; - i32 import_file_id; - i32 current_color_editing; - i32 color_cursor; - - // misc - - // TODO(allen): Can we burn line_height to the ground now? - // It's what I've always wanted!!!! :D - i32 line_height; - - // TODO(allen): Do I still use mode? - Query_Set query_set; - f32 widget_height; - - b32 reinit_scrolling; - - Debug_Vars debug_vars; -}; - inline void* get_view_body(View *view){ char *result = (char*)view; @@ -634,12 +488,6 @@ struct View_And_ID{ i32 id; }; -struct Live_Views{ - View *views; - View free_sentinel; - i32 count, max; -}; - enum Lock_Level{ LockLevel_Open = 0, LockLevel_Protected = 1, @@ -2940,13 +2788,13 @@ view_cursor_move(System_Functions *system, View *view, i32 line, i32 character){ } inline void -view_show_file(View *view){ +view_show_file(View *view, Models *models){ Editing_File *file = view->file_data.file; if (file){ - view->map = get_map(view->persistent.models, file->settings.base_map_id); + view->map = get_map(models, file->settings.base_map_id); } else{ - view->map = get_map(view->persistent.models, mapid_global); + view->map = get_map(models, mapid_global); } if (view->showing_ui != VUI_None){ @@ -2983,7 +2831,7 @@ view_set_file(System_Functions *system, View *view, Editing_File *file, Models * } if (view->showing_ui == VUI_None){ - view_show_file(view); + view_show_file(view, models); } } @@ -3809,17 +3657,14 @@ global_set_font(System_Functions *system, Models *models, Font_ID font_id){ } inline void -view_show_GUI(View *view, View_UI ui){ - view->map = &view->persistent.models->map_ui; +view_show_GUI(View *view, Models *models, View_UI ui){ + view->map = &models->map_ui; view->showing_ui = ui; - view->changed_context_in_step = 1; + view->changed_context_in_step = true; } inline void -view_show_interactive(System_Functions *system, View *view, Interactive_Action action, Interactive_Interaction interaction, String query){ - - Models *models = view->persistent.models; - +view_show_interactive(System_Functions *system, View *view, Models *models, Interactive_Action action, Interactive_Interaction interaction, String query){ view->showing_ui = VUI_Interactive; view->action = action; view->interaction = interaction; @@ -3834,8 +3679,8 @@ view_show_interactive(System_Functions *system, View *view, Interactive_Action a } inline void -view_show_theme(View *view){ - view->map = &view->persistent.models->map_ui; +view_show_theme(View *view, Models *models){ + view->map = &models->map_ui; view->showing_ui = VUI_Theme; view->color_mode = CV_Mode_Library; view->color = super_color_create(0xFF000000); @@ -4038,8 +3883,8 @@ save_file_by_name(System_Functions *system, Models *models, String name){ } internal void -interactive_begin_sure_to_kill(System_Functions *system, View *view, Editing_File *file){ - view_show_interactive(system, view, IAct_Sure_To_Kill, IInt_Sure_To_Kill, make_lit_string("Are you sure?")); +interactive_begin_sure_to_kill(System_Functions *system, View *view, Models *models, Editing_File *file){ + view_show_interactive(system, view, models, IAct_Sure_To_Kill, IInt_Sure_To_Kill, make_lit_string("Are you sure?")); copy_ss(&view->dest, file->name.live_name); } @@ -4071,7 +3916,7 @@ interactive_try_kill_file(System_Functions *system, Models *models, View *view, Try_Kill_Result kill_result = interactive_try_kill_file(system, models, file); b32 result = (kill_result == TryKill_NeedDialogue); if (result){ - interactive_begin_sure_to_kill(system, view, file); + interactive_begin_sure_to_kill(system, view, models, file); } return(result); } @@ -4089,26 +3934,24 @@ interactive_try_kill_file_by_name(System_Functions *system, Models *models, View } internal void -interactive_view_complete(System_Functions *system, View *view, String dest, i32 user_action){ - Models *models = view->persistent.models; - +interactive_view_complete(System_Functions *system, View *view, Models *models, String dest, i32 user_action){ switch (view->action){ case IAct_Open: { view_open_file(system, models, view, dest); - view_show_file(view); + view_show_file(view, models); }break; case IAct_Save_As: { view_interactive_save_as(system, models, view->file_data.file, dest); - view_show_file(view); + view_show_file(view, models); }break; case IAct_New: if (dest.size > 0 && !char_is_slash(dest.str[dest.size-1])){ view_interactive_new_file(system, models, view, dest); - view_show_file(view); + view_show_file(view, models); if (models->hook_new_file != 0){ Editing_File *file = view->file_data.file; models->hook_new_file(&models->app_links, file->id.id); @@ -4126,12 +3969,12 @@ interactive_view_complete(System_Functions *system, View *view, String dest, i32 if (file){ view_set_file(system, view, file, models); } - view_show_file(view); + view_show_file(view, models); }break; case IAct_Kill: if (!interactive_try_kill_file_by_name(system, models, view, dest)){ - view_show_file(view); + view_show_file(view, models); }break; case IAct_Sure_To_Close: @@ -4143,7 +3986,7 @@ interactive_view_complete(System_Functions *system, View *view, String dest, i32 case 1: { - view_show_file(view); + view_show_file(view, models); }break; case 2: // TODO(allen): Save all and close. @@ -4155,19 +3998,19 @@ interactive_view_complete(System_Functions *system, View *view, String dest, i32 case 0: { kill_file_by_name(system, models, dest); - view_show_file(view); + view_show_file(view, models); }break; case 1: { - view_show_file(view); + view_show_file(view, models); }break; case 2: { save_file_by_name(system, models, dest); kill_file_by_name(system, models, dest); - view_show_file(view); + view_show_file(view, models); }break; }break; } @@ -4629,10 +4472,9 @@ gui_show_mouse(GUI_Target *target, String *string, i32 mx, i32 my){ } internal View_Step_Result -step_file_view(System_Functions *system, View *view, View *active_view, Input_Summary input){ +step_file_view(System_Functions *system, View *view, Models *models, View *active_view, Input_Summary input){ View_Step_Result result = {0}; GUI_Target *target = &view->gui_target; - Models *models = view->persistent.models; Key_Input_Data keys = input.keys; b32 show_scrollbar = !view->hide_scrollbar; @@ -4651,8 +4493,8 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su } if (did_esc){ - view_show_file(view); - result.consume_esc = 1; + view_show_file(view, models); + result.consume_esc = true; } } @@ -5212,7 +5054,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su if (complete){ terminate_with_null(&comp_dest); - interactive_view_complete(system, view, comp_dest, comp_action); + interactive_view_complete(system, view, models, comp_dest, comp_action); } }break; @@ -5281,7 +5123,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su { case DBG_Input: { - Debug_Data *debug = &view->persistent.models->debug; + Debug_Data *debug = &models->debug; gui_show_mouse(target, &string, input.mouse.x, input.mouse.y); @@ -5429,7 +5271,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su } } else if (inspecting_id >= 1 && inspecting_id <= 16){ - Live_Views *live_set = models->live_set; + Live_Views *live_set = &models->live_set; View *view_ptr = live_set->views + inspecting_id - 1; views_to_inspect[view_count++] = view_ptr; low_detail = 0; @@ -5670,7 +5512,7 @@ to_writable_character(Key_Code long_character, u8 *character){ } internal Input_Process_Result -do_step_file_view(System_Functions *system, View *view, i32_Rect rect, b32 is_active, Input_Summary *user_input, GUI_Scroll_Vars vars, i32_Rect region, i32 max_y){ +do_step_file_view(System_Functions *system, View *view, Models *models, i32_Rect rect, b32 is_active, Input_Summary *user_input, GUI_Scroll_Vars vars, i32_Rect region, i32 max_y){ Input_Process_Result result = {0}; b32 is_file_scroll = 0; @@ -5886,10 +5728,8 @@ do_step_file_view(System_Functions *system, View *view, i32_Rect rect, b32 is_ac f32 target_x = (f32)scroll_vars.target_x; f32 target_y = (f32)scroll_vars.target_y; - if (view->persistent.models->scroll_rule(target_x, target_y, - &scroll_vars.scroll_x, &scroll_vars.scroll_y, - (view->persistent.id) + 1, is_new_target, user_input->dt)){ - result.is_animating = 1; + if (models->scroll_rule(target_x, target_y, &scroll_vars.scroll_x, &scroll_vars.scroll_y, (view->persistent.id) + 1, is_new_target, user_input->dt)){ + result.is_animating = true; } scroll_vars.prev_target_x = scroll_vars.target_x; @@ -5903,8 +5743,7 @@ do_step_file_view(System_Functions *system, View *view, i32_Rect rect, b32 is_ac } internal i32 -draw_file_loaded(System_Functions *system, View *view, i32_Rect rect, b32 is_active, Render_Target *target){ - Models *models = view->persistent.models; +draw_file_loaded(System_Functions *system, View *view, Models *models, i32_Rect rect, b32 is_active, Render_Target *target){ Editing_File *file = view->file_data.file; Style *style = main_style(models); i32 line_height = view->line_height; @@ -6139,8 +5978,7 @@ draw_file_loaded(System_Functions *system, View *view, i32_Rect rect, b32 is_act } internal void -draw_text_field(System_Functions *system, Render_Target *target, View *view, Font_ID font_id, i32_Rect rect, String p, String t){ - Models *models = view->persistent.models; +draw_text_field(System_Functions *system, Render_Target *target, View *view, Models *models, Font_ID font_id, i32_Rect rect, String p, String t){ Style *style = main_style(models); u32 back_color = style->main.margin_color; @@ -6158,8 +5996,7 @@ draw_text_field(System_Functions *system, Render_Target *target, View *view, Fon } internal void -draw_text_with_cursor(System_Functions *system, Render_Target *target, View *view, Font_ID font_id, i32_Rect rect, String s, i32 pos){ - Models *models = view->persistent.models; +draw_text_with_cursor(System_Functions *system, Render_Target *target, View *view, Models *models, Font_ID font_id, i32_Rect rect, String s, i32 pos){ Style *style = main_style(models); u32 back_color = style->main.margin_color; @@ -6200,9 +6037,8 @@ draw_text_with_cursor(System_Functions *system, Render_Target *target, View *vie } internal void -draw_file_bar(System_Functions *system, Render_Target *target, View *view, Editing_File *file, i32_Rect rect){ +draw_file_bar(System_Functions *system, Render_Target *target, View *view, Models *models, Editing_File *file, i32_Rect rect){ File_Bar bar; - Models *models = view->persistent.models; Style *style = main_style(models); Interactive_Style bar_style = style->main.file_info_style; @@ -6307,8 +6143,7 @@ draw_color_button(System_Functions *system, GUI_Target *gui_target, Render_Targe } internal void -draw_font_button(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, i32_Rect rect, GUI_id id, Font_ID font_id, String text){ - Models *models = view->persistent.models; +draw_font_button(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Models *models, i32_Rect rect, GUI_id id, Font_ID font_id, String text){ Style *style = main_style(models); i32 active_level = gui_active_level(gui_target, id); @@ -6323,8 +6158,7 @@ draw_font_button(System_Functions *system, GUI_Target *gui_target, Render_Target } internal void -draw_fat_option_block(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Font_ID font_id, i32_Rect rect, GUI_id id, String text, String pop, i8 checkbox = -1){ - Models *models = view->persistent.models; +draw_fat_option_block(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Models *models, Font_ID font_id, i32_Rect rect, GUI_id id, String text, String pop, i8 checkbox = -1){ Style *style = main_style(models); i32 active_level = gui_active_level(gui_target, id); @@ -6363,8 +6197,7 @@ draw_fat_option_block(System_Functions *system, GUI_Target *gui_target, Render_T } internal void -draw_button(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Font_ID font_id, i32_Rect rect, GUI_id id, String text){ - Models *models = view->persistent.models; +draw_button(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Models *models, Font_ID font_id, i32_Rect rect, GUI_id id, String text){ Style *style = main_style(models); i32 active_level = gui_active_level(gui_target, id); @@ -6388,9 +6221,7 @@ draw_button(System_Functions *system, GUI_Target *gui_target, Render_Target *tar } internal void -draw_style_preview(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Font_ID font_id, i32_Rect rect, GUI_id id, Style *style){ - Models *models = view->persistent.models; AllowLocal(models); - +draw_style_preview(System_Functions *system, GUI_Target *gui_target, Render_Target *target, View *view, Models *models, Font_ID font_id, i32_Rect rect, GUI_id id, Style *style){ i32 active_level = gui_active_level(gui_target, id); char font_name_space[256]; String font_name = make_fixed_width_string(font_name_space); @@ -6434,7 +6265,7 @@ draw_style_preview(System_Functions *system, GUI_Target *gui_target, Render_Targ } internal i32 -do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scroll, View *active, i32_Rect rect, b32 is_active, Render_Target *target, Input_Summary *user_input){ +do_render_file_view(System_Functions *system, View *view, Models *models, GUI_Scroll_Vars *scroll, View *active, i32_Rect rect, b32 is_active, Render_Target *target, Input_Summary *user_input){ Editing_File *file = view->file_data.file; i32 result = 0; @@ -6473,13 +6304,13 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol switch (h->type){ case guicom_top_bar: { - draw_file_bar(system, target, view, file, gui_session.rect); + draw_file_bar(system, target, view, models, file, gui_session.rect); }break; case guicom_file: { if (file_is_ready(file)){ - result = draw_file_loaded(system, view, gui_session.rect, is_active, target); + result = draw_file_loaded(system, view, models, gui_session.rect, is_active, target); } }break; @@ -6488,7 +6319,7 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol void *ptr = (h+1); String p = gui_read_string(&ptr); String t = gui_read_string(&ptr); - draw_text_field(system, target, view, font_id, gui_session.rect, p, t); + draw_text_field(system, target, view, models, font_id, gui_session.rect, p, t); }break; case guicom_text_with_cursor: @@ -6497,7 +6328,7 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol String s = gui_read_string(&ptr); i32 pos = gui_read_integer(&ptr); - draw_text_with_cursor(system, target, view, font_id, gui_session.rect, s, pos); + draw_text_with_cursor(system, target, view, models, font_id, gui_session.rect, s, pos); }break; case guicom_color_button: @@ -6518,7 +6349,7 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol Font_ID this_font_id = (Font_ID)gui_read_integer(&ptr); String t = gui_read_string(&ptr); - draw_font_button(system, gui_target, target, view, gui_session.rect, b->id, this_font_id, t); + draw_font_button(system, gui_target, target, view, models, gui_session.rect, b->id, this_font_id, t); }break; case guicom_file_option: @@ -6533,16 +6364,16 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol append_s_char(&f, '/'); } - draw_fat_option_block(system, gui_target, target, view, font_id, gui_session.rect, b->id, f, m); + draw_fat_option_block(system, gui_target, target, view, models, font_id, gui_session.rect, b->id, f, m); }break; case guicom_style_preview: { GUI_Interactive *b = (GUI_Interactive*)h; i32 style_index = *(i32*)(b + 1); - Style *style = get_style(view->persistent.models, style_index); + Style *style = get_style(models, style_index); - draw_style_preview(system, gui_target, target, view, font_id, gui_session.rect, b->id, style); + draw_style_preview(system, gui_target, target, view, models, font_id, gui_session.rect, b->id, style); }break; case guicom_fixed_option: @@ -6558,7 +6389,7 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol status = (i8)gui_read_byte(&ptr); } - draw_fat_option_block(system, gui_target, target, view, font_id, gui_session.rect, b->id, f, m, status); + draw_fat_option_block(system, gui_target, target, view, models, font_id, gui_session.rect, b->id, f, m, status); }break; case guicom_button: @@ -6567,12 +6398,11 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol void *ptr = (b + 1); String t = gui_read_string(&ptr); - draw_button(system, gui_target, target, view, font_id, gui_session.rect, b->id, t); + draw_button(system, gui_target, target, view, models, font_id, gui_session.rect, b->id, t); }break; case guicom_scrollable_bar: { - Models *models = view->persistent.models; Style *style = main_style(models); u32 back; @@ -6597,7 +6427,6 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol case guicom_scrollable_bottom: { GUI_id id; - Models *models = view->persistent.models; Style *style = main_style(models); i32_Rect box = gui_session.rect; @@ -6650,8 +6479,8 @@ do_render_file_view(System_Functions *system, View *view, GUI_Scroll_Vars *scrol } inline void -file_view_free_buffers(View *view){ - General_Memory *general = &view->persistent.models->mem.general; +file_view_free_buffers(View *view, Models *models){ + General_Memory *general = &models->mem.general; general_memory_free(general, view->gui_mem); view->gui_mem = 0; } @@ -6674,8 +6503,6 @@ live_set_alloc_view(Live_Views *live_set, Panel *panel, Models *models){ panel->view = result.view; result.view->panel = panel; - result.view->persistent.models = models; - init_query_set(&result.view->query_set); { @@ -6690,10 +6517,10 @@ live_set_alloc_view(Live_Views *live_set, Panel *panel, Models *models){ } inline void -live_set_free_view(Live_Views *live_set, View *view){ +live_set_free_view(Live_Views *live_set, View *view, Models *models){ Assert(live_set->count > 0); --live_set->count; - file_view_free_buffers(view); + file_view_free_buffers(view, models); dll_insert(&live_set->free_sentinel, view); view->in_use = 0; } diff --git a/4ed_view.cpp b/4ed_view.cpp new file mode 100644 index 00000000..4ba8c0f5 --- /dev/null +++ b/4ed_view.cpp @@ -0,0 +1,166 @@ +/* + * Mr. 4th Dimention - Allen Webster + * + * 17.07.2017 + * + * File editing view for 4coder. + * + */ + +// TOP + +#if !defined(FRED_VIEW_CPP) +#define FRED_VIEW_CPP + +struct View_Persistent{ + i32 id; + Coroutine *coroutine; + Event_Message message_passing_slot; +}; + +struct File_Viewing_Data{ + Editing_File *file; + + Full_Cursor temp_highlight; + i32 temp_highlight_end_pos; + b32 show_temp_highlight; + + b32 show_whitespace; + b32 file_locked; +}; +global File_Viewing_Data null_file_viewing_data = {0}; + +enum Interactive_Action{ + IAct_Open, + IAct_Save_As, + IAct_New, + IAct_OpenOrNew, + IAct_Switch, + IAct_Kill, + IAct_Sure_To_Kill, + IAct_Sure_To_Close +}; + +enum Interactive_Interaction{ + IInt_Sys_File_List, + IInt_Live_File_List, + IInt_Sure_To_Kill, + IInt_Sure_To_Close +}; + +enum View_UI{ + VUI_None, + VUI_Theme, + VUI_Interactive, + VUI_Debug +}; + +enum Debug_Mode{ + DBG_Input, + DBG_Threads_And_Memory, + DBG_View_Inspection +}; + +enum Color_View_Mode{ + CV_Mode_Library, + CV_Mode_Font, + CV_Mode_Global_Font, + CV_Mode_Adjusting +}; + +struct Scroll_Context{ + Editing_File *file; + GUI_id scroll; + View_UI mode; +}; +inline b32 +context_eq(Scroll_Context a, Scroll_Context b){ + b32 result = false; + if (gui_id_eq(a.scroll, b.scroll)){ + if (a.file == b.file){ + if (a.mode == b.mode){ + result = true; + } + } + } + return(result); +} + +struct Debug_Vars{ + i32 mode; + i32 inspecting_view_id; +}; +global_const Debug_Vars null_debug_vars = {0}; + +struct View{ + View_Persistent persistent; + + View *next, *prev; + Panel *panel; + b32 in_use; + Command_Map *map; + + File_Viewing_Data file_data; + + i32_Rect file_region_prev; + i32_Rect file_region; + + i32_Rect scroll_region; + File_Edit_Positions *edit_pos; + + View_UI showing_ui; + GUI_Target gui_target; + void *gui_mem; + GUI_Scroll_Vars gui_scroll; + i32 gui_max_y; + i32 list_i; + + b32 hide_scrollbar; + b32 hide_file_bar; + + // interactive stuff + Interactive_Interaction interaction; + Interactive_Action action; + + char dest_[256]; + String dest; + + b32 changed_context_in_step; + + // theme stuff + View *hot_file_view; + u32 *palette; + Color_View_Mode color_mode; + Super_Color color; + b32 p4c_only; + Style_Library inspecting_styles; + b8 import_export_check[64]; + i32 import_file_id; + i32 current_color_editing; + i32 color_cursor; + + // misc + + // TODO(allen): Can we burn line_height to the ground now? + // It's what I've always wanted!!!! :D + i32 line_height; + + // TODO(allen): Do I still use mode? + Query_Set query_set; + f32 widget_height; + + b32 reinit_scrolling; + + Debug_Vars debug_vars; +}; + +struct Live_Views{ + View *views; + View free_sentinel; + i32 count, max; +}; + +#endif + +// BOTTOM +