correct collection editing/deletion/reordering/etc. with new watch visualization system

This commit is contained in:
Ryan Fleury
2024-09-26 16:08:35 -07:00
parent 2fdfeec467
commit 73c37b4d8b
6 changed files with 182 additions and 38 deletions
@@ -200,6 +200,7 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
E_MemberArray *members = &accel->members;
result.row_exprs_count = Min(needed_row_count, members->count);
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
result.row_strings = push_array(arena, String8, result.row_exprs_count);
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
for EachIndex(row_expr_idx, result.row_exprs_count)
{
@@ -217,6 +218,7 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
E_EnumValArray *enumvals = &accel->enum_vals;
result.row_exprs_count = Min(needed_row_count, enumvals->count);
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
result.row_strings = push_array(arena, String8, result.row_exprs_count);
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
for EachIndex(row_expr_idx, result.row_exprs_count)
{
@@ -234,6 +236,7 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
E_Expr *array_expr = accel->array_need_extra_deref ? e_expr_ref_deref(arena, expr) : expr;
result.row_exprs_count = Min(needed_row_count, accel->array_count);
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
result.row_strings = push_array(arena, String8, result.row_exprs_count);
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
for EachIndex(row_expr_idx, result.row_exprs_count)
{
@@ -249,6 +252,7 @@ EV_VIEW_RULE_EXPR_EXPAND_RANGE_INFO_FUNCTION_DEF(default)
{
result.row_exprs_count = 1;
result.row_exprs = push_array(arena, E_Expr *, result.row_exprs_count);
result.row_strings = push_array(arena, String8, result.row_exprs_count);
result.row_members = push_array(arena, E_Member *, result.row_exprs_count);
result.row_exprs[0] = e_expr_ref_deref(arena, expr);
result.row_members[0] = &e_member_nil;
@@ -1023,7 +1023,7 @@ ev2_windowed_row_list_from_block_range_list(Arena *arena, EV_View *view, String8
row->visual_size = 1;
row->visual_size_skipped = 0; // TODO(rjf)
row->visual_size_chopped = 0; // TODO(rjf)
row->string = n->v.block->string;
row->string = expand_range_info.row_strings[idx];
row->expr = row_expr__resolved;
row->member = expand_range_info.row_members[idx];
row->view_rules = row_view_rules;
@@ -173,6 +173,7 @@ typedef struct EV_ExpandRangeInfo EV_ExpandRangeInfo;
struct EV_ExpandRangeInfo
{
U64 row_exprs_count;
String8 *row_strings;
E_Expr **row_exprs;
E_Member **row_members;
};