int GetItemIdFromRawFrameDataIndexPath(HierarchyFrameDataView m_FrameDataView, List <int> deepestRawSampleIndexPathFound, out int foundDepth, out bool selectedItemsPathIsExpanded) { selectedItemsPathIsExpanded = true; var newSelectedId = m_FrameDataView.GetRootItemID(); var deepestPath = deepestRawSampleIndexPathFound.Count; for (int markerDepth = 0; markerDepth < deepestPath; markerDepth++) { var oldSelectedId = newSelectedId; if (m_FrameDataView.HasItemChildren(newSelectedId)) { // TODO: maybe HierarchyFrameDataView should just have a method GetChildItemByRawFrameDataViewIndex to avoid this List<int> marshalling need... m_FrameDataView.GetItemChildren(newSelectedId, m_ReusableChildrenIds); for (int i = 0; i < m_ReusableChildrenIds.Count; i++) { var childId = m_ReusableChildrenIds[i]; if (m_FrameDataView.ItemContainsRawFrameDataViewIndex(childId, deepestRawSampleIndexPathFound[markerDepth])) { // check if the parent is expanded if (selectedItemsPathIsExpanded && !IsExpanded(newSelectedId)) { selectedItemsPathIsExpanded = false; } newSelectedId = childId; break; } } } if (oldSelectedId == newSelectedId) { // there was no fitting sample in this scope so the path has been cut short here deepestPath = markerDepth; break; } } foundDepth = deepestPath; return(newSelectedId); }