fix editable expression strings, fix command evaluation, etc.

This commit is contained in:
Ryan Fleury
2025-04-24 09:52:29 -07:00
parent a35e483629
commit a6c9a1bd2a
4 changed files with 19 additions and 31 deletions
+6 -6
View File
@@ -3219,15 +3219,15 @@ rd_view_ui(Rng2F32 rect)
if(cell_info.flags & RD_WatchCellFlag_CanEdit) if(cell_info.flags & RD_WatchCellFlag_CanEdit)
{ {
any_edits_started = 1; any_edits_started = 1;
String8 string = cell->edit_string; String8 string = {0};
if(string.size == 0) if(cell_info.flags & RD_WatchCellFlag_NoEval)
{
string = cell->eval.string;
}
else
{ {
string = dr_string_from_fstrs(scratch.arena, &cell_info.eval_fstrs); string = dr_string_from_fstrs(scratch.arena, &cell_info.eval_fstrs);
} }
if(string.size == 0)
{
string = dr_string_from_fstrs(scratch.arena, &cell_info.expr_fstrs);
}
string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer)); string.size = Min(string.size, sizeof(ewv->dummy_text_edit_state.input_buffer));
RD_WatchPt pt = {row->block->key, row->key, rd_id_from_watch_cell(cell)}; RD_WatchPt pt = {row->block->key, row->key, rd_id_from_watch_cell(cell)};
U64 hash = ev_hash_from_key(pt.key); U64 hash = ev_hash_from_key(pt.key);
+5 -3
View File
@@ -638,7 +638,6 @@ E_TYPE_IREXT_FUNCTION_DEF(cfgs)
//- rjf: gather commands //- rjf: gather commands
String8List cmds_list = {0}; String8List cmds_list = {0};
if(rd_cfg_child_from_string(rd_cfg_from_id(rd_regs()->view), str8_lit("lister")) == &rd_nil_cfg)
{ {
MD_NodePtrList schemas = rd_schemas_from_name(cfg_name); MD_NodePtrList schemas = rd_schemas_from_name(cfg_name);
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next) for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
@@ -738,9 +737,12 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs)
} }
//- rjf: fill //- rjf: fill
accel->cmds = ext->cmds; if(rd_cfg_child_from_string(rd_cfg_from_id(rd_regs()->view), str8_lit("lister")) == &rd_nil_cfg)
{
accel->cmds = ext->cmds;
accel->cmds_idx_range = r1u64(0, accel->cmds.count);
}
accel->cfgs = cfgs__filtered; accel->cfgs = cfgs__filtered;
accel->cmds_idx_range = r1u64(0, accel->cmds.count);
accel->cfgs_idx_range = r1u64(accel->cmds_idx_range.max, accel->cmds_idx_range.max + accel->cfgs.count); accel->cfgs_idx_range = r1u64(accel->cmds_idx_range.max, accel->cmds_idx_range.max + accel->cfgs.count);
info.expr_count = (accel->cmds.count + accel->cfgs.count); info.expr_count = (accel->cmds.count + accel->cfgs.count);
} }
+8 -21
View File
@@ -1129,7 +1129,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
if(type->kind == E_TypeKind_Set) if(type->kind == E_TypeKind_Set)
{ {
String8 file_path = e_string_from_id(row->eval.value.u64); String8 file_path = e_string_from_id(row->eval.value.u64);
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .edit_string = row->edit_string, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button|RD_WatchCellFlag_IsNonCode, .pct = 1.f); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button|RD_WatchCellFlag_IsNonCode, .pct = 1.f);
if(str8_match(type->name, str8_lit("file"), 0)) if(str8_match(type->name, str8_lit("file"), 0))
{ {
info.can_expand = 0; info.can_expand = 0;
@@ -1143,7 +1143,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
RD_Cfg *w_cfg = style->first; RD_Cfg *w_cfg = style->first;
F32 next_pct = 0; F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct) #define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .edit_string = row->edit_string, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .default_pct = 0.35f, .pct = take_pct()); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .default_pct = 0.35f, .pct = take_pct());
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .default_pct = 0.65f, .pct = take_pct()); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .default_pct = 0.65f, .pct = take_pct());
#undef take_pct #undef take_pct
} }
@@ -1156,7 +1156,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
str8_match(row_type->name, str8_lit("unattached_process"), 0)) str8_match(row_type->name, str8_lit("unattached_process"), 0))
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .flags = RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented,
.pct = 1.f); .pct = 1.f);
} }
@@ -1172,7 +1171,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
{ {
extra_flags |= RD_WatchCellFlag_NoEval; extra_flags |= RD_WatchCellFlag_NoEval;
} }
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .edit_string = row->edit_string, .flags = extra_flags|RD_WatchCellFlag_Expr|RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .pct = 1.f); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = extra_flags|RD_WatchCellFlag_Expr|RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .pct = 1.f);
} }
//////////////////////////// ////////////////////////////
@@ -1181,7 +1180,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
else if(is_top_level && evalled_cfg != &rd_nil_cfg) else if(is_top_level && evalled_cfg != &rd_nil_cfg)
{ {
RD_Cfg *cfg = evalled_cfg; RD_Cfg *cfg = evalled_cfg;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .edit_string = row->edit_string, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .pct = 1.f); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Button|RD_WatchCellFlag_Indented, .pct = 1.f);
MD_NodePtrList schemas = rd_schemas_from_name(cfg->string); MD_NodePtrList schemas = rd_schemas_from_name(cfg->string);
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next) for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
{ {
@@ -1252,7 +1251,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
{ {
CTRL_Entity *entity = evalled_entity; CTRL_Entity *entity = evalled_entity;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button,
.pct = 1.f); .pct = 1.f);
if(entity->kind == CTRL_EntityKind_Machine || if(entity->kind == CTRL_EntityKind_Machine ||
@@ -1260,7 +1258,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
entity->kind == CTRL_EntityKind_Thread) entity->kind == CTRL_EntityKind_Thread)
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, e_eval_wrapf(row->eval, "active"), rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, e_eval_wrapf(row->eval, "active"),
.edit_string = row->edit_string,
.px = floor_f32(ui_top_font_size()*5.f)); .px = floor_f32(ui_top_font_size()*5.f));
} }
if(entity->kind == CTRL_EntityKind_Thread) if(entity->kind == CTRL_EntityKind_Thread)
@@ -1272,7 +1269,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
} }
String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string; String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string;
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, e_eval_from_stringf("query:commands.%S", cmd_name), rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, e_eval_from_stringf("query:commands.%S", cmd_name),
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_ActivateWithSingleClick|RD_WatchCellFlag_Button, .flags = RD_WatchCellFlag_ActivateWithSingleClick|RD_WatchCellFlag_Button,
.px = floor_f32(ui_top_font_size()*3.f)); .px = floor_f32(ui_top_font_size()*3.f));
} }
@@ -1283,7 +1279,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
// //
else if(row->eval.space.kind == RD_EvalSpaceKind_MetaQuery) else if(row->eval.space.kind == RD_EvalSpaceKind_MetaQuery)
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .edit_string = row->edit_string, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f);
} }
//////////////////////////// ////////////////////////////
@@ -1295,13 +1291,11 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
if(type->kind == E_TypeKind_Set) if(type->kind == E_TypeKind_Set)
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f); .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f);
} }
else else
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button|RD_WatchCellFlag_ActivateWithSingleClick, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button|RD_WatchCellFlag_ActivateWithSingleClick,
.pct = 1.f); .pct = 1.f);
} }
@@ -1321,7 +1315,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
else if(row->eval.expr == &e_expr_nil && info.group_cfg_name.size != 0 && info.group_cfg_child == &rd_nil_cfg) else if(row->eval.expr == &e_expr_nil && info.group_cfg_name.size != 0 && info.group_cfg_child == &rd_nil_cfg)
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f); .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f);
} }
@@ -1335,7 +1328,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
row->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity)) row->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity))
{ {
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_Indented, .pct = 1.f); .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_Indented, .pct = 1.f);
} }
@@ -1359,10 +1351,8 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
F32 next_pct = 0; F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct) #define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .default_pct = 0.35f, .pct = take_pct()); .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .default_pct = 0.35f, .pct = take_pct());
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.default_pct = 0.65f, .pct = take_pct()); .default_pct = 0.65f, .pct = take_pct());
#undef take_pct #undef take_pct
} }
@@ -1379,7 +1369,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
F32 next_pct = 0; F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct) #define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented,
.default_pct = 0.75f, .default_pct = 0.75f,
.pct = take_pct()); .pct = take_pct());
@@ -1421,7 +1410,6 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
F32 next_pct = 0; F32 next_pct = 0;
#define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct) #define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct)
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval,
.edit_string = row->edit_string,
.flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented,
.default_pct = 0.35f, .default_pct = 0.35f,
.pct = take_pct()); .pct = take_pct());
@@ -1573,9 +1561,8 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
DR_FStrList expr_fstrs = {0}; DR_FStrList expr_fstrs = {0};
if(cell->flags & RD_WatchCellFlag_Expr) if(cell->flags & RD_WatchCellFlag_Expr)
{ {
// rjf: funnel-through this cell's string, if it has one
B32 is_non_code = 0; B32 is_non_code = 0;
String8 expr_string = cell->edit_string; String8 expr_string = {0};
// rjf: if this cell has a meta-display-name, then use that // rjf: if this cell has a meta-display-name, then use that
if(expr_string.size == 0) if(expr_string.size == 0)
@@ -1620,10 +1607,10 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
// rjf: generate expression string based on our notable expression // rjf: generate expression string based on our notable expression
switch(notable_expr->kind) switch(notable_expr->kind)
{ {
// rjf: default case -> just walk the expression tree & generate a string // rjf: default case -> just take whatever string was directly passed via the evaluation
default: default:
{ {
expr_string = e_string_from_expr(arena, notable_expr, str8_zero()); expr_string = cell->eval.string;
}break; }break;
// rjf: array indices -> fast path to [index] // rjf: array indices -> fast path to [index]
-1
View File
@@ -70,7 +70,6 @@ struct RD_WatchCell
RD_WatchCellKind kind; RD_WatchCellKind kind;
RD_WatchCellFlags flags; RD_WatchCellFlags flags;
U64 index; U64 index;
String8 edit_string;
E_Eval eval; E_Eval eval;
F32 default_pct; F32 default_pct;
F32 pct; F32 pct;