Exemple #1
0
        private void DrawNode(Node node, int depth, bool collapse)
        {
            ToggleState expanded = (ToggleState)node.CustomFlags;

            if (depth >= _skipLevels && !(collapse && depth > 0))
            {
                _nodesCount++;

                if (_nodesCount > _startIndex && _nodesCount <= _startIndex + MaxRows)
                {
                    using (new GUILayout.HorizontalScope())
                    {
                        if (!node.hasChildren)
                        {
                            expanded = ToggleState.None;
                        }
                        else if (node.CustomFlags == (int)ToggleState.None)
                        {
                            expanded = ToggleState.Off;
                        }
                        node.CustomFlags = (int)expanded;

                        // title
                        GUILayout.Space(DepthDelta * (depth - _skipLevels));
                        GUIHelper.ToggleButton(ref expanded,
                                               GetPrefix(node.NodeType).Color(RGBA.grey) +
                                               node.Name + " : " + node.Type.Name.Color(
                                                   node.IsBaseType ? RGBA.grey :
                                                   node.IsGameObject ? RGBA.magenta :
                                                   node.IsEnumerable ? RGBA.cyan : RGBA.orange),
                                               () => node.CustomFlags = (int)ToggleState.On,
                                               () => node.CustomFlags = (int)ToggleState.Off,
                                               _buttonStyle, GUILayout.ExpandWidth(false), GUILayout.MinWidth(TitleMinWidth));
                        ;

                        // value
                        Color originalColor = GUI.contentColor;
                        GUI.contentColor = node.IsException ? Color.red : node.IsNull ? Color.grey : originalColor;
                        GUILayout.TextArea(node.ValueText);
                        GUI.contentColor = originalColor;

                        // instance type
                        if (node.InstType != null && node.InstType != node.Type)
                        {
                            GUILayout.Label(node.InstType.Name.Color(RGBA.yellow), _buttonStyle, GUILayout.ExpandWidth(false));
                        }
                    }
                }
            }

            if (collapse)
            {
                node.CustomFlags = (int)ToggleState.Off;
            }

            // children
            if (expanded.IsOn())
            {
                DrawChildren(node, depth + 1, collapse);
            }

            string GetPrefix(NodeType nodeType)
            {
                switch (nodeType)
                {
                case NodeType.Component:
                    return("[c] ");

                case NodeType.Item:
                    return("[i] ");

                case NodeType.Field:
                    return("[f] ");

                case NodeType.Property:
                    return("[p] ");

                default:
                    return(string.Empty);
                }
            }
        }