Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
 private LayoutVertexBase GetFollowingParent(IReadOnlyLayoutVertexLayer layer, int index,
                                             IReadOnlyLayoutVertexLayers layers)
 {
     return(layer.FirstOrDefault(i => layers.GetIndexInLayer(i) > index &&
                                 _properLayoutGraph.GetPrimaryChildren(i).Any(layers.HasLocation)));
 }