Exemple #1
0
        public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context)
        {
            var tree = new List <SearchTreeEntry>
            {
                new SearchTreeGroupEntry(new GUIContent("Create Node"), 0),
            };

            // Sort menu by alphabetical order and submenus

            var nodeEntries = graphView.FilterCreateNodeMenuEntries().OrderBy(k => k.Key);
            var titlePaths  = new HashSet <string>();

            foreach (var nodeMenuItem in nodeEntries)
            {
                var nodePath = nodeMenuItem.Key;
                var nodeName = nodePath;
                var level    = 0;
                var parts    = nodePath.Split('/');

                if (parts.Length > 1)
                {
                    level++;
                    nodeName = parts[parts.Length - 1];
                    var fullTitleAsPath = "";

                    for (var i = 0; i < parts.Length - 1; i++)
                    {
                        var title = parts[i];
                        fullTitleAsPath += title;
                        level            = i + 1;

                        // Add section title if the node is in subcategory
                        if (!titlePaths.Contains(fullTitleAsPath))
                        {
                            tree.Add(new SearchTreeGroupEntry(new GUIContent(title))
                            {
                                level = level
                            });
                            titlePaths.Add(fullTitleAsPath);
                        }
                    }
                }

                tree.Add(new SearchTreeEntry(new GUIContent(nodeName, icon))
                {
                    level    = level + 1,
                    userData = nodeMenuItem.Value
                });
            }

            return(tree);
        }
        public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context)
        {
            var tree = new List <SearchTreeEntry>
            {
                new SearchTreeGroupEntry(new GUIContent("Create Node"), 0),
            };

            // Sort menu by alphabetical order and submenus

            var nodeEntries = graphView.FilterCreateNodeMenuEntries().OrderBy(k => k.Key);
            var titles      = new HashSet <string>();

            foreach (var nodeMenuItem in nodeEntries)
            {
                string nodePath = nodeMenuItem.Key;
                int    pos      = nodePath.LastIndexOf("/", StringComparison.Ordinal);
                string title    = null;
                int    level    = nodePath.Count(c => c == '/');
                string nodeName = nodePath;

                if (pos > 0)
                {
                    title    = nodePath.Substring(0, pos);
                    nodeName = nodePath.Substring(pos + 1);
                }

                // Add section title if the node is in subcategory
                if (title != null && !titles.Contains(title))
                {
                    level = nodePath.Count(c => c == '/');
                    tree.Add(new SearchTreeGroupEntry(new GUIContent(title))
                    {
                        level = level,
                    });
                    titles.Add(title);
                }

                tree.Add(new SearchTreeEntry(new GUIContent(nodeName, icon))
                {
                    level    = level + 1,
                    userData = nodeMenuItem.Value
                });
            }

            return(tree);
        }
        void CreateStandardNodeMenu(List <SearchTreeEntry> tree)
        {
            var nodeEntries = graphView.FilterCreateNodeMenuEntries().OrderBy(k => k.Key);
            var titlePaths  = new HashSet <string>();

            foreach (var nodeMenuItem in nodeEntries)
            {
                var nodePath = nodeMenuItem.Key;
                var nodeName = nodePath;
                var level    = 0;
                var parts    = nodePath.Split('/');

                if (parts.Length > 1)
                {
                    level++;
                    nodeName = parts[parts.Length - 1];
                    var fullTitleAsPath = "";

                    for (var i = 0; i < parts.Length - 1; i++)
                    {
                        var title = parts[i];
                        fullTitleAsPath += title;
                        level            = i + 1;

                        // Add section title if the node is in subcategory
                        if (!titlePaths.Contains(fullTitleAsPath))
                        {
                            tree.Add(new SearchTreeGroupEntry(new GUIContent(title))
                            {
                                level = level
                            });
                            titlePaths.Add(fullTitleAsPath);
                        }
                    }
                }

                tree.Add(new SearchTreeEntry(new GUIContent(nodeName, icon))
                {
                    level    = level + 1,
                    userData = nodeMenuItem.Value
                });
            }
        }