fixed casey's 'panel lock up' bug
This commit is contained in:
parent
c8c62dca58
commit
134e166099
137
4ed.cpp
137
4ed.cpp
|
@ -87,92 +87,6 @@ struct App_Vars{
|
|||
Command_Data command_data;
|
||||
};
|
||||
|
||||
internal i32
|
||||
app_get_or_add_map_index(Models *models, i32 mapid){
|
||||
i32 result;
|
||||
i32 user_map_count = models->user_map_count;
|
||||
i32 *map_id_table = models->map_id_table;
|
||||
for (result = 0; result < user_map_count; ++result){
|
||||
if (map_id_table[result] == mapid) break;
|
||||
if (map_id_table[result] == -1){
|
||||
map_id_table[result] = mapid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal i32
|
||||
app_get_map_index(Models *models, i32 mapid){
|
||||
i32 result;
|
||||
i32 user_map_count = models->user_map_count;
|
||||
i32 *map_id_table = models->map_id_table;
|
||||
for (result = 0; result < user_map_count; ++result){
|
||||
if (map_id_table[result] == mapid) break;
|
||||
if (map_id_table[result] == 0){
|
||||
result = user_map_count;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal Command_Map*
|
||||
app_get_map_base(Models *models, i32 mapid, b32 add){
|
||||
Command_Map *map = 0;
|
||||
if (mapid < mapid_global){
|
||||
if (add){
|
||||
mapid = app_get_or_add_map_index(models, mapid);
|
||||
}
|
||||
else{
|
||||
mapid = app_get_map_index(models, mapid);
|
||||
}
|
||||
if (mapid < models->user_map_count){
|
||||
map = models->user_maps + mapid;
|
||||
}
|
||||
}
|
||||
else if (mapid == mapid_global) map = &models->map_top;
|
||||
else if (mapid == mapid_file) map = &models->map_file;
|
||||
return(map);
|
||||
}
|
||||
|
||||
internal Command_Map*
|
||||
app_get_or_add_map(Models *models, i32 mapid){
|
||||
Command_Map *map = app_get_map_base(models, mapid, 1);
|
||||
return(map);
|
||||
}
|
||||
|
||||
internal Command_Map*
|
||||
app_get_map(Models *models, i32 mapid){
|
||||
Command_Map *map = app_get_map_base(models, mapid, 0);
|
||||
return(map);
|
||||
}
|
||||
|
||||
internal void
|
||||
app_map_set_count(Models *models, i32 mapid, i32 count){
|
||||
Command_Map *map = app_get_or_add_map(models, mapid);
|
||||
Assert(map->commands == 0);
|
||||
map->count = count;
|
||||
if (map->max < count){
|
||||
map->max = count;
|
||||
}
|
||||
}
|
||||
|
||||
internal i32
|
||||
app_map_get_count(Models *models, i32 mapid){
|
||||
Command_Map *map = app_get_or_add_map(models, mapid);
|
||||
i32 count = map->count;
|
||||
Assert(map->commands == 0);
|
||||
return(count);
|
||||
}
|
||||
|
||||
internal i32
|
||||
app_map_get_max_count(Models *models, i32 mapid){
|
||||
Command_Map *map = app_get_or_add_map(models, mapid);
|
||||
i32 count = map->max;
|
||||
return(count);
|
||||
}
|
||||
|
||||
inline void
|
||||
output_file_append(System_Functions *system, Models *models, Editing_File *file, String value, b32 cursor_at_end){
|
||||
i32 end = buffer_size(&file->state.buffer);
|
||||
|
@ -267,7 +181,7 @@ panel_make_empty(System_Functions *system, Exchange *exchange, App_Vars *vars, P
|
|||
Assert(panel->view == 0);
|
||||
new_view = live_set_alloc_view(&vars->live_set, panel, models);
|
||||
view_set_file(new_view.view, 0, models);
|
||||
new_view.view->map = app_get_map(models, mapid_global);
|
||||
new_view.view->map = get_map(models, mapid_global);
|
||||
|
||||
return(new_view.view);
|
||||
}
|
||||
|
@ -925,13 +839,13 @@ view_file_in_panel(Command_Data *cmd, Panel *panel, Editing_File *file){
|
|||
|
||||
View *view = panel->view;
|
||||
view_set_file(view, file, models);
|
||||
view_show_file(view, 0);
|
||||
view_show_file(view);
|
||||
|
||||
cmd->part = old_part;
|
||||
end_temp_memory(temp);
|
||||
cmd->view = old_view;
|
||||
|
||||
panel->view->map = app_get_map(models, file->settings.base_map_id);
|
||||
panel->view->map = get_map(models, file->settings.base_map_id);
|
||||
}
|
||||
|
||||
// TODO(allen): Improvements to reopen
|
||||
|
@ -956,7 +870,7 @@ COMMAND_DECL(reopen){
|
|||
app_push_file_binding(vars, file_id, index);
|
||||
|
||||
view_set_file(view, file, models);
|
||||
view_show_file(view, 0);
|
||||
view_show_file(view);
|
||||
}
|
||||
else{
|
||||
do_feedback_message(system, models, make_lit_string("ERROR: no file load slot available\n"));
|
||||
|
@ -1550,13 +1464,7 @@ COMMAND_DECL(open_menu){
|
|||
|
||||
COMMAND_DECL(close_minor_view){
|
||||
USE_VIEW(view);
|
||||
USE_MODELS(models);
|
||||
|
||||
Command_Map *map = &models->map_top;
|
||||
if (view->file_data.file){
|
||||
map = app_get_map(models, view->file_data.file->settings.base_map_id);
|
||||
}
|
||||
view_show_file(view, map);
|
||||
view_show_file(view);
|
||||
}
|
||||
|
||||
COMMAND_DECL(cursor_mark_swap){
|
||||
|
@ -1631,7 +1539,7 @@ COMMAND_DECL(set_settings){
|
|||
if (v == mapid_global) file->settings.base_map_id = mapid_global;
|
||||
else if (v == mapid_file) file->settings.base_map_id = mapid_file;
|
||||
else if (v < mapid_global){
|
||||
new_mapid = app_get_map_index(models, v);
|
||||
new_mapid = get_map_index(models, v);
|
||||
if (new_mapid < models->user_map_count) file->settings.base_map_id = v;
|
||||
else file->settings.base_map_id = mapid_file;
|
||||
}
|
||||
|
@ -1644,7 +1552,7 @@ COMMAND_DECL(set_settings){
|
|||
for (View_Iter iter = file_view_iter_init(&models->layout, file, 0);
|
||||
file_view_iter_good(iter);
|
||||
iter = file_view_iter_next(iter)){
|
||||
iter.view->map = app_get_map(models, file->settings.base_map_id);
|
||||
iter.view->map = get_map(models, file->settings.base_map_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2476,7 +2384,7 @@ extern "C"{
|
|||
result = 1;
|
||||
if (file != vptr->file_data.file){
|
||||
view_set_file(vptr, file, models);
|
||||
view_show_file(vptr, 0);
|
||||
view_show_file(vptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2818,20 +2726,19 @@ app_hardcode_styles(Models *models){
|
|||
style->main.mark_color = 0xFF808080;
|
||||
style->main.highlight_color = 0xFF703419;
|
||||
style->main.at_highlight_color = 0xFFCDAA7D;
|
||||
style->main.default_color = 0xFFCDAA7D;
|
||||
style->main.comment_color = 0xFF7F7F7F;
|
||||
style->main.default_color = 0xFFA08563;
|
||||
style->main.comment_color = 0xFF7D7D7D;
|
||||
style->main.keyword_color = 0xFFCD950C;
|
||||
style->main.str_constant_color = 0xFF6B8E23;
|
||||
style->main.char_constant_color = style->main.str_constant_color;
|
||||
style->main.int_constant_color = style->main.str_constant_color;
|
||||
style->main.float_constant_color = style->main.str_constant_color;
|
||||
style->main.bool_constant_color = style->main.str_constant_color;
|
||||
style->main.include_color = style->main.str_constant_color;
|
||||
style->main.preproc_color = style->main.default_color;
|
||||
style->main.include_color = 0xFF6B8E23;
|
||||
style->main.preproc_color = 0xFFDAB98F;
|
||||
style->main.special_character_color = 0xFFFF0000;
|
||||
|
||||
style->main.paste_color = 0xFFFFBB00;
|
||||
style->main.undo_color = 0xFFFF00BB;
|
||||
style->main.undo_color = 0xFF80005D;
|
||||
|
||||
style->main.highlight_junk_color = 0xFF3A0000;
|
||||
|
@ -3296,12 +3203,12 @@ App_Init_Sig(app_init){
|
|||
case unit_map_begin:
|
||||
{
|
||||
int mapid = unit->map_begin.mapid;
|
||||
int count = app_map_get_count(models, mapid);
|
||||
int count = map_get_count(models, mapid);
|
||||
if (unit->map_begin.replace){
|
||||
app_map_set_count(models, mapid, unit->map_begin.bind_count);
|
||||
map_set_count(models, mapid, unit->map_begin.bind_count);
|
||||
}
|
||||
else{
|
||||
app_map_set_count(models, mapid, unit->map_begin.bind_count + count);
|
||||
map_set_count(models, mapid, unit->map_begin.bind_count + count);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -3313,7 +3220,7 @@ App_Init_Sig(app_init){
|
|||
case unit_map_begin:
|
||||
{
|
||||
int mapid = unit->map_begin.mapid;
|
||||
int count = app_map_get_max_count(models, mapid);
|
||||
int count = map_get_max_count(models, mapid);
|
||||
int table_max = count * 3 / 2;
|
||||
if (mapid == mapid_global){
|
||||
map_ptr = &models->map_top;
|
||||
|
@ -3326,7 +3233,7 @@ App_Init_Sig(app_init){
|
|||
did_file = 1;
|
||||
}
|
||||
else if (mapid < mapid_global){
|
||||
i32 index = app_get_or_add_map_index(models, mapid);
|
||||
i32 index = get_or_add_map_index(models, mapid);
|
||||
Assert(index < user_map_count);
|
||||
map_ptr = models->user_maps + index;
|
||||
map_init(map_ptr, &models->mem.part, table_max, global);
|
||||
|
@ -3345,7 +3252,7 @@ App_Init_Sig(app_init){
|
|||
if (mapid == mapid_global) parent = &models->map_top;
|
||||
else if (mapid == mapid_file) parent = &models->map_file;
|
||||
else if (mapid < mapid_global){
|
||||
i32 index = app_get_or_add_map_index(models, mapid);
|
||||
i32 index = get_or_add_map_index(models, mapid);
|
||||
if (index < user_map_count) parent = models->user_maps + index;
|
||||
else parent = 0;
|
||||
}
|
||||
|
@ -4474,8 +4381,8 @@ App_Step_Sig(app_step){
|
|||
View *view = panel->view;
|
||||
|
||||
view_set_file(view, file, models);
|
||||
view_show_file(view, 0);
|
||||
view->map = app_get_map(models, file->settings.base_map_id);
|
||||
view_show_file(view);
|
||||
view->map = get_map(models, file->settings.base_map_id);
|
||||
|
||||
Hook_Function *new_file_fnc = models->hooks[hook_new_file];
|
||||
if (new_file_fnc){
|
||||
|
@ -4504,8 +4411,8 @@ App_Step_Sig(app_step){
|
|||
View *view = panel->view;
|
||||
|
||||
view_set_file(view, file, models);
|
||||
view_show_file(view, 0);
|
||||
view->map = app_get_map(models, file->settings.base_map_id);
|
||||
view_show_file(view);
|
||||
view->map = get_map(models, file->settings.base_map_id);
|
||||
}
|
||||
}break;
|
||||
|
||||
|
|
|
@ -9,6 +9,92 @@
|
|||
|
||||
// TOP
|
||||
|
||||
internal i32
|
||||
get_or_add_map_index(Models *models, i32 mapid){
|
||||
i32 result;
|
||||
i32 user_map_count = models->user_map_count;
|
||||
i32 *map_id_table = models->map_id_table;
|
||||
for (result = 0; result < user_map_count; ++result){
|
||||
if (map_id_table[result] == mapid) break;
|
||||
if (map_id_table[result] == -1){
|
||||
map_id_table[result] = mapid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal i32
|
||||
get_map_index(Models *models, i32 mapid){
|
||||
i32 result;
|
||||
i32 user_map_count = models->user_map_count;
|
||||
i32 *map_id_table = models->map_id_table;
|
||||
for (result = 0; result < user_map_count; ++result){
|
||||
if (map_id_table[result] == mapid) break;
|
||||
if (map_id_table[result] == 0){
|
||||
result = user_map_count;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal Command_Map*
|
||||
get_map_base(Models *models, i32 mapid, b32 add){
|
||||
Command_Map *map = 0;
|
||||
if (mapid < mapid_global){
|
||||
if (add){
|
||||
mapid = get_or_add_map_index(models, mapid);
|
||||
}
|
||||
else{
|
||||
mapid = get_map_index(models, mapid);
|
||||
}
|
||||
if (mapid < models->user_map_count){
|
||||
map = models->user_maps + mapid;
|
||||
}
|
||||
}
|
||||
else if (mapid == mapid_global) map = &models->map_top;
|
||||
else if (mapid == mapid_file) map = &models->map_file;
|
||||
return(map);
|
||||
}
|
||||
|
||||
internal Command_Map*
|
||||
get_or_add_map(Models *models, i32 mapid){
|
||||
Command_Map *map = get_map_base(models, mapid, 1);
|
||||
return(map);
|
||||
}
|
||||
|
||||
internal Command_Map*
|
||||
get_map(Models *models, i32 mapid){
|
||||
Command_Map *map = get_map_base(models, mapid, 0);
|
||||
return(map);
|
||||
}
|
||||
|
||||
internal void
|
||||
map_set_count(Models *models, i32 mapid, i32 count){
|
||||
Command_Map *map = get_or_add_map(models, mapid);
|
||||
Assert(map->commands == 0);
|
||||
map->count = count;
|
||||
if (map->max < count){
|
||||
map->max = count;
|
||||
}
|
||||
}
|
||||
|
||||
internal i32
|
||||
map_get_count(Models *models, i32 mapid){
|
||||
Command_Map *map = get_or_add_map(models, mapid);
|
||||
i32 count = map->count;
|
||||
Assert(map->commands == 0);
|
||||
return(count);
|
||||
}
|
||||
|
||||
internal i32
|
||||
map_get_max_count(Models *models, i32 mapid){
|
||||
Command_Map *map = get_or_add_map(models, mapid);
|
||||
i32 count = map->max;
|
||||
return(count);
|
||||
}
|
||||
|
||||
enum Interactive_Action{
|
||||
IAct_Open,
|
||||
IAct_Save_As,
|
||||
|
@ -105,7 +191,6 @@ struct View{
|
|||
|
||||
Panel *panel;
|
||||
Command_Map *map;
|
||||
Command_Map *map_for_file;
|
||||
|
||||
File_Viewing_Data file_data;
|
||||
|
||||
|
@ -2750,7 +2835,6 @@ remeasure_file_view(System_Functions *system, View *view){
|
|||
|
||||
inline void
|
||||
view_show_menu(View *view, Command_Map *gui_map){
|
||||
view->map_for_file = view->map;
|
||||
view->map = gui_map;
|
||||
view->showing_ui = VUI_Menu;
|
||||
view->current_scroll = &view->gui_scroll;
|
||||
|
@ -2758,7 +2842,6 @@ view_show_menu(View *view, Command_Map *gui_map){
|
|||
|
||||
inline void
|
||||
view_show_config(View *view, Command_Map *gui_map){
|
||||
view->map_for_file = view->map;
|
||||
view->map = gui_map;
|
||||
view->showing_ui = VUI_Config;
|
||||
view->current_scroll = &view->gui_scroll;
|
||||
|
@ -2778,7 +2861,6 @@ view_show_interactive(System_Functions *system, View *view,
|
|||
view->list_i = 0;
|
||||
view->current_scroll = &view->gui_scroll;
|
||||
|
||||
view->map_for_file = view->map;
|
||||
view->map = gui_map;
|
||||
|
||||
hot_directory_clean_end(&models->hot_directory);
|
||||
|
@ -2787,7 +2869,6 @@ view_show_interactive(System_Functions *system, View *view,
|
|||
|
||||
inline void
|
||||
view_show_theme(View *view, Command_Map *gui_map){
|
||||
view->map_for_file = view->map;
|
||||
view->map = gui_map;
|
||||
view->showing_ui = VUI_Theme;
|
||||
view->color_mode = CV_Mode_Library;
|
||||
|
@ -2797,12 +2878,13 @@ view_show_theme(View *view, Command_Map *gui_map){
|
|||
}
|
||||
|
||||
inline void
|
||||
view_show_file(View *view, Command_Map *file_map){
|
||||
if (file_map){
|
||||
view->map = file_map;
|
||||
view_show_file(View *view){
|
||||
Editing_File *file = view->file_data.file;
|
||||
if (file){
|
||||
view->map = get_map(view->models, file->settings.base_map_id);
|
||||
}
|
||||
else{
|
||||
view->map = view->map_for_file;
|
||||
view->map = get_map(view->models, mapid_global);
|
||||
}
|
||||
view->showing_ui = VUI_None;
|
||||
view->current_scroll = &view->recent->scroll;
|
||||
|
@ -2881,8 +2963,8 @@ interactive_view_complete(View *view, String dest, i32 user_action){
|
|||
}
|
||||
break;
|
||||
}
|
||||
view_show_file(view, 0);
|
||||
|
||||
view_show_file(view);
|
||||
|
||||
// TODO(allen): This is here to prevent the key press from being passed to the
|
||||
// underlying file which is a giant pain. But I want a better system.
|
||||
file_view_nullify_file(view);
|
||||
|
@ -4256,7 +4338,7 @@ do_input_file_view(System_Functions *system, Exchange *exchange,
|
|||
}
|
||||
|
||||
if (did_esc && view->showing_ui != VUI_None){
|
||||
view_show_file(view, 0);
|
||||
view_show_file(view);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,8 +22,8 @@ popd
|
|||
|
||||
pushd ..\build
|
||||
REM call "..\code\buildsuper.bat" ..\code\4coder_default_bindings.cpp
|
||||
call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp
|
||||
REM call "..\code\buildsuper.bat" ..\code\power\4coder_casey.cpp
|
||||
REM call "..\code\buildsuper.bat" ..\code\power\4coder_experiments.cpp
|
||||
call "..\code\buildsuper.bat" ..\code\power\4coder_casey.cpp
|
||||
if %ERRORLEVEL% neq 0 (set FirstError=1)
|
||||
|
||||
set EXPORTS=/EXPORT:app_get_functions
|
||||
|
|
|
@ -23,8 +23,6 @@
|
|||
- Multi-line comments should default to indenting to the indentation of the line prior?
|
||||
- Would like the option to indent to hanging parentheses, equals signs, etc. instead of
|
||||
always just "one tab in from the previous line".
|
||||
- Actually, maybe just expose the dirty state, so that the user can decide whether to
|
||||
save or not? Not sure...
|
||||
- Replace:
|
||||
- Needs to be case-insensitive, or at least have the option to be
|
||||
- Needs to replace using the case of the thing being replaced, or at least have the option to do so
|
||||
|
@ -107,7 +105,7 @@
|
|||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "..\4coder_default_include.cpp"
|
||||
#include "../4coder_default_include.cpp"
|
||||
|
||||
enum maps{
|
||||
my_code_map
|
||||
|
@ -1266,9 +1264,10 @@ HOOK_SIG(casey_file_settings)
|
|||
treat_as_project = match(ext, make_lit_string("prj"));
|
||||
}
|
||||
|
||||
push_parameter(app, par_buffer_id, buffer.buffer_id);
|
||||
push_parameter(app, par_lex_as_cpp_file, treat_as_code);
|
||||
push_parameter(app, par_wrap_lines, !treat_as_code);
|
||||
push_parameter(app, par_key_mapid, (treat_as_code)?((int)my_code_map):((int)mapid_file));
|
||||
push_parameter(app, par_key_mapid, mapid_file);
|
||||
exec_command(app, cmdid_set_settings);
|
||||
|
||||
if(treat_as_project)
|
||||
|
@ -1420,7 +1419,15 @@ win32_toggle_fullscreen(void)
|
|||
|
||||
HOOK_SIG(casey_start)
|
||||
{
|
||||
// NOTE(allen): I added some stuff here based on wishes expressed on stream:
|
||||
// - Two calls to cmdid_hide_scrollbar to hide the scrollbar GUI elements
|
||||
// - One call to cmdid_change_active_panel so that 4coder starts on the right panel
|
||||
|
||||
exec_command(app, cmdid_hide_scrollbar);
|
||||
exec_command(app, cmdid_open_panel_vsplit);
|
||||
exec_command(app, cmdid_hide_scrollbar);
|
||||
exec_command(app, cmdid_change_active_panel);
|
||||
|
||||
app->change_theme(app, literal("Handmade Hero"));
|
||||
app->change_font(app, literal("liberation mono"));
|
||||
|
||||
|
@ -1589,4 +1596,3 @@ extern "C" GET_BINDING_DATA(get_bindings)
|
|||
end_bind_helper(context);
|
||||
return context->write_total;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue