public bool IsVisible() { LevelMetricsTreeElement parent = (LevelMetricsTreeElement)this.parent; if (parent != null) { return(visible && parent.IsVisible()); } else { return(visible); } }
private bool CheckElementInBranch(string objectName, List <LevelMetricsTreeElement> elements, out int index) { index = -1; LevelMetricsTreeElement element = elements.FirstOrDefault(x => x.displayName == objectName); if (element != null) { index = elements.IndexOf(element); return(true); } return(false); }
private void CellGUI(Rect rowRect, LevelMetricsTreeElement item, ref RowGUIArgs args) { CenterRectUsingSingleLineHeight(ref rowRect); Rect toggleRect = new Rect(rowRect); toggleRect.x += GetContentIndent(item) - 14; toggleRect.width = 30; if (toggleRect.xMax < rowRect.xMax) { item.visible = EditorGUI.Toggle(toggleRect, item.visible); } rowRect.x += 20; args.rowRect = rowRect; GUI.enabled = item.IsVisible(); base.RowGUI(args); GUI.enabled = true; }
private List <LevelMetricsTreeElement> CollectTree() { List <LevelMetricsTreeElement> result = new List <LevelMetricsTreeElement>(); LevelMetricsTreeElement root = new LevelMetricsTreeElement() { id = 0, depth = -1, displayName = "root" }; LevelMetricsTreeElement signals = new LevelMetricsTreeElement() { id = 1, displayName = "Signals" }; LevelMetricsTreeElement paths = new LevelMetricsTreeElement() { id = 2, displayName = "Paths" }; root.AddChild(signals); root.AddChild(paths); result.Add(root); result.Add(signals); result.Add(paths); int id = 3; for (int i = 0; i < script.editorSignals.Count; i++) { int objectIndex; List <Signal.Runtime> signalList = script.editorSignals.ElementAt(i).Value; foreach (Signal.Runtime signal in signalList) { if (!CheckElementInBranch(signal.objectName, result, out objectIndex)) { LevelMetricsTreeElement objectRoot = new LevelMetricsTreeElement(); objectRoot.id = id++; objectRoot.displayName = signal.objectName; signals.AddChild(objectRoot); result.Add(objectRoot); objectIndex = result.Count - 1; } signal.treeElement.Reset(); signal.treeElement.displayName = signal.name; signal.treeElement.id = id++; result[objectIndex].AddChild(signal.treeElement); result.Add(signal.treeElement); for (int d = 0; d < signal.Data.Count; d++) { signal.Data[d].treeElement.Reset(); signal.Data[d].treeElement.displayName = string.Format("{0}: {1} at {2}", signal.name, signal.Data[d].count, Utils.FloatToTime(signal.Data[d].time)); signal.Data[d].treeElement.id = id++; signal.treeElement.AddChild(signal.Data[d].treeElement); result.Add(signal.Data[d].treeElement); } } } for (int i = 0; i < script.editorPaths.Count; i++) { int objectIndex; Recordable.Runtime path = script.editorPaths.ElementAt(i).Value; if (!CheckElementInBranch(path.objectName, result.Where(x => !CheckParent("Signals", x)).ToList(), out objectIndex)) { LevelMetricsTreeElement objectRoot = new LevelMetricsTreeElement(); objectRoot.id = id++; objectRoot.displayName = path.objectName; paths.AddChild(objectRoot); result.Add(objectRoot); objectIndex = result.Count - 1; } path.treeElement.Reset(); path.treeElement.displayName = path.name; path.treeElement.id = id++; result[objectIndex].AddChild(path.treeElement); result.Add(path.treeElement); } return(result); }