public override void FetchData() { var rootLevel = new FDTreeHierarchyLevel(0, 0, string.Empty, null); // Hierarchy levels of a tree being built var eventStack = new List <FDTreeHierarchyLevel>(); eventStack.Add(rootLevel); int hierarchyIDCounter = -1; for (var i = 0; i < m_FrameEvents.Length; ++i) { // This will be a slash-delimited string, e.g. Foo/Bar/Baz. // Add "/" in front to account for the single (invisible) root item // that the TreeView always has. string context = "/" + (FrameDebuggerUtility.GetFrameEventInfoName(i) ?? string.Empty); string[] names = context.Split('/'); // find matching hierarchy level int level = 0; while (level < eventStack.Count && level < names.Length) { if (names[level] != eventStack[level].item.displayName) { break; } ++level; } // close all the further levels from previous events in the stack while (eventStack.Count > 0 && eventStack.Count > level) { CloseLastHierarchyLevel(eventStack, i); } // add all further levels for current event for (var j = level; j < names.Length; ++j) { var parent = eventStack[eventStack.Count - 1]; var newLevel = new FDTreeHierarchyLevel(eventStack.Count - 1, --hierarchyIDCounter, names[j], parent.item); parent.children.Add(newLevel.item); eventStack.Add(newLevel); } // add leaf event to current level var eventGo = FrameDebuggerUtility.GetFrameEventGameObject(i); var displayName = eventGo ? " " + eventGo.name : string.Empty; FDTreeHierarchyLevel parentEvent = eventStack[eventStack.Count - 1]; var leafEventID = i + 1; var item = new FDTreeViewItem(leafEventID, eventStack.Count - 1, parentEvent.item, displayName); item.m_FrameEvent = m_FrameEvents[i]; parentEvent.children.Add(item); ++parentEvent.item.m_ChildEventCount; } while (eventStack.Count > 0) { CloseLastHierarchyLevel(eventStack, m_FrameEvents.Length); } m_RootItem = rootLevel.item; }
public void SelectFrameEventIndex(int eventIndex) { int[] selection = this.m_TreeView.GetSelection(); if (selection.Length > 0) { FDTreeViewItem item = this.m_TreeView.FindNode(selection[0]) as FDTreeViewItem; if ((item != null) && (eventIndex == item.m_EventIndex)) { return; } } int[] selectedIDs = new int[] { eventIndex }; this.m_TreeView.SetSelection(selectedIDs, true); }
private void SelectionChanged(int[] selectedIDs) { if (selectedIDs.Length >= 1) { int id = selectedIDs[0]; int newLimit = id; if (newLimit <= 0) { FDTreeViewItem item = this.m_TreeView.FindNode(id) as FDTreeViewItem; if (item != null) { newLimit = item.m_EventIndex; } } if (newLimit > 0) { this.m_FrameDebugger.ChangeFrameEventLimit(newLimit); } } }
public FDTreeViewItem(int id, int depth, FDTreeViewItem parent, string displayName) : base(id, depth, parent, displayName) { m_EventIndex = id; }
internal FDTreeHierarchyLevel(int depth, int id, string name, FDTreeViewItem parent) { item = new FDTreeViewItem(id, depth, parent, name); children = new List <TreeViewItem>(); }