diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index d6778b22..afba7d71 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -3805,7 +3805,36 @@ df_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range) //- rjf: default -> making commits to entity evaluation default: { - + Temp scratch = scratch_begin(0, 0); + DF_EntityEval *eval = df_eval_from_entity(scratch.arena, entity); + U64 range_dim = dim_1u64(range); + if(range.min == OffsetOf(DF_EntityEval, enabled) && + range_dim >= 1) + { + result = 1; + B32 new_enabled = !!((U8 *)in)[0]; + df_entity_equip_disabled(entity, !new_enabled); + } + else if(range.min == eval->label_off && + range_dim >= 1) + { + result = 1; + String8 new_name = str8_cstring_capped((U8 *)in, (U8 *)in+range_dim); + df_entity_equip_name(entity, new_name); + } + else if(range.min == eval->condition_off && + range_dim >= 1) + { + result = 1; + DF_Entity *condition = df_entity_child_from_kind(entity, DF_EntityKind_Condition); + if(df_entity_is_nil(condition)) + { + condition = df_entity_alloc(entity, DF_EntityKind_Condition); + } + String8 new_name = str8_cstring_capped((U8 *)in, (U8 *)in+range_dim); + df_entity_equip_name(condition, new_name); + } + scratch_end(scratch); }break; //- rjf: process -> commit to process memory @@ -4419,152 +4448,6 @@ df_type_key_is_editable(E_TypeKey type_key) //- rjf: writing values back to child processes -internal B32 -df_commit_eval_value(E_Eval dst_eval, E_Eval src_eval) -{ - B32 result = 0; - Temp scratch = scratch_begin(0, 0); - - //- rjf: unpack arguments - DF_Entity *thread = df_entity_from_handle(df_interact_regs()->thread); - DF_Entity *process = thread->parent; - E_TypeKey dst_type_key = dst_eval.type_key; - E_TypeKey src_type_key = src_eval.type_key; - E_TypeKind dst_type_kind = e_type_kind_from_key(dst_type_key); - E_TypeKind src_type_kind = e_type_kind_from_key(src_type_key); - U64 dst_type_byte_size = e_type_byte_size_from_key(dst_type_key); - U64 src_type_byte_size = e_type_byte_size_from_key(src_type_key); - - //- rjf: get commit data based on destination type - String8 commit_data = {0}; - if(src_eval.msgs.max_kind == E_MsgKind_Null) - { - result = 1; - switch(dst_type_kind) - { - default: - { - // NOTE(rjf): not supported - result = 0; - }break; - - //- rjf: pointers - case E_TypeKind_Ptr: - case E_TypeKind_LRef: - if((E_TypeKind_Char8 <= src_type_kind && src_type_kind <= E_TypeKind_Bool) || src_type_kind == E_TypeKind_Ptr) - { - E_Eval value_eval = e_value_eval_from_eval(src_eval); - commit_data = str8((U8 *)&value_eval.value.u64, dst_type_byte_size); - commit_data = push_str8_copy(scratch.arena, commit_data); - }break; - - //- rjf: integers - case E_TypeKind_Char8: - case E_TypeKind_Char16: - case E_TypeKind_Char32: - case E_TypeKind_S8: - case E_TypeKind_S16: - case E_TypeKind_S32: - case E_TypeKind_S64: - case E_TypeKind_UChar8: - case E_TypeKind_UChar16: - case E_TypeKind_UChar32: - case E_TypeKind_U8: - case E_TypeKind_U16: - case E_TypeKind_U32: - case E_TypeKind_U64: - case E_TypeKind_Bool: - if(E_TypeKind_Char8 <= src_type_kind && src_type_kind <= E_TypeKind_Bool) - { - E_Eval value_eval = e_value_eval_from_eval(src_eval); - commit_data = str8((U8 *)&value_eval.value.u64, dst_type_byte_size); - commit_data = push_str8_copy(scratch.arena, commit_data); - }break; - - //- rjf: float32s - case E_TypeKind_F32: - if((E_TypeKind_Char8 <= src_type_kind && src_type_kind <= E_TypeKind_Bool) || - src_type_kind == E_TypeKind_F32 || - src_type_kind == E_TypeKind_F64) - { - F32 value = 0; - E_Eval value_eval = e_value_eval_from_eval(src_eval); - switch(src_type_kind) - { - case E_TypeKind_F32:{value = value_eval.value.f32;}break; - case E_TypeKind_F64:{value = (F32)value_eval.value.f64;}break; - default:{value = (F32)value_eval.value.s64;}break; - } - commit_data = str8((U8 *)&value, sizeof(F32)); - commit_data = push_str8_copy(scratch.arena, commit_data); - }break; - - //- rjf: float64s - case E_TypeKind_F64: - if((E_TypeKind_Char8 <= src_type_kind && src_type_kind <= E_TypeKind_Bool) || - src_type_kind == E_TypeKind_F32 || - src_type_kind == E_TypeKind_F64) - { - F64 value = 0; - E_Eval value_eval = e_value_eval_from_eval(src_eval); - switch(src_type_kind) - { - case E_TypeKind_F32:{value = (F64)value_eval.value.f32;}break; - case E_TypeKind_F64:{value = value_eval.value.f64;}break; - default:{value = (F64)value_eval.value.s64;}break; - } - commit_data = str8((U8 *)&value, sizeof(F64)); - commit_data = push_str8_copy(scratch.arena, commit_data); - }break; - - //- rjf: enums - case E_TypeKind_Enum: - if(E_TypeKind_Char8 <= src_type_kind && src_type_kind <= E_TypeKind_Bool) - { - E_Eval value_eval = e_value_eval_from_eval(src_eval); - commit_data = str8((U8 *)&value_eval.value.u64, dst_type_byte_size); - commit_data = push_str8_copy(scratch.arena, commit_data); - }break; - } - } - - //- rjf: commit - // TODO(rjf): @spaces -#if 0 - if(result && commit_data.size != 0) - { - if(dst_eval.mode == E_Mode_Offset) - { - switch(dst_eval.space) - { - case E_Space_Regs: - { - CTRL_Unwind unwind = df_query_cached_unwind_from_thread(thread); - Architecture arch = df_architecture_from_entity(thread); - U64 reg_block_size = regs_block_size_from_architecture(arch); - if(unwind.frames.count != 0 && - (0 <= dst_eval.value.u64 && dst_eval.value.u64+commit_data.size < reg_block_size)) - { - void *new_regs = push_array(scratch.arena, U8, reg_block_size); - MemoryCopy(new_regs, unwind.frames.v[0].regs, reg_block_size); - MemoryCopy((U8 *)new_regs+dst_eval.value.u64, commit_data.str, commit_data.size); - result = ctrl_thread_write_reg_block(thread->ctrl_machine_id, thread->ctrl_handle, new_regs); - } - }break; - default: - { - // TODO(rjf): @spaces pick the right process, from the space - ctrl_process_write(process->ctrl_machine_id, process->ctrl_handle, r1u64(dst_eval.value.u64, dst_eval.value.u64+commit_data.size), commit_data.str); - }break; - } - } - } -#endif - - scratch_end(scratch); - return result; -} - internal B32 df_commit_eval_value_string(E_Eval dst_eval, String8 string) { diff --git a/src/df/core/df_core.h b/src/df/core/df_core.h index fc5d4342..4d1bf51a 100644 --- a/src/df/core/df_core.h +++ b/src/df/core/df_core.h @@ -1608,7 +1608,6 @@ internal B32 df_type_key_is_expandable(E_TypeKey type_key); internal B32 df_type_key_is_editable(E_TypeKey type_key); //- rjf: writing values back to child processes -internal B32 df_commit_eval_value(E_Eval dst_eval, E_Eval src_eval); internal B32 df_commit_eval_value_string(E_Eval dst_eval, String8 string); //- rjf: type helpers diff --git a/src/df/core/df_core.mdesk b/src/df/core/df_core.mdesk index 3751ded6..096f442a 100644 --- a/src/df/core/df_core.mdesk +++ b/src/df/core/df_core.mdesk @@ -536,6 +536,7 @@ DF_CoreViewRuleTable: {Only only "only" x - - x "Only Specified Members" x "x:{member}" "Specifies that only the specified members should appear in struct, union, or class evaluations." } {Omit omit "omit" x - - x "Omit Specified Members" x "x:{member}" "Omits a list of member names from appearing in struct, union, or class evaluations." } {NoAddr no_addr "no_addr" x - - - "Disable Address Values" x "" "Displays only what pointers point to, if possible, without the pointer's address value." } + {Checkbox checkbox "checkbox" - - - - "Checkbox" x "" "Displays as a simple integer value as a checkbox, encoding zero or nonzero values." } {RGBA rgba "rgba" - x - x "Color (RGBA)" x "" "Displays as a color, interpreting the data as encoding R, G, B, and A values." } {Text text "text" - x - x "Text" x "x:{'lang':lang, 'size':expr}" "Displays as text." } {Disasm disasm "disasm" - x - x "Disassembly" x "x:{'arch':arch, 'size':expr}" "Displays as disassembled instructions, interpreting the data as raw machine code." } diff --git a/src/df/core/generated/df_core.meta.c b/src/df/core/generated/df_core.meta.c index d94ee73a..e5d1582b 100644 --- a/src/df/core/generated/df_core.meta.c +++ b/src/df/core/generated/df_core.meta.c @@ -482,7 +482,7 @@ DF_CmdSpecInfo df_g_core_cmd_kind_spec_info_table[222] = { str8_lit_comp("log_marker"), str8_lit_comp("Logs a marker in the application log, to denote specific points in time within the log."), str8_lit_comp(""), str8_lit_comp("Log Marker"), (DF_CmdSpecFlag_ListInUI*1)|(DF_CmdSpecFlag_ListInIPCDocs*1), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_AllowFiles*0)|(DF_CmdQueryFlag_AllowFolders*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, }; -DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[18] = +DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[19] = { {str8_lit_comp("default"), str8_lit_comp("Default"), str8_lit_comp(""), str8_lit_comp(""), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(default) , }, {str8_lit_comp("array"), str8_lit_comp("Array"), str8_lit_comp("x:{expr}"), str8_lit_comp("Specifies that a pointer points to N elements, rather than only 1."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*1)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_NAME(array) , 0, }, @@ -496,6 +496,7 @@ DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[18] = {str8_lit_comp("only"), str8_lit_comp("Only Specified Members"), str8_lit_comp("x:{member}"), str8_lit_comp("Specifies that only the specified members should appear in struct, union, or class evaluations."), (DF_CoreViewRuleSpecInfoFlag_Inherited*1)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(only) , }, {str8_lit_comp("omit"), str8_lit_comp("Omit Specified Members"), str8_lit_comp("x:{member}"), str8_lit_comp("Omits a list of member names from appearing in struct, union, or class evaluations."), (DF_CoreViewRuleSpecInfoFlag_Inherited*1)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(omit) , }, {str8_lit_comp("no_addr"), str8_lit_comp("Disable Address Values"), str8_lit_comp(""), str8_lit_comp("Displays only what pointers point to, if possible, without the pointer's address value."), (DF_CoreViewRuleSpecInfoFlag_Inherited*1)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), 0, 0, }, +{str8_lit_comp("checkbox"), str8_lit_comp("Checkbox"), str8_lit_comp(""), str8_lit_comp("Displays as a simple integer value as a checkbox, encoding zero or nonzero values."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), 0, 0, }, {str8_lit_comp("rgba"), str8_lit_comp("Color (RGBA)"), str8_lit_comp(""), str8_lit_comp("Displays as a color, interpreting the data as encoding R, G, B, and A values."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(rgba) , }, {str8_lit_comp("text"), str8_lit_comp("Text"), str8_lit_comp("x:{'lang':lang, 'size':expr}"), str8_lit_comp("Displays as text."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(text) , }, {str8_lit_comp("disasm"), str8_lit_comp("Disassembly"), str8_lit_comp("x:{'arch':arch, 'size':expr}"), str8_lit_comp("Displays as disassembled instructions, interpreting the data as raw machine code."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(disasm) , }, diff --git a/src/df/core/generated/df_core.meta.h b/src/df/core/generated/df_core.meta.h index 7fa1ad37..b8dbf968 100644 --- a/src/df/core/generated/df_core.meta.h +++ b/src/df/core/generated/df_core.meta.h @@ -363,6 +363,7 @@ DF_CoreViewRuleKind_BaseHex, DF_CoreViewRuleKind_Only, DF_CoreViewRuleKind_Omit, DF_CoreViewRuleKind_NoAddr, +DF_CoreViewRuleKind_Checkbox, DF_CoreViewRuleKind_RGBA, DF_CoreViewRuleKind_Text, DF_CoreViewRuleKind_Disasm, diff --git a/src/df/gfx/df_gfx.mdesk b/src/df/gfx/df_gfx.mdesk index 293ebace..79edf31d 100644 --- a/src/df/gfx/df_gfx.mdesk +++ b/src/df/gfx/df_gfx.mdesk @@ -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" } diff --git a/src/df/gfx/df_view_rules.c b/src/df/gfx/df_view_rules.c index 6a1cbc82..acfe15c3 100644 --- a/src/df/gfx/df_view_rules.c +++ b/src/df/gfx/df_view_rules.c @@ -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 diff --git a/src/df/gfx/df_views.c b/src/df/gfx/df_views.c index 63645c7f..06567384 100644 --- a/src/df/gfx/df_views.c +++ b/src/df/gfx/df_views.c @@ -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();} diff --git a/src/df/gfx/df_views.h b/src/df/gfx/df_views.h index 229d3788..5a9577d2 100644 --- a/src/df/gfx/df_views.h +++ b/src/df/gfx/df_views.h @@ -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; }; diff --git a/src/df/gfx/generated/df_gfx.meta.c b/src/df/gfx/generated/df_gfx.meta.c index 64629172..bb56d694 100644 --- a/src/df/gfx/generated/df_gfx.meta.c +++ b/src/df/gfx/generated/df_gfx.meta.c @@ -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") }, diff --git a/src/df/gfx/generated/df_gfx.meta.h b/src/df/gfx/generated/df_gfx.meta.h index c46d529e..cedea42e 100644 --- a/src/df/gfx/generated/df_gfx.meta.h +++ b/src/df/gfx/generated/df_gfx.meta.h @@ -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);