mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-03 20:38:40 +00:00
entity evaluation committing; checkbox view rule; per-column view rules in watch views
This commit is contained in:
@@ -312,6 +312,7 @@ DF_GfxViewRuleTable:
|
||||
{"only" x x - - - "" }
|
||||
{"omit" x x - - - "" }
|
||||
{"no_addr" - x - - - "" }
|
||||
{"checkbox" - - x - - "" }
|
||||
{"rgba" - - x x - "" }
|
||||
{"text" - - - x x "Text" }
|
||||
{"disasm" - - - x x "Disassembly" }
|
||||
|
||||
@@ -290,6 +290,18 @@ DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(omit){}
|
||||
|
||||
DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "checkbox"
|
||||
|
||||
DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox)
|
||||
{
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
if(ui_clicked(df_icon_buttonf(ws, value_eval.value.u64 == 0 ? DF_IconKind_CheckHollow : DF_IconKind_CheckFilled, 0, "###check")))
|
||||
{
|
||||
df_commit_eval_value_string(eval, value_eval.value.u64 == 0 ? str8_lit("1") : str8_lit("0"));
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "rgba"
|
||||
|
||||
@@ -407,7 +419,7 @@ df_vr_eval_commit_rgba(E_Eval eval, Vec4F32 rgba)
|
||||
E_Eval src_eval = eval;
|
||||
src_eval.mode = E_Mode_Value;
|
||||
src_eval.value.u64 = (U64)val;
|
||||
df_commit_eval_value(eval, src_eval);
|
||||
// TODO(rjf): df_commit_eval_value(eval, src_eval);
|
||||
}break;
|
||||
|
||||
#if 0
|
||||
|
||||
+30
-7
@@ -1315,6 +1315,8 @@ df_watch_view_column_alloc_(DF_WatchViewState *wv, DF_WatchViewColumnKind kind,
|
||||
col->pct = pct;
|
||||
col->string_size = Min(sizeof(col->string_buffer), params->string.size);
|
||||
MemoryCopy(col->string_buffer, params->string.str, col->string_size);
|
||||
col->view_rule_size = Min(sizeof(col->view_rule_buffer), params->view_rule.size);
|
||||
MemoryCopy(col->view_rule_buffer, params->view_rule.str, col->view_rule_size);
|
||||
col->is_non_code = params->is_non_code;
|
||||
col->dequote_string = params->dequote_string;
|
||||
return col;
|
||||
@@ -2203,6 +2205,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
snap_to_cursor = 1;
|
||||
}
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Member:
|
||||
case DF_WatchViewColumnKind_Value:
|
||||
if(editing_complete && evt->slot != UI_EventActionSlot_Cancel)
|
||||
{
|
||||
@@ -2211,7 +2214,12 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
B32 success = 0;
|
||||
if(rows.first != 0)
|
||||
{
|
||||
E_Eval dst_eval = e_eval_from_expr(scratch.arena, rows.first->expr);
|
||||
E_Expr *expr = rows.first->expr;
|
||||
if(col->kind == DF_WatchViewColumnKind_Member)
|
||||
{
|
||||
expr = e_expr_ref_member_access(scratch.arena, expr, str8(col->string_buffer, col->string_size));
|
||||
}
|
||||
E_Eval dst_eval = e_eval_from_expr(scratch.arena, expr);
|
||||
success = df_commit_eval_value_string(dst_eval, new_string);
|
||||
}
|
||||
if(!success)
|
||||
@@ -2245,10 +2253,6 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
state_dirty = 1;
|
||||
snap_to_cursor = 1;
|
||||
}break;
|
||||
case DF_WatchViewColumnKind_Member:
|
||||
{
|
||||
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2819,6 +2823,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
String8 cell_error_tooltip_string = {0};
|
||||
DF_AutoCompListerFlags cell_autocomp_flags = 0;
|
||||
DF_GfxViewRuleRowUIFunctionType *cell_ui_hook = 0;
|
||||
DF_CfgNode *cell_ui_node = &df_g_nil_cfg_node;
|
||||
Vec4F32 cell_base_color = ui_top_palette()->text;
|
||||
DF_IconKind cell_icon = DF_IconKind_Null;
|
||||
switch(col->kind)
|
||||
@@ -2885,6 +2890,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
if(row->value_ui_rule_spec != &df_g_nil_gfx_view_rule_spec && row->value_ui_rule_spec != 0)
|
||||
{
|
||||
cell_ui_hook = row->value_ui_rule_spec->info.row_ui;
|
||||
cell_ui_node = row->value_ui_rule_node;
|
||||
}
|
||||
cell_can_edit = df_type_key_is_editable(cell_eval.type_key);
|
||||
}break;
|
||||
@@ -2908,6 +2914,23 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
}break;
|
||||
}
|
||||
|
||||
//- rjf: apply column-specified view rules
|
||||
if(col->view_rule_size != 0)
|
||||
{
|
||||
String8 col_view_rule = str8(col->view_rule_buffer, col->view_rule_size);
|
||||
DF_CfgTable col_cfg_table = {0};
|
||||
df_cfg_table_push_unparsed_string(scratch.arena, &col_cfg_table, col_view_rule, DF_CfgSrc_User);
|
||||
for(DF_CfgVal *val = col_cfg_table.first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||
{
|
||||
DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string);
|
||||
if(spec != &df_g_nil_gfx_view_rule_spec && spec->info.flags & DF_GfxViewRuleSpecInfoFlag_RowUI)
|
||||
{
|
||||
cell_ui_hook = spec->info.row_ui;
|
||||
cell_ui_node = val->last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: determine cell's palette
|
||||
UI_BoxFlags cell_flags = 0;
|
||||
UI_Palette *palette = ui_top_palette();
|
||||
@@ -2949,7 +2972,7 @@ df_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_WatchViewS
|
||||
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clip|UI_BoxFlag_Clickable, "###val_%I64x", row_hash);
|
||||
UI_Parent(box)
|
||||
{
|
||||
cell_ui_hook(ws, row->key, cell_eval, row->value_ui_rule_node);
|
||||
cell_ui_hook(ws, row->key, cell_eval, cell_ui_node);
|
||||
}
|
||||
sig = ui_signal_from_box(box);
|
||||
}
|
||||
@@ -7991,7 +8014,7 @@ DF_VIEW_SETUP_FUNCTION_DEF(Breakpoints)
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.25f, .string = str8_lit("Label"), .dequote_string = 1, .is_non_code = 1);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.35f, .string = str8_lit("Location"), .dequote_string = 1, .is_non_code = 1);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.20f, .string = str8_lit("Condition"), .dequote_string = 1);
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("Enabled"));
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("Enabled"), .view_rule = str8_lit("checkbox"));
|
||||
df_watch_view_column_alloc(wv, DF_WatchViewColumnKind_Member, 0.10f, .string = str8_lit("Hit Count"));
|
||||
}
|
||||
DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(Breakpoints) {return str8_zero();}
|
||||
|
||||
@@ -287,6 +287,7 @@ typedef struct DF_WatchViewColumnParams DF_WatchViewColumnParams;
|
||||
struct DF_WatchViewColumnParams
|
||||
{
|
||||
String8 string;
|
||||
String8 view_rule;
|
||||
B32 is_non_code;
|
||||
B32 dequote_string;
|
||||
};
|
||||
@@ -300,6 +301,8 @@ struct DF_WatchViewColumn
|
||||
F32 pct;
|
||||
U8 string_buffer[1024];
|
||||
U64 string_size;
|
||||
U8 view_rule_buffer[1024];
|
||||
U64 view_rule_size;
|
||||
B32 is_non_code;
|
||||
B32 dequote_string;
|
||||
};
|
||||
|
||||
@@ -216,7 +216,7 @@ DF_ViewSpecInfo df_g_gfx_view_rule_tab_view_spec_info_table[4] =
|
||||
{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery|DF_ViewSpecFlag_FilterIsCode, str8_lit_comp("geo_view_rule"), str8_lit_comp("Geometry"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(geo), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(geo), DF_VIEW_CMD_FUNCTION_NAME(geo), DF_VIEW_UI_FUNCTION_NAME(geo) },
|
||||
};
|
||||
|
||||
DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[14] =
|
||||
DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[15] =
|
||||
{
|
||||
{ str8_lit_comp("array"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, 0, 0, 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("list"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*1)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME(list) , 0, 0, 0, str8_lit_comp("") },
|
||||
@@ -227,6 +227,7 @@ DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[14] =
|
||||
{ str8_lit_comp("only"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*1)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME(only) , DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(only) , 0, 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("omit"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*1)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME(omit) , DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(omit) , 0, 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("no_addr"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(no_addr) , 0, 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("checkbox"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(checkbox) , 0, str8_lit_comp("") },
|
||||
{ str8_lit_comp("rgba"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(rgba) , DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(rgba) , str8_lit_comp("") },
|
||||
{ str8_lit_comp("text"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, 0, DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(text) , str8_lit_comp("text_view_rule") },
|
||||
{ str8_lit_comp("disasm"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, 0, DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(disasm) , str8_lit_comp("disasm_view_rule") },
|
||||
|
||||
@@ -295,6 +295,7 @@ DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(hex);
|
||||
DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(only);
|
||||
DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(omit);
|
||||
DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr);
|
||||
DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox);
|
||||
DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba);
|
||||
DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(bitmap);
|
||||
DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(geo);
|
||||
|
||||
Reference in New Issue
Block a user