mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-24 16:37:51 +00:00
correctly use all schemas (including inherited ones) when doing lookups/evaluations; shift enabled to using evaluation path rather than just checking the value string; fix visualization of inherited schema values (e.g. font sizes in tabs)
This commit is contained in:
@@ -1204,3 +1204,25 @@ md_debug_string_list_from_tree(Arena *arena, MD_Node *root)
|
||||
}
|
||||
return strings;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Node Pointer List Functions
|
||||
|
||||
internal void
|
||||
md_node_ptr_list_push(Arena *arena, MD_NodePtrList *list, MD_Node *node)
|
||||
{
|
||||
MD_NodePtrNode *n = push_array(arena, MD_NodePtrNode, 1);
|
||||
n->v = node;
|
||||
SLLQueuePush(list->first, list->last, n);
|
||||
list->count += 1;
|
||||
}
|
||||
|
||||
internal void
|
||||
md_node_ptr_list_push_front(Arena *arena, MD_NodePtrList *list, MD_Node *node)
|
||||
{
|
||||
MD_NodePtrNode *n = push_array(arena, MD_NodePtrNode, 1);
|
||||
n->v = node;
|
||||
SLLQueuePushFront(list->first, list->last, n);
|
||||
list->count += 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -202,6 +202,21 @@ struct MD_NodeRec
|
||||
S32 pop_count;
|
||||
};
|
||||
|
||||
typedef struct MD_NodePtrNode MD_NodePtrNode;
|
||||
struct MD_NodePtrNode
|
||||
{
|
||||
MD_NodePtrNode *next;
|
||||
MD_Node *v;
|
||||
};
|
||||
|
||||
typedef struct MD_NodePtrList MD_NodePtrList;
|
||||
struct MD_NodePtrList
|
||||
{
|
||||
MD_NodePtrNode *first;
|
||||
MD_NodePtrNode *last;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Text -> Tokens Types
|
||||
|
||||
@@ -322,4 +337,10 @@ internal MD_ParseResult md_parse_from_text(Arena *arena, String8 filename, Strin
|
||||
|
||||
internal String8List md_debug_string_list_from_tree(Arena *arena, MD_Node *root);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Node Pointer List Functions
|
||||
|
||||
internal void md_node_ptr_list_push(Arena *arena, MD_NodePtrList *list, MD_Node *node);
|
||||
internal void md_node_ptr_list_push_front(Arena *arena, MD_NodePtrList *list, MD_Node *node);
|
||||
|
||||
#endif // MDESK_H
|
||||
|
||||
@@ -606,7 +606,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[213] =
|
||||
{ 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(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}},
|
||||
};
|
||||
|
||||
struct {String8 string; RD_Binding binding;} rd_default_binding_table[109] =
|
||||
struct {String8 string; RD_Binding binding;} rd_default_binding_table[107] =
|
||||
{
|
||||
{str8_lit_comp("kill_all"), {OS_Key_F5, 0 |OS_Modifier_Shift }},
|
||||
{str8_lit_comp("step_into_inst"), {OS_Key_F11, 0 |OS_Modifier_Alt}},
|
||||
@@ -620,10 +620,8 @@ struct {String8 string; RD_Binding binding;} rd_default_binding_table[109] =
|
||||
{str8_lit_comp("step_over"), {OS_Key_F10, 0 }},
|
||||
{str8_lit_comp("run_to_line"), {OS_Key_F10, 0 |OS_Modifier_Ctrl }},
|
||||
{str8_lit_comp("set_next_statement"), {OS_Key_F10, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
||||
{str8_lit_comp("inc_ui_font_scale"), {OS_Key_Equal, 0 |OS_Modifier_Alt}},
|
||||
{str8_lit_comp("dec_ui_font_scale"), {OS_Key_Minus, 0 |OS_Modifier_Alt}},
|
||||
{str8_lit_comp("inc_code_font_scale"), {OS_Key_Equal, 0 |OS_Modifier_Shift |OS_Modifier_Alt}},
|
||||
{str8_lit_comp("dec_code_font_scale"), {OS_Key_Minus, 0 |OS_Modifier_Shift |OS_Modifier_Alt}},
|
||||
{str8_lit_comp("inc_font_size"), {OS_Key_Equal, 0 |OS_Modifier_Alt}},
|
||||
{str8_lit_comp("dec_font_size"), {OS_Key_Minus, 0 |OS_Modifier_Alt}},
|
||||
{str8_lit_comp("window"), {OS_Key_N, 0 |OS_Modifier_Ctrl |OS_Modifier_Shift }},
|
||||
{str8_lit_comp("toggle_fullscreen"), {OS_Key_Return, 0 |OS_Modifier_Ctrl }},
|
||||
{str8_lit_comp("new_panel_right"), {OS_Key_P, 0 |OS_Modifier_Ctrl }},
|
||||
|
||||
@@ -788,10 +788,8 @@ RD_DefaultBindingTable:
|
||||
{ "set_next_statement" F10 ctrl shift 0 }
|
||||
|
||||
//- rjf: font sizes
|
||||
{ "inc_ui_font_scale" Equal 0 0 alt }
|
||||
{ "dec_ui_font_scale" Minus 0 0 alt }
|
||||
{ "inc_code_font_scale" Equal 0 shift alt }
|
||||
{ "dec_code_font_scale" Minus 0 shift alt }
|
||||
{ "inc_font_size" Equal 0 0 alt }
|
||||
{ "dec_font_size" Minus 0 0 alt }
|
||||
|
||||
//- rjf: windows
|
||||
{ "window" N ctrl shift 0 }
|
||||
|
||||
+80
-28
@@ -1065,15 +1065,19 @@ rd_color_from_cfg(RD_Cfg *cfg)
|
||||
internal B32
|
||||
rd_disabled_from_cfg(RD_Cfg *cfg)
|
||||
{
|
||||
MD_Node *schema = rd_schema_from_name(cfg->string);
|
||||
MD_Node *enabled_schema = md_child_from_string(schema, str8_lit("enabled"), 0);
|
||||
MD_Node *default_tag = md_tag_from_string(enabled_schema, str8_lit("default"), 0);
|
||||
MD_Node *child_schema = &md_nil_node;
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(cfg->string);
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0 && child_schema == &md_nil_node; n = n->next)
|
||||
{
|
||||
child_schema = md_child_from_string(n->v, str8_lit("enabled"), 0);
|
||||
}
|
||||
MD_Node *default_tag = md_tag_from_string(child_schema, str8_lit("default"), 0);
|
||||
String8 value_string = rd_cfg_child_from_string(cfg, str8_lit("enabled"))->first->string;
|
||||
if(value_string.size == 0)
|
||||
{
|
||||
value_string = default_tag->first->string;
|
||||
}
|
||||
B32 is_enabled = (str8_match(value_string, str8_lit("1"), 0));
|
||||
B32 is_enabled = !!e_value_from_string(value_string).u64;
|
||||
B32 is_disabled = !is_enabled;
|
||||
if(value_string.size == 0)
|
||||
{
|
||||
@@ -1152,19 +1156,19 @@ rd_target_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
return target;
|
||||
}
|
||||
|
||||
internal MD_Node *
|
||||
rd_schema_from_name(String8 name)
|
||||
internal MD_NodePtrList
|
||||
rd_schemas_from_name(String8 name)
|
||||
{
|
||||
MD_Node *schema = &md_nil_node;
|
||||
MD_NodePtrList schemas = {0};
|
||||
for EachElement(idx, rd_name_schema_info_table)
|
||||
{
|
||||
if(str8_match(name, rd_name_schema_info_table[idx].name, 0))
|
||||
{
|
||||
schema = rd_state->schemas[idx];
|
||||
schemas = rd_state->schemas[idx];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return schema;
|
||||
return schemas;
|
||||
}
|
||||
|
||||
internal String8
|
||||
@@ -1207,15 +1211,20 @@ rd_setting_from_name(String8 name)
|
||||
};
|
||||
for EachElement(idx, schema_names)
|
||||
{
|
||||
MD_Node *schema = rd_schema_from_name(schema_names[idx]);
|
||||
MD_Node *setting = md_child_from_string(schema, name, 0);
|
||||
MD_Node *default_tag = md_tag_from_string(setting, str8_lit("default"), 0);
|
||||
if(default_tag != &md_nil_node)
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(schema_names[idx]);
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
|
||||
{
|
||||
result = default_tag->first->string;
|
||||
break;
|
||||
MD_Node *schema = n->v;
|
||||
MD_Node *setting = md_child_from_string(schema, name, 0);
|
||||
MD_Node *default_tag = md_tag_from_string(setting, str8_lit("default"), 0);
|
||||
if(default_tag != &md_nil_node)
|
||||
{
|
||||
result = default_tag->first->string;
|
||||
goto end_default_search;
|
||||
}
|
||||
}
|
||||
}
|
||||
end_default_search:;
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
@@ -1605,8 +1614,12 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
||||
String8 read_data = {0};
|
||||
if(child_key.size != 0)
|
||||
{
|
||||
MD_Node *root_schema = rd_schema_from_name(root_cfg->string);
|
||||
MD_Node *child_schema = md_child_from_string(root_schema, child_key, 0);
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(root_cfg->string);
|
||||
MD_Node *child_schema = &md_nil_node;
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0 && child_schema == &md_nil_node; n = n->next)
|
||||
{
|
||||
child_schema = md_child_from_string(n->v, child_key, 0);
|
||||
}
|
||||
String8 child_type_name = child_schema->first->string;
|
||||
if(str8_match(child_type_name, str8_lit("path_pt"), 0))
|
||||
{
|
||||
@@ -1674,8 +1687,12 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
||||
String8 read_data = {0};
|
||||
if(child_key.size != 0)
|
||||
{
|
||||
MD_Node *root_schema = rd_schema_from_name(ctrl_entity_kind_code_name_table[entity->kind]);
|
||||
MD_Node *child_schema = md_child_from_string(root_schema, child_key, 0);
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(ctrl_entity_kind_code_name_table[entity->kind]);
|
||||
MD_Node *child_schema = &md_nil_node;
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0 && child_schema == &md_nil_node; n = n->next)
|
||||
{
|
||||
child_schema = md_child_from_string(n->v, child_key, 0);
|
||||
}
|
||||
if(str8_match(child_schema->string, str8_lit("exe"), 0) ||
|
||||
str8_match(child_schema->string, str8_lit("label"), 0))
|
||||
{
|
||||
@@ -1790,8 +1807,12 @@ rd_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range)
|
||||
// rjf: perform write, based on child name in schema
|
||||
if(child_key.size != 0)
|
||||
{
|
||||
MD_Node *root_schema = rd_schema_from_name(ctrl_entity_kind_code_name_table[entity->kind]);
|
||||
MD_Node *child_schema = md_child_from_string(root_schema, child_key, 0);
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(ctrl_entity_kind_code_name_table[entity->kind]);
|
||||
MD_Node *child_schema = &md_nil_node;
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0 && child_schema == &md_nil_node; n = n->next)
|
||||
{
|
||||
child_schema = md_child_from_string(n->v, child_key, 0);
|
||||
}
|
||||
if(str8_match(child_schema->string, str8_lit("label"), 0))
|
||||
{
|
||||
result = 1;
|
||||
@@ -2119,7 +2140,7 @@ rd_view_from_eval(RD_Cfg *parent, E_Eval eval)
|
||||
RD_Cfg *view = rd_cfg_child_from_string_or_alloc(parent, schema_name);
|
||||
rd_cfg_child_from_string_or_alloc(view, str8_lit("selected"));
|
||||
{
|
||||
MD_Node *schema = rd_schema_from_name(schema_name);
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(schema_name);
|
||||
E_Expr *primary_expr = eval.expr;
|
||||
E_Expr **args = 0;
|
||||
U64 args_count = 0;
|
||||
@@ -2146,9 +2167,9 @@ rd_view_from_eval(RD_Cfg *parent, E_Eval eval)
|
||||
param_name = arg->first->string;
|
||||
arg_expr = arg->first->next;
|
||||
}
|
||||
else
|
||||
else if(schemas.last != 0)
|
||||
{
|
||||
for MD_EachNode(schema_child, schema->first)
|
||||
for MD_EachNode(schema_child, schemas.last->v->first)
|
||||
{
|
||||
MD_Node *order_tag = md_tag_from_string(schema_child, str8_lit("order"), 0);
|
||||
if(order_tag != &md_nil_node)
|
||||
@@ -8679,11 +8700,11 @@ rd_window_frame(void)
|
||||
ui_eat_event(evt);
|
||||
if(evt->delta_2f32.y < 0)
|
||||
{
|
||||
rd_cmd(RD_CmdKind_IncFontSize);
|
||||
rd_cmd(RD_CmdKind_IncFontSize, .view = 0);
|
||||
}
|
||||
else if(evt->delta_2f32.y > 0)
|
||||
{
|
||||
rd_cmd(RD_CmdKind_DecFontSize);
|
||||
rd_cmd(RD_CmdKind_DecFontSize, .view = 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10903,10 +10924,41 @@ rd_init(CmdLine *cmdln)
|
||||
// rjf: set up schemas
|
||||
{
|
||||
U64 schemas_count = ArrayCount(rd_name_schema_info_table);
|
||||
rd_state->schemas = push_array(rd_state->arena, MD_Node *, schemas_count);
|
||||
rd_state->schemas = push_array(rd_state->arena, MD_NodePtrList, schemas_count);
|
||||
for EachIndex(idx, schemas_count)
|
||||
{
|
||||
rd_state->schemas[idx] = md_tree_from_string(rd_state->arena, rd_name_schema_info_table[idx].schema)->first;
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
typedef struct SchemaParseTask SchemaParseTask;
|
||||
struct SchemaParseTask
|
||||
{
|
||||
SchemaParseTask *next;
|
||||
String8 schema_text;
|
||||
};
|
||||
SchemaParseTask start_task = {0, rd_name_schema_info_table[idx].schema};
|
||||
SchemaParseTask *first_task = &start_task;
|
||||
SchemaParseTask *last_task = first_task;
|
||||
for(SchemaParseTask *t = first_task; t != 0; t = t->next)
|
||||
{
|
||||
MD_Node *schema = md_tree_from_string(rd_state->arena, t->schema_text)->first;
|
||||
md_node_ptr_list_push_front(rd_state->arena, &rd_state->schemas[idx], schema);
|
||||
for MD_EachNode(tag, schema->first_tag)
|
||||
{
|
||||
if(str8_match(tag->string, str8_lit("inherit"), 0))
|
||||
{
|
||||
for EachIndex(idx2, schemas_count)
|
||||
{
|
||||
if(str8_match(rd_name_schema_info_table[idx2].name, tag->first->string, 0))
|
||||
{
|
||||
SchemaParseTask *new_task = push_array(scratch.arena, SchemaParseTask, 1);
|
||||
SLLQueuePush(first_task, last_task, new_task);
|
||||
new_task->schema_text = rd_name_schema_info_table[idx2].schema;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -598,7 +598,7 @@ struct RD_State
|
||||
String8 project_path;
|
||||
|
||||
// rjf: schema table
|
||||
MD_Node **schemas;
|
||||
MD_NodePtrList *schemas;
|
||||
|
||||
// rjf: default theme table
|
||||
MD_Node *theme_preset_trees[RD_ThemePreset_COUNT];
|
||||
@@ -863,7 +863,7 @@ internal String8 rd_expr_from_cfg(RD_Cfg *cfg);
|
||||
internal String8 rd_path_from_cfg(RD_Cfg *cfg);
|
||||
internal D_Target rd_target_from_cfg(Arena *arena, RD_Cfg *cfg);
|
||||
|
||||
internal MD_Node *rd_schema_from_name(String8 name);
|
||||
internal MD_NodePtrList rd_schemas_from_name(String8 name);
|
||||
|
||||
internal String8 rd_setting_from_name(String8 name);
|
||||
#define rd_setting_b32_from_name(name) (str8_match(rd_setting_from_name(name), str8_lit("1"), 0))
|
||||
|
||||
+14
-30
@@ -277,20 +277,12 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(registers)
|
||||
////////////////////////////////
|
||||
//~ rjf: Schema Type Hooks
|
||||
|
||||
typedef struct RD_SchemaNode RD_SchemaNode;
|
||||
struct RD_SchemaNode
|
||||
{
|
||||
RD_SchemaNode *next;
|
||||
MD_Node *schema;
|
||||
};
|
||||
|
||||
typedef struct RD_SchemaIRExt RD_SchemaIRExt;
|
||||
struct RD_SchemaIRExt
|
||||
{
|
||||
RD_Cfg *cfg;
|
||||
CTRL_Entity *entity;
|
||||
RD_SchemaNode *first_schema;
|
||||
RD_SchemaNode *last_schema;
|
||||
MD_NodePtrList schemas;
|
||||
};
|
||||
|
||||
E_TYPE_IREXT_FUNCTION_DEF(schema)
|
||||
@@ -303,21 +295,9 @@ E_TYPE_IREXT_FUNCTION_DEF(schema)
|
||||
E_Interpretation interpret = e_interpret(bytecode);
|
||||
E_TypeKey type_key = irtree->type_key;
|
||||
E_Type *type = e_type_from_key__cached(type_key);
|
||||
MD_Node *schema = rd_schema_from_name(type->name);
|
||||
ext->cfg = rd_cfg_from_eval_space(interpret.space);
|
||||
ext->entity = rd_ctrl_entity_from_eval_space(interpret.space);
|
||||
for MD_EachNode(tag, schema->first_tag)
|
||||
{
|
||||
if(str8_match(tag->string, str8_lit("inherit"), 0))
|
||||
{
|
||||
RD_SchemaNode *n = push_array(arena, RD_SchemaNode, 1);
|
||||
n->schema = rd_schema_from_name(tag->first->string);
|
||||
SLLQueuePush(ext->first_schema, ext->last_schema, n);
|
||||
}
|
||||
}
|
||||
RD_SchemaNode *n = push_array(arena, RD_SchemaNode, 1);
|
||||
n->schema = schema;
|
||||
SLLQueuePush(ext->first_schema, ext->last_schema, n);
|
||||
ext->schemas = rd_schemas_from_name(type->name);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
E_IRExt result = {ext};
|
||||
@@ -331,9 +311,9 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema)
|
||||
if(expr->kind == E_ExprKind_MemberAccess)
|
||||
{
|
||||
MD_Node *child_schema = &md_nil_node;
|
||||
for(RD_SchemaNode *n = ext->first_schema; n != 0; n = n->next)
|
||||
for(MD_NodePtrNode *n = ext->schemas.first; n != 0; n = n->next)
|
||||
{
|
||||
for MD_EachNode(child, n->schema->first)
|
||||
for MD_EachNode(child, n->v->first)
|
||||
{
|
||||
if(str8_match(child->string, expr->first->next->string, 0))
|
||||
{
|
||||
@@ -512,9 +492,9 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(schema)
|
||||
ExpandChildNode *first_child_node = 0;
|
||||
ExpandChildNode *last_child_node = 0;
|
||||
U64 child_count = 0;
|
||||
for(RD_SchemaNode *n = ext->first_schema; n != 0; n = n->next)
|
||||
for(MD_NodePtrNode *n = ext->schemas.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *schema = n->schema;
|
||||
MD_Node *schema = n->v;
|
||||
for MD_EachNode(child, schema->first)
|
||||
{
|
||||
if(!md_node_has_tag(child, str8_lit("no_expand"), 0))
|
||||
@@ -599,11 +579,15 @@ E_TYPE_IREXT_FUNCTION_DEF(cfgs)
|
||||
//- rjf: gather commands
|
||||
String8List cmds_list = {0};
|
||||
{
|
||||
MD_Node *schema = rd_schema_from_name(cfg_name);
|
||||
MD_Node *collection_cmds_root = md_tag_from_string(schema, str8_lit("collection_commands"), 0);
|
||||
for MD_EachNode(cmd, collection_cmds_root->first)
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(cfg_name);
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
|
||||
{
|
||||
str8_list_push(arena, &cmds_list, cmd->string);
|
||||
MD_Node *schema = n->v;
|
||||
MD_Node *collection_cmds_root = md_tag_from_string(schema, str8_lit("collection_commands"), 0);
|
||||
for MD_EachNode(cmd, collection_cmds_root->first)
|
||||
{
|
||||
str8_list_push(arena, &cmds_list, cmd->string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+50
-46
@@ -1169,58 +1169,62 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
{
|
||||
RD_Cfg *cfg = evalled_cfg;
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Expr, .flags = RD_WatchCellFlag_Button, .pct = 1.f, .fstrs = rd_title_fstrs_from_cfg(arena, cfg));
|
||||
MD_Node *schema = rd_schema_from_name(cfg->string);
|
||||
MD_Node *cmds_root = md_tag_from_string(schema, str8_lit("commands"), 0);
|
||||
for MD_EachNode(cmd, cmds_root->first)
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(cfg->string);
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 cmd_name = cmd->string;
|
||||
RD_CmdKind cmd_kind = rd_cmd_kind_from_string(cmd_name);
|
||||
switch(cmd_kind)
|
||||
MD_Node *schema = n->v;
|
||||
MD_Node *cmds_root = md_tag_from_string(schema, str8_lit("commands"), 0);
|
||||
for MD_EachNode(cmd, cmds_root->first)
|
||||
{
|
||||
default:{}break;
|
||||
case RD_CmdKind_EnableCfg:
|
||||
String8 cmd_name = cmd->string;
|
||||
RD_CmdKind cmd_kind = rd_cmd_kind_from_string(cmd_name);
|
||||
switch(cmd_kind)
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(!is_disabled)
|
||||
default:{}break;
|
||||
case RD_CmdKind_EnableCfg:
|
||||
{
|
||||
cmd_kind = RD_CmdKind_DisableCfg;
|
||||
}
|
||||
}break;
|
||||
case RD_CmdKind_DisableCfg:
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(!is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_DisableCfg;
|
||||
}
|
||||
}break;
|
||||
case RD_CmdKind_DisableCfg:
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_EnableCfg;
|
||||
}
|
||||
}break;
|
||||
case RD_CmdKind_SelectCfg:
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(!is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_DeselectCfg;
|
||||
}
|
||||
}break;
|
||||
case RD_CmdKind_DeselectCfg:
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_SelectCfg;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
if(cmd_kind == RD_CmdKind_EnableCfg || cmd_kind == RD_CmdKind_DisableCfg)
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_EnableCfg;
|
||||
}
|
||||
}break;
|
||||
case RD_CmdKind_SelectCfg:
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .flags = RD_WatchCellFlag_Background,
|
||||
.px = floor_f32(ui_top_font_size()*6.f),
|
||||
.string = str8_lit("($expr).enabled"));
|
||||
}
|
||||
else if(cmd_kind != RD_CmdKind_Null)
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(!is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_DeselectCfg;
|
||||
}
|
||||
}break;
|
||||
case RD_CmdKind_DeselectCfg:
|
||||
{
|
||||
B32 is_disabled = rd_disabled_from_cfg(cfg);
|
||||
if(is_disabled)
|
||||
{
|
||||
cmd_kind = RD_CmdKind_SelectCfg;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
if(cmd_kind == RD_CmdKind_EnableCfg || cmd_kind == RD_CmdKind_DisableCfg)
|
||||
{
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .flags = RD_WatchCellFlag_Background,
|
||||
.px = floor_f32(ui_top_font_size()*6.f),
|
||||
.string = str8_lit("($expr).enabled"));
|
||||
}
|
||||
else if(cmd_kind != RD_CmdKind_Null)
|
||||
{
|
||||
String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string;
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .flags = RD_WatchCellFlag_ActivateWithSingleClick|RD_WatchCellFlag_Button, .px = floor_f32(ui_top_font_size()*4.f), .string = push_str8f(arena, "query:commands.%S", cmd_name));
|
||||
String8 cmd_name = rd_cmd_kind_info_table[cmd_kind].string;
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, .flags = RD_WatchCellFlag_ActivateWithSingleClick|RD_WatchCellFlag_Button, .px = floor_f32(ui_top_font_size()*4.f), .string = push_str8f(arena, "query:commands.%S", cmd_name));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1777,7 +1777,7 @@ ui_layout_enforce_constraints__in_place_rec(UI_Box *root, Axis2 axis)
|
||||
|
||||
// rjf: if we have a violation, we need to subtract some amount from all children
|
||||
F32 violation = total_size - total_allowed_size;
|
||||
if(violation > 0)
|
||||
if(violation > 0 && total_weighted_size > 0)
|
||||
{
|
||||
// rjf: figure out how much we can take in totality
|
||||
F32 child_fixup_sum = 0;
|
||||
|
||||
Reference in New Issue
Block a user