diff --git a/4ed.cpp b/4ed.cpp index 27b7951c..7ac8f926 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -9,59 +9,6 @@ // TOP -internal App_Coroutine_State -get_state(Application_Links *app){ - App_Coroutine_State state = {}; - state.co = app->current_coroutine; - state.type = app->type_coroutine; - return(state); -} - -internal void -restore_state(Application_Links *app, App_Coroutine_State state){ - app->current_coroutine = state.co; - app->type_coroutine = state.type; -} - -internal Coroutine* -app_coroutine_handle_request(Models *models, Coroutine *co, App_Coroutine_Out *out){ - Coroutine *result = 0; - switch (out->request){ - case AppCoroutineRequest_NewFontFace: - { - Face_Description *description = out->face_description; - Face *face = font_set_new_face(&models->font_set, description); - App_Coroutine_In in = {}; - in.face_id = face->id; - result = coroutine_run(&models->coroutines, co, &in, out); - }break; - - case AppCoroutineRequest_ModifyFace: - { - Face_Description *description = out->face_description; - Face_ID face_id = out->face_id; - App_Coroutine_In in = {}; - in.success = font_set_modify_face(&models->font_set, face_id, description); - result = coroutine_run(&models->coroutines, co, &in, out); - }break; - } - return(result); -} - -internal Coroutine* -app_coroutine_run(Models *models, App_Coroutine_Purpose purpose, Coroutine *co, App_Coroutine_In *in, App_Coroutine_Out *out){ - Application_Links *app = &models->app_links; - App_Coroutine_State prev_state = get_state(app); - app->current_coroutine = co; - app->type_coroutine = purpose; - Coroutine *result = coroutine_run(&models->coroutines, co, in, out); - for (;result != 0 && out->request != AppCoroutineRequest_None;){ - result = app_coroutine_handle_request(models, result, out); - } - restore_state(app, prev_state); - return(result); -} - internal void output_file_append(Models *models, Editing_File *file, String_Const_u8 value){ i64 end = buffer_size(&file->state.buffer); @@ -114,14 +61,6 @@ DELTA_RULE_SIG(fallback_scroll_rule){ #include "4ed_api_implementation.cpp" -internal void -command_caller(Coroutine *coroutine){ - App_Coroutine_In *in = (App_Coroutine_In*)coroutine->in; - Models *models = in->models; - Assert(models->command_caller != 0); - models->command_caller(&models->app_links); -} - // App Functions internal void @@ -349,48 +288,6 @@ models_init(Thread_Context *tctx){ return(models); } -internal void -force_abort_coroutine(Models *models, View *view){ - App_Coroutine_In in = {}; - in.user_input.abort = true; - for (u32 j = 0; j < 100 && models->command_coroutine != 0; ++j){ - models->command_coroutine = app_coroutine_run(models, Co_Command, models->command_coroutine, &in, &models->coroutine_out); - } - if (models->command_coroutine != 0){ -#define M "SERIOUS ERROR: command did not terminate when passed an abort" - print_message(&models->app_links, string_u8_litexpr(M)); -#undef M - models->command_coroutine = 0; - } - init_query_set(&view->query_set); -} - -internal b32 -launch_command_via_event(Models *models, View *view, Input_Event *event){ - block_copy_struct(&models->event, event); - Assert(models->command_coroutine == 0); - Coroutine *command_coroutine = coroutine_create(&models->coroutines, command_caller); - models->command_coroutine = command_coroutine; - App_Coroutine_In in = {}; - in.models = models; - models->event_unhandled = false; - models->command_coroutine = app_coroutine_run(models, - Co_Command, models->command_coroutine, - &in, &models->coroutine_out); - if (match_core_code(event, CoreCode_Animate)){ - models->animate_next_frame = true; - } - return(!models->event_unhandled); -} - -internal void -launch_command_via_core_event(Models *models, View *view, Core_Code code){ - Input_Event event = {}; - event.kind = InputEventKind_Core; - event.core.code = code; - launch_command_via_event(models, view, &event); -} - internal void app_load_vtables(API_VTable_system *vtable_system, API_VTable_font *vtable_font, @@ -534,7 +431,7 @@ App_Init_Sig(app_init){ { Panel *panel = layout_initialize(arena, &models->layout); View *new_view = live_set_alloc_view(&models->lifetime_allocator, &models->live_set, panel); - view_set_file(models, new_view, models->scratch_buffer); + view_init(models, new_view, models->scratch_buffer, models->view_event_handler); } // NOTE(allen): miscellaneous init @@ -780,18 +677,8 @@ App_Step_Sig(app_step){ case EventConsume_ClickChangeView: { - // NOTE(allen): kill coroutine if we have one - if (models->command_coroutine != 0){ - force_abort_coroutine(models, view); - } - // NOTE(allen): run deactivate command - launch_command_via_core_event(models, view, CoreCode_ClickDeactivateView); - - // NOTE(allen): kill coroutine if we have one (again because we just launched a command) - if (models->command_coroutine != 0){ - force_abort_coroutine(models, view); - } + co_send_core_event(models, view, CoreCode_ClickDeactivateView); layout->active_panel = mouse_panel; models->animate_next_frame = true; @@ -799,41 +686,14 @@ App_Step_Sig(app_step){ view = active_panel->view; // NOTE(allen): run activate command - launch_command_via_core_event(models, view, CoreCode_ClickActivateView); + co_send_core_event(models, view, CoreCode_ClickActivateView); event_was_handled = true; }break; case EventConsume_CustomCommand: { - // NOTE(allen): update command coroutine - if (models->command_coroutine != 0){ - block_copy_struct(&models->event, event); - - Coroutine *command_coroutine = models->command_coroutine; - App_Coroutine_Out *co_out = &models->coroutine_out; - Event_Property abort_flags = co_out->abort_flags; - Event_Property get_flags = co_out->get_flags|abort_flags; - - Event_Property event_flags = get_event_properties(event); - if ((get_flags&event_flags) != 0){ - App_Coroutine_In in = {}; - in.user_input.event = *event; - in.user_input.abort = ((abort_flags & event_flags) != 0); - models->event_unhandled = false; - models->command_coroutine = app_coroutine_run(models, Co_Command, command_coroutine, &in, &models->coroutine_out); - if (!HasFlag(event_flags, EventProperty_Animate)){ - models->animate_next_frame = true; - } - if (models->command_coroutine == 0){ - init_query_set(&view->query_set); - } - event_was_handled = !models->event_unhandled; - } - } - else{ - event_was_handled = launch_command_via_event(models, view, event); - } + event_was_handled = co_send_event(models, view, event); }break; } }break; diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 73d86237..08bdf0af 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -1192,7 +1192,7 @@ panel_split(Application_Links *app, Panel_ID panel_id, Panel_Split_Orientation o if (layout_split_panel(layout, panel, (orientation == PanelSplit_LeftAndRight), &new_panel)){ Live_Views *live_set = &models->live_set; View *new_view = live_set_alloc_view(&models->lifetime_allocator, live_set, new_panel); - view_set_file(models, new_view, models->scratch_buffer); + view_init(models, new_view, models->scratch_buffer, models->view_event_handler); result = true; } } @@ -1328,10 +1328,7 @@ view_close(Application_Links *app, View_ID view_id) View *view = imp_get_view(models, view_id); b32 result = false; if (api_check_view(view)){ - if (layout_close_panel(layout, view->panel)){ - live_set_free_view(&models->lifetime_allocator, &models->live_set, view); - result = true; - } + result = view_close(models, view); } return(result); } @@ -2085,15 +2082,15 @@ get_user_input(Application_Links *app, Event_Property get_properties, Event_Prop { Models *models = (Models*)app->cmd_context; User_Input result = {}; - if (app->type_coroutine == Co_Command){ + if (app->type_coroutine == Co_View){ Coroutine *coroutine = (Coroutine*)app->current_coroutine; Assert(coroutine != 0); - App_Coroutine_Out *out = (App_Coroutine_Out*)coroutine->out; - out->request = AppCoroutineRequest_None; + Co_Out *out = (Co_Out*)coroutine->out; + out->request = CoRequest_None; out->get_flags = get_properties; out->abort_flags = abort_properties; coroutine_yield(coroutine); - App_Coroutine_In *in = (App_Coroutine_In*)coroutine->in; + Co_In *in = (Co_In*)coroutine->in; result = in->user_input; } return(result); @@ -2165,9 +2162,9 @@ set_custom_hook(Application_Links *app, Hook_ID hook_id, Void_Func *func_ptr){ { models->hook_file_externally_modified = (File_Externally_Modified_Function*)func_ptr; }break; - case HookID_CommandCaller: + case HookID_ViewEventHandler: { - models->command_caller = (Command_Caller_Hook_Function*)func_ptr; + models->view_event_handler = (Custom_Command_Function*)func_ptr; }break; case HookID_RenderCaller: { @@ -2213,7 +2210,7 @@ get_active_query_bars(Application_Links *app, View_ID view_id, i32 max_result_co Models *models = (Models*)app->cmd_context; View *view = imp_get_view(models, view_id); b32 result = false; - if (view != 0){ + if (api_check_view(view)){ i32 count = 0; Query_Bar **ptrs = array_out->ptrs; for (Query_Slot *slot = view->query_set.used_slot; @@ -2252,6 +2249,15 @@ end_query_bar(Application_Links *app, Query_Bar *bar, u32 flags) free_query_slot(&active_view->query_set, bar); } +api(custom) function void +clear_all_query_bars(Application_Links *app, View_ID view_id){ + Models *models = (Models*)app->cmd_context; + View *view = imp_get_view(models, view_id); + if (api_check_view(view)){ + free_all_queries(&view->query_set); + } +} + api(custom) function b32 print_message(Application_Links *app, String_Const_u8 message) { @@ -2552,11 +2558,11 @@ try_create_new_face(Application_Links *app, Face_Description *description) if (is_running_coroutine(app)){ Coroutine *coroutine = (Coroutine*)app->current_coroutine; Assert(coroutine != 0); - App_Coroutine_Out *out = (App_Coroutine_Out*)coroutine->out; - out->request = AppCoroutineRequest_NewFontFace; + Co_Out *out = (Co_Out*)coroutine->out; + out->request = CoRequest_NewFontFace; out->face_description = description; coroutine_yield(coroutine); - App_Coroutine_In *in = (App_Coroutine_In*)coroutine->in; + Co_In *in = (Co_In*)coroutine->in; result = in->face_id; } else{ @@ -2574,12 +2580,12 @@ try_modify_face(Application_Links *app, Face_ID id, Face_Description *descriptio if (is_running_coroutine(app)){ Coroutine *coroutine = (Coroutine*)app->current_coroutine; Assert(coroutine != 0); - App_Coroutine_Out *out = (App_Coroutine_Out*)coroutine->out; - out->request = AppCoroutineRequest_NewFontFace; + Co_Out *out = (Co_Out*)coroutine->out; + out->request = CoRequest_NewFontFace; out->face_description = description; out->face_id = id; coroutine_yield(coroutine); - App_Coroutine_In *in = (App_Coroutine_In*)coroutine->in; + Co_In *in = (Co_In*)coroutine->in; result = in->success; } else{ diff --git a/4ed_app_models.h b/4ed_app_models.h index ba854f3a..68238e04 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -34,36 +34,6 @@ enum App_State{ APP_STATE_COUNT }; -struct App_Coroutine_In{ - union{ - struct Models *models; - User_Input user_input; - Face_ID face_id; - b32 success; - }; -}; - -typedef i32 App_Coroutine_Request; -enum{ - AppCoroutineRequest_None = 0, - AppCoroutineRequest_NewFontFace = 1, - AppCoroutineRequest_ModifyFace = 2, -}; - -struct App_Coroutine_Out{ - App_Coroutine_Request request; - union{ - struct{ - Event_Property get_flags; - Event_Property abort_flags; - }; - struct{ - Face_Description *face_description; - Face_ID face_id; - }; - }; -}; - struct Models{ Thread_Context *tctx; @@ -76,8 +46,6 @@ struct Models{ Face_ID global_face_id; Coroutine_Group coroutines; - Coroutine *command_coroutine; - App_Coroutine_Out coroutine_out; Child_Process_Container child_processes; Custom_API config_api; @@ -94,7 +62,7 @@ struct Models{ Buffer_Hook_Function *hook_end_file; File_Edit_Range_Function *hook_file_edit_range; File_Externally_Modified_Function *hook_file_externally_modified; - Command_Caller_Hook_Function *command_caller; + Custom_Command_Function *view_event_handler; Render_Caller_Function *render_caller; Input_Filter_Function *input_filter; Start_Hook_Function *hook_start; @@ -186,7 +154,6 @@ struct Consumption_Record{ typedef i32 App_Coroutine_Purpose; enum{ Co_View, - Co_Command, }; struct App_Coroutine_State{ void *co; diff --git a/4ed_app_target.cpp b/4ed_app_target.cpp index bc9ba908..6868de56 100644 --- a/4ed_app_target.cpp +++ b/4ed_app_target.cpp @@ -49,7 +49,6 @@ #include "4ed_working_set.h" #include "4ed_hot_directory.h" #include "4ed_cli.h" -#include "4ed_gui.h" #include "4ed_layout.h" #include "4ed_view.h" #include "4ed_edit.h" @@ -97,7 +96,6 @@ #include "4ed_working_set.cpp" #include "4ed_hot_directory.cpp" #include "4ed_cli.cpp" -#include "4ed_gui.cpp" #include "4ed_layout.cpp" #include "4ed_view.cpp" #include "4ed_edit.cpp" diff --git a/4ed_gui.cpp b/4ed_gui.cpp deleted file mode 100644 index f5da2edb..00000000 --- a/4ed_gui.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Mr. 4th Dimention - Allen Webster - * - * 20.02.2016 - * - * GUI system for 4coder - * - */ - -// TOP - -internal void -init_query_set(Query_Set *set){ - Query_Slot *slot = set->slots; - set->free_slot = slot; - set->used_slot = 0; - for (i32 i = 0; i+1 < ArrayCount(set->slots); ++i, ++slot){ - slot->next = slot + 1; - } -} - -internal Query_Slot* -alloc_query_slot(Query_Set *set){ - Query_Slot *slot = set->free_slot; - if (slot != 0){ - set->free_slot = slot->next; - slot->next = set->used_slot; - set->used_slot = slot; - } - return(slot); -} - -internal void -free_query_slot(Query_Set *set, Query_Bar *match_bar){ - Query_Slot *slot = 0, *prev = 0; - - for (slot = set->used_slot; slot != 0; slot = slot->next){ - if (slot->query_bar == match_bar) break; - prev = slot; - } - - if (slot){ - if (prev){ - prev->next = slot->next; - } - else{ - set->used_slot = slot->next; - } - slot->next = set->free_slot; - set->free_slot = slot; - } -} - -// BOTTOM - diff --git a/4ed_gui.h b/4ed_gui.h deleted file mode 100644 index 3a65a40f..00000000 --- a/4ed_gui.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Mr. 4th Dimention - Allen Webster - * - * 20.02.2016 - * - * GUI system for 4coder - * - */ - -// TOP - -#ifndef FRED_GUI_H -#define FRED_GUI_H - -struct Query_Slot{ - Query_Slot *next; - Query_Bar *query_bar; -}; - -struct Query_Set{ - Query_Slot slots[8]; - Query_Slot *free_slot; - Query_Slot *used_slot; -}; - -#endif - -// BOTTOM - diff --git a/4ed_view.cpp b/4ed_view.cpp index 1d5f6b9b..b34dd635 100644 --- a/4ed_view.cpp +++ b/4ed_view.cpp @@ -9,6 +9,61 @@ // TOP +internal void +init_query_set(Query_Set *set){ + Query_Slot *slot = set->slots; + set->free_slot = slot; + set->used_slot = 0; + for (i32 i = 0; i+1 < ArrayCount(set->slots); ++i, ++slot){ + slot->next = slot + 1; + } +} + +internal Query_Slot* +alloc_query_slot(Query_Set *set){ + Query_Slot *slot = set->free_slot; + if (slot != 0){ + set->free_slot = slot->next; + slot->next = set->used_slot; + set->used_slot = slot; + } + return(slot); +} + +internal void +free_query_slot(Query_Set *set, Query_Bar *match_bar){ + Query_Slot *slot = 0; + Query_Slot *prev = 0; + + for (slot = set->used_slot; slot != 0; slot = slot->next){ + if (slot->query_bar == match_bar) break; + prev = slot; + } + + if (slot){ + if (prev){ + prev->next = slot->next; + } + else{ + set->used_slot = slot->next; + } + slot->next = set->free_slot; + set->free_slot = slot; + } +} + +function void +free_all_queries(Query_Set *set){ + for (;set->used_slot != 0;){ + Query_Slot *slot = set->used_slot; + set->used_slot = slot->next; + slot->next = set->free_slot; + set->free_slot = slot; + } +} + +//////////////////////////////// + internal Command_Map_ID view_get_map(View *view){ if (view->ui_mode){ @@ -394,6 +449,168 @@ view_set_file(Models *models, View *view, Editing_File *file){ //////////////////////////////// +internal App_Coroutine_State +get_co_state(Application_Links *app){ + App_Coroutine_State state = {}; + state.co = app->current_coroutine; + state.type = app->type_coroutine; + return(state); +} + +internal void +restore_co_state(Application_Links *app, App_Coroutine_State state){ + app->current_coroutine = state.co; + app->type_coroutine = state.type; +} + +internal Coroutine* +co_handle_request(Models *models, Coroutine *co, Co_Out *out){ + Coroutine *result = 0; + switch (out->request){ + case CoRequest_NewFontFace: + { + Face_Description *description = out->face_description; + Face *face = font_set_new_face(&models->font_set, description); + Co_In in = {}; + in.face_id = face->id; + result = coroutine_run(&models->coroutines, co, &in, out); + }break; + + case CoRequest_ModifyFace: + { + Face_Description *description = out->face_description; + Face_ID face_id = out->face_id; + Co_In in = {}; + in.success = font_set_modify_face(&models->font_set, face_id, description); + result = coroutine_run(&models->coroutines, co, &in, out); + }break; + } + return(result); +} + +internal Coroutine* +co_run(Models *models, App_Coroutine_Purpose purpose, Coroutine *co, + Co_In *in, Co_Out *out){ + Application_Links *app = &models->app_links; + App_Coroutine_State prev_state = get_co_state(app); + app->current_coroutine = co; + app->type_coroutine = purpose; + Coroutine *result = coroutine_run(&models->coroutines, co, in, out); + for (;result != 0 && out->request != CoRequest_None;){ + result = co_handle_request(models, result, out); + } + restore_co_state(app, prev_state); + return(result); +} + +internal void +view_event_context_base__inner(Coroutine *coroutine){ + Co_In *in = (Co_In*)coroutine->in; + Models *models = in->models; + Custom_Command_Function *event_context_base = in->event_context_base; + Assert(event_context_base != 0); + event_context_base(&models->app_links); +} + +function void +view_init(Models *models, View *view, Editing_File *initial_buffer, + Custom_Command_Function *event_context_base){ + view_set_file(models, view, initial_buffer); + view->co = coroutine_create(&models->coroutines, view_event_context_base__inner); + Co_In in = {}; + in.models = models; + in.event_context_base = event_context_base; + view->co = co_run(models, Co_View, view->co, &in, &view->co_out); + // TODO(allen): deal with this kind of problem! + Assert(view->co != 0); +} + +function b32 +view_close(Models *models, View *view){ + Layout *layout = &models->layout; + b32 result = false; + if (layout_close_panel(layout, view->panel)){ + live_set_free_view(&models->lifetime_allocator, &models->live_set, view); + result = true; + } + return(result); +} + +internal void +view_check_co_exited(Models *models, View *view){ + if (view->co == 0){ + b32 result = view_close(models, view); + // TODO(allen): Here it looks like the final view has + // closed exited from it's event handler. We should probably + // have a failsafe restarter for the event handler when this + // happens. + Assert(result); + } +} + +internal void +co_single_abort(Models *models, View *view){ + Coroutine *co = view->co; + Co_In in = {}; + in.user_input.abort = true; + view->co = co_run(models, Co_View, co, &in, &view->co_out); + view_check_co_exited(models, view); +} + +internal void +co_full_abort(Models *models, View *view){ + Coroutine *co = view->co; + Co_In in = {}; + in.user_input.abort = true; + for (u32 j = 0; j < 100 && co != 0; ++j){ + co = co_run(models, Co_View, co, &in, &view->co_out); + } + if (co != 0){ +#define M "SERIOUS ERROR: full stack abort did not complete" + print_message(&models->app_links, string_u8_litexpr(M)); +#undef M + } + view->co = 0; + init_query_set(&view->query_set); +} + +function b32 +co_send_event(Models *models, View *view, Input_Event *event){ + b32 event_was_handled = false; + + Coroutine *co = view->co; + Co_Out *co_out = &view->co_out; + Event_Property abort_flags = co_out->abort_flags; + Event_Property get_flags = co_out->get_flags|abort_flags; + + Event_Property event_flags = get_event_properties(event); + if ((get_flags&event_flags) != 0){ + models->event_unhandled = false; + Co_In in = {}; + in.user_input.event = *event; + in.user_input.abort = ((abort_flags & event_flags) != 0); + block_copy_struct(&models->event, &in.user_input.event); + view->co = co_run(models, Co_View, view->co, &in, &view->co_out); + view_check_co_exited(models, view); + if (!HasFlag(event_flags, EventProperty_Animate)){ + models->animate_next_frame = true; + } + event_was_handled = !models->event_unhandled; + } + + return(event_was_handled); +} + +function b32 +co_send_core_event(Models *models, View *view, Core_Code code){ + Input_Event event = {}; + event.kind = InputEventKind_Core; + event.core.code = code; + return(co_send_event(models, view, &event)); +} + +//////////////////////////////// + internal b32 file_is_viewed(Layout *layout, Editing_File *file){ b32 is_viewed = false; diff --git a/4ed_view.h b/4ed_view.h index 149332b9..93ea7df8 100644 --- a/4ed_view.h +++ b/4ed_view.h @@ -12,6 +12,50 @@ #if !defined(FRED_VIEW_H) #define FRED_VIEW_H +struct Co_In{ + union{ + struct{ + struct Models *models; + Custom_Command_Function *event_context_base; + }; + User_Input user_input; + Face_ID face_id; + b32 success; + }; +}; + +typedef i32 Co_Request; +enum{ + CoRequest_None = 0, + CoRequest_NewFontFace = 1, + CoRequest_ModifyFace = 2, +}; + +struct Co_Out{ + Co_Request request; + union{ + struct{ + Event_Property get_flags; + Event_Property abort_flags; + }; + struct{ + Face_Description *face_description; + Face_ID face_id; + }; + }; +}; + +struct Query_Slot{ + Query_Slot *next; + Query_Bar *query_bar; +}; + +struct Query_Set{ + Query_Slot slots[8]; + Query_Slot *free_slot; + Query_Slot *used_slot; +}; + struct View{ View *next; View *prev; @@ -27,6 +71,9 @@ struct View{ b8 new_scroll_target; + Coroutine *co; + Co_Out co_out; + b8 ui_mode; Command_Map_ID ui_map_id; Basic_Scroll ui_scroll; @@ -36,8 +83,6 @@ struct View{ b8 hide_file_bar; b8 show_whitespace; - // misc - Query_Set query_set; }; diff --git a/custom/4coder_base_commands.cpp b/custom/4coder_base_commands.cpp index 71554919..cc358c21 100644 --- a/custom/4coder_base_commands.cpp +++ b/custom/4coder_base_commands.cpp @@ -780,6 +780,7 @@ CUSTOM_DOC("Attempts to close 4coder.") CUSTOM_COMMAND_SIG(goto_line) CUSTOM_DOC("Queries the user for a number, and jumps the cursor to the corresponding line.") { + Query_Bar_Group group(app); u8 string_space[256]; Query_Bar bar = {}; bar.prompt = string_u8_litexpr("Goto Line: "); @@ -812,6 +813,7 @@ isearch(Application_Links *app, Scan_Direction start_scan, i64 first_pos, i64 buffer_size = buffer_get_size(app, buffer); + Query_Bar_Group group(app); Query_Bar bar = {}; if (start_query_bar(app, &bar, 0) == 0){ return; @@ -828,7 +830,6 @@ isearch(Application_Links *app, Scan_Direction start_scan, i64 first_pos, String_Const_u8 rsearch_str = string_u8_litexpr("Reverse-I-Search: "); umem match_size = bar.string.size; - cursor_is_hidden = true; User_Input in = {}; for (;;){ @@ -844,7 +845,9 @@ isearch(Application_Links *app, Scan_Direction start_scan, i64 first_pos, } isearch__update_highlight(app, view, Ii64_size(pos, match_size)); - in = get_user_input(app, EventPropertyGroup_AnyKeyboardEvent, EventProperty_Escape); + in = get_user_input(app, + EventPropertyGroup_AnyKeyboardEvent, + EventProperty_Escape|EventProperty_ViewActivation); if (in.abort){ break; } @@ -968,7 +971,6 @@ isearch(Application_Links *app, Scan_Direction start_scan, i64 first_pos, } view_disable_highlight_range(app, view); - cursor_is_hidden = false; if (in.abort){ umem size = bar.string.size; @@ -1062,6 +1064,7 @@ query_user_replace_pair(Application_Links *app, Arena *arena){ internal void replace_in_range_query_user(Application_Links *app, Buffer_ID buffer, Range_i64 range){ Scratch_Block scratch(app); + Query_Bar_Group group(app); String_Pair pair = query_user_replace_pair(app, scratch); if (pair.valid){ replace_in_range(app, buffer, range, pair.a, pair.b); @@ -1092,6 +1095,7 @@ CUSTOM_DOC("Queries the user for a needle and string. Replaces all occurences of global_history_edit_group_begin(app); Scratch_Block scratch(app); + Query_Bar_Group group(app); String_Pair pair = query_user_replace_pair(app, scratch); for (Buffer_ID buffer = get_buffer_next(app, 0, AccessOpen); buffer != 0; @@ -1108,8 +1112,6 @@ query_replace_base(Application_Links *app, View_ID view, Buffer_ID buffer_id, i6 i64 new_pos = 0; seek_string_forward(app, buffer_id, pos - 1, 0, r, &new_pos); - cursor_is_hidden = true; - i64 buffer_size = buffer_get_size(app, buffer_id); User_Input in = {}; @@ -1138,7 +1140,6 @@ query_replace_base(Application_Links *app, View_ID view, Buffer_ID buffer_id, i6 } view_disable_highlight_range(app, view); - cursor_is_hidden = false; if (in.abort){ return; @@ -1149,6 +1150,7 @@ query_replace_base(Application_Links *app, View_ID view, Buffer_ID buffer_id, i6 function void query_replace_parameter(Application_Links *app, String_Const_u8 replace_str, i64 start_pos, b32 add_replace_query_bar){ + Query_Bar_Group group(app); Query_Bar replace = {}; replace.prompt = string_u8_litexpr("Replace: "); replace.string = replace_str; @@ -1185,6 +1187,7 @@ CUSTOM_DOC("Queries the user for two strings, and incrementally replaces every o View_ID view = get_active_view(app, AccessOpen); Buffer_ID buffer = view_get_buffer(app, view, AccessOpen); if (buffer != 0){ + Query_Bar_Group group(app); Query_Bar replace = {}; u8 replace_space[1024]; replace.prompt = string_u8_litexpr("Replace: "); @@ -1283,6 +1286,7 @@ CUSTOM_DOC("Deletes the file of the current buffer if 4coder has the appropriate Scratch_Block scratch(app); String_Const_u8 file_name = push_buffer_file_name(app, scratch, buffer); if (file_name.size > 0){ + Query_Bar_Group group(app); Query_Bar bar = {}; bar.prompt = push_u8_stringf(scratch, "Delete '%.*s' (Y)es, (n)o", string_expand(file_name)); if (start_query_bar(app, &bar, 0) != 0){ @@ -1325,6 +1329,7 @@ CUSTOM_DOC("Queries the user for a file name and saves the contents of the curre Buffer_ID buffer = view_get_buffer(app, view, AccessAll); Scratch_Block scratch(app); + Query_Bar_Group group(app); String_Const_u8 buffer_name = push_buffer_unique_name(app, scratch, buffer); // Query the user @@ -1361,6 +1366,7 @@ CUSTOM_DOC("Queries the user for a new name and renames the file of the current String_Const_u8 file_name = push_buffer_file_name(app, scratch, buffer); if (file_name.size > 0){ // Query the user + Query_Bar_Group group(app); String_Const_u8 front = string_front_of_path(file_name); u8 name_space[4096]; Query_Bar bar = {}; @@ -1395,6 +1401,7 @@ CUSTOM_DOC("Queries the user for a name and creates a new directory with the giv String_Const_u8 hot = push_hot_directory(app, scratch); // Query the user + Query_Bar_Group group(app); u8 name_space[4096]; Query_Bar bar = {}; bar.prompt = push_u8_stringf(scratch, "Make directory at '%.*s': ", string_expand(hot)); @@ -1733,6 +1740,7 @@ multi_paste_interactive_up_down(Application_Links *app, i32 paste_count, i32 cli b32 old_to_new = true; Range_i64 range = multi_paste_range(app, view, Ii64(pos), paste_count, old_to_new); + Query_Bar_Group group(app); Query_Bar bar = {}; bar.prompt = string_u8_litexpr("Up and Down to condense and expand paste stages; R to reverse order; Return to finish; Escape to abort."); if (start_query_bar(app, &bar, 0) == 0) return; @@ -1785,6 +1793,7 @@ CUSTOM_COMMAND_SIG(multi_paste_interactive_quick){ i32 clip_count = clipboard_count(app, 0); if (clip_count > 0){ u8 string_space[256]; + Query_Bar_Group group(app); Query_Bar bar = {}; bar.prompt = string_u8_litexpr("How Many Slots To Paste: "); bar.string = SCu8(string_space, (umem)0); diff --git a/custom/4coder_cli_command.cpp b/custom/4coder_cli_command.cpp index 9dd15a02..8cad89c5 100644 --- a/custom/4coder_cli_command.cpp +++ b/custom/4coder_cli_command.cpp @@ -22,6 +22,7 @@ CUSTOM_DOC("If the command execute_any_cli has already been used, this will exec CUSTOM_COMMAND_SIG(execute_any_cli) CUSTOM_DOC("Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer."){ Scratch_Block scratch(app); + Query_Bar_Group group(app); Query_Bar bar_out = {}; bar_out.prompt = string_u8_litexpr("Output Buffer: "); diff --git a/custom/4coder_default_framework_variables.cpp b/custom/4coder_default_framework_variables.cpp index 446a1453..a17e7d70 100644 --- a/custom/4coder_default_framework_variables.cpp +++ b/custom/4coder_default_framework_variables.cpp @@ -58,8 +58,6 @@ global b32 do_matching_paren_highlight = true; global b32 do_colored_comment_keywords = true; global b32 suppressing_mouse = false; -global b32 cursor_is_hidden = false; - global b32 show_fps_hud = false; // TODO(allen): REMOVE THIS! diff --git a/custom/4coder_default_hooks.cpp b/custom/4coder_default_hooks.cpp index 417c0dc5..34d52264 100644 --- a/custom/4coder_default_hooks.cpp +++ b/custom/4coder_default_hooks.cpp @@ -14,75 +14,79 @@ START_HOOK_SIG(default_start){ return(0); } -COMMAND_CALLER_HOOK(default_command_caller){ - // app - - // NOTE(allen): Get the binding from the buffer's current map - User_Input input = get_command_input(app); - View_ID view = get_active_view(app, AccessAll); - - Command_Map_ID map_id = 0; - if (view_is_in_ui_mode(app, view)){ - view_get_setting(app, view, ViewSetting_UICommandMap, &map_id); - } - else{ - Buffer_ID buffer = view_get_buffer(app, view, AccessAll); - Managed_Scope buffer_scope = buffer_get_managed_scope(app, buffer); - Command_Map_ID *map_id_ptr = - scope_attachment(app, buffer_scope, buffer_map_id, Command_Map_ID); - if (*map_id_ptr == 0){ - *map_id_ptr = mapid_file; +CUSTOM_COMMAND_SIG(default_view_input_handler) +CUSTOM_DOC("Input consumption loop for base view behavior") +{ + for (;;){ + // NOTE(allen): Get the binding from the buffer's current map + User_Input input = get_user_input(app, EventPropertyGroup_All, 0); + if (input.abort){ + break; } - map_id = *map_id_ptr; - } - - Command_Binding binding = map_get_binding_recursive(&framework_mapping, map_id, &input.event); - - if (binding.custom == 0){ - // NOTE(allen): we don't have anything to do with this input, - // leave it marked unhandled so that if there's a follow up - // event it is not blocked. - leave_command_input_unhandled(app); - } - else{ - // NOTE(allen): before the command is called do some book keeping - Managed_Scope scope = view_get_managed_scope(app, view); - Rewrite_Type *next_rewrite = scope_attachment(app, scope, view_next_rewrite_loc, Rewrite_Type); - *next_rewrite = Rewrite_None; - if (fcoder_mode == FCoderMode_NotepadLike){ - for (View_ID view_it = get_view_next(app, 0, AccessAll); - view_it != 0; - view_it = get_view_next(app, view_it, AccessAll)){ - Managed_Scope scope_it = view_get_managed_scope(app, view_it); - b32 *snap_mark_to_cursor = scope_attachment(app, scope_it, view_snap_mark_to_cursor, b32); - *snap_mark_to_cursor = true; + + View_ID view = get_active_view(app, AccessAll); + + Command_Map_ID map_id = 0; + if (view_is_in_ui_mode(app, view)){ + view_get_setting(app, view, ViewSetting_UICommandMap, &map_id); + } + else{ + Buffer_ID buffer = view_get_buffer(app, view, AccessAll); + Managed_Scope buffer_scope = buffer_get_managed_scope(app, buffer); + Command_Map_ID *map_id_ptr = + scope_attachment(app, buffer_scope, buffer_map_id, Command_Map_ID); + if (*map_id_ptr == 0){ + *map_id_ptr = mapid_file; } + map_id = *map_id_ptr; } - // NOTE(allen): call the command - binding.custom(app); + Command_Binding binding = map_get_binding_recursive(&framework_mapping, map_id, &input.event); - // NOTE(allen): after the command is called do some book keeping - next_rewrite = scope_attachment(app, scope, view_next_rewrite_loc, Rewrite_Type); - if (next_rewrite != 0){ - Rewrite_Type *rewrite = scope_attachment(app, scope, view_rewrite_loc, Rewrite_Type); - *rewrite = *next_rewrite; + if (binding.custom == 0){ + // NOTE(allen): we don't have anything to do with this input, + // leave it marked unhandled so that if there's a follow up + // event it is not blocked. + leave_command_input_unhandled(app); + } + else{ + // NOTE(allen): before the command is called do some book keeping + Managed_Scope scope = view_get_managed_scope(app, view); + Rewrite_Type *next_rewrite = scope_attachment(app, scope, view_next_rewrite_loc, Rewrite_Type); + *next_rewrite = Rewrite_None; if (fcoder_mode == FCoderMode_NotepadLike){ for (View_ID view_it = get_view_next(app, 0, AccessAll); view_it != 0; view_it = get_view_next(app, view_it, AccessAll)){ Managed_Scope scope_it = view_get_managed_scope(app, view_it); b32 *snap_mark_to_cursor = scope_attachment(app, scope_it, view_snap_mark_to_cursor, b32); - if (*snap_mark_to_cursor){ - i64 pos = view_get_cursor_pos(app, view_it); - view_set_mark(app, view_it, seek_pos(pos)); + *snap_mark_to_cursor = true; + } + } + + // NOTE(allen): call the command + binding.custom(app); + + // NOTE(allen): after the command is called do some book keeping + next_rewrite = scope_attachment(app, scope, view_next_rewrite_loc, Rewrite_Type); + if (next_rewrite != 0){ + Rewrite_Type *rewrite = scope_attachment(app, scope, view_rewrite_loc, Rewrite_Type); + *rewrite = *next_rewrite; + if (fcoder_mode == FCoderMode_NotepadLike){ + for (View_ID view_it = get_view_next(app, 0, AccessAll); + view_it != 0; + view_it = get_view_next(app, view_it, AccessAll)){ + Managed_Scope scope_it = view_get_managed_scope(app, view_it); + b32 *snap_mark_to_cursor = scope_attachment(app, scope_it, view_snap_mark_to_cursor, b32); + if (*snap_mark_to_cursor){ + i64 pos = view_get_cursor_pos(app, view_it); + view_set_mark(app, view_it, seek_pos(pos)); + } } } } } } - - return(0); } internal Range_i64_Array @@ -483,8 +487,7 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View } // NOTE(allen): Cursor and mark - b32 cursor_is_hidden_in_this_view = (cursor_is_hidden && is_active_view); - if (!cursor_is_hidden_in_this_view){ + if (!has_highlight_range){ switch (fcoder_mode){ case FCoderMode_Original: { @@ -1296,7 +1299,7 @@ set_all_default_hooks(Application_Links *app){ set_custom_hook(app, HookID_FileExternallyModified, default_file_externally_modified); set_custom_hook(app, HookID_EndFile, end_file_close_jump_list); - set_custom_hook(app, HookID_CommandCaller, default_command_caller); + set_custom_hook(app, HookID_ViewEventHandler, default_view_input_handler); set_custom_hook(app, HookID_RenderCaller, default_render_caller); set_custom_hook(app, HookID_InputFilter, default_suppress_mouse_filter); set_custom_hook(app, HookID_ScrollRule, smooth_scroll_rule); diff --git a/custom/4coder_events.h b/custom/4coder_events.h index d52127b4..68c3e044 100644 --- a/custom/4coder_events.h +++ b/custom/4coder_events.h @@ -113,6 +113,10 @@ enum{ EventPropertyGroup_AnyUserInput = EventPropertyGroup_AnyKeyboardEvent| EventPropertyGroup_AnyMouseEvent, + EventPropertyGroup_All = + EventPropertyGroup_AnyUserInput| + EventProperty_Animate| + EventProperty_ViewActivation, }; #endif diff --git a/custom/4coder_helper.cpp b/custom/4coder_helper.cpp index b0b77265..8bafe2a6 100644 --- a/custom/4coder_helper.cpp +++ b/custom/4coder_helper.cpp @@ -1276,6 +1276,22 @@ backspace_utf8(String_Const_u8 string){ return(string); } +//////////////////////////////// + +Query_Bar_Group::Query_Bar_Group(Application_Links *app){ + this->app = app; + this->view = get_active_view(app, AccessAll); +} + +Query_Bar_Group::Query_Bar_Group(Application_Links *app, View_ID view){ + this->app = app; + this->view = view; +} + +Query_Bar_Group::~Query_Bar_Group(){ + clear_all_query_bars(this->app, this->view); +} + internal b32 query_user_general(Application_Links *app, Query_Bar *bar, b32 force_number){ // NOTE(allen|a3.4.4): It will not cause an *error* if we continue on after failing to. @@ -1676,7 +1692,8 @@ try_buffer_kill(Application_Links *app, Buffer_ID buffer, View_ID gui_view_id, B internal String_Const_u8 get_query_string(Application_Links *app, char *query_str, u8 *string_space, i32 space_size){ - Query_Bar bar; + Query_Bar_Group group(app); + Query_Bar bar = {}; bar.prompt = SCu8((u8*)query_str); bar.string = SCu8(string_space, (umem)0); bar.string_capacity = space_size; diff --git a/custom/4coder_project_commands.cpp b/custom/4coder_project_commands.cpp index 777c9bf7..8b2e1578 100644 --- a/custom/4coder_project_commands.cpp +++ b/custom/4coder_project_commands.cpp @@ -1012,6 +1012,8 @@ project_key_strings_query_user(Application_Links *app, u8 *binary_file_space, i32 binary_file_cap){ Project_Key_Strings keys = {}; + Query_Bar_Group bar_group(app); + Query_Bar script_file_bar = {}; Query_Bar code_file_bar = {}; Query_Bar output_dir_bar = {}; diff --git a/custom/4coder_types.h b/custom/4coder_types.h index b9e8f716..adb69e7c 100644 --- a/custom/4coder_types.h +++ b/custom/4coder_types.h @@ -331,17 +331,26 @@ ENUM(u32, Glyph_Flag){ GlyphFlag_Rotate90 = 0x1, }; -STRUCT Query_Bar{ +struct Query_Bar{ String_Const_u8 prompt; String_Const_u8 string; umem string_capacity; }; -STRUCT Query_Bar_Ptr_Array{ +struct Query_Bar_Ptr_Array{ Query_Bar **ptrs; i32 count; }; +struct Query_Bar_Group{ + Application_Links *app; + View_ID view; + + Query_Bar_Group(Application_Links *app); + Query_Bar_Group(Application_Links *app, View_ID view); + ~Query_Bar_Group(); +}; + TYPEDEF_FUNC void UI_Quit_Function_Type(struct Application_Links *app, View_ID view); #define UI_QUIT_FUNCTION(name) void name(struct Application_Links *app, View_ID view) @@ -475,7 +484,7 @@ enum{ HookID_EndFile, HookID_FileEditRange, HookID_FileExternallyModified, - HookID_CommandCaller, + HookID_ViewEventHandler, HookID_RenderCaller, HookID_InputFilter, HookID_Start, @@ -488,9 +497,6 @@ enum{ TYPEDEF_FUNC i32 Hook_Function(struct Application_Links *app); #define HOOK_SIG(name) i32 name(struct Application_Links *app) -TYPEDEF_FUNC i32 Command_Caller_Hook_Function(struct Application_Links *app); -#define COMMAND_CALLER_HOOK(name) i32 name(struct Application_Links *app) - TYPEDEF_FUNC void Render_Caller_Function(struct Application_Links *app, Frame_Info frame_info); #define RENDER_CALLER_SIG(name) void name(struct Application_Links *app, Frame_Info frame_info) diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index 323a2405..1b97d340 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -2,14 +2,14 @@ #define command_id(c) (fcoder_metacmd_ID_##c) #define command_metadata(c) (&fcoder_metacmd_table[command_id(c)]) #define command_metadata_by_id(id) (&fcoder_metacmd_table[id]) -#define command_one_past_last_id 224 +#define command_one_past_last_id 225 #if defined(CUSTOM_COMMAND_SIG) #define PROC_LINKS(x,y) x #else #define PROC_LINKS(x,y) y #endif #if defined(CUSTOM_COMMAND_SIG) -CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute); +CUSTOM_COMMAND_SIG(default_view_input_handler); CUSTOM_COMMAND_SIG(seek_beginning_of_textual_line); CUSTOM_COMMAND_SIG(seek_end_of_textual_line); CUSTOM_COMMAND_SIG(seek_beginning_of_line); @@ -233,6 +233,7 @@ CUSTOM_COMMAND_SIG(miblo_decrement_basic); CUSTOM_COMMAND_SIG(miblo_increment_time_stamp); CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp); CUSTOM_COMMAND_SIG(miblo_increment_time_stamp_minute); +CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute); #endif struct Command_Metadata{ PROC_LINKS(Custom_Command_Function, void) *proc; @@ -244,14 +245,14 @@ char *source_name; i32 source_name_len; i32 line_number; }; -static Command_Metadata fcoder_metacmd_table[224] = { -{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, -{ PROC_LINKS(seek_beginning_of_textual_line, 0), "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1967 }, -{ PROC_LINKS(seek_end_of_textual_line, 0), "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1973 }, -{ PROC_LINKS(seek_beginning_of_line, 0), "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1979 }, -{ PROC_LINKS(seek_end_of_line, 0), "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1985 }, -{ PROC_LINKS(goto_beginning_of_file, 0), "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1991 }, -{ PROC_LINKS(goto_end_of_file, 0), "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1999 }, +static Command_Metadata fcoder_metacmd_table[225] = { +{ PROC_LINKS(default_view_input_handler, 0), "default_view_input_handler", 26, "Input consumption loop for base view behavior", 45, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 17 }, +{ PROC_LINKS(seek_beginning_of_textual_line, 0), "seek_beginning_of_textual_line", 30, "Seeks the cursor to the beginning of the line across all text.", 62, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1984 }, +{ PROC_LINKS(seek_end_of_textual_line, 0), "seek_end_of_textual_line", 24, "Seeks the cursor to the end of the line across all text.", 56, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1990 }, +{ PROC_LINKS(seek_beginning_of_line, 0), "seek_beginning_of_line", 22, "Seeks the cursor to the beginning of the visual line.", 53, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 1996 }, +{ PROC_LINKS(seek_end_of_line, 0), "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2002 }, +{ PROC_LINKS(goto_beginning_of_file, 0), "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2008 }, +{ PROC_LINKS(goto_end_of_file, 0), "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2016 }, { PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 196 }, { PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 206 }, { PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 216 }, @@ -331,37 +332,37 @@ static Command_Metadata fcoder_metacmd_table[224] = { { PROC_LINKS(eol_nixify, 0), "eol_nixify", 10, "Puts the buffer in NIX line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 764 }, { PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 772 }, { PROC_LINKS(goto_line, 0), "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 780 }, -{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1007 }, -{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1013 }, -{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1019 }, -{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1025 }, -{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1071 }, -{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1080 }, -{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1089 }, -{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1182 }, -{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1202 }, -{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1218 }, -{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1253 }, -{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1278 }, -{ PROC_LINKS(save_to_query, 0), "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1321 }, -{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1353 }, -{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1390 }, -{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1423 }, -{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1429 }, -{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1435 }, -{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1449 }, -{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1514 }, -{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1546 }, -{ PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1559 }, -{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1571 }, -{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1607 }, -{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1615 }, -{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1625 }, -{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1852 }, -{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1865 }, -{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1879 }, -{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1950 }, -{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2051 }, +{ PROC_LINKS(search, 0), "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1009 }, +{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1015 }, +{ PROC_LINKS(search_identifier, 0), "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1021 }, +{ PROC_LINKS(reverse_search_identifier, 0), "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1027 }, +{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1074 }, +{ PROC_LINKS(replace_in_buffer, 0), "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1083 }, +{ PROC_LINKS(replace_in_all_buffers, 0), "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1092 }, +{ PROC_LINKS(query_replace, 0), "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1184 }, +{ PROC_LINKS(query_replace_identifier, 0), "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1205 }, +{ PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1221 }, +{ PROC_LINKS(save_all_dirty_buffers, 0), "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1256 }, +{ PROC_LINKS(delete_file_query, 0), "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1281 }, +{ PROC_LINKS(save_to_query, 0), "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1325 }, +{ PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1358 }, +{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1396 }, +{ PROC_LINKS(move_line_up, 0), "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1430 }, +{ PROC_LINKS(move_line_down, 0), "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1436 }, +{ PROC_LINKS(duplicate_line, 0), "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1442 }, +{ PROC_LINKS(delete_line, 0), "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1456 }, +{ PROC_LINKS(open_file_in_quotes, 0), "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1521 }, +{ PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1553 }, +{ PROC_LINKS(view_buffer_other_panel, 0), "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1566 }, +{ PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1578 }, +{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1614 }, +{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1622 }, +{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1632 }, +{ PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1861 }, +{ PROC_LINKS(redo, 0), "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1874 }, +{ PROC_LINKS(undo_all_buffers, 0), "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1888 }, +{ PROC_LINKS(redo_all_buffers, 0), "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1959 }, +{ PROC_LINKS(open_in_other, 0), "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2060 }, { PROC_LINKS(lister__quit, 0), "lister__quit", 12, "A lister mode command that quits the list without executing any actions.", 72, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 8 }, { PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 15 }, { PROC_LINKS(lister__write_character, 0), "lister__write_character", 23, "A lister mode command that dispatches to the lister's write character handler.", 78, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 30 }, @@ -436,11 +437,11 @@ static Command_Metadata fcoder_metacmd_table[224] = { { PROC_LINKS(load_project, 0), "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 937 }, { PROC_LINKS(project_fkey_command, 0), "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 944 }, { PROC_LINKS(project_go_to_root_directory, 0), "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 969 }, -{ PROC_LINKS(setup_new_project, 0), "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1301 }, -{ PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1308 }, -{ PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1314 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1320 }, -{ PROC_LINKS(project_command_lister, 0), "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1335 }, +{ PROC_LINKS(setup_new_project, 0), "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1303 }, +{ PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1310 }, +{ PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1316 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1322 }, +{ PROC_LINKS(project_command_lister, 0), "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "w:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1337 }, { PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 267 }, { PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 277 }, { PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\custom\\4coder_function_list.cpp", 43, 289 }, @@ -469,8 +470,9 @@ static Command_Metadata fcoder_metacmd_table[224] = { { PROC_LINKS(miblo_increment_time_stamp, 0), "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 231 }, { PROC_LINKS(miblo_decrement_time_stamp, 0), "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 237 }, { PROC_LINKS(miblo_increment_time_stamp_minute, 0), "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 243 }, +{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 }, }; -static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 0; +static i32 fcoder_metacmd_ID_default_view_input_handler = 0; static i32 fcoder_metacmd_ID_seek_beginning_of_textual_line = 1; static i32 fcoder_metacmd_ID_seek_end_of_textual_line = 2; static i32 fcoder_metacmd_ID_seek_beginning_of_line = 3; @@ -694,4 +696,5 @@ static i32 fcoder_metacmd_ID_miblo_decrement_basic = 220; static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 221; static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 222; static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 223; +static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 224; #endif diff --git a/custom/generated/custom_api.cpp b/custom/generated/custom_api.cpp index de43fdbd..f40e4745 100644 --- a/custom/generated/custom_api.cpp +++ b/custom/generated/custom_api.cpp @@ -124,6 +124,7 @@ vtable->get_mouse_state = get_mouse_state; vtable->get_active_query_bars = get_active_query_bars; vtable->start_query_bar = start_query_bar; vtable->end_query_bar = end_query_bar; +vtable->clear_all_query_bars = clear_all_query_bars; vtable->print_message = print_message; vtable->log_string = log_string; vtable->thread_get_id = thread_get_id; @@ -298,6 +299,7 @@ get_mouse_state = vtable->get_mouse_state; get_active_query_bars = vtable->get_active_query_bars; start_query_bar = vtable->start_query_bar; end_query_bar = vtable->end_query_bar; +clear_all_query_bars = vtable->clear_all_query_bars; print_message = vtable->print_message; log_string = vtable->log_string; thread_get_id = vtable->thread_get_id; diff --git a/custom/generated/custom_api.h b/custom/generated/custom_api.h index 81463c72..3ecb645b 100644 --- a/custom/generated/custom_api.h +++ b/custom/generated/custom_api.h @@ -122,6 +122,7 @@ #define custom_get_active_query_bars_sig() b32 custom_get_active_query_bars(Application_Links* app, View_ID view_id, i32 max_result_count, Query_Bar_Ptr_Array* array_out) #define custom_start_query_bar_sig() b32 custom_start_query_bar(Application_Links* app, Query_Bar* bar, u32 flags) #define custom_end_query_bar_sig() void custom_end_query_bar(Application_Links* app, Query_Bar* bar, u32 flags) +#define custom_clear_all_query_bars_sig() void custom_clear_all_query_bars(Application_Links* app, View_ID view_id) #define custom_print_message_sig() b32 custom_print_message(Application_Links* app, String_Const_u8 message) #define custom_log_string_sig() b32 custom_log_string(Application_Links* app, String_Const_u8 str) #define custom_thread_get_id_sig() i32 custom_thread_get_id(Application_Links* app) @@ -292,6 +293,7 @@ typedef Mouse_State custom_get_mouse_state_type(Application_Links* app); typedef b32 custom_get_active_query_bars_type(Application_Links* app, View_ID view_id, i32 max_result_count, Query_Bar_Ptr_Array* array_out); typedef b32 custom_start_query_bar_type(Application_Links* app, Query_Bar* bar, u32 flags); typedef void custom_end_query_bar_type(Application_Links* app, Query_Bar* bar, u32 flags); +typedef void custom_clear_all_query_bars_type(Application_Links* app, View_ID view_id); typedef b32 custom_print_message_type(Application_Links* app, String_Const_u8 message); typedef b32 custom_log_string_type(Application_Links* app, String_Const_u8 str); typedef i32 custom_thread_get_id_type(Application_Links* app); @@ -463,6 +465,7 @@ custom_get_mouse_state_type *get_mouse_state; custom_get_active_query_bars_type *get_active_query_bars; custom_start_query_bar_type *start_query_bar; custom_end_query_bar_type *end_query_bar; +custom_clear_all_query_bars_type *clear_all_query_bars; custom_print_message_type *print_message; custom_log_string_type *log_string; custom_thread_get_id_type *thread_get_id; @@ -635,6 +638,7 @@ internal Mouse_State get_mouse_state(Application_Links* app); internal b32 get_active_query_bars(Application_Links* app, View_ID view_id, i32 max_result_count, Query_Bar_Ptr_Array* array_out); internal b32 start_query_bar(Application_Links* app, Query_Bar* bar, u32 flags); internal void end_query_bar(Application_Links* app, Query_Bar* bar, u32 flags); +internal void clear_all_query_bars(Application_Links* app, View_ID view_id); internal b32 print_message(Application_Links* app, String_Const_u8 message); internal b32 log_string(Application_Links* app, String_Const_u8 str); internal i32 thread_get_id(Application_Links* app); @@ -807,6 +811,7 @@ global custom_get_mouse_state_type *get_mouse_state = 0; global custom_get_active_query_bars_type *get_active_query_bars = 0; global custom_start_query_bar_type *start_query_bar = 0; global custom_end_query_bar_type *end_query_bar = 0; +global custom_clear_all_query_bars_type *clear_all_query_bars = 0; global custom_print_message_type *print_message = 0; global custom_log_string_type *log_string = 0; global custom_thread_get_id_type *thread_get_id = 0; diff --git a/custom/generated/custom_api_master_list.h b/custom/generated/custom_api_master_list.h index a0631e78..b6f21f3b 100644 --- a/custom/generated/custom_api_master_list.h +++ b/custom/generated/custom_api_master_list.h @@ -122,6 +122,7 @@ api(custom) function Mouse_State get_mouse_state(Application_Links* app); api(custom) function b32 get_active_query_bars(Application_Links* app, View_ID view_id, i32 max_result_count, Query_Bar_Ptr_Array* array_out); api(custom) function b32 start_query_bar(Application_Links* app, Query_Bar* bar, u32 flags); api(custom) function void end_query_bar(Application_Links* app, Query_Bar* bar, u32 flags); +api(custom) function void clear_all_query_bars(Application_Links* app, View_ID view_id); api(custom) function b32 print_message(Application_Links* app, String_Const_u8 message); api(custom) function b32 log_string(Application_Links* app, String_Const_u8 str); api(custom) function i32 thread_get_id(Application_Links* app);