public void AddNodes(NodeComponent nodeComponent, TreeViewItem parentItem, IList <TreeViewItem> rows, bool isChildren = true) { if (nodeTreesMap.TryGetValue(nodeComponent, out var childItem)) { var tree = new HierarchyRefNodeTree(childItem, -1); if (isChildren) { parentItem.AddChild(tree); } else { parentItem.parent.AddChild(tree); } rows.Add(tree); return; } var drawer = HierarchyDrawer.FindDrawer(nodeComponent.GetType()); drawer.manager = this; //Create Node Tree childItem = drawer.CreateNodeTree(nodeComponent); if (isChildren) { AddSummary(nodeComponent.comment, childItem, parentItem, rows); parentItem.AddChild(childItem); } else { AddSummary(nodeComponent.comment, childItem, parentItem.parent, rows); parentItem.parent.AddChild(childItem); } rows.Add(childItem); nodeTreesMap[nodeComponent] = childItem; drawer.AddChildNodes(nodeComponent, childItem, rows); }
public bool AddNodeTree(MemberData member, TreeViewItem parentTree, IList <TreeViewItem> rows, bool isChildren = true) { if (member.isAssigned && member.IsTargetingPinOrNode) { if (member.targetType == MemberData.TargetType.FlowNode) { Node n = member.GetTargetNode(); if (n != null) { AddNodes(n, parentTree, rows, isChildren); return(true); } } else if (member.targetType == MemberData.TargetType.FlowInput) { Node n = member.GetTargetNode(); var flow = member.Invoke(null) as FlowInput; if (n != null && flow != null) { bool flag = false; if (!flowPortsMap.TryGetValue(flow, out var flowTree)) { flag = true; flowTree = new HierarchyPortTree( n, flow, uNodeEditorUtility.GetUIDFromString($"{n.GetHashCode()}:FI={member.startName}"), -1, $"{n.GetNodeName()} ( {ObjectNames.NicifyVariableName(flow.name)} )") { icon = uNodeEditorUtility.GetTypeIcon(n.GetNodeIcon()) as Texture2D }; flowPortsMap[flow] = flowTree; } if (isChildren) { parentTree.AddChild(flowTree); } else { parentTree.parent.AddChild(flowTree); } rows.Add(flowTree); if (flag) { var drawer = HierarchyDrawer.FindDrawer(n.GetType()); drawer.manager = this; drawer.AddChildNodes(n, flowTree, rows); } return(true); } } } return(false); }