/** * @brief update option cache about child, according to collapse and visible status * @note can be a common function for all option node * @return number of visible elements */ int UI_OptionUpdateCache (uiNode_t* option) { int count = 0; while (option) { int localCount = 0; assert(option->behaviour == ui_optionBehaviour); if (option->invis) { option = option->next; continue; } if (OPTIONEXTRADATA(option).collapsed) { OPTIONEXTRADATA(option).childCount = 0; option = option->next; count++; continue; } if (option->firstChild) localCount = UI_OptionUpdateCache(option->firstChild); OPTIONEXTRADATA(option).childCount = localCount; count += 1 + localCount; option = option->next; } return count; }
static void UI_OptionTreeNodeUpdateCache (uiNode_t * node) { uiNode_t* option = UI_OptionTreeNodeGetFirstOption(node); if (option) EXTRADATA(node).count = UI_OptionUpdateCache(option); }