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 }); } }