Example #1
0
        private void CreateSubTree(FindUsagePathElement element, IEnumerable <AbstractUsageElement> data, int startId)
        {
            var fileNames     = new Dictionary <string, FindUsagePathElement>();
            var curFileNameId = 0;

            foreach (var usageElement in data)
            {
                FindUsagePathElement current = element;

                var filePath     = usageElement.FilePath;
                var dataFileName = filePath.Split('/').Last();
                if (!fileNames.ContainsKey(filePath))
                {
                    current = current.CreateChild(new FindUsagePathElement(curFileNameId++)
                    {
                        id   = startId++, displayName = dataFileName,
                        icon = (Texture2D)EditorGUIUtility.IconContent(usageElement.StartNodeImage).image
                    });
                    fileNames.Add(filePath, current);
                }
                else
                {
                    current = fileNames[filePath];
                }

                var pathLength = usageElement.Path.Length;
                for (int i = 0; i < pathLength; i++)
                {
                    var name = usageElement.Path[i];
                    if (i + 1 == pathLength)
                    {
                        var id = startId++;
                        findResultItems[id] = new FindUsagesTreeViewItem(usageElement.RootIndices[i], usageElement)
                        {
                            id          = id,
                            displayName = name,
                            icon        = (Texture2D)EditorGUIUtility.IconContent(usageElement.TerminalNodeImage).image
                        };
                        current.AddChild(findResultItems[id]);
                    }
                    else
                    {
                        var rootIndex = usageElement.RootIndices[i];
                        if (!current.HasChild(rootIndex))
                        {
                            current = current.CreateChild(new FindUsagePathElement(rootIndex)
                            {
                                id   = startId++, displayName = name,
                                icon = (Texture2D)EditorGUIUtility.IconContent(usageElement.NodeImage).image
                            });
                        }
                        else
                        {
                            current = current.GetChild(rootIndex);
                        }
                    }
                }
            }
        }