private int CalculateInsertionIndexBasedOnSiblings(LayoutVertexBase vertex, LayoutVertexBase[] siblingsInLayer, IReadOnlyLayoutVertexLayers layers) { var followingSiblingInLayer = siblingsInLayer.FirstOrDefault(i => Precedes(vertex, i)); return(followingSiblingInLayer != null ? layers.GetIndexInLayer(followingSiblingInLayer) : layers.GetIndexInLayer(siblingsInLayer.Last()) + 1); }
private int CalculateInsertionIndexBasedOnParent(int targetLayer, LayoutVertexBase parentVertex, IReadOnlyLayoutVertexLayers layers) { var parentLayer = layers.GetLayer(parentVertex); var parentIndexInLayer = layers.GetIndexInLayer(parentVertex); var followingParent = GetFollowingParent(parentLayer, parentIndexInLayer, layers); if (followingParent == null) { return(layers.GetLayer(targetLayer).Count); } var firstChildOfFollowingParent = _properLayoutGraph.GetPrimaryChildren(followingParent) .Where(layers.HasLocation).OrderBy(layers.GetIndexInLayer).First(); return(layers.GetIndexInLayer(firstChildOfFollowingParent)); }
private LayoutVertexBase GetFollowingParent(IReadOnlyLayoutVertexLayer layer, int index, IReadOnlyLayoutVertexLayers layers) { return(layer.FirstOrDefault(i => layers.GetIndexInLayer(i) > index && _properLayoutGraph.GetPrimaryChildren(i).Any(layers.HasLocation))); }