Working on eliminating old UI bulls
This commit is contained in:
parent
b9ff6e0461
commit
eb47669f84
50
4ed.cpp
50
4ed.cpp
|
@ -757,16 +757,10 @@ App_Step_Sig(app_step){
|
|||
panel != 0;
|
||||
panel = layout_get_next_open_panel(layout, panel)){
|
||||
View *view = panel->view;
|
||||
if (!view->ui_mode){
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
edit_pos.scroll.position = view_normalize_buffer_point(models, view, edit_pos.scroll.target);
|
||||
block_zero_struct(&edit_pos.scroll.target);
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
}
|
||||
else{
|
||||
view->ui_scroll.position = view->ui_scroll.target;
|
||||
block_zero_struct(&view->ui_scroll.target);
|
||||
}
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
edit_pos.scroll.position = view_normalize_buffer_point(models, view, edit_pos.scroll.target);
|
||||
block_zero_struct(&edit_pos.scroll.target);
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -780,32 +774,20 @@ App_Step_Sig(app_step){
|
|||
|
||||
View_ID view_id = view_get_id(&models->live_set, view);
|
||||
b32 new_target = (b32)view->new_scroll_target;
|
||||
if (view->ui_mode){
|
||||
Vec2_f32 pending = view->ui_scroll.target - view->ui_scroll.position;
|
||||
if (!near_zero(pending, 0.5f)){
|
||||
Vec2_f32 partial = scroll_rule(pending, view_id, new_target, animation_dt);
|
||||
view->ui_scroll.position += partial;
|
||||
models->animate_next_frame = true;
|
||||
}
|
||||
else{
|
||||
view->ui_scroll.position = view->ui_scroll.target;
|
||||
}
|
||||
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
Vec2_f32 pending = view_buffer_point_difference(models, view,
|
||||
edit_pos.scroll.target, edit_pos.scroll.position);
|
||||
if (!near_zero(pending, 0.5f)){
|
||||
Vec2_f32 partial = scroll_rule(pending, view_id, new_target, animation_dt);
|
||||
edit_pos.scroll.position = view_move_buffer_point(models, view,
|
||||
edit_pos.scroll.position, partial);
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
models->animate_next_frame = true;
|
||||
}
|
||||
else{
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
Vec2_f32 pending = view_buffer_point_difference(models, view,
|
||||
edit_pos.scroll.target, edit_pos.scroll.position);
|
||||
if (!near_zero(pending, 0.5f)){
|
||||
Vec2_f32 partial = scroll_rule(pending, view_id, new_target, animation_dt);
|
||||
edit_pos.scroll.position = view_move_buffer_point(models, view,
|
||||
edit_pos.scroll.position, partial);
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
models->animate_next_frame = true;
|
||||
}
|
||||
else{
|
||||
edit_pos.scroll.position = edit_pos.scroll.target;
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
}
|
||||
edit_pos.scroll.position = edit_pos.scroll.target;
|
||||
view_set_edit_pos(view, edit_pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1350,23 +1350,8 @@ view_get_buffer_scroll(Application_Links *app, View_ID view_id){
|
|||
Buffer_Scroll result = {};
|
||||
View *view = imp_get_view(models, view_id);
|
||||
if (api_check_view(view)){
|
||||
if (!view->ui_mode){
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
result = edit_pos.scroll;
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
api(custom) function Basic_Scroll
|
||||
view_get_basic_scroll(Application_Links *app, View_ID view_id){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
Basic_Scroll result = {};
|
||||
View *view = imp_get_view(models, view_id);
|
||||
if (api_check_view(view)){
|
||||
if (view->ui_mode){
|
||||
result = view->ui_scroll;
|
||||
}
|
||||
File_Edit_Positions edit_pos = view_get_edit_pos(view);
|
||||
result = edit_pos.scroll;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -1409,11 +1394,6 @@ view_get_setting(Application_Links *app, View_ID view_id, View_Setting_ID settin
|
|||
*value_out = !view->hide_file_bar;
|
||||
}break;
|
||||
|
||||
case ViewSetting_UICommandMap:
|
||||
{
|
||||
*value_out = view->ui_map_id;
|
||||
}break;
|
||||
|
||||
default:
|
||||
{
|
||||
result = false;
|
||||
|
@ -1448,11 +1428,6 @@ view_set_setting(Application_Links *app, View_ID view_id, View_Setting_ID settin
|
|||
view->hide_file_bar = (b8)!value;
|
||||
}break;
|
||||
|
||||
case ViewSetting_UICommandMap:
|
||||
{
|
||||
view->ui_map_id = value;
|
||||
}break;
|
||||
|
||||
default:
|
||||
{
|
||||
result = false;
|
||||
|
@ -1523,36 +1498,16 @@ view_set_buffer_scroll(Application_Links *app, View_ID view_id, Buffer_Scroll sc
|
|||
b32 result = false;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
if (api_check_view(view)){
|
||||
if (!view->ui_mode){
|
||||
scroll.position = view_normalize_buffer_point(models, view, scroll.position);
|
||||
scroll.target = view_normalize_buffer_point(models, view, scroll.target);
|
||||
scroll.target.pixel_shift.x = f32_round32(scroll.target.pixel_shift.x);
|
||||
scroll.target.pixel_shift.y = f32_round32(scroll.target.pixel_shift.y);
|
||||
scroll.target.pixel_shift.x = clamp_bot(0.f, scroll.target.pixel_shift.x);
|
||||
Buffer_Layout_Item_List line = view_get_line_layout(models, view, scroll.target.line_number);
|
||||
scroll.target.pixel_shift.y = clamp(0.f, scroll.target.pixel_shift.y, line.height);
|
||||
view_set_scroll(models, view, scroll);
|
||||
view->new_scroll_target = true;
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
api(custom) function b32
|
||||
view_set_basic_scroll(Application_Links *app, View_ID view_id, Basic_Scroll scroll)
|
||||
{
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
b32 result = false;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
if (api_check_view(view)){
|
||||
if (view->ui_mode){
|
||||
scroll.target.x = f32_round32(scroll.target.x);
|
||||
scroll.target.y = f32_round32(scroll.target.y);
|
||||
view->ui_scroll = scroll;
|
||||
view->new_scroll_target = true;
|
||||
result = true;
|
||||
}
|
||||
scroll.position = view_normalize_buffer_point(models, view, scroll.position);
|
||||
scroll.target = view_normalize_buffer_point(models, view, scroll.target);
|
||||
scroll.target.pixel_shift.x = f32_round32(scroll.target.pixel_shift.x);
|
||||
scroll.target.pixel_shift.y = f32_round32(scroll.target.pixel_shift.y);
|
||||
scroll.target.pixel_shift.x = clamp_bot(0.f, scroll.target.pixel_shift.x);
|
||||
Buffer_Layout_Item_List line = view_get_line_layout(models, view, scroll.target.line_number);
|
||||
scroll.target.pixel_shift.y = clamp(0.f, scroll.target.pixel_shift.y, line.height);
|
||||
view_set_scroll(models, view, scroll);
|
||||
view->new_scroll_target = true;
|
||||
result = true;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
@ -1593,7 +1548,8 @@ view_set_buffer(Application_Links *app, View_ID view_id, Buffer_ID buffer_id, Se
|
|||
if (file != view->file){
|
||||
view_set_file(models, view, file);
|
||||
if (!(flags & SetBuffer_KeepOriginalGUI)){
|
||||
view_quit_ui(models, view);
|
||||
//view_quit_ui(models, view);
|
||||
// TODO(allen): back to base context
|
||||
}
|
||||
}
|
||||
result = true;
|
||||
|
@ -1619,67 +1575,36 @@ view_post_fade(Application_Links *app, View_ID view_id, f32 seconds, Range_i64 r
|
|||
}
|
||||
|
||||
api(custom) function b32
|
||||
view_begin_ui_mode(Application_Links *app, View_ID view_id)
|
||||
{
|
||||
view_push_context(Application_Links *app, View_ID view_id, View_Context *ctx){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
b32 result = false;
|
||||
if (api_check_view(view)){
|
||||
if (!view->ui_mode){
|
||||
view->ui_mode = true;
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
api(custom) function b32
|
||||
view_end_ui_mode(Application_Links *app, View_ID view_id)
|
||||
{
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
b32 result = false;
|
||||
if (api_check_view(view) && view->ui_mode){
|
||||
view_quit_ui(models, view);
|
||||
view->ui_mode = false;
|
||||
view_push_context(models, view, ctx);
|
||||
result = true;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
api(custom) function b32
|
||||
view_is_in_ui_mode(Application_Links *app, View_ID view_id){
|
||||
view_pop_context(Application_Links *app, View_ID view_id){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
b32 result = false;
|
||||
if (api_check_view(view)){
|
||||
result = view->ui_mode;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
api(custom) function b32
|
||||
view_set_quit_ui_handler(Application_Links *app, View_ID view_id, UI_Quit_Function_Type *quit_function)
|
||||
{
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
b32 result = false;
|
||||
if (api_check_view(view)){
|
||||
view->ui_quit = quit_function;
|
||||
view_pop_context(models, view);
|
||||
result = true;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
api(custom) function b32
|
||||
view_get_quit_ui_handler(Application_Links *app, View_ID view_id, UI_Quit_Function_Type **quit_function_out)
|
||||
{
|
||||
api(custom) function View_Context
|
||||
view_current_context(Application_Links *app, View_ID view_id){
|
||||
Models *models = (Models*)app->cmd_context;
|
||||
View *view = imp_get_view(models, view_id);
|
||||
b32 result = false;
|
||||
View_Context result = {};
|
||||
if (api_check_view(view)){
|
||||
*quit_function_out = view->ui_quit;
|
||||
result = true;
|
||||
result = view_current_context(models, view);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
|
65
4ed_view.cpp
65
4ed_view.cpp
|
@ -66,18 +66,14 @@ free_all_queries(Query_Set *set){
|
|||
|
||||
internal Command_Map_ID
|
||||
view_get_map(View *view){
|
||||
if (view->ui_mode){
|
||||
return(view->ui_map_id);
|
||||
}
|
||||
else{
|
||||
return(view->file->settings.base_map_id);
|
||||
}
|
||||
return(view->file->settings.base_map_id);
|
||||
}
|
||||
|
||||
internal u32
|
||||
view_get_access_flags(View *view){
|
||||
u32 result = AccessOpen;
|
||||
if (view->ui_mode){
|
||||
View_Context_Node *node = view->ctx;
|
||||
if (node != 0 && node->ctx.hides_buffer){
|
||||
result |= AccessHidden;
|
||||
}
|
||||
result |= file_get_access_flags(view->file);
|
||||
|
@ -611,6 +607,51 @@ co_send_core_event(Models *models, View *view, Core_Code code){
|
|||
|
||||
////////////////////////////////
|
||||
|
||||
function View_Context_Node*
|
||||
view__alloc_context_node(Live_Views *views){
|
||||
View_Context_Node *node = views->free_nodes;
|
||||
if (node != 0){
|
||||
sll_stack_pop(views->free_nodes);
|
||||
}
|
||||
else{
|
||||
node = push_array(views->node_arena, View_Context_Node, 1);
|
||||
}
|
||||
return(node);
|
||||
}
|
||||
|
||||
function void
|
||||
view__free_context_node(Live_Views *views, View_Context_Node *node){
|
||||
sll_stack_push(views->free_nodes, node);
|
||||
}
|
||||
|
||||
function void
|
||||
view_push_context(Models *models, View *view, View_Context *ctx){
|
||||
View_Context_Node *node = view__alloc_context_node(&models->live_set);
|
||||
sll_stack_push(view->ctx, node);
|
||||
block_copy_struct(&node->ctx, ctx);
|
||||
}
|
||||
|
||||
function void
|
||||
view_pop_context(Models *models, View *view){
|
||||
View_Context_Node *node = view->ctx;
|
||||
if (node != 0){
|
||||
sll_stack_pop(view->ctx);
|
||||
view__free_context_node(&models->live_set, node);
|
||||
}
|
||||
}
|
||||
|
||||
function View_Context
|
||||
view_current_context(Models *models, View *view){
|
||||
View_Context ctx = {};
|
||||
View_Context_Node *node = view->ctx;
|
||||
if (node != 0){
|
||||
block_copy_struct(&ctx, &node->ctx);
|
||||
}
|
||||
return(ctx);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal b32
|
||||
file_is_viewed(Layout *layout, Editing_File *file){
|
||||
b32 is_viewed = false;
|
||||
|
@ -683,16 +724,6 @@ finalize_color(Color_Table color_table, int_color color){
|
|||
return(color_argb);
|
||||
}
|
||||
|
||||
internal void
|
||||
view_quit_ui(Models *models, View *view){
|
||||
Assert(view != 0);
|
||||
view->ui_mode = false;
|
||||
if (view->ui_quit != 0){
|
||||
view->ui_quit(&models->app_links, view_get_id(&models->live_set, view));
|
||||
view->ui_quit = 0;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal View*
|
||||
|
|
12
4ed_view.h
12
4ed_view.h
|
@ -56,6 +56,11 @@ struct Query_Set{
|
|||
Query_Slot *used_slot;
|
||||
};
|
||||
|
||||
struct View_Context_Node{
|
||||
View_Context_Node *next;
|
||||
View_Context ctx;
|
||||
};
|
||||
|
||||
struct View{
|
||||
View *next;
|
||||
View *prev;
|
||||
|
@ -74,10 +79,7 @@ struct View{
|
|||
Coroutine *co;
|
||||
Co_Out co_out;
|
||||
|
||||
b8 ui_mode;
|
||||
Command_Map_ID ui_map_id;
|
||||
Basic_Scroll ui_scroll;
|
||||
UI_Quit_Function_Type *ui_quit;
|
||||
View_Context_Node *ctx;
|
||||
|
||||
b8 hide_scrollbar;
|
||||
b8 hide_file_bar;
|
||||
|
@ -87,6 +89,8 @@ struct View{
|
|||
};
|
||||
|
||||
struct Live_Views{
|
||||
Arena *node_arena;
|
||||
View_Context_Node *free_nodes;
|
||||
View *views;
|
||||
View free_sentinel;
|
||||
i32 count;
|
||||
|
|
|
@ -226,50 +226,42 @@ CUSTOM_COMMAND_SIG(click_set_cursor_and_mark)
|
|||
CUSTOM_DOC("Sets the cursor position and mark to the mouse position.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessProtected);
|
||||
if (!view_is_in_ui_mode(app, view)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
}
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(click_set_cursor)
|
||||
CUSTOM_DOC("Sets the cursor position to the mouse position.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessProtected);
|
||||
if (!view_is_in_ui_mode(app, view)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(click_set_cursor_if_lbutton)
|
||||
CUSTOM_DOC("If the mouse left button is pressed, sets the cursor position to the mouse position.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessProtected);
|
||||
if (!view_is_in_ui_mode(app, view)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
if (mouse.l){
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
if (mouse.l){
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_cursor_and_preferred_x(app, view, seek_pos(pos));
|
||||
}
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(click_set_mark)
|
||||
CUSTOM_DOC("Sets the mark position to the mouse position.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessProtected);
|
||||
if (!view_is_in_ui_mode(app, view)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
i64 pos = view_pos_from_xy(app, view, V2(mouse.p));
|
||||
view_set_mark(app, view, seek_pos(pos));
|
||||
no_mark_snap_to_cursor(app, view);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(mouse_wheel_scroll)
|
||||
|
@ -278,16 +270,9 @@ CUSTOM_DOC("Reads the scroll wheel value from the mouse state and scrolls accord
|
|||
View_ID view = get_active_view(app, AccessProtected);
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
if (mouse.wheel != 0){
|
||||
if (view_is_in_ui_mode(app, view)){
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view);
|
||||
scroll.target.y += mouse.wheel;
|
||||
view_set_basic_scroll(app, view, scroll);
|
||||
}
|
||||
else{
|
||||
Buffer_Scroll scroll = view_get_buffer_scroll(app, view);
|
||||
scroll.target = view_move_buffer_point(app, view, scroll.target, V2f32(0.f, (f32)mouse.wheel));
|
||||
view_set_buffer_scroll(app, view, scroll);
|
||||
}
|
||||
Buffer_Scroll scroll = view_get_buffer_scroll(app, view);
|
||||
scroll.target = view_move_buffer_point(app, view, scroll.target, V2f32(0.f, (f32)mouse.wheel));
|
||||
view_set_buffer_scroll(app, view, scroll);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1578,13 +1563,11 @@ CUSTOM_DOC("Set the other non-active panel to view the buffer that the active pa
|
|||
CUSTOM_COMMAND_SIG(swap_buffers_between_panels)
|
||||
CUSTOM_DOC("Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.")
|
||||
{
|
||||
View_ID view1 = get_active_view(app, AccessAll);
|
||||
View_ID view1 = get_active_view(app, AccessProtected);
|
||||
change_active_panel(app);
|
||||
View_ID view2 = get_active_view(app, AccessAll);
|
||||
View_ID view2 = get_active_view(app, AccessProtected);
|
||||
|
||||
if (view1 != view2 &&
|
||||
!view_is_in_ui_mode(app, view1) &&
|
||||
!view_is_in_ui_mode(app, view2)){
|
||||
if (view1 != view2){
|
||||
Buffer_ID buffer1 = view_get_buffer(app, view1, AccessAll);
|
||||
Buffer_ID buffer2 = view_get_buffer(app, view2, AccessAll);
|
||||
if (buffer1 != buffer2){
|
||||
|
|
|
@ -217,7 +217,6 @@ activate_snippet(Application_Links *app, Heap *heap, View_ID view, struct Lister
|
|||
static void
|
||||
snippet_lister__parameterized(Application_Links *app, Snippet_Array snippet_array){
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
Scratch_Block scratch(app, Scratch_Share);
|
||||
i32 option_count = snippet_array.count;
|
||||
Lister_Option *options = push_array(scratch, Lister_Option, option_count);
|
||||
|
|
|
@ -248,7 +248,9 @@ create_or_switch_to_buffer_and_clear_by_name(Application_Links *app, String_Cons
|
|||
View_ID view_with_buffer_already_open = get_first_view_with_buffer(app, search_buffer);
|
||||
if (view_with_buffer_already_open != 0){
|
||||
target_view = view_with_buffer_already_open;
|
||||
view_end_ui_mode(app, target_view);
|
||||
// TODO(allen): there needs to be something like
|
||||
// view_exit_to_base_context(app, target_view);
|
||||
//view_end_ui_mode(app, target_view);
|
||||
}
|
||||
else{
|
||||
view_set_buffer(app, target_view, search_buffer, 0);
|
||||
|
|
|
@ -26,20 +26,14 @@ CUSTOM_DOC("Input consumption loop for base view behavior")
|
|||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
Command_Map_ID map_id = *map_id_ptr;
|
||||
|
||||
Command_Binding binding = map_get_binding_recursive(&framework_mapping, map_id, &input.event);
|
||||
|
||||
|
@ -713,62 +707,12 @@ default_buffer_render_caller(Application_Links *app, Frame_Info frame_info, View
|
|||
text_layout_free(app, text_layout_id);
|
||||
}
|
||||
|
||||
internal void
|
||||
default_ui_render_caller(Application_Links *app, View_ID view_id, Rect_f32 rect, Face_ID face_id){
|
||||
UI_Data *ui_data = 0;
|
||||
Arena *ui_arena = 0;
|
||||
if (view_get_ui_data(app, view_id, ViewGetUIFlag_KeepDataAsIs, &ui_data, &ui_arena)){
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view_id);
|
||||
|
||||
for (UI_Item *item = ui_data->list.first;
|
||||
item != 0;
|
||||
item = item->next){
|
||||
Rect_f32 item_rect = Rf32(item->rect_outer);
|
||||
item_rect.p0 += rect.p0;
|
||||
item_rect.p1 += rect.p0;
|
||||
|
||||
switch (item->coordinates){
|
||||
case UICoordinates_ViewSpace:
|
||||
{
|
||||
item_rect.p0 -= scroll.position;
|
||||
item_rect.p1 -= scroll.position;
|
||||
}break;
|
||||
case UICoordinates_PanelSpace:
|
||||
{}break;
|
||||
}
|
||||
|
||||
if (rect_overlap(item_rect, rect)){
|
||||
Rect_f32 inner = rect_inner(item_rect, (f32)item->inner_margin);
|
||||
|
||||
Face_Metrics metrics = get_face_metrics(app, face_id);
|
||||
f32 line_height = metrics.line_height;
|
||||
f32 info_height = (f32)item->line_count*line_height;
|
||||
|
||||
draw_rectangle(app, inner, 0.f, Stag_Back);
|
||||
Vec2_f32 p = V2f32(inner.x0 + 3.f, f32_round32((inner.y0 + inner.y1 - info_height)*0.5f));
|
||||
for (i32 i = 0; i < item->line_count; i += 1){
|
||||
draw_fancy_string(app, face_id, item->lines[i].first, p, Stag_Default, 0, 0, V2(1.f, 0));
|
||||
p.y += line_height;
|
||||
}
|
||||
if (item->inner_margin > 0){
|
||||
draw_margin(app, item_rect, inner, get_margin_color(item->activation_level));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal void
|
||||
default_ui_render_caller(Application_Links *app, View_ID view, Rect_f32 rect){
|
||||
Buffer_ID buffer = view_get_buffer(app, view, AccessAll);
|
||||
Face_ID face_id = get_face_id(app, buffer);
|
||||
default_ui_render_caller(app, view, rect, face_id);
|
||||
}
|
||||
|
||||
internal void
|
||||
default_render_view(Application_Links *app, Frame_Info frame_info, View_ID view, b32 is_active){
|
||||
Rect_f32 view_rect = view_get_screen_rect(app, view);
|
||||
Rect_f32 inner = rect_inner(view_rect, 3);
|
||||
draw_rectangle(app, view_rect, 0.f, get_margin_color(is_active?UIActivation_Active:UIActivation_None));
|
||||
draw_rectangle(app, view_rect, 0.f,
|
||||
get_margin_color(is_active?UIHighlight_Active:UIHighlight_None));
|
||||
draw_rectangle(app, inner, 0.f, Stag_Back);
|
||||
Rect_f32 prev_clip = draw_set_clip(app, inner);
|
||||
|
||||
|
@ -776,12 +720,7 @@ default_render_view(Application_Links *app, Frame_Info frame_info, View_ID view,
|
|||
View_Render_Hook **hook_ptr = scope_attachment(app, scope, view_render_hook, View_Render_Hook*);
|
||||
|
||||
if (*hook_ptr == 0){
|
||||
if (view_is_in_ui_mode(app, view)){
|
||||
default_ui_render_caller(app, view, inner);
|
||||
}
|
||||
else{
|
||||
default_buffer_render_caller(app, frame_info, view, inner);
|
||||
}
|
||||
default_buffer_render_caller(app, frame_info, view, inner);
|
||||
}
|
||||
else{
|
||||
View_Render_Hook *hook = *hook_ptr;
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "4coder_helper.h"
|
||||
#include "4coder_insertion.h"
|
||||
#include "4coder_fancy.h"
|
||||
#include "4coder_ui_helper.h"
|
||||
#include "4coder_lister_base.h"
|
||||
#include "4coder_default_framework.h"
|
||||
#include "4coder_config.h"
|
||||
#include "4coder_auto_indent.h"
|
||||
|
@ -67,7 +67,7 @@
|
|||
#include "4coder_default_framework_variables.cpp"
|
||||
#include "4coder_helper.cpp"
|
||||
#include "4coder_fancy.cpp"
|
||||
#include "4coder_ui_helper.cpp"
|
||||
#include "4coder_lister_base.cpp"
|
||||
#include "4coder_font_helper.cpp"
|
||||
#include "4coder_config.cpp"
|
||||
#include "4coder_default_framework.cpp"
|
||||
|
|
|
@ -166,14 +166,8 @@ view_move_buffer_point(Application_Links *app, View_ID view, Buffer_Point buffer
|
|||
|
||||
internal void
|
||||
view_zero_scroll(Application_Links *app, View_ID view){
|
||||
if (view_is_in_ui_mode(app, view)){
|
||||
Basic_Scroll scroll = {};
|
||||
view_set_basic_scroll(app, view, scroll);
|
||||
}
|
||||
else{
|
||||
Buffer_Scroll scroll = {};
|
||||
view_set_buffer_scroll(app, view, scroll);
|
||||
}
|
||||
Buffer_Scroll scroll = {};
|
||||
view_set_buffer_scroll(app, view, scroll);
|
||||
}
|
||||
|
||||
internal void
|
||||
|
@ -2205,15 +2199,15 @@ get_margin_color(i32 level){
|
|||
int_color margin = 0;
|
||||
switch (level){
|
||||
default:
|
||||
case UIActivation_None:
|
||||
case UIHighlight_None:
|
||||
{
|
||||
margin = Stag_List_Item;
|
||||
}break;
|
||||
case UIActivation_Hover:
|
||||
case UIHighlight_Hover:
|
||||
{
|
||||
margin = Stag_List_Item_Hover;
|
||||
}break;
|
||||
case UIActivation_Active:
|
||||
case UIHighlight_Active:
|
||||
{
|
||||
margin = Stag_List_Item_Active;
|
||||
}break;
|
||||
|
@ -2223,14 +2217,6 @@ get_margin_color(i32 level){
|
|||
|
||||
////////////////////////////////
|
||||
|
||||
UI_QUIT_FUNCTION(ui_quit_clear_render_hook){
|
||||
Managed_Scope scope = view_get_managed_scope(app, view);
|
||||
View_Render_Hook **hook = scope_attachment(app, scope, view_render_hook, View_Render_Hook*);
|
||||
*hook = 0;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
// TODO(allen): REWRITE THIS EXACTLY HOW YOU WANT IT --- start ---
|
||||
|
||||
internal Child_Process_Set_Target_Flags
|
||||
|
|
|
@ -68,7 +68,6 @@ open_jump_lister(Application_Links *app, Heap *heap, View_ID ui_view, Buffer_ID
|
|||
Marker_List *list = get_or_make_list_for_buffer(app, heap, list_buffer_id);
|
||||
if (list != 0){
|
||||
i32 estimated_string_space_size = 0;
|
||||
view_end_ui_mode(app, ui_view);
|
||||
Scratch_Block scratch(app);
|
||||
i32 option_count = list->jump_count;
|
||||
Lister_Option *options = push_array(scratch, Lister_Option, option_count);
|
||||
|
|
|
@ -0,0 +1,666 @@
|
|||
/*
|
||||
* Helpers for ui data structures.
|
||||
*/
|
||||
|
||||
// TOP
|
||||
|
||||
static Vec2_f32
|
||||
panel_space_from_screen_space(Vec2_f32 p, Vec2_f32 file_region_p0){
|
||||
return(p - file_region_p0);
|
||||
}
|
||||
|
||||
static Vec2_f32
|
||||
get_mouse_position_in_panel_space(Mouse_State mouse, Vec2_f32 file_region_p0){
|
||||
return(panel_space_from_screen_space(V2f32(mouse.p), file_region_p0));
|
||||
}
|
||||
|
||||
static Vec2_f32
|
||||
get_mouse_position_in_panel_space(Application_Links *app, Vec2_f32 file_region_p0){
|
||||
return(get_mouse_position_in_panel_space(get_mouse_state(app), file_region_p0));
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
#if 0
|
||||
internal void
|
||||
default_ui_render_caller(Application_Links *app, View_ID view_id, Rect_f32 rect, Face_ID face_id){
|
||||
UI_Data *ui_data = 0;
|
||||
Arena *ui_arena = 0;
|
||||
if (view_get_ui_data(app, view_id, ViewGetUIFlag_KeepDataAsIs, &ui_data, &ui_arena)){
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view_id);
|
||||
|
||||
for (UI_Item *item = ui_data->list.first;
|
||||
item != 0;
|
||||
item = item->next){
|
||||
Rect_f32 item_rect = Rf32(item->rect_outer);
|
||||
item_rect.p0 += rect.p0;
|
||||
item_rect.p1 += rect.p0;
|
||||
|
||||
switch (item->coordinates){
|
||||
case UICoordinates_ViewSpace:
|
||||
{
|
||||
item_rect.p0 -= scroll.position;
|
||||
item_rect.p1 -= scroll.position;
|
||||
}break;
|
||||
case UICoordinates_PanelSpace:
|
||||
{}break;
|
||||
}
|
||||
|
||||
if (rect_overlap(item_rect, rect)){
|
||||
Rect_f32 inner = rect_inner(item_rect, (f32)item->inner_margin);
|
||||
|
||||
Face_Metrics metrics = get_face_metrics(app, face_id);
|
||||
f32 line_height = metrics.line_height;
|
||||
f32 info_height = (f32)item->line_count*line_height;
|
||||
|
||||
draw_rectangle(app, inner, 0.f, Stag_Back);
|
||||
Vec2_f32 p = V2f32(inner.x0 + 3.f, f32_round32((inner.y0 + inner.y1 - info_height)*0.5f));
|
||||
for (i32 i = 0; i < item->line_count; i += 1){
|
||||
draw_fancy_string(app, face_id, item->lines[i].first, p, Stag_Default, 0, 0, V2(1.f, 0));
|
||||
p.y += line_height;
|
||||
}
|
||||
if (item->inner_margin > 0){
|
||||
draw_margin(app, item_rect, inner, get_margin_color(item->activation_level));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
internal void
|
||||
default_ui_render_caller(Application_Links *app, View_ID view, Rect_f32 rect){
|
||||
Buffer_ID buffer = view_get_buffer(app, view, AccessAll);
|
||||
Face_ID face_id = get_face_id(app, buffer);
|
||||
default_ui_render_caller(app, view, rect, face_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
Lister_State global_lister_state_[16] = {};
|
||||
Lister_State *global_lister_state = global_lister_state_ - 1;
|
||||
|
||||
static Lister_State*
|
||||
view_get_lister_state(View_ID view){
|
||||
return(&global_lister_state[view]);
|
||||
}
|
||||
|
||||
function void
|
||||
init_lister_state(Application_Links *app, Lister_State *state, Heap *heap){
|
||||
state->initialized = true;
|
||||
state->set_view_vertical_focus_to_item = false;
|
||||
state->highlighted_node = 0;
|
||||
state->hot_user_data = 0;
|
||||
state->item_index = 0;
|
||||
state->filter_restore_point_is_set = false;
|
||||
block_zero_struct(&state->scroll);
|
||||
}
|
||||
|
||||
function f32
|
||||
lister_get_text_field_height(f32 line_height){
|
||||
return(line_height);
|
||||
}
|
||||
|
||||
function f32
|
||||
lister_get_block_height(f32 line_height){
|
||||
return(line_height*2);
|
||||
}
|
||||
|
||||
function Lister_Top_Level_Layout
|
||||
lister_get_top_level_layout(Rect_f32 rect, f32 line_height){
|
||||
f32 text_field_height = lister_get_text_field_height(line_height);
|
||||
Lister_Top_Level_Layout layout = {};
|
||||
layout.text_field_rect = Rf32(rect.x0, rect.y0,
|
||||
rect.x1, clamp_top(rect.y0 + text_field_height, rect.y1));
|
||||
layout.list_rect = Rf32(rect.x0, layout.text_field_rect.y0, rect.x1, rect.y1);
|
||||
return(layout);
|
||||
}
|
||||
|
||||
function void*
|
||||
lister_user_data_at_p(Application_Links *app, View_ID view, Lister_State *state, Vec2_f32 p){
|
||||
Rect_f32 region = view_get_buffer_region(app, view);
|
||||
p -= region.p0;
|
||||
p += state->scroll.position;
|
||||
|
||||
Face_ID face_id = get_face_id(app, 0);
|
||||
Face_Metrics metrics = get_face_metrics(app, face_id);
|
||||
f32 line_height = metrics.line_height;
|
||||
f32 block_height = lister_get_block_height(line_height);
|
||||
|
||||
Lister_Top_Level_Layout layout = lister_get_top_level_layout(region, line_height);
|
||||
|
||||
void *result = 0;
|
||||
if (rect_contains_point(layout.list_rect, p)){
|
||||
i32 index = (i32)((p.y - layout.list_rect.y0)/block_height);
|
||||
if (0 < index && index < state->filtered.count){
|
||||
Lister_Node *node = state->filtered.node_ptrs[index];
|
||||
result = node->user_data;
|
||||
}
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
function Lister_Filtered
|
||||
lister_get_filtered(Arena *arena, Lister_State *state){
|
||||
i32 node_count = state->lister.data.options.count;
|
||||
|
||||
Lister_Filtered filtered = {};
|
||||
filtered.exact_matches.node_ptrs = push_array(arena, Lister_Node*, 1);
|
||||
filtered.before_extension_matches.node_ptrs = push_array(arena, Lister_Node*, node_count);
|
||||
filtered.substring_matches.node_ptrs = push_array(arena, Lister_Node*, node_count);
|
||||
|
||||
Temp_Memory_Block temp(arena);
|
||||
|
||||
String_Const_u8 key = state->lister.data.key_string.string;
|
||||
key = push_string_copy(arena, key);
|
||||
string_mod_replace_character(key, '_', '*');
|
||||
string_mod_replace_character(key, ' ', '*');
|
||||
|
||||
List_String_Const_u8 absolutes = {};
|
||||
string_list_push(arena, &absolutes, string_u8_litexpr(""));
|
||||
List_String_Const_u8 splits = string_split(arena, key, (u8*)"*", 1);
|
||||
b32 has_wildcard = (splits.node_count > 1);
|
||||
string_list_push(&absolutes, &splits);
|
||||
string_list_push(arena, &absolutes, string_u8_litexpr(""));
|
||||
|
||||
for (Lister_Node *node = state->lister.data.options.first;
|
||||
node != 0;
|
||||
node = node->next){
|
||||
String_Const_u8 node_string = node->string;
|
||||
if (key.size == 0 || string_wildcard_match_insensitive(absolutes, node_string)){
|
||||
if (string_match_insensitive(node_string, key) && filtered.exact_matches.count == 0){
|
||||
filtered.exact_matches.node_ptrs[filtered.exact_matches.count++] = node;
|
||||
}
|
||||
else if (!has_wildcard &&
|
||||
string_match_insensitive(string_prefix(node_string, key.size), key) &&
|
||||
node->string.size > key.size &&
|
||||
node->string.str[key.size] == '.'){
|
||||
filtered.before_extension_matches.node_ptrs[filtered.before_extension_matches.count++] = node;
|
||||
}
|
||||
else{
|
||||
filtered.substring_matches.node_ptrs[filtered.substring_matches.count++] = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return(filtered);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_update_filtered_list(Application_Links *app, View_ID view, Lister_State *state){
|
||||
Scratch_Block scratch(app, Scratch_Share);
|
||||
|
||||
Lister_Filtered filtered = lister_get_filtered(scratch, state);
|
||||
|
||||
Lister_Node_Ptr_Array node_ptr_arrays[] = {
|
||||
filtered.exact_matches,
|
||||
filtered.before_extension_matches,
|
||||
filtered.substring_matches,
|
||||
};
|
||||
|
||||
Arena *arena = state->lister.arena;
|
||||
if (state->filter_restore_point_is_set){
|
||||
end_temp(state->filter_restore_point);
|
||||
}
|
||||
else{
|
||||
state->filter_restore_point = begin_temp(arena);
|
||||
state->filter_restore_point_is_set = true;
|
||||
}
|
||||
|
||||
i32 total_count = 0;
|
||||
for (i32 array_index = 0; array_index < ArrayCount(node_ptr_arrays); array_index += 1){
|
||||
Lister_Node_Ptr_Array node_ptr_array = node_ptr_arrays[array_index];
|
||||
total_count += node_ptr_array.count;
|
||||
}
|
||||
|
||||
Lister_Node **node_ptrs = push_array(arena, Lister_Node*, total_count);
|
||||
state->filtered.node_ptrs = node_ptrs;
|
||||
state->filtered.count = total_count;
|
||||
|
||||
state->raw_item_index = -1;
|
||||
state->highlighted_node = 0;
|
||||
|
||||
i32 counter = 0;
|
||||
for (i32 array_index = 0; array_index < ArrayCount(node_ptr_arrays); array_index += 1){
|
||||
Lister_Node_Ptr_Array node_ptr_array = node_ptr_arrays[array_index];
|
||||
for (i32 node_index = 0; node_index < node_ptr_array.count; node_index += 1){
|
||||
Lister_Node *node = node_ptr_array.node_ptrs[node_index];
|
||||
node_ptrs[counter] = node;
|
||||
if (state->item_index == counter){
|
||||
state->highlighted_node = node;
|
||||
state->raw_item_index = node->raw_index;
|
||||
}
|
||||
counter += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function void
|
||||
lister_render(Application_Links *app, View_ID view, Frame_Info frame_info, Rect_f32 inner){
|
||||
Scratch_Block scratch(app);
|
||||
|
||||
Lister_State *state = view_get_lister_state(view);
|
||||
|
||||
Basic_Scroll scroll = state->scroll;
|
||||
Rect_f32 region = view_get_buffer_region(app, view);
|
||||
Vec2_f32 view_m = get_mouse_position_in_panel_space(app, region.p0);
|
||||
view_m += scroll.position;
|
||||
|
||||
Face_ID face_id = get_face_id(app, 0);
|
||||
Face_Metrics metrics = get_face_metrics(app, face_id);
|
||||
f32 line_height = metrics.line_height;
|
||||
f32 block_height = lister_get_block_height(line_height);
|
||||
f32 text_field_height = lister_get_text_field_height(line_height);
|
||||
|
||||
Range_f32 x = rect_range_x(region);
|
||||
f32 y_pos = region.y0;
|
||||
|
||||
{
|
||||
Fancy_String_List text_field = {};
|
||||
push_fancy_string(scratch, &text_field, fancy_id(Stag_Pop1),
|
||||
state->lister.data.query.string);
|
||||
push_fancy_stringf(scratch, &text_field, fancy_id(Stag_Pop1), " ");
|
||||
push_fancy_string(scratch, &text_field, fancy_id(Stag_Default),
|
||||
state->lister.data.text_field.string);
|
||||
draw_fancy_string(app, face_id, text_field.first, V2f32(x.min, y_pos),
|
||||
Stag_Default, Stag_Back, 0, V2f32(1.f, 0.f));
|
||||
y_pos += text_field_height;
|
||||
}
|
||||
|
||||
i32 count = state->filtered.count;
|
||||
for (i32 i = 0; i < count; i += 1){
|
||||
Lister_Node *node = state->filtered.node_ptrs[i];
|
||||
(void)node;
|
||||
|
||||
Range_f32 y = If32(y_pos, y_pos + block_height);
|
||||
y_pos = y.max;
|
||||
|
||||
Rect_f32 item_rect = Rf32(x, y);
|
||||
Rect_f32 item_inner = rect_inner(item_rect, 3.f);
|
||||
|
||||
UI_Highlight_Level highlight = UIHighlight_None;
|
||||
draw_rectangle(app, item_rect, 3.f, get_margin_color(highlight));
|
||||
draw_rectangle(app, item_inner, 3.f, Stag_Back);
|
||||
|
||||
|
||||
}
|
||||
|
||||
#if 0
|
||||
i32 item_index_counter = 0;
|
||||
for (i32 array_index = 0; array_index < ArrayCount(node_ptr_arrays); array_index += 1){
|
||||
Lister_Node_Ptr_Array node_ptr_array = node_ptr_arrays[array_index];
|
||||
for (i32 node_index = 0; node_index < node_ptr_array.count; node_index += 1){
|
||||
Lister_Node *node = node_ptr_array.node_ptrs[node_index];
|
||||
|
||||
Rect_f32 item_rect = Rf32(x0, y_pos, x1, y_pos + block_height);
|
||||
y_pos = item_rect.y1;
|
||||
|
||||
UI_Item item = {};
|
||||
item.activation_level = UIActivation_None;
|
||||
item.coordinates = UICoordinates_ViewSpace;
|
||||
item.rect_outer = Ri32(item_rect);
|
||||
item.inner_margin = 3;
|
||||
|
||||
if (!is_theme_list){
|
||||
Fancy_String_List list = {};
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Default), node->string);
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default), " ");
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Pop2 ), node->status);
|
||||
item.lines[0] = list;
|
||||
item.line_count = 1;
|
||||
}
|
||||
else{
|
||||
//i32 style_index = node->index;
|
||||
|
||||
String_Const_u8 name = string_u8_litexpr("name");
|
||||
item.lines[0] = fancy_string_list_single(push_fancy_string(ui_arena, fancy_id(Stag_Default), name));
|
||||
|
||||
Fancy_String_List list = {};
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Keyword ), "if ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default ), "(x < ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Int_Constant), "0");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default ), ") { x = ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Int_Constant), "0");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default ), "; } ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Comment ), "// comment");
|
||||
item.lines[1] = list;
|
||||
|
||||
item.line_count = 2;
|
||||
}
|
||||
|
||||
item.user_data = node->user_data;
|
||||
|
||||
UI_Item *item_ptr = ui_list_add_item(ui_arena, &ui_data->list, item);
|
||||
if (rect_contains_point(item_rect, view_m)){
|
||||
hovered_item = item_ptr;
|
||||
}
|
||||
if (state->item_index == item_index_counter){
|
||||
highlighted_item = item_ptr;
|
||||
state->raw_item_index = node->raw_index;
|
||||
}
|
||||
item_index_counter += 1;
|
||||
if (node->user_data == state->hot_user_data && hot_item != 0){
|
||||
hot_item = item_ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
state->item_count_after_filter = item_index_counter;
|
||||
|
||||
if (hovered_item != 0){
|
||||
hovered_item->activation_level = UIActivation_Hover;
|
||||
}
|
||||
if (hot_item != 0){
|
||||
if (hot_item == hovered_item){
|
||||
hot_item->activation_level = UIActivation_Active;
|
||||
}
|
||||
else{
|
||||
hot_item->activation_level = UIActivation_Hover;
|
||||
}
|
||||
}
|
||||
if (highlighted_item != 0){
|
||||
highlighted_item->activation_level = UIActivation_Active;
|
||||
}
|
||||
|
||||
if (state->set_view_vertical_focus_to_item){
|
||||
if (highlighted_item != 0){
|
||||
view_set_vertical_focus_basic(app, view,
|
||||
(f32)highlighted_item->rect_outer.y0,
|
||||
(f32)highlighted_item->rect_outer.y1);
|
||||
}
|
||||
state->set_view_vertical_focus_to_item = false;
|
||||
}
|
||||
|
||||
{
|
||||
// TODO(allen): switch to float
|
||||
Rect_i32 item_rect = {};
|
||||
item_rect.x0 = (i32)x0;
|
||||
item_rect.y0 = 0;
|
||||
item_rect.x1 = (i32)x1;
|
||||
item_rect.y1 = item_rect.y0 + (i32)text_field_height;
|
||||
y_pos = (f32)item_rect.y1;
|
||||
|
||||
UI_Item item = {};
|
||||
item.activation_level = UIActivation_Active;
|
||||
item.coordinates = UICoordinates_PanelSpace;
|
||||
item.rect_outer = item_rect;
|
||||
item.inner_margin = 0;
|
||||
{
|
||||
Fancy_String_List list = {};
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Pop1 ), state->lister.data.query.string);
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Pop1 ), " ");
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Default), state->lister.data.text_field.string);
|
||||
item.lines[0] = list;
|
||||
item.line_count = 1;
|
||||
}
|
||||
item.user_data = 0;
|
||||
|
||||
|
||||
ui_list_add_item(ui_arena, &ui_data->list, item);
|
||||
}
|
||||
|
||||
ui_data_compute_bounding_boxes(ui_data);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
static Lister_Prealloced_String
|
||||
lister_prealloced(String_Const_u8 string){
|
||||
Lister_Prealloced_String result = {};
|
||||
result.string = string;
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_first_init(Application_Links *app, Lister *lister, void *user_data, i32 user_data_size){
|
||||
if (lister->arena == 0) {
|
||||
lister->arena = reserve_arena(app, KB(16));
|
||||
}
|
||||
else{
|
||||
linalloc_clear(lister->arena);
|
||||
}
|
||||
block_zero_struct(&lister->data);
|
||||
lister->data.query = Su8(lister->data.query_space, 0, sizeof(lister->data.query_space));
|
||||
lister->data.text_field = Su8(lister->data.text_field_space, 0, sizeof(lister->data.text_field_space));
|
||||
lister->data.key_string = Su8(lister->data.key_string_space, 0, sizeof(lister->data.key_string_space));
|
||||
lister->data.user_data = push_array(lister->arena, char, user_data_size);
|
||||
lister->data.user_data_size = user_data_size;
|
||||
if (user_data != 0){
|
||||
block_copy(lister->data.user_data, user_data, user_data_size);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
lister_begin_new_item_set(Application_Links *app, Lister *lister){
|
||||
linalloc_clear(lister->arena);
|
||||
block_zero_struct(&lister->data.options);
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, Lister_Prealloced_String string, Lister_Prealloced_String status,
|
||||
void *user_data, umem extra_space){
|
||||
void *base_memory = push_array(lister->arena, u8, sizeof(Lister_Node) + extra_space);
|
||||
Lister_Node *node = (Lister_Node*)base_memory;
|
||||
node->string = string.string;
|
||||
node->status = status.string;
|
||||
node->user_data = user_data;
|
||||
node->raw_index = lister->data.options.count;
|
||||
zdll_push_back(lister->data.options.first, lister->data.options.last, node);
|
||||
lister->data.options.count += 1;
|
||||
void *result = (node + 1);
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, Lister_Prealloced_String string, String_Const_u8 status,
|
||||
void *user_data, umem extra_space){
|
||||
return(lister_add_item(lister, string, lister_prealloced(push_string_copy(lister->arena, status)),
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, String_Const_u8 string, Lister_Prealloced_String status,
|
||||
void *user_data, umem extra_space){
|
||||
return(lister_add_item(lister, lister_prealloced(push_string_copy(lister->arena, string)), status,
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, String_Const_u8 string, String_Const_u8 status, void *user_data, umem extra_space){
|
||||
return(lister_add_item(lister,
|
||||
lister_prealloced(push_string_copy(lister->arena, string)),
|
||||
lister_prealloced(push_string_copy(lister->arena, status)),
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_theme_item(Lister *lister,
|
||||
Lister_Prealloced_String string, i32 index,
|
||||
void *user_data, i32 extra_space){
|
||||
Lister_Node *node = push_array(lister->arena, Lister_Node, 1);
|
||||
node->string = string.string;
|
||||
node->index = index;
|
||||
node->user_data = user_data;
|
||||
node->raw_index = lister->data.options.count;
|
||||
zdll_push_back(lister->data.options.first, lister->data.options.last, node);
|
||||
lister->data.options.count += 1;
|
||||
void *result = push_array(lister->arena, char, extra_space);
|
||||
push_align(lister->arena, 8);
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_theme_item(Lister *lister, String_Const_u8 string, i32 index,
|
||||
void *user_data, i32 extra_space){
|
||||
return(lister_add_theme_item(lister, lister_prealloced(push_string_copy(lister->arena, string)), index,
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_get_user_data(Lister_Data *lister_data, i32 index){
|
||||
void *result = 0;
|
||||
if (0 <= index && index < lister_data->options.count){
|
||||
i32 counter = 0;
|
||||
for (Lister_Node *node = lister_data->options.first;
|
||||
node != 0;
|
||||
node = node->next, counter += 1){
|
||||
if (counter == index){
|
||||
result = node->user_data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_call_refresh_handler(Application_Links *app, Lister *lister){
|
||||
if (lister->data.handlers.refresh != 0){
|
||||
lister->data.handlers.refresh(app, lister);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
lister_default(Application_Links *app, Heap *heap, View_ID view, Lister_State *state, Lister_Activation_Code code){
|
||||
switch (code){
|
||||
case ListerActivation_Finished:
|
||||
{
|
||||
|
||||
}break;
|
||||
|
||||
case ListerActivation_Continue:
|
||||
{}break;
|
||||
|
||||
case ListerActivation_ContinueAndRefresh:
|
||||
{
|
||||
state->item_index = 0;
|
||||
lister_call_refresh_handler(app, &state->lister);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
static Lister_Activation_Code
|
||||
lister_call_activate_handler(Application_Links *app, Heap *heap, View_ID view, Lister_State *state, void *user_data, b32 activated_by_mouse){
|
||||
Lister_Activation_Code result = ListerActivation_Finished;
|
||||
Lister_Data *lister = &state->lister.data;
|
||||
if (lister->handlers.activate != 0){
|
||||
result = lister->handlers.activate(app, heap, view, state, lister->text_field.string, user_data, activated_by_mouse);
|
||||
}
|
||||
else{
|
||||
lister_default(app, heap, view, state, ListerActivation_Finished);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_set_string(String_Const_u8 string, String_u8 *target){
|
||||
target->size = 0;
|
||||
string_append(target, string);
|
||||
}
|
||||
static void
|
||||
lister_append_string(String_Const_u8 string, String_u8 *target){
|
||||
string_append(target, string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_set_query(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_set_string(string, &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_set_query(Lister_Data *lister, char *string){
|
||||
lister_set_string(SCu8(string), &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_set_string(string, &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister_Data *lister, char *string){
|
||||
lister_set_string(SCu8(string), &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_set_string(string, &lister->key_string);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister_Data *lister, char *string){
|
||||
lister_set_string(SCu8(string), &lister->key_string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_set_query(Lister *lister, String_Const_u8 string){
|
||||
lister_set_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_query(Lister *lister, char *string){
|
||||
lister_set_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister *lister, String_Const_u8 string){
|
||||
lister_set_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister *lister, char *string){
|
||||
lister_set_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister *lister, String_Const_u8 string){
|
||||
lister_set_key(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister *lister, char *string){
|
||||
lister_set_key(&lister->data, string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_append_query(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_append_string(string, &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_append_query(Lister_Data *lister, char *string){
|
||||
lister_append_string(SCu8(string), &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_append_string(string, &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister_Data *lister, char *string){
|
||||
lister_append_string(SCu8(string), &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_append_string(string, &lister->key_string);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister_Data *lister, char *string){
|
||||
lister_append_string(SCu8(string), &lister->key_string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_append_query(Lister *lister, String_Const_u8 string){
|
||||
lister_append_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_query(Lister *lister, char *string){
|
||||
lister_append_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister *lister, String_Const_u8 string){
|
||||
lister_append_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister *lister, char *string){
|
||||
lister_append_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister *lister, String_Const_u8 string){
|
||||
lister_append_key(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister *lister, char *string){
|
||||
lister_append_key(&lister->data, string);
|
||||
}
|
||||
|
||||
// BOTTOM
|
||||
|
|
@ -7,51 +7,6 @@
|
|||
#if !defined(FCODER_UI_HELPER_H)
|
||||
#define FCODER_UI_HELPER_H
|
||||
|
||||
typedef i8 UI_Item_Type;
|
||||
enum UI_Activation_Level{
|
||||
UIActivation_None = 0,
|
||||
UIActivation_Hover = 1,
|
||||
UIActivation_Active = 2,
|
||||
};
|
||||
|
||||
typedef u8 UI_Coordinate_System;
|
||||
enum{
|
||||
UICoordinates_ViewSpace = 0,
|
||||
UICoordinates_PanelSpace = 1,
|
||||
UICoordinates_COUNT = 2,
|
||||
};
|
||||
|
||||
struct UI_Item{
|
||||
UI_Item *next;
|
||||
UI_Item *prev;
|
||||
UI_Activation_Level activation_level;
|
||||
UI_Coordinate_System coordinates;
|
||||
Rect_i32 rect_outer;
|
||||
i32 inner_margin;
|
||||
Fancy_String_List lines[4];
|
||||
i32 line_count;
|
||||
void *user_data;
|
||||
};
|
||||
|
||||
struct UI_List{
|
||||
UI_Item *first;
|
||||
UI_Item *last;
|
||||
i32 count;
|
||||
};
|
||||
|
||||
struct UI_Data{
|
||||
UI_List list;
|
||||
Rect_i32 bounding_box[UICoordinates_COUNT];
|
||||
};
|
||||
|
||||
struct UI_Storage{
|
||||
UI_Data *data;
|
||||
Arena *arena;
|
||||
Temp_Memory temp;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
typedef i32 Lister_Activation_Code;
|
||||
enum{
|
||||
ListerActivation_Finished = 0,
|
||||
|
@ -114,7 +69,6 @@ struct Lister_Data{
|
|||
String_u8 text_field;
|
||||
String_u8 key_string;
|
||||
Lister_Option_List options;
|
||||
b32 theme_list;
|
||||
};
|
||||
|
||||
struct Lister{
|
||||
|
@ -125,23 +79,32 @@ struct Lister{
|
|||
struct Lister_State{
|
||||
b32 initialized;
|
||||
Lister lister;
|
||||
|
||||
// Action defered to next UI update
|
||||
b32 set_view_vertical_focus_to_item;
|
||||
|
||||
// State set directly by input handlers
|
||||
Lister_Node *highlighted_node;
|
||||
void *hot_user_data;
|
||||
i32 item_index;
|
||||
|
||||
// State of UI computed during UI update
|
||||
i32 raw_item_index;
|
||||
i32 item_count_after_filter;
|
||||
b32 filter_restore_point_is_set;
|
||||
Temp_Memory filter_restore_point;
|
||||
Lister_Node_Ptr_Array filtered;
|
||||
Basic_Scroll scroll;
|
||||
};
|
||||
|
||||
struct Lister_Prealloced_String{
|
||||
String_Const_u8 string;
|
||||
};
|
||||
|
||||
struct Lister_Filtered{
|
||||
Lister_Node_Ptr_Array exact_matches;
|
||||
Lister_Node_Ptr_Array before_extension_matches;
|
||||
Lister_Node_Ptr_Array substring_matches;
|
||||
};
|
||||
|
||||
struct Lister_Top_Level_Layout{
|
||||
Rect_f32 text_field_rect;
|
||||
Rect_f32 list_rect;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
struct Lister_Option{
|
|
@ -18,7 +18,7 @@ CUSTOM_DOC("A lister mode command that inserts a new character to the text field
|
|||
lister_append_key(&state->lister, string);
|
||||
state->item_index = 0;
|
||||
view_zero_scroll(app, view);
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ CUSTOM_DOC("A lister mode command that backspaces one character from the text fi
|
|||
state->lister.data.key_string.string = backspace_utf8(state->lister.data.key_string.string);
|
||||
state->item_index = 0;
|
||||
view_zero_scroll(app, view);
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,10 +45,10 @@ CUSTOM_DOC("A lister mode command that moves the highlighted item one up in the
|
|||
if (state->initialized){
|
||||
state->item_index = state->item_index - 1;
|
||||
if (state->item_index < 0){
|
||||
state->item_index = state->item_count_after_filter - 1;
|
||||
state->item_index = state->filtered.count - 1;
|
||||
}
|
||||
state->set_view_vertical_focus_to_item = true;
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,11 +59,11 @@ CUSTOM_DOC("A lister mode command that moves the highlighted item one down in th
|
|||
Lister_State *state = view_get_lister_state(view);
|
||||
if (state->initialized){
|
||||
state->item_index = state->item_index + 1;
|
||||
if (state->item_index > state->item_count_after_filter - 1){
|
||||
if (state->item_index > state->filtered.count - 1){
|
||||
state->item_index = 0;
|
||||
}
|
||||
state->set_view_vertical_focus_to_item = true;
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,7 @@ CUSTOM_DOC("A lister mode command that inserts a character into the text field o
|
|||
}
|
||||
state->item_index = 0;
|
||||
view_zero_scroll(app, view);
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ CUSTOM_DOC("A lister mode command that backspaces one character from the text fi
|
|||
|
||||
state->item_index = 0;
|
||||
view_zero_scroll(app, view);
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -166,6 +166,10 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
Heap *heap = &global_heap;
|
||||
Lister_State *state = view_get_lister_state(view);
|
||||
|
||||
Managed_Scope scope = view_get_managed_scope(app, view);
|
||||
View_Render_Hook **hook = scope_attachment(app, scope, view_render_hook, View_Render_Hook*);
|
||||
*hook = lister_render;
|
||||
|
||||
for (;;){
|
||||
User_Input in = get_user_input(app,
|
||||
EventPropertyGroup_Any,
|
||||
|
@ -174,6 +178,7 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
break;
|
||||
}
|
||||
|
||||
Lister_Activation_Code result = ListerActivation_Continue;
|
||||
b32 handled = true;
|
||||
switch (in.event.kind){
|
||||
case InputEventKind_TextInsert:
|
||||
|
@ -185,7 +190,6 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
|
||||
case InputEventKind_KeyStroke:
|
||||
{
|
||||
Lister_Activation_Code result = ListerActivation_Continue;
|
||||
switch (in.event.key.code){
|
||||
case KeyCode_Return:
|
||||
case KeyCode_Tab:
|
||||
|
@ -243,9 +247,6 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
}
|
||||
}break;
|
||||
}
|
||||
if (result == ListerActivation_Finished){
|
||||
goto done;
|
||||
}
|
||||
}break;
|
||||
|
||||
case InputEventKind_MouseButton:
|
||||
|
@ -253,8 +254,9 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
switch (in.event.mouse.code){
|
||||
case MouseCode_Left:
|
||||
{
|
||||
UI_Item clicked = lister_get_clicked_item(app, view);
|
||||
state->hot_user_data = clicked.user_data;
|
||||
Vec2_f32 p = V2f32(in.event.mouse.p);
|
||||
void *clicked = lister_user_data_at_p(app, view, state, p);
|
||||
state->hot_user_data = clicked;
|
||||
}break;
|
||||
|
||||
default:
|
||||
|
@ -270,10 +272,11 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
case MouseCode_Left:
|
||||
{
|
||||
if (state->hot_user_data != 0){
|
||||
UI_Item clicked = lister_get_clicked_item(app, view);
|
||||
if (state->hot_user_data == clicked.user_data){
|
||||
lister_call_activate_handler(app, heap, view, state,
|
||||
clicked.user_data, true);
|
||||
Vec2_f32 p = V2f32(in.event.mouse.p);
|
||||
void *clicked = lister_user_data_at_p(app, view, state, p);
|
||||
if (state->hot_user_data == clicked){
|
||||
result = lister_call_activate_handler(app, heap, view, state,
|
||||
clicked, true);
|
||||
}
|
||||
}
|
||||
state->hot_user_data = 0;
|
||||
|
@ -288,19 +291,17 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
|
||||
case InputEventKind_MouseWheel:
|
||||
{
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view);
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
scroll.target.y += mouse.wheel;
|
||||
view_set_basic_scroll(app, view, scroll);
|
||||
state->scroll.target.y += mouse.wheel;
|
||||
if (state->initialized){
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}
|
||||
}break;
|
||||
|
||||
case InputEventKind_MouseMove:
|
||||
case InputEventKind_Core:
|
||||
{
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
}break;
|
||||
|
||||
default:
|
||||
|
@ -309,11 +310,16 @@ lister_input_handling_loop(Application_Links *app, View_ID view){
|
|||
}break;
|
||||
}
|
||||
|
||||
if (result == ListerActivation_Finished){
|
||||
break;
|
||||
}
|
||||
if (!handled){
|
||||
leave_command_input_unhandled(app);
|
||||
}
|
||||
}
|
||||
done:;
|
||||
|
||||
hook = scope_attachment(app, scope, view_render_hook, View_Render_Hook*);
|
||||
*hook = 0;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
@ -350,11 +356,9 @@ begin_integrated_lister__with_refresh_handler(Application_Links *app, char *quer
|
|||
lister_set_query(&state->lister, query_string);
|
||||
state->lister.data.handlers = handlers;
|
||||
handlers.refresh(app, &state->lister);
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
|
||||
view_begin_ui_mode(app, view);
|
||||
lister_input_handling_loop(app, view);
|
||||
view_end_ui_mode(app, view);
|
||||
state->initialized = false;
|
||||
linalloc_clear(state->lister.arena);
|
||||
|
||||
|
@ -396,11 +400,9 @@ begin_integrated_lister__basic_list(Application_Links *app, char *query_string,
|
|||
lister_set_query(&state->lister, query_string);
|
||||
state->lister.data.handlers = lister_get_default_handlers();
|
||||
state->lister.data.handlers.activate = activate;
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
|
||||
view_begin_ui_mode(app, view);
|
||||
lister_input_handling_loop(app, view);
|
||||
view_end_ui_mode(app, view);
|
||||
state->initialized = false;
|
||||
linalloc_clear(state->lister.arena);
|
||||
}
|
||||
|
@ -428,11 +430,9 @@ begin_integrated_lister__with_fixed_options(Application_Links *app, char *query_
|
|||
lister_set_query(&state->lister, query_string);
|
||||
state->lister.data.handlers = handlers;
|
||||
state->lister.data.handlers.refresh = 0;
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
|
||||
view_begin_ui_mode(app, view);
|
||||
lister_input_handling_loop(app, view);
|
||||
view_end_ui_mode(app, view);
|
||||
state->initialized = false;
|
||||
linalloc_clear(state->lister.arena);
|
||||
}
|
||||
|
@ -464,7 +464,6 @@ begin_integrated_lister__theme_list(Application_Links *app, char *query_string,
|
|||
Lister_State *state = view_get_lister_state(view);
|
||||
init_lister_state(app, state, heap);
|
||||
lister_first_init(app, &state->lister, user_data, user_data_size);
|
||||
state->lister.data.theme_list = true;
|
||||
for (i32 i = 0; i < option_count; i += 1){
|
||||
lister_add_theme_item(&state->lister,
|
||||
SCu8(options[i].string),
|
||||
|
@ -474,11 +473,9 @@ begin_integrated_lister__theme_list(Application_Links *app, char *query_string,
|
|||
lister_set_query(&state->lister, query_string);
|
||||
state->lister.data.handlers = handlers;
|
||||
state->lister.data.handlers.refresh = 0;
|
||||
lister_update_ui(app, view, state);
|
||||
lister_update_filtered_list(app, view, state);
|
||||
|
||||
view_begin_ui_mode(app, view);
|
||||
lister_input_handling_loop(app, view);
|
||||
view_end_ui_mode(app, view);
|
||||
state->initialized = false;
|
||||
linalloc_clear(state->lister.arena);
|
||||
}
|
||||
|
@ -776,7 +773,6 @@ CUSTOM_COMMAND_SIG(interactive_switch_buffer)
|
|||
CUSTOM_DOC("Interactively switch to an open buffer.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
begin_integrated_lister__buffer_list(app, "Switch:", activate_switch_buffer, 0, 0, view);
|
||||
}
|
||||
|
||||
|
@ -796,7 +792,6 @@ CUSTOM_COMMAND_SIG(interactive_kill_buffer)
|
|||
CUSTOM_DOC("Interactively kill an open buffer.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
begin_integrated_lister__buffer_list(app, "Kill:", activate_kill_buffer, 0, 0, view);
|
||||
}
|
||||
|
||||
|
@ -868,7 +863,6 @@ CUSTOM_COMMAND_SIG(interactive_open_or_new)
|
|||
CUSTOM_DOC("Interactively open a file out of the file system.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
begin_integrated_lister__file_system_list(app, "Open:", activate_open_or_new, 0, 0, view);
|
||||
}
|
||||
|
||||
|
@ -908,7 +902,6 @@ CUSTOM_COMMAND_SIG(interactive_new)
|
|||
CUSTOM_DOC("Interactively creates a new file.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
begin_integrated_lister__file_system_list(app, "New:", activate_new, 0, 0, view);
|
||||
}
|
||||
|
||||
|
@ -942,7 +935,6 @@ CUSTOM_COMMAND_SIG(interactive_open)
|
|||
CUSTOM_DOC("Interactively opens a file.")
|
||||
{
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
begin_integrated_lister__file_system_list(app, "Open:", activate_open, 0, 0, view);
|
||||
}
|
||||
|
||||
|
@ -1004,7 +996,6 @@ launch_custom_command_lister(Application_Links *app, i32 *command_ids, i32 comma
|
|||
|
||||
Scratch_Block scratch(app, Scratch_Share);
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
Lister_Option *options = push_array(scratch, Lister_Option, command_id_count);
|
||||
for (i32 i = 0; i < command_id_count; i += 1){
|
||||
i32 j = i;
|
||||
|
|
|
@ -903,26 +903,6 @@ log_graph_render(Application_Links *app, View_ID view, Frame_Info frame_info, Re
|
|||
}
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(log_graph__escape)
|
||||
CUSTOM_DOC("Ends the log grapher")
|
||||
{
|
||||
if (log_view != 0){
|
||||
view_end_ui_mode(app, log_view);
|
||||
log_view = 0;
|
||||
}
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(log_graph__scroll_wheel)
|
||||
CUSTOM_DOC("Scrolls the log graph")
|
||||
{
|
||||
if (log_view != 0){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
if (mouse.wheel != 0){
|
||||
log_graph.y_scroll += mouse.wheel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal Log_Graph_Box*
|
||||
log_graph__get_box_at_point(Log_Graph *graph, Vec2_f32 p){
|
||||
Log_Graph_Box *result = 0;
|
||||
|
@ -980,9 +960,6 @@ log_graph__click_jump_to_event_source(Application_Links *app, Vec2_f32 m_p){
|
|||
target_buffer = get_buffer_by_name(app, file_name, AccessAll);
|
||||
}
|
||||
if (target_buffer != 0){
|
||||
if (target_view == log_view){
|
||||
view_end_ui_mode(app, target_view);
|
||||
}
|
||||
set_view_to_location(app, target_view, target_buffer,
|
||||
seek_line_col(event->line_number, 1));
|
||||
}
|
||||
|
|
|
@ -1342,7 +1342,6 @@ CUSTOM_DOC("Open a lister of all commands in the currently loaded project.")
|
|||
Scratch_Block scratch(app, Scratch_Share);
|
||||
|
||||
View_ID view = get_active_view(app, AccessAll);
|
||||
view_end_ui_mode(app, view);
|
||||
i32 option_count = current_project.command_array.count;
|
||||
Lister_Option *options = push_array(scratch, Lister_Option, option_count);
|
||||
for (i32 i = 0;
|
||||
|
|
|
@ -43,6 +43,13 @@ TYPEDEF i32 Panel_ID;
|
|||
|
||||
TYPEDEF u32 Text_Layout_ID;
|
||||
|
||||
typedef i32 UI_Highlight_Level;
|
||||
enum{
|
||||
UIHighlight_None,
|
||||
UIHighlight_Hover,
|
||||
UIHighlight_Active,
|
||||
};
|
||||
|
||||
STRUCT Buffer_Point{
|
||||
i64 line_number;
|
||||
Vec2 pixel_shift;
|
||||
|
@ -94,12 +101,16 @@ STRUCT Character_Predicate{
|
|||
u8 b[32];
|
||||
};
|
||||
|
||||
struct View_Context{
|
||||
Void_Func ctx_ptr;
|
||||
b32 hides_buffer;
|
||||
};
|
||||
|
||||
ENUM(i32, View_Setting_ID){
|
||||
ViewSetting_Null,
|
||||
ViewSetting_ShowWhitespace,
|
||||
ViewSetting_ShowScrollbar,
|
||||
ViewSetting_ShowFileBar,
|
||||
ViewSetting_UICommandMap
|
||||
};
|
||||
|
||||
ENUM(u32, Buffer_Create_Flag){
|
||||
|
@ -241,12 +252,12 @@ STRUCT Buffer_Identifier{
|
|||
Buffer_ID id;
|
||||
};
|
||||
|
||||
STRUCT Buffer_Scroll{
|
||||
struct Buffer_Scroll{
|
||||
Buffer_Point position;
|
||||
Buffer_Point target;
|
||||
};
|
||||
|
||||
STRUCT Basic_Scroll{
|
||||
struct Basic_Scroll{
|
||||
Vec2_f32 position;
|
||||
Vec2_f32 target;
|
||||
};
|
||||
|
@ -351,9 +362,6 @@ struct Query_Bar_Group{
|
|||
~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)
|
||||
|
||||
STRUCT Theme_Color{
|
||||
id_color tag;
|
||||
argb_color color;
|
||||
|
|
|
@ -1,721 +0,0 @@
|
|||
/*
|
||||
* Helpers for ui data structures.
|
||||
*/
|
||||
|
||||
// TOP
|
||||
|
||||
typedef u32 View_Get_UI_Flags;
|
||||
enum{
|
||||
ViewGetUIFlag_KeepDataAsIs = 0,
|
||||
ViewGetUIFlag_ClearData = 1,
|
||||
};
|
||||
|
||||
static b32
|
||||
view_get_ui_data(Application_Links *app, View_ID view_id, View_Get_UI_Flags flags, UI_Data **ui_data_out, Arena **ui_arena_out){
|
||||
b32 result = false;
|
||||
Managed_Scope scope = view_get_managed_scope(app, view_id);
|
||||
if (scope != 0){
|
||||
Managed_Object *ui_data_object_ptr = scope_attachment(app, scope, view_ui_data, Managed_Object);
|
||||
Managed_Object ui_data_object = *ui_data_object_ptr;
|
||||
if (ui_data_object == 0){
|
||||
Managed_Object new_ui_data_object = alloc_managed_memory_in_scope(app, scope, sizeof(UI_Storage), 1);
|
||||
|
||||
Base_Allocator *allocator = managed_scope_allocator(app, scope);
|
||||
Arena arena_temp = make_arena(allocator, KB(8));
|
||||
Arena *arena = push_array(&arena_temp, Arena, 1);
|
||||
block_copy_struct(arena, &arena_temp);
|
||||
|
||||
UI_Data *ui_data = push_array(arena, UI_Data, 1);
|
||||
UI_Storage storage = {};
|
||||
storage.data = ui_data;
|
||||
storage.arena = arena;
|
||||
storage.temp = begin_temp(arena);
|
||||
if (managed_object_store_data(app, new_ui_data_object, 0, 1, &storage)){
|
||||
*ui_data_object_ptr = new_ui_data_object;
|
||||
ui_data_object = new_ui_data_object;
|
||||
}
|
||||
|
||||
}
|
||||
if (ui_data_object != 0){
|
||||
UI_Storage storage = {};
|
||||
if (managed_object_load_data(app, ui_data_object, 0, 1, &storage)){
|
||||
*ui_data_out = storage.data;
|
||||
*ui_arena_out = storage.arena;
|
||||
if ((flags & ViewGetUIFlag_ClearData) != 0){
|
||||
end_temp(storage.temp);
|
||||
}
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static b32
|
||||
view_clear_ui_data(Application_Links *app, View_ID view_id){
|
||||
b32 result = false;
|
||||
Managed_Scope scope = view_get_managed_scope(app, view_id);
|
||||
if (scope != 0){
|
||||
Managed_Object *ui_data_object_ptr = scope_attachment(app, scope, view_ui_data, Managed_Object);
|
||||
Managed_Object ui_data_object = *ui_data_object_ptr;
|
||||
if (ui_data_object != 0){
|
||||
UI_Storage storage = {};
|
||||
if (managed_object_load_data(app, ui_data_object, 0, 1, &storage)){
|
||||
Arena arena_temp = *storage.arena;
|
||||
linalloc_clear(&arena_temp);
|
||||
managed_object_free(app, ui_data_object);
|
||||
*ui_data_object_ptr = 0;
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
static UI_Item*
|
||||
ui_list_add_item(Arena *arena, UI_List *list, UI_Item item){
|
||||
UI_Item *node = push_array(arena, UI_Item, 1);
|
||||
block_copy_struct(node, &item);
|
||||
zdll_push_back(list->first, list->last, node);
|
||||
list->count += 1;
|
||||
return(node);
|
||||
}
|
||||
|
||||
static void
|
||||
ui_data_compute_bounding_boxes(UI_Data *ui_data){
|
||||
for (u32 i = 0; i < UICoordinates_COUNT; ++i){
|
||||
ui_data->bounding_box[i] = Ri32_negative_infinity;
|
||||
}
|
||||
for (UI_Item *item = ui_data->list.first;
|
||||
item != 0;
|
||||
item = item->next){
|
||||
if (item->coordinates >= UICoordinates_COUNT){
|
||||
item->coordinates = UICoordinates_ViewSpace;
|
||||
}
|
||||
Rect_i32 *box = &ui_data->bounding_box[item->coordinates];
|
||||
*box = rect_union(*box, item->rect_outer);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ui_control_set_top(UI_Data *data, i32 top_y){
|
||||
data->bounding_box[UICoordinates_ViewSpace].y0 = top_y;
|
||||
}
|
||||
|
||||
static void
|
||||
ui_control_set_bottom(UI_Data *data, i32 bottom_y){
|
||||
data->bounding_box[UICoordinates_ViewSpace].y1 = bottom_y;
|
||||
}
|
||||
|
||||
static UI_Item*
|
||||
ui_control_get_mouse_hit(UI_Data *data, Vec2_f32 view_p, Vec2_f32 panel_p){
|
||||
UI_Item *result = 0;
|
||||
for (UI_Item *item = data->list.first; item != 0 && result == 0; item = item->next){
|
||||
Rect_f32 r = Rf32(item->rect_outer);
|
||||
switch (item->coordinates){
|
||||
case UICoordinates_ViewSpace:
|
||||
{
|
||||
if (rect_contains_point(r, view_p)){
|
||||
result = item;
|
||||
}
|
||||
}break;
|
||||
case UICoordinates_PanelSpace:
|
||||
{
|
||||
if (rect_contains_point(r, panel_p)){
|
||||
result = item;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
static void
|
||||
view_set_vertical_focus_basic(Application_Links *app, View_ID view, f32 y_top, f32 y_bot){
|
||||
Rect_f32 buffer_region = view_get_buffer_region(app, view);
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view);
|
||||
f32 view_height = rect_height(buffer_region);
|
||||
Interval_f32 view_y = If32(scroll.target.y, scroll.target.y + view_height);
|
||||
Interval_f32 acceptable_y = If32(lerp(view_y.min, 0.10f, view_y.max),
|
||||
lerp(view_y.min, 0.90f, view_y.max));
|
||||
f32 acceptable_height = range_size(acceptable_y);
|
||||
f32 skirt_height = acceptable_y.min - view_y.min;
|
||||
|
||||
f32 height = y_bot - y_top;
|
||||
if (height > acceptable_height){
|
||||
scroll.target.y = y_top - skirt_height;
|
||||
view_set_basic_scroll(app, view, scroll);
|
||||
}
|
||||
else{
|
||||
if (y_top < acceptable_y.min){
|
||||
scroll.target.y = y_top - skirt_height;
|
||||
view_set_basic_scroll(app, view, scroll);
|
||||
}
|
||||
else if (y_bot > acceptable_y.max){
|
||||
scroll.target.y = y_bot + skirt_height - view_height;
|
||||
view_set_basic_scroll(app, view, scroll);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Vec2_f32
|
||||
panel_space_from_screen_space(Vec2_f32 p, Vec2_f32 file_region_p0){
|
||||
return(p - file_region_p0);
|
||||
}
|
||||
|
||||
static Vec2_f32
|
||||
get_mouse_position_in_panel_space(Mouse_State mouse, Vec2_f32 file_region_p0){
|
||||
return(panel_space_from_screen_space(V2f32(mouse.p), file_region_p0));
|
||||
}
|
||||
|
||||
static Vec2_f32
|
||||
get_mouse_position_in_panel_space(Application_Links *app, Vec2_f32 file_region_p0){
|
||||
return(get_mouse_position_in_panel_space(get_mouse_state(app), file_region_p0));
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
// TODO(allen): VIEW_16_LIMIT
|
||||
Lister_State global_lister_state_[16] = {};
|
||||
Lister_State *global_lister_state = global_lister_state_ - 1;
|
||||
|
||||
static Lister_State*
|
||||
view_get_lister_state(View_ID view){
|
||||
return(&global_lister_state[view]);
|
||||
}
|
||||
|
||||
static i32
|
||||
lister_standard_arena_size_round_up(i32 arena_size){
|
||||
if (arena_size < (64 << 10)){
|
||||
arena_size = (64 << 10);
|
||||
}
|
||||
else{
|
||||
arena_size += (4 << 10) - 1;
|
||||
arena_size -= arena_size%(4 << 10);
|
||||
}
|
||||
return(arena_size);
|
||||
}
|
||||
|
||||
static void
|
||||
init_lister_state(Application_Links *app, Lister_State *state, Heap *heap){
|
||||
state->initialized = true;
|
||||
state->hot_user_data = 0;
|
||||
state->item_index = 0;
|
||||
state->set_view_vertical_focus_to_item = false;
|
||||
state->item_count_after_filter = 0;
|
||||
}
|
||||
|
||||
UI_QUIT_FUNCTION(lister_quit_function){
|
||||
Lister_State *state = view_get_lister_state(view);
|
||||
state->initialized = false;
|
||||
view_clear_ui_data(app, view);
|
||||
}
|
||||
|
||||
static UI_Item
|
||||
lister_get_clicked_item(Application_Links *app, View_ID view_id){
|
||||
UI_Item result = {};
|
||||
UI_Data *ui_data = 0;
|
||||
Arena *ui_arena = 0;
|
||||
if (view_get_ui_data(app, view_id, ViewGetUIFlag_KeepDataAsIs, &ui_data, &ui_arena)){
|
||||
Mouse_State mouse = get_mouse_state(app);
|
||||
Rect_f32 region = view_get_buffer_region(app, view_id);
|
||||
Vec2_f32 m_panel_space = get_mouse_position_in_panel_space(mouse, region.p0);
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view_id);
|
||||
Vec2_f32 m_view_space = m_panel_space + scroll.position;
|
||||
UI_Item *clicked = ui_control_get_mouse_hit(ui_data, m_view_space, m_panel_space);
|
||||
if (clicked != 0){
|
||||
result = *clicked;
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static f32
|
||||
lister_get_text_field_height(f32 line_height){
|
||||
return(line_height);
|
||||
}
|
||||
|
||||
static f32
|
||||
lister_get_block_height(f32 line_height, b32 is_theme_list){
|
||||
f32 block_height = 0;
|
||||
if (is_theme_list){
|
||||
block_height = line_height*3 + 6;
|
||||
}
|
||||
else{
|
||||
block_height = line_height*2;
|
||||
}
|
||||
return(block_height);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_update_ui(Application_Links *app, View_ID view, Lister_State *state){
|
||||
b32 is_theme_list = state->lister.data.theme_list;
|
||||
|
||||
Rect_f32 screen_rect = view_get_screen_rect(app, view);
|
||||
|
||||
Face_ID face_id = get_face_id(app, 0);
|
||||
Face_Metrics metrics = get_face_metrics(app, face_id);
|
||||
|
||||
Basic_Scroll scroll = view_get_basic_scroll(app, view);
|
||||
|
||||
f32 x0 = 0;
|
||||
f32 x1 = (rect_width(screen_rect));
|
||||
f32 line_height = metrics.line_height;
|
||||
f32 block_height = lister_get_block_height(line_height, is_theme_list);
|
||||
f32 text_field_height = lister_get_text_field_height(metrics.line_height);
|
||||
|
||||
Scratch_Block scratch(app, Scratch_Share);
|
||||
|
||||
Rect_f32 region = view_get_buffer_region(app, view);
|
||||
Vec2_f32 view_m = get_mouse_position_in_panel_space(app, region.p0);
|
||||
view_m += scroll.position;
|
||||
|
||||
f32 y_pos = text_field_height;
|
||||
|
||||
state->raw_item_index = -1;
|
||||
|
||||
i32 node_count = state->lister.data.options.count;
|
||||
Lister_Node_Ptr_Array exact_matches = {};
|
||||
exact_matches.node_ptrs = push_array(scratch, Lister_Node*, 1);
|
||||
Lister_Node_Ptr_Array before_extension_matches = {};
|
||||
before_extension_matches.node_ptrs = push_array(scratch, Lister_Node*, node_count);
|
||||
Lister_Node_Ptr_Array substring_matches = {};
|
||||
substring_matches.node_ptrs = push_array(scratch, Lister_Node*, node_count);
|
||||
|
||||
{
|
||||
Temp_Memory temp = begin_temp(scratch);
|
||||
String_Const_u8 key = state->lister.data.key_string.string;
|
||||
key = push_string_copy(scratch, key);
|
||||
string_mod_replace_character(key, '_', '*');
|
||||
string_mod_replace_character(key, ' ', '*');
|
||||
|
||||
List_String_Const_u8 absolutes = {};
|
||||
string_list_push(scratch, &absolutes, string_u8_litexpr(""));
|
||||
List_String_Const_u8 splits = string_split(scratch, key, (u8*)"*", 1);
|
||||
b32 has_wildcard = (splits.node_count > 1);
|
||||
string_list_push(&absolutes, &splits);
|
||||
string_list_push(scratch, &absolutes, string_u8_litexpr(""));
|
||||
|
||||
for (Lister_Node *node = state->lister.data.options.first;
|
||||
node != 0;
|
||||
node = node->next){
|
||||
String_Const_u8 node_string = node->string;
|
||||
|
||||
if (key.size == 0 || string_wildcard_match_insensitive(absolutes, node_string)){
|
||||
if (string_match_insensitive(node_string, key) && exact_matches.count == 0){
|
||||
exact_matches.node_ptrs[exact_matches.count++] = node;
|
||||
}
|
||||
else if (!has_wildcard &&
|
||||
string_match_insensitive(string_prefix(node_string, key.size), key) &&
|
||||
node->string.size > key.size &&
|
||||
node->string.str[key.size] == '.'){
|
||||
before_extension_matches.node_ptrs[before_extension_matches.count++] = node;
|
||||
}
|
||||
else{
|
||||
substring_matches.node_ptrs[substring_matches.count++] = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
end_temp(temp);
|
||||
}
|
||||
|
||||
Lister_Node_Ptr_Array node_ptr_arrays[] = {
|
||||
exact_matches,
|
||||
before_extension_matches,
|
||||
substring_matches,
|
||||
};
|
||||
|
||||
UI_Data *ui_data = 0;
|
||||
Arena *ui_arena = 0;
|
||||
if (view_get_ui_data(app, view, ViewGetUIFlag_ClearData, &ui_data, &ui_arena)){
|
||||
block_zero_struct(ui_data);
|
||||
|
||||
UI_Item *highlighted_item = 0;
|
||||
UI_Item *hot_item = 0;
|
||||
UI_Item *hovered_item = 0;
|
||||
i32 item_index_counter = 0;
|
||||
for (i32 array_index = 0; array_index < ArrayCount(node_ptr_arrays); array_index += 1){
|
||||
Lister_Node_Ptr_Array node_ptr_array = node_ptr_arrays[array_index];
|
||||
for (i32 node_index = 0; node_index < node_ptr_array.count; node_index += 1){
|
||||
Lister_Node *node = node_ptr_array.node_ptrs[node_index];
|
||||
|
||||
Rect_f32 item_rect = Rf32(x0, y_pos, x1, y_pos + block_height);
|
||||
y_pos = item_rect.y1;
|
||||
|
||||
UI_Item item = {};
|
||||
item.activation_level = UIActivation_None;
|
||||
item.coordinates = UICoordinates_ViewSpace;
|
||||
item.rect_outer = Ri32(item_rect);
|
||||
item.inner_margin = 3;
|
||||
|
||||
if (!is_theme_list){
|
||||
Fancy_String_List list = {};
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Default), node->string);
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default), " ");
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Pop2 ), node->status);
|
||||
item.lines[0] = list;
|
||||
item.line_count = 1;
|
||||
}
|
||||
else{
|
||||
//i32 style_index = node->index;
|
||||
|
||||
String_Const_u8 name = string_u8_litexpr("name");
|
||||
item.lines[0] = fancy_string_list_single(push_fancy_string(ui_arena, fancy_id(Stag_Default), name));
|
||||
|
||||
Fancy_String_List list = {};
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Keyword ), "if ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default ), "(x < ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Int_Constant), "0");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default ), ") { x = ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Int_Constant), "0");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Default ), "; } ");
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Comment ), "// comment");
|
||||
item.lines[1] = list;
|
||||
|
||||
item.line_count = 2;
|
||||
}
|
||||
|
||||
item.user_data = node->user_data;
|
||||
|
||||
UI_Item *item_ptr = ui_list_add_item(ui_arena, &ui_data->list, item);
|
||||
if (rect_contains_point(item_rect, view_m)){
|
||||
hovered_item = item_ptr;
|
||||
}
|
||||
if (state->item_index == item_index_counter){
|
||||
highlighted_item = item_ptr;
|
||||
state->raw_item_index = node->raw_index;
|
||||
}
|
||||
item_index_counter += 1;
|
||||
if (node->user_data == state->hot_user_data && hot_item != 0){
|
||||
hot_item = item_ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
state->item_count_after_filter = item_index_counter;
|
||||
|
||||
if (hovered_item != 0){
|
||||
hovered_item->activation_level = UIActivation_Hover;
|
||||
}
|
||||
if (hot_item != 0){
|
||||
if (hot_item == hovered_item){
|
||||
hot_item->activation_level = UIActivation_Active;
|
||||
}
|
||||
else{
|
||||
hot_item->activation_level = UIActivation_Hover;
|
||||
}
|
||||
}
|
||||
if (highlighted_item != 0){
|
||||
highlighted_item->activation_level = UIActivation_Active;
|
||||
}
|
||||
|
||||
if (state->set_view_vertical_focus_to_item){
|
||||
if (highlighted_item != 0){
|
||||
view_set_vertical_focus_basic(app, view,
|
||||
(f32)highlighted_item->rect_outer.y0,
|
||||
(f32)highlighted_item->rect_outer.y1);
|
||||
}
|
||||
state->set_view_vertical_focus_to_item = false;
|
||||
}
|
||||
|
||||
{
|
||||
// TODO(allen): switch to float
|
||||
Rect_i32 item_rect = {};
|
||||
item_rect.x0 = (i32)x0;
|
||||
item_rect.y0 = 0;
|
||||
item_rect.x1 = (i32)x1;
|
||||
item_rect.y1 = item_rect.y0 + (i32)text_field_height;
|
||||
y_pos = (f32)item_rect.y1;
|
||||
|
||||
UI_Item item = {};
|
||||
item.activation_level = UIActivation_Active;
|
||||
item.coordinates = UICoordinates_PanelSpace;
|
||||
item.rect_outer = item_rect;
|
||||
item.inner_margin = 0;
|
||||
{
|
||||
Fancy_String_List list = {};
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Pop1 ), state->lister.data.query.string);
|
||||
push_fancy_stringf(ui_arena, &list, fancy_id(Stag_Pop1 ), " ");
|
||||
push_fancy_string (ui_arena, &list, fancy_id(Stag_Default), state->lister.data.text_field.string);
|
||||
item.lines[0] = list;
|
||||
item.line_count = 1;
|
||||
}
|
||||
item.user_data = 0;
|
||||
|
||||
|
||||
ui_list_add_item(ui_arena, &ui_data->list, item);
|
||||
}
|
||||
|
||||
ui_data_compute_bounding_boxes(ui_data);
|
||||
|
||||
// TODO(allen): what to do with control now?
|
||||
//UI_Control control = ui_list_to_ui_control(scratch, &list);
|
||||
view_set_quit_ui_handler(app, view, lister_quit_function);
|
||||
}
|
||||
}
|
||||
|
||||
static Lister_Prealloced_String
|
||||
lister_prealloced(String_Const_u8 string){
|
||||
Lister_Prealloced_String result = {};
|
||||
result.string = string;
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_first_init(Application_Links *app, Lister *lister, void *user_data, i32 user_data_size){
|
||||
if (lister->arena == 0) {
|
||||
lister->arena = reserve_arena(app, KB(16));
|
||||
}
|
||||
else{
|
||||
linalloc_clear(lister->arena);
|
||||
}
|
||||
block_zero_struct(&lister->data);
|
||||
lister->data.query = Su8(lister->data.query_space, 0, sizeof(lister->data.query_space));
|
||||
lister->data.text_field = Su8(lister->data.text_field_space, 0, sizeof(lister->data.text_field_space));
|
||||
lister->data.key_string = Su8(lister->data.key_string_space, 0, sizeof(lister->data.key_string_space));
|
||||
lister->data.user_data = push_array(lister->arena, char, user_data_size);
|
||||
lister->data.user_data_size = user_data_size;
|
||||
if (user_data != 0){
|
||||
block_copy(lister->data.user_data, user_data, user_data_size);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
lister_begin_new_item_set(Application_Links *app, Lister *lister){
|
||||
linalloc_clear(lister->arena);
|
||||
block_zero_struct(&lister->data.options);
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, Lister_Prealloced_String string, Lister_Prealloced_String status,
|
||||
void *user_data, umem extra_space){
|
||||
void *base_memory = push_array(lister->arena, u8, sizeof(Lister_Node) + extra_space);
|
||||
Lister_Node *node = (Lister_Node*)base_memory;
|
||||
node->string = string.string;
|
||||
node->status = status.string;
|
||||
node->user_data = user_data;
|
||||
node->raw_index = lister->data.options.count;
|
||||
zdll_push_back(lister->data.options.first, lister->data.options.last, node);
|
||||
lister->data.options.count += 1;
|
||||
void *result = (node + 1);
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, Lister_Prealloced_String string, String_Const_u8 status,
|
||||
void *user_data, umem extra_space){
|
||||
return(lister_add_item(lister, string, lister_prealloced(push_string_copy(lister->arena, status)),
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, String_Const_u8 string, Lister_Prealloced_String status,
|
||||
void *user_data, umem extra_space){
|
||||
return(lister_add_item(lister, lister_prealloced(push_string_copy(lister->arena, string)), status,
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_item(Lister *lister, String_Const_u8 string, String_Const_u8 status, void *user_data, umem extra_space){
|
||||
return(lister_add_item(lister,
|
||||
lister_prealloced(push_string_copy(lister->arena, string)),
|
||||
lister_prealloced(push_string_copy(lister->arena, status)),
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_theme_item(Lister *lister,
|
||||
Lister_Prealloced_String string, i32 index,
|
||||
void *user_data, i32 extra_space){
|
||||
Lister_Node *node = push_array(lister->arena, Lister_Node, 1);
|
||||
node->string = string.string;
|
||||
node->index = index;
|
||||
node->user_data = user_data;
|
||||
node->raw_index = lister->data.options.count;
|
||||
zdll_push_back(lister->data.options.first, lister->data.options.last, node);
|
||||
lister->data.options.count += 1;
|
||||
void *result = push_array(lister->arena, char, extra_space);
|
||||
push_align(lister->arena, 8);
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_add_theme_item(Lister *lister, String_Const_u8 string, i32 index,
|
||||
void *user_data, i32 extra_space){
|
||||
return(lister_add_theme_item(lister, lister_prealloced(push_string_copy(lister->arena, string)), index,
|
||||
user_data, extra_space));
|
||||
}
|
||||
|
||||
static void*
|
||||
lister_get_user_data(Lister_Data *lister_data, i32 index){
|
||||
void *result = 0;
|
||||
if (0 <= index && index < lister_data->options.count){
|
||||
i32 counter = 0;
|
||||
for (Lister_Node *node = lister_data->options.first;
|
||||
node != 0;
|
||||
node = node->next, counter += 1){
|
||||
if (counter == index){
|
||||
result = node->user_data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_call_refresh_handler(Application_Links *app, Lister *lister){
|
||||
if (lister->data.handlers.refresh != 0){
|
||||
lister->data.handlers.refresh(app, lister);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
lister_default(Application_Links *app, Heap *heap, View_ID view, Lister_State *state, Lister_Activation_Code code){
|
||||
switch (code){
|
||||
case ListerActivation_Finished:
|
||||
{
|
||||
|
||||
}break;
|
||||
|
||||
case ListerActivation_Continue:
|
||||
{}break;
|
||||
|
||||
case ListerActivation_ContinueAndRefresh:
|
||||
{
|
||||
state->item_index = 0;
|
||||
lister_call_refresh_handler(app, &state->lister);
|
||||
lister_update_ui(app, view, state);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
static Lister_Activation_Code
|
||||
lister_call_activate_handler(Application_Links *app, Heap *heap, View_ID view, Lister_State *state, void *user_data, b32 activated_by_mouse){
|
||||
Lister_Activation_Code result = ListerActivation_Finished;
|
||||
Lister_Data *lister = &state->lister.data;
|
||||
if (lister->handlers.activate != 0){
|
||||
result = lister->handlers.activate(app, heap, view, state, lister->text_field.string, user_data, activated_by_mouse);
|
||||
}
|
||||
else{
|
||||
lister_default(app, heap, view, state, ListerActivation_Finished);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_set_string(String_Const_u8 string, String_u8 *target){
|
||||
target->size = 0;
|
||||
string_append(target, string);
|
||||
}
|
||||
static void
|
||||
lister_append_string(String_Const_u8 string, String_u8 *target){
|
||||
string_append(target, string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_set_query(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_set_string(string, &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_set_query(Lister_Data *lister, char *string){
|
||||
lister_set_string(SCu8(string), &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_set_string(string, &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister_Data *lister, char *string){
|
||||
lister_set_string(SCu8(string), &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_set_string(string, &lister->key_string);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister_Data *lister, char *string){
|
||||
lister_set_string(SCu8(string), &lister->key_string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_set_query(Lister *lister, String_Const_u8 string){
|
||||
lister_set_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_query(Lister *lister, char *string){
|
||||
lister_set_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister *lister, String_Const_u8 string){
|
||||
lister_set_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_text_field(Lister *lister, char *string){
|
||||
lister_set_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister *lister, String_Const_u8 string){
|
||||
lister_set_key(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_set_key(Lister *lister, char *string){
|
||||
lister_set_key(&lister->data, string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_append_query(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_append_string(string, &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_append_query(Lister_Data *lister, char *string){
|
||||
lister_append_string(SCu8(string), &lister->query);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_append_string(string, &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister_Data *lister, char *string){
|
||||
lister_append_string(SCu8(string), &lister->text_field);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister_Data *lister, String_Const_u8 string){
|
||||
lister_append_string(string, &lister->key_string);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister_Data *lister, char *string){
|
||||
lister_append_string(SCu8(string), &lister->key_string);
|
||||
}
|
||||
|
||||
static void
|
||||
lister_append_query(Lister *lister, String_Const_u8 string){
|
||||
lister_append_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_query(Lister *lister, char *string){
|
||||
lister_append_query(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister *lister, String_Const_u8 string){
|
||||
lister_append_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_text_field(Lister *lister, char *string){
|
||||
lister_append_text_field(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister *lister, String_Const_u8 string){
|
||||
lister_append_key(&lister->data, string);
|
||||
}
|
||||
static void
|
||||
lister_append_key(Lister *lister, char *string){
|
||||
lister_append_key(&lister->data, string);
|
||||
}
|
||||
|
||||
// BOTTOM
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
#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 210
|
||||
#define command_one_past_last_id 208
|
||||
#if defined(CUSTOM_COMMAND_SIG)
|
||||
#define PROC_LINKS(x,y) x
|
||||
#else
|
||||
|
@ -164,8 +164,6 @@ CUSTOM_COMMAND_SIG(goto_first_jump_same_panel_sticky);
|
|||
CUSTOM_COMMAND_SIG(if_read_only_goto_position);
|
||||
CUSTOM_COMMAND_SIG(if_read_only_goto_position_same_panel);
|
||||
CUSTOM_COMMAND_SIG(view_jump_list_with_lister);
|
||||
CUSTOM_COMMAND_SIG(log_graph__escape);
|
||||
CUSTOM_COMMAND_SIG(log_graph__scroll_wheel);
|
||||
CUSTOM_COMMAND_SIG(show_the_log_graph);
|
||||
CUSTOM_COMMAND_SIG(copy);
|
||||
CUSTOM_COMMAND_SIG(cut);
|
||||
|
@ -230,27 +228,27 @@ char *source_name;
|
|||
i32 source_name_len;
|
||||
i32 line_number;
|
||||
};
|
||||
static Command_Metadata fcoder_metacmd_table[210] = {
|
||||
static Command_Metadata fcoder_metacmd_table[208] = {
|
||||
{ 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(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, 1978 },
|
||||
{ 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, 1984 },
|
||||
{ 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, 1990 },
|
||||
{ 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, 1996 },
|
||||
{ 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, 2002 },
|
||||
{ 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, 2010 },
|
||||
{ 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 },
|
||||
{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 226 },
|
||||
{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 289 },
|
||||
{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 295 },
|
||||
{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 301 },
|
||||
{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 307 },
|
||||
{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 313 },
|
||||
{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 319 },
|
||||
{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 325 },
|
||||
{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 331 },
|
||||
{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 337 },
|
||||
{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 291 },
|
||||
{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 297 },
|
||||
{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 303 },
|
||||
{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 309 },
|
||||
{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 315 },
|
||||
{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 321 },
|
||||
{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 327 },
|
||||
{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 333 },
|
||||
{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 339 },
|
||||
{ PROC_LINKS(write_text_input, 0), "write_text_input", 16, "Inserts whatever character was used to trigger this command.", 60, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 58 },
|
||||
{ PROC_LINKS(write_space, 0), "write_space", 11, "Inserts an underscore.", 22, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 66 },
|
||||
{ PROC_LINKS(write_underscore, 0), "write_underscore", 16, "Inserts an underscore.", 22, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 72 },
|
||||
|
@ -266,100 +264,100 @@ static Command_Metadata fcoder_metacmd_table[210] = {
|
|||
{ PROC_LINKS(center_view, 0), "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 199 },
|
||||
{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 213 },
|
||||
{ PROC_LINKS(click_set_cursor_and_mark, 0), "click_set_cursor_and_mark", 25, "Sets the cursor position and mark to the mouse position.", 56, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 225 },
|
||||
{ PROC_LINKS(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 237 },
|
||||
{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 249 },
|
||||
{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 263 },
|
||||
{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 275 },
|
||||
{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 336 },
|
||||
{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 342 },
|
||||
{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 348 },
|
||||
{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 354 },
|
||||
{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 360 },
|
||||
{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 370 },
|
||||
{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 378 },
|
||||
{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 408 },
|
||||
{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 414 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 420 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 426 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 432 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 438 },
|
||||
{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 444 },
|
||||
{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 456 },
|
||||
{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 478 },
|
||||
{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 486 },
|
||||
{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 494 },
|
||||
{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 502 },
|
||||
{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 510 },
|
||||
{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 518 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 526 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 534 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 542 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 550 },
|
||||
{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 560 },
|
||||
{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 573 },
|
||||
{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 586 },
|
||||
{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 599 },
|
||||
{ PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 633 },
|
||||
{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 641 },
|
||||
{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 650 },
|
||||
{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 657 },
|
||||
{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 664 },
|
||||
{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 671 },
|
||||
{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 },
|
||||
{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 687 },
|
||||
{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 693 },
|
||||
{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 704 },
|
||||
{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 715 },
|
||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 732 },
|
||||
{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 741 },
|
||||
{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 750 },
|
||||
{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 756 },
|
||||
{ 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, 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(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 235 },
|
||||
{ PROC_LINKS(click_set_cursor_if_lbutton, 0), "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 245 },
|
||||
{ PROC_LINKS(click_set_mark, 0), "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 257 },
|
||||
{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 267 },
|
||||
{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 321 },
|
||||
{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 327 },
|
||||
{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 333 },
|
||||
{ PROC_LINKS(move_down_10, 0), "move_down_10", 12, "Moves the cursor down ten lines.", 32, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 339 },
|
||||
{ PROC_LINKS(move_down_textual, 0), "move_down_textual", 17, "Moves down to the next line of actual text, regardless of line wrapping.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 345 },
|
||||
{ PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 355 },
|
||||
{ PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 363 },
|
||||
{ PROC_LINKS(move_up_to_blank_line, 0), "move_up_to_blank_line", 21, "Seeks the cursor up to the next blank line.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 393 },
|
||||
{ PROC_LINKS(move_down_to_blank_line, 0), "move_down_to_blank_line", 23, "Seeks the cursor down to the next blank line.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 399 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_skip_whitespace, 0), "move_up_to_blank_line_skip_whitespace", 37, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 405 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_skip_whitespace, 0), "move_down_to_blank_line_skip_whitespace", 39, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 411 },
|
||||
{ PROC_LINKS(move_up_to_blank_line_end, 0), "move_up_to_blank_line_end", 25, "Seeks the cursor up to the next blank line and places it at the end of the line.", 80, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 417 },
|
||||
{ PROC_LINKS(move_down_to_blank_line_end, 0), "move_down_to_blank_line_end", 27, "Seeks the cursor down to the next blank line and places it at the end of the line.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 423 },
|
||||
{ PROC_LINKS(move_left, 0), "move_left", 9, "Moves the cursor one character to the left.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 429 },
|
||||
{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 441 },
|
||||
{ PROC_LINKS(move_right_whitespace_boundary, 0), "move_right_whitespace_boundary", 30, "Seek right for the next boundary between whitespace and non-whitespace.", 71, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 463 },
|
||||
{ PROC_LINKS(move_left_whitespace_boundary, 0), "move_left_whitespace_boundary", 29, "Seek left for the next boundary between whitespace and non-whitespace.", 70, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 471 },
|
||||
{ PROC_LINKS(move_right_token_boundary, 0), "move_right_token_boundary", 25, "Seek right for the next end of a token.", 39, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 479 },
|
||||
{ PROC_LINKS(move_left_token_boundary, 0), "move_left_token_boundary", 24, "Seek left for the next beginning of a token.", 44, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 487 },
|
||||
{ PROC_LINKS(move_right_whitespace_or_token_boundary, 0), "move_right_whitespace_or_token_boundary", 39, "Seek right for the next end of a token or boundary between whitespace and non-whitespace.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 495 },
|
||||
{ PROC_LINKS(move_left_whitespace_or_token_boundary, 0), "move_left_whitespace_or_token_boundary", 38, "Seek left for the next end of a token or boundary between whitespace and non-whitespace.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 503 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_boundary, 0), "move_right_alpha_numeric_boundary", 33, "Seek right for boundary between alphanumeric characters and non-alphanumeric characters.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 511 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_boundary, 0), "move_left_alpha_numeric_boundary", 32, "Seek left for boundary between alphanumeric characters and non-alphanumeric characters.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 519 },
|
||||
{ PROC_LINKS(move_right_alpha_numeric_or_camel_boundary, 0), "move_right_alpha_numeric_or_camel_boundary", 42, "Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 527 },
|
||||
{ PROC_LINKS(move_left_alpha_numeric_or_camel_boundary, 0), "move_left_alpha_numeric_or_camel_boundary", 41, "Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.", 106, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 535 },
|
||||
{ PROC_LINKS(select_all, 0), "select_all", 10, "Puts the cursor at the top of the file, and the mark at the bottom of the file.", 79, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 545 },
|
||||
{ PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 558 },
|
||||
{ PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 571 },
|
||||
{ PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 584 },
|
||||
{ PROC_LINKS(basic_change_active_panel, 0), "basic_change_active_panel", 25, "Change the currently active panel, moving to the panel with the next highest view_id. Will not skipe the build panel if it is open.", 132, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 618 },
|
||||
{ PROC_LINKS(close_panel, 0), "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 626 },
|
||||
{ PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 635 },
|
||||
{ PROC_LINKS(hide_scrollbar, 0), "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 642 },
|
||||
{ PROC_LINKS(show_filebar, 0), "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 649 },
|
||||
{ PROC_LINKS(hide_filebar, 0), "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 656 },
|
||||
{ PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 663 },
|
||||
{ PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 672 },
|
||||
{ PROC_LINKS(increase_face_size, 0), "increase_face_size", 18, "Increase the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 678 },
|
||||
{ PROC_LINKS(decrease_face_size, 0), "decrease_face_size", 18, "Decrease the size of the face used by the current buffer.", 57, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 689 },
|
||||
{ PROC_LINKS(mouse_wheel_change_face_size, 0), "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 700 },
|
||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 717 },
|
||||
{ PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 726 },
|
||||
{ PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 735 },
|
||||
{ PROC_LINKS(eol_dosify, 0), "eol_dosify", 10, "Puts the buffer in DOS line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 741 },
|
||||
{ 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, 749 },
|
||||
{ PROC_LINKS(exit_4coder, 0), "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 757 },
|
||||
{ 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, 765 },
|
||||
{ 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, 994 },
|
||||
{ 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, 1000 },
|
||||
{ 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, 1006 },
|
||||
{ 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, 1012 },
|
||||
{ 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, 1059 },
|
||||
{ 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, 1068 },
|
||||
{ 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, 1077 },
|
||||
{ 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, 1169 },
|
||||
{ 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, 1190 },
|
||||
{ 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, 1206 },
|
||||
{ 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, 1241 },
|
||||
{ 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, 1266 },
|
||||
{ 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, 1310 },
|
||||
{ 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, 1343 },
|
||||
{ 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, 1381 },
|
||||
{ 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, 1415 },
|
||||
{ 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, 1421 },
|
||||
{ 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, 1427 },
|
||||
{ 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, 1441 },
|
||||
{ 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, 1506 },
|
||||
{ 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, 1538 },
|
||||
{ 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, 1551 },
|
||||
{ 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, 1563 },
|
||||
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1597 },
|
||||
{ PROC_LINKS(save, 0), "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1605 },
|
||||
{ PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1615 },
|
||||
{ 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, 1844 },
|
||||
{ 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, 1857 },
|
||||
{ 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, 1871 },
|
||||
{ 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, 1942 },
|
||||
{ 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, 2043 },
|
||||
{ PROC_LINKS(lister__write_string__default, 0), "lister__write_string__default", 29, "A lister mode command that inserts a new character to the text field.", 69, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 8 },
|
||||
{ PROC_LINKS(lister__backspace_text_field__default, 0), "lister__backspace_text_field__default", 37, "A lister mode command that backspaces one character from the text field.", 72, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 26 },
|
||||
{ PROC_LINKS(lister__move_up__default, 0), "lister__move_up__default", 24, "A lister mode command that moves the highlighted item one up in the list.", 73, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 40 },
|
||||
{ PROC_LINKS(lister__move_down__default, 0), "lister__move_down__default", 26, "A lister mode command that moves the highlighted item one down in the list.", 75, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 55 },
|
||||
{ PROC_LINKS(lister__write_character__file_path, 0), "lister__write_character__file_path", 34, "A lister mode command that inserts a character into the text field of a file system list.", 89, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 70 },
|
||||
{ PROC_LINKS(lister__backspace_text_field__file_path, 0), "lister__backspace_text_field__file_path", 39, "A lister mode command that backspaces one character from the text field of a file system list.", 94, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 94 },
|
||||
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 775 },
|
||||
{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 795 },
|
||||
{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 867 },
|
||||
{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 907 },
|
||||
{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 941 },
|
||||
{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 1022 },
|
||||
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 772 },
|
||||
{ PROC_LINKS(interactive_kill_buffer, 0), "interactive_kill_buffer", 23, "Interactively kill an open buffer.", 34, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 791 },
|
||||
{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 862 },
|
||||
{ PROC_LINKS(interactive_new, 0), "interactive_new", 15, "Interactively creates a new file.", 33, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 901 },
|
||||
{ PROC_LINKS(interactive_open, 0), "interactive_open", 16, "Interactively opens a file.", 27, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 934 },
|
||||
{ PROC_LINKS(command_lister, 0), "command_lister", 14, "Opens an interactive list of all registered commands.", 53, "w:\\4ed\\code\\custom\\4coder_lists.cpp", 35, 1013 },
|
||||
{ PROC_LINKS(auto_indent_whole_file, 0), "auto_indent_whole_file", 22, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 356 },
|
||||
{ PROC_LINKS(auto_indent_line_at_cursor, 0), "auto_indent_line_at_cursor", 26, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 365 },
|
||||
{ PROC_LINKS(auto_indent_range, 0), "auto_indent_range", 17, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\custom\\4coder_auto_indent.cpp", 41, 375 },
|
||||
|
@ -385,10 +383,8 @@ static Command_Metadata fcoder_metacmd_table[210] = {
|
|||
{ PROC_LINKS(goto_first_jump_same_panel_sticky, 0), "goto_first_jump_same_panel_sticky", 33, "If a buffer containing jump locations has been locked in, goes to the first jump in the buffer and views the buffer in the panel where the jump list was.", 153, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 540 },
|
||||
{ PROC_LINKS(if_read_only_goto_position, 0), "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 562 },
|
||||
{ PROC_LINKS(if_read_only_goto_position_same_panel, 0), "if_read_only_goto_position_same_panel", 37, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\custom\\4coder_jump_sticky.cpp", 41, 579 },
|
||||
{ PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 103 },
|
||||
{ PROC_LINKS(log_graph__escape, 0), "log_graph__escape", 17, "Ends the log grapher", 20, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 906 },
|
||||
{ PROC_LINKS(log_graph__scroll_wheel, 0), "log_graph__scroll_wheel", 23, "Scrolls the log graph", 21, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 915 },
|
||||
{ PROC_LINKS(show_the_log_graph, 0), "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 1013 },
|
||||
{ PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\custom\\4coder_jump_lister.cpp", 41, 102 },
|
||||
{ PROC_LINKS(show_the_log_graph, 0), "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "w:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 990 },
|
||||
{ PROC_LINKS(copy, 0), "copy", 4, "Copy the text in the range from the cursor to the mark onto the clipboard.", 74, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 19 },
|
||||
{ PROC_LINKS(cut, 0), "cut", 3, "Cut the text in the range from the cursor to the mark onto the clipboard.", 73, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 28 },
|
||||
{ PROC_LINKS(paste, 0), "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "w:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 39 },
|
||||
|
@ -434,7 +430,7 @@ static Command_Metadata fcoder_metacmd_table[210] = {
|
|||
{ PROC_LINKS(comment_line, 0), "comment_line", 12, "Insert '//' at the beginning of the line after leading whitespace.", 66, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 125 },
|
||||
{ PROC_LINKS(uncomment_line, 0), "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 137 },
|
||||
{ PROC_LINKS(comment_line_toggle, 0), "comment_line_toggle", 19, "Turns uncommented lines into commented lines and vice versa for comments starting with '//'.", 92, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 149 },
|
||||
{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 232 },
|
||||
{ PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 231 },
|
||||
{ PROC_LINKS(miblo_increment_basic, 0), "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 29 },
|
||||
{ PROC_LINKS(miblo_decrement_basic, 0), "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 44 },
|
||||
{ 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 },
|
||||
|
@ -597,59 +593,57 @@ static i32 fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 151;
|
|||
static i32 fcoder_metacmd_ID_if_read_only_goto_position = 152;
|
||||
static i32 fcoder_metacmd_ID_if_read_only_goto_position_same_panel = 153;
|
||||
static i32 fcoder_metacmd_ID_view_jump_list_with_lister = 154;
|
||||
static i32 fcoder_metacmd_ID_log_graph__escape = 155;
|
||||
static i32 fcoder_metacmd_ID_log_graph__scroll_wheel = 156;
|
||||
static i32 fcoder_metacmd_ID_show_the_log_graph = 157;
|
||||
static i32 fcoder_metacmd_ID_copy = 158;
|
||||
static i32 fcoder_metacmd_ID_cut = 159;
|
||||
static i32 fcoder_metacmd_ID_paste = 160;
|
||||
static i32 fcoder_metacmd_ID_paste_next = 161;
|
||||
static i32 fcoder_metacmd_ID_paste_and_indent = 162;
|
||||
static i32 fcoder_metacmd_ID_paste_next_and_indent = 163;
|
||||
static i32 fcoder_metacmd_ID_execute_previous_cli = 164;
|
||||
static i32 fcoder_metacmd_ID_execute_any_cli = 165;
|
||||
static i32 fcoder_metacmd_ID_build_search = 166;
|
||||
static i32 fcoder_metacmd_ID_build_in_build_panel = 167;
|
||||
static i32 fcoder_metacmd_ID_close_build_panel = 168;
|
||||
static i32 fcoder_metacmd_ID_change_to_build_panel = 169;
|
||||
static i32 fcoder_metacmd_ID_close_all_code = 170;
|
||||
static i32 fcoder_metacmd_ID_open_all_code = 171;
|
||||
static i32 fcoder_metacmd_ID_open_all_code_recursive = 172;
|
||||
static i32 fcoder_metacmd_ID_load_project = 173;
|
||||
static i32 fcoder_metacmd_ID_project_fkey_command = 174;
|
||||
static i32 fcoder_metacmd_ID_project_go_to_root_directory = 175;
|
||||
static i32 fcoder_metacmd_ID_setup_new_project = 176;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat = 177;
|
||||
static i32 fcoder_metacmd_ID_setup_build_sh = 178;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat_and_sh = 179;
|
||||
static i32 fcoder_metacmd_ID_project_command_lister = 180;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer = 181;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 182;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers = 183;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 184;
|
||||
static i32 fcoder_metacmd_ID_select_surrounding_scope = 185;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_absolute = 186;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_after_current = 187;
|
||||
static i32 fcoder_metacmd_ID_select_prev_scope_absolute = 188;
|
||||
static i32 fcoder_metacmd_ID_place_in_scope = 189;
|
||||
static i32 fcoder_metacmd_ID_delete_current_scope = 190;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces = 191;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_semicolon = 192;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_break = 193;
|
||||
static i32 fcoder_metacmd_ID_if0_off = 194;
|
||||
static i32 fcoder_metacmd_ID_write_todo = 195;
|
||||
static i32 fcoder_metacmd_ID_write_hack = 196;
|
||||
static i32 fcoder_metacmd_ID_write_note = 197;
|
||||
static i32 fcoder_metacmd_ID_write_block = 198;
|
||||
static i32 fcoder_metacmd_ID_write_zero_struct = 199;
|
||||
static i32 fcoder_metacmd_ID_comment_line = 200;
|
||||
static i32 fcoder_metacmd_ID_uncomment_line = 201;
|
||||
static i32 fcoder_metacmd_ID_comment_line_toggle = 202;
|
||||
static i32 fcoder_metacmd_ID_snippet_lister = 203;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_basic = 204;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_basic = 205;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 206;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 207;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 208;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 209;
|
||||
static i32 fcoder_metacmd_ID_show_the_log_graph = 155;
|
||||
static i32 fcoder_metacmd_ID_copy = 156;
|
||||
static i32 fcoder_metacmd_ID_cut = 157;
|
||||
static i32 fcoder_metacmd_ID_paste = 158;
|
||||
static i32 fcoder_metacmd_ID_paste_next = 159;
|
||||
static i32 fcoder_metacmd_ID_paste_and_indent = 160;
|
||||
static i32 fcoder_metacmd_ID_paste_next_and_indent = 161;
|
||||
static i32 fcoder_metacmd_ID_execute_previous_cli = 162;
|
||||
static i32 fcoder_metacmd_ID_execute_any_cli = 163;
|
||||
static i32 fcoder_metacmd_ID_build_search = 164;
|
||||
static i32 fcoder_metacmd_ID_build_in_build_panel = 165;
|
||||
static i32 fcoder_metacmd_ID_close_build_panel = 166;
|
||||
static i32 fcoder_metacmd_ID_change_to_build_panel = 167;
|
||||
static i32 fcoder_metacmd_ID_close_all_code = 168;
|
||||
static i32 fcoder_metacmd_ID_open_all_code = 169;
|
||||
static i32 fcoder_metacmd_ID_open_all_code_recursive = 170;
|
||||
static i32 fcoder_metacmd_ID_load_project = 171;
|
||||
static i32 fcoder_metacmd_ID_project_fkey_command = 172;
|
||||
static i32 fcoder_metacmd_ID_project_go_to_root_directory = 173;
|
||||
static i32 fcoder_metacmd_ID_setup_new_project = 174;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat = 175;
|
||||
static i32 fcoder_metacmd_ID_setup_build_sh = 176;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat_and_sh = 177;
|
||||
static i32 fcoder_metacmd_ID_project_command_lister = 178;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer = 179;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 180;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers = 181;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 182;
|
||||
static i32 fcoder_metacmd_ID_select_surrounding_scope = 183;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_absolute = 184;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_after_current = 185;
|
||||
static i32 fcoder_metacmd_ID_select_prev_scope_absolute = 186;
|
||||
static i32 fcoder_metacmd_ID_place_in_scope = 187;
|
||||
static i32 fcoder_metacmd_ID_delete_current_scope = 188;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces = 189;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_semicolon = 190;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_break = 191;
|
||||
static i32 fcoder_metacmd_ID_if0_off = 192;
|
||||
static i32 fcoder_metacmd_ID_write_todo = 193;
|
||||
static i32 fcoder_metacmd_ID_write_hack = 194;
|
||||
static i32 fcoder_metacmd_ID_write_note = 195;
|
||||
static i32 fcoder_metacmd_ID_write_block = 196;
|
||||
static i32 fcoder_metacmd_ID_write_zero_struct = 197;
|
||||
static i32 fcoder_metacmd_ID_comment_line = 198;
|
||||
static i32 fcoder_metacmd_ID_uncomment_line = 199;
|
||||
static i32 fcoder_metacmd_ID_comment_line_toggle = 200;
|
||||
static i32 fcoder_metacmd_ID_snippet_lister = 201;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_basic = 202;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_basic = 203;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 204;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 205;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 206;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 207;
|
||||
#endif
|
||||
|
|
|
@ -77,7 +77,6 @@ vtable->panel_get_margin = panel_get_margin;
|
|||
vtable->view_close = view_close;
|
||||
vtable->view_get_buffer_region = view_get_buffer_region;
|
||||
vtable->view_get_buffer_scroll = view_get_buffer_scroll;
|
||||
vtable->view_get_basic_scroll = view_get_basic_scroll;
|
||||
vtable->view_set_active = view_set_active;
|
||||
vtable->view_get_setting = view_get_setting;
|
||||
vtable->view_set_setting = view_set_setting;
|
||||
|
@ -86,15 +85,12 @@ vtable->buffer_compute_cursor = buffer_compute_cursor;
|
|||
vtable->view_compute_cursor = view_compute_cursor;
|
||||
vtable->view_set_cursor = view_set_cursor;
|
||||
vtable->view_set_buffer_scroll = view_set_buffer_scroll;
|
||||
vtable->view_set_basic_scroll = view_set_basic_scroll;
|
||||
vtable->view_set_mark = view_set_mark;
|
||||
vtable->view_set_buffer = view_set_buffer;
|
||||
vtable->view_post_fade = view_post_fade;
|
||||
vtable->view_begin_ui_mode = view_begin_ui_mode;
|
||||
vtable->view_end_ui_mode = view_end_ui_mode;
|
||||
vtable->view_is_in_ui_mode = view_is_in_ui_mode;
|
||||
vtable->view_set_quit_ui_handler = view_set_quit_ui_handler;
|
||||
vtable->view_get_quit_ui_handler = view_get_quit_ui_handler;
|
||||
vtable->view_push_context = view_push_context;
|
||||
vtable->view_pop_context = view_pop_context;
|
||||
vtable->view_current_context = view_current_context;
|
||||
vtable->create_user_managed_scope = create_user_managed_scope;
|
||||
vtable->destroy_user_managed_scope = destroy_user_managed_scope;
|
||||
vtable->get_global_managed_scope = get_global_managed_scope;
|
||||
|
@ -252,7 +248,6 @@ panel_get_margin = vtable->panel_get_margin;
|
|||
view_close = vtable->view_close;
|
||||
view_get_buffer_region = vtable->view_get_buffer_region;
|
||||
view_get_buffer_scroll = vtable->view_get_buffer_scroll;
|
||||
view_get_basic_scroll = vtable->view_get_basic_scroll;
|
||||
view_set_active = vtable->view_set_active;
|
||||
view_get_setting = vtable->view_get_setting;
|
||||
view_set_setting = vtable->view_set_setting;
|
||||
|
@ -261,15 +256,12 @@ buffer_compute_cursor = vtable->buffer_compute_cursor;
|
|||
view_compute_cursor = vtable->view_compute_cursor;
|
||||
view_set_cursor = vtable->view_set_cursor;
|
||||
view_set_buffer_scroll = vtable->view_set_buffer_scroll;
|
||||
view_set_basic_scroll = vtable->view_set_basic_scroll;
|
||||
view_set_mark = vtable->view_set_mark;
|
||||
view_set_buffer = vtable->view_set_buffer;
|
||||
view_post_fade = vtable->view_post_fade;
|
||||
view_begin_ui_mode = vtable->view_begin_ui_mode;
|
||||
view_end_ui_mode = vtable->view_end_ui_mode;
|
||||
view_is_in_ui_mode = vtable->view_is_in_ui_mode;
|
||||
view_set_quit_ui_handler = vtable->view_set_quit_ui_handler;
|
||||
view_get_quit_ui_handler = vtable->view_get_quit_ui_handler;
|
||||
view_push_context = vtable->view_push_context;
|
||||
view_pop_context = vtable->view_pop_context;
|
||||
view_current_context = vtable->view_current_context;
|
||||
create_user_managed_scope = vtable->create_user_managed_scope;
|
||||
destroy_user_managed_scope = vtable->destroy_user_managed_scope;
|
||||
get_global_managed_scope = vtable->get_global_managed_scope;
|
||||
|
|
|
@ -75,7 +75,6 @@
|
|||
#define custom_view_close_sig() b32 custom_view_close(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_get_buffer_region_sig() Rect_f32 custom_view_get_buffer_region(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_get_buffer_scroll_sig() Buffer_Scroll custom_view_get_buffer_scroll(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_get_basic_scroll_sig() Basic_Scroll custom_view_get_basic_scroll(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_set_active_sig() b32 custom_view_set_active(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_get_setting_sig() b32 custom_view_get_setting(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64* value_out)
|
||||
#define custom_view_set_setting_sig() b32 custom_view_set_setting(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64 value)
|
||||
|
@ -84,15 +83,12 @@
|
|||
#define custom_view_compute_cursor_sig() Buffer_Cursor custom_view_compute_cursor(Application_Links* app, View_ID view_id, Buffer_Seek seek)
|
||||
#define custom_view_set_cursor_sig() b32 custom_view_set_cursor(Application_Links* app, View_ID view_id, Buffer_Seek seek)
|
||||
#define custom_view_set_buffer_scroll_sig() b32 custom_view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll)
|
||||
#define custom_view_set_basic_scroll_sig() b32 custom_view_set_basic_scroll(Application_Links* app, View_ID view_id, Basic_Scroll scroll)
|
||||
#define custom_view_set_mark_sig() b32 custom_view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek)
|
||||
#define custom_view_set_buffer_sig() b32 custom_view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags)
|
||||
#define custom_view_post_fade_sig() b32 custom_view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color)
|
||||
#define custom_view_begin_ui_mode_sig() b32 custom_view_begin_ui_mode(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_end_ui_mode_sig() b32 custom_view_end_ui_mode(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_is_in_ui_mode_sig() b32 custom_view_is_in_ui_mode(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_set_quit_ui_handler_sig() b32 custom_view_set_quit_ui_handler(Application_Links* app, View_ID view_id, UI_Quit_Function_Type* quit_function)
|
||||
#define custom_view_get_quit_ui_handler_sig() b32 custom_view_get_quit_ui_handler(Application_Links* app, View_ID view_id, UI_Quit_Function_Type** quit_function_out)
|
||||
#define custom_view_push_context_sig() b32 custom_view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx)
|
||||
#define custom_view_pop_context_sig() b32 custom_view_pop_context(Application_Links* app, View_ID view_id)
|
||||
#define custom_view_current_context_sig() View_Context custom_view_current_context(Application_Links* app, View_ID view_id)
|
||||
#define custom_create_user_managed_scope_sig() Managed_Scope custom_create_user_managed_scope(Application_Links* app)
|
||||
#define custom_destroy_user_managed_scope_sig() b32 custom_destroy_user_managed_scope(Application_Links* app, Managed_Scope scope)
|
||||
#define custom_get_global_managed_scope_sig() Managed_Scope custom_get_global_managed_scope(Application_Links* app)
|
||||
|
@ -246,7 +242,6 @@ typedef Rect_i32 custom_panel_get_margin_type(Application_Links* app, Panel_ID p
|
|||
typedef b32 custom_view_close_type(Application_Links* app, View_ID view_id);
|
||||
typedef Rect_f32 custom_view_get_buffer_region_type(Application_Links* app, View_ID view_id);
|
||||
typedef Buffer_Scroll custom_view_get_buffer_scroll_type(Application_Links* app, View_ID view_id);
|
||||
typedef Basic_Scroll custom_view_get_basic_scroll_type(Application_Links* app, View_ID view_id);
|
||||
typedef b32 custom_view_set_active_type(Application_Links* app, View_ID view_id);
|
||||
typedef b32 custom_view_get_setting_type(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64* value_out);
|
||||
typedef b32 custom_view_set_setting_type(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64 value);
|
||||
|
@ -255,15 +250,12 @@ typedef Buffer_Cursor custom_buffer_compute_cursor_type(Application_Links* app,
|
|||
typedef Buffer_Cursor custom_view_compute_cursor_type(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
typedef b32 custom_view_set_cursor_type(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
typedef b32 custom_view_set_buffer_scroll_type(Application_Links* app, View_ID view_id, Buffer_Scroll scroll);
|
||||
typedef b32 custom_view_set_basic_scroll_type(Application_Links* app, View_ID view_id, Basic_Scroll scroll);
|
||||
typedef b32 custom_view_set_mark_type(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
typedef b32 custom_view_set_buffer_type(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags);
|
||||
typedef b32 custom_view_post_fade_type(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color);
|
||||
typedef b32 custom_view_begin_ui_mode_type(Application_Links* app, View_ID view_id);
|
||||
typedef b32 custom_view_end_ui_mode_type(Application_Links* app, View_ID view_id);
|
||||
typedef b32 custom_view_is_in_ui_mode_type(Application_Links* app, View_ID view_id);
|
||||
typedef b32 custom_view_set_quit_ui_handler_type(Application_Links* app, View_ID view_id, UI_Quit_Function_Type* quit_function);
|
||||
typedef b32 custom_view_get_quit_ui_handler_type(Application_Links* app, View_ID view_id, UI_Quit_Function_Type** quit_function_out);
|
||||
typedef b32 custom_view_push_context_type(Application_Links* app, View_ID view_id, View_Context* ctx);
|
||||
typedef b32 custom_view_pop_context_type(Application_Links* app, View_ID view_id);
|
||||
typedef View_Context custom_view_current_context_type(Application_Links* app, View_ID view_id);
|
||||
typedef Managed_Scope custom_create_user_managed_scope_type(Application_Links* app);
|
||||
typedef b32 custom_destroy_user_managed_scope_type(Application_Links* app, Managed_Scope scope);
|
||||
typedef Managed_Scope custom_get_global_managed_scope_type(Application_Links* app);
|
||||
|
@ -418,7 +410,6 @@ custom_panel_get_margin_type *panel_get_margin;
|
|||
custom_view_close_type *view_close;
|
||||
custom_view_get_buffer_region_type *view_get_buffer_region;
|
||||
custom_view_get_buffer_scroll_type *view_get_buffer_scroll;
|
||||
custom_view_get_basic_scroll_type *view_get_basic_scroll;
|
||||
custom_view_set_active_type *view_set_active;
|
||||
custom_view_get_setting_type *view_get_setting;
|
||||
custom_view_set_setting_type *view_set_setting;
|
||||
|
@ -427,15 +418,12 @@ custom_buffer_compute_cursor_type *buffer_compute_cursor;
|
|||
custom_view_compute_cursor_type *view_compute_cursor;
|
||||
custom_view_set_cursor_type *view_set_cursor;
|
||||
custom_view_set_buffer_scroll_type *view_set_buffer_scroll;
|
||||
custom_view_set_basic_scroll_type *view_set_basic_scroll;
|
||||
custom_view_set_mark_type *view_set_mark;
|
||||
custom_view_set_buffer_type *view_set_buffer;
|
||||
custom_view_post_fade_type *view_post_fade;
|
||||
custom_view_begin_ui_mode_type *view_begin_ui_mode;
|
||||
custom_view_end_ui_mode_type *view_end_ui_mode;
|
||||
custom_view_is_in_ui_mode_type *view_is_in_ui_mode;
|
||||
custom_view_set_quit_ui_handler_type *view_set_quit_ui_handler;
|
||||
custom_view_get_quit_ui_handler_type *view_get_quit_ui_handler;
|
||||
custom_view_push_context_type *view_push_context;
|
||||
custom_view_pop_context_type *view_pop_context;
|
||||
custom_view_current_context_type *view_current_context;
|
||||
custom_create_user_managed_scope_type *create_user_managed_scope;
|
||||
custom_destroy_user_managed_scope_type *destroy_user_managed_scope;
|
||||
custom_get_global_managed_scope_type *get_global_managed_scope;
|
||||
|
@ -591,7 +579,6 @@ internal Rect_i32 panel_get_margin(Application_Links* app, Panel_ID panel_id);
|
|||
internal b32 view_close(Application_Links* app, View_ID view_id);
|
||||
internal Rect_f32 view_get_buffer_region(Application_Links* app, View_ID view_id);
|
||||
internal Buffer_Scroll view_get_buffer_scroll(Application_Links* app, View_ID view_id);
|
||||
internal Basic_Scroll view_get_basic_scroll(Application_Links* app, View_ID view_id);
|
||||
internal b32 view_set_active(Application_Links* app, View_ID view_id);
|
||||
internal b32 view_get_setting(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64* value_out);
|
||||
internal b32 view_set_setting(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64 value);
|
||||
|
@ -600,15 +587,12 @@ internal Buffer_Cursor buffer_compute_cursor(Application_Links* app, Buffer_ID b
|
|||
internal Buffer_Cursor view_compute_cursor(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
internal b32 view_set_cursor(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
internal b32 view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll);
|
||||
internal b32 view_set_basic_scroll(Application_Links* app, View_ID view_id, Basic_Scroll scroll);
|
||||
internal b32 view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
internal b32 view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags);
|
||||
internal b32 view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color);
|
||||
internal b32 view_begin_ui_mode(Application_Links* app, View_ID view_id);
|
||||
internal b32 view_end_ui_mode(Application_Links* app, View_ID view_id);
|
||||
internal b32 view_is_in_ui_mode(Application_Links* app, View_ID view_id);
|
||||
internal b32 view_set_quit_ui_handler(Application_Links* app, View_ID view_id, UI_Quit_Function_Type* quit_function);
|
||||
internal b32 view_get_quit_ui_handler(Application_Links* app, View_ID view_id, UI_Quit_Function_Type** quit_function_out);
|
||||
internal b32 view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx);
|
||||
internal b32 view_pop_context(Application_Links* app, View_ID view_id);
|
||||
internal View_Context view_current_context(Application_Links* app, View_ID view_id);
|
||||
internal Managed_Scope create_user_managed_scope(Application_Links* app);
|
||||
internal b32 destroy_user_managed_scope(Application_Links* app, Managed_Scope scope);
|
||||
internal Managed_Scope get_global_managed_scope(Application_Links* app);
|
||||
|
@ -764,7 +748,6 @@ global custom_panel_get_margin_type *panel_get_margin = 0;
|
|||
global custom_view_close_type *view_close = 0;
|
||||
global custom_view_get_buffer_region_type *view_get_buffer_region = 0;
|
||||
global custom_view_get_buffer_scroll_type *view_get_buffer_scroll = 0;
|
||||
global custom_view_get_basic_scroll_type *view_get_basic_scroll = 0;
|
||||
global custom_view_set_active_type *view_set_active = 0;
|
||||
global custom_view_get_setting_type *view_get_setting = 0;
|
||||
global custom_view_set_setting_type *view_set_setting = 0;
|
||||
|
@ -773,15 +756,12 @@ global custom_buffer_compute_cursor_type *buffer_compute_cursor = 0;
|
|||
global custom_view_compute_cursor_type *view_compute_cursor = 0;
|
||||
global custom_view_set_cursor_type *view_set_cursor = 0;
|
||||
global custom_view_set_buffer_scroll_type *view_set_buffer_scroll = 0;
|
||||
global custom_view_set_basic_scroll_type *view_set_basic_scroll = 0;
|
||||
global custom_view_set_mark_type *view_set_mark = 0;
|
||||
global custom_view_set_buffer_type *view_set_buffer = 0;
|
||||
global custom_view_post_fade_type *view_post_fade = 0;
|
||||
global custom_view_begin_ui_mode_type *view_begin_ui_mode = 0;
|
||||
global custom_view_end_ui_mode_type *view_end_ui_mode = 0;
|
||||
global custom_view_is_in_ui_mode_type *view_is_in_ui_mode = 0;
|
||||
global custom_view_set_quit_ui_handler_type *view_set_quit_ui_handler = 0;
|
||||
global custom_view_get_quit_ui_handler_type *view_get_quit_ui_handler = 0;
|
||||
global custom_view_push_context_type *view_push_context = 0;
|
||||
global custom_view_pop_context_type *view_pop_context = 0;
|
||||
global custom_view_current_context_type *view_current_context = 0;
|
||||
global custom_create_user_managed_scope_type *create_user_managed_scope = 0;
|
||||
global custom_destroy_user_managed_scope_type *destroy_user_managed_scope = 0;
|
||||
global custom_get_global_managed_scope_type *get_global_managed_scope = 0;
|
||||
|
|
|
@ -75,7 +75,6 @@ api(custom) function Rect_i32 panel_get_margin(Application_Links* app, Panel_ID
|
|||
api(custom) function b32 view_close(Application_Links* app, View_ID view_id);
|
||||
api(custom) function Rect_f32 view_get_buffer_region(Application_Links* app, View_ID view_id);
|
||||
api(custom) function Buffer_Scroll view_get_buffer_scroll(Application_Links* app, View_ID view_id);
|
||||
api(custom) function Basic_Scroll view_get_basic_scroll(Application_Links* app, View_ID view_id);
|
||||
api(custom) function b32 view_set_active(Application_Links* app, View_ID view_id);
|
||||
api(custom) function b32 view_get_setting(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64* value_out);
|
||||
api(custom) function b32 view_set_setting(Application_Links* app, View_ID view_id, View_Setting_ID setting, i64 value);
|
||||
|
@ -84,15 +83,12 @@ api(custom) function Buffer_Cursor buffer_compute_cursor(Application_Links* app,
|
|||
api(custom) function Buffer_Cursor view_compute_cursor(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
api(custom) function b32 view_set_cursor(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
api(custom) function b32 view_set_buffer_scroll(Application_Links* app, View_ID view_id, Buffer_Scroll scroll);
|
||||
api(custom) function b32 view_set_basic_scroll(Application_Links* app, View_ID view_id, Basic_Scroll scroll);
|
||||
api(custom) function b32 view_set_mark(Application_Links* app, View_ID view_id, Buffer_Seek seek);
|
||||
api(custom) function b32 view_set_buffer(Application_Links* app, View_ID view_id, Buffer_ID buffer_id, Set_Buffer_Flag flags);
|
||||
api(custom) function b32 view_post_fade(Application_Links* app, View_ID view_id, f32 seconds, Range_i64 range, int_color color);
|
||||
api(custom) function b32 view_begin_ui_mode(Application_Links* app, View_ID view_id);
|
||||
api(custom) function b32 view_end_ui_mode(Application_Links* app, View_ID view_id);
|
||||
api(custom) function b32 view_is_in_ui_mode(Application_Links* app, View_ID view_id);
|
||||
api(custom) function b32 view_set_quit_ui_handler(Application_Links* app, View_ID view_id, UI_Quit_Function_Type* quit_function);
|
||||
api(custom) function b32 view_get_quit_ui_handler(Application_Links* app, View_ID view_id, UI_Quit_Function_Type** quit_function_out);
|
||||
api(custom) function b32 view_push_context(Application_Links* app, View_ID view_id, View_Context* ctx);
|
||||
api(custom) function b32 view_pop_context(Application_Links* app, View_ID view_id);
|
||||
api(custom) function View_Context view_current_context(Application_Links* app, View_ID view_id);
|
||||
api(custom) function Managed_Scope create_user_managed_scope(Application_Links* app);
|
||||
api(custom) function b32 destroy_user_managed_scope(Application_Links* app, Managed_Scope scope);
|
||||
api(custom) function Managed_Scope get_global_managed_scope(Application_Links* app);
|
||||
|
|
Loading…
Reference in New Issue