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;
            }
예제 #2
0
 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);
 }
예제 #3
0
 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>();
 }