/// <summary> /// Renders the node tree and process rendering attributes /// </summary> /// <param name="node"></param> void renderNode(DTInspectorNode node) { if (serializedObject == null) { return; } bool guistate = GUI.enabled; DTInspectorNode item; for (int i = 0; i < node.Items.Count; i++) { item = node[i]; item.serializedObject = serializedObject; if (item.Disabled) { GUI.enabled = false; } if (item is DTFieldNode) { DTFieldNode field = (DTFieldNode)item; field.serializedProperty = serializedObject.FindProperty(field.SerializedPropertyPath); if (field.serializedProperty == null) { return; } field.Calculate(); if (field.Visible) { foreach (var act in item.Actions) { if (act.Position == ActionAttribute.ActionPositionEnum.Above) { NodeRenderer.RenderAction(item, act, this, Target); } } if (field.ArrayEx != null) { field.ArrayEx.serializedProperty = field.serializedProperty; field.ArrayEx.DoLayoutList(); } else { NodeRenderer.RenderField(field); field.raiseOnRender(); } foreach (var act in item.Actions) { if (act.Position == ActionAttribute.ActionPositionEnum.Below) { NodeRenderer.RenderAction(item, act, this, Target); } } } } else if (item is DTGroupNode) { var group = (DTGroupNode)item; group.Calculate(); if (group.Visible) { foreach (var act in item.Actions) { if (act.Position == ActionAttribute.ActionPositionEnum.Above) { NodeRenderer.RenderAction(item, act, this, Target); } } if (group.Disabled) { GUI.enabled = false; } switch (item.RenderAs) { case DTInspectorNode.RenderAsEnum.Section: NodeRenderer.RenderSectionHeader(group); if (group.ContentVisible) { renderNode(group); group.raiseOnRender(); } NodeRenderer.RenderSectionFooter(group); break; case DTInspectorNode.RenderAsEnum.TabBar: NodeRenderer.RenderTabBarHeader(group, (group.MaxItemsPerRow == -1) ? group.Items.Count:group.MaxItemsPerRow); if (group.SelectedIndex > -1) { renderNode(group[group.SelectedIndex]); group[group.SelectedIndex].raiseOnRender(); } NodeRenderer.RenderTabBarFooter(group); break; default: if (group.ContentVisible) { renderNode(group); } break; } foreach (var act in item.Actions) { if (act.Position == ActionAttribute.ActionPositionEnum.Below) { NodeRenderer.RenderAction(item, act, this, Target); } } } } GUI.enabled = guistate; if (item.NeedRepaint) { item.NeedRepaint = false; NeedRepaint = true; } } }