示例#1
0
        private (int leftSpan, int rightSpan) BuildChildNodes([NotNull] TreeNode node, [NotNull] TreeUiNode internalNode)
        {
            if (node.IsInternalNode == false)
            {
                return(0, 0);
            }

            var left     = node.Left;
            var leftNode = TreeUiNode.Create(left, internalNode, columnOffset: -1);

            _controlNodes.Add(leftNode);

            var right     = node.Right;
            var rightNode = TreeUiNode.Create(right, internalNode, columnOffset: 1);

            _controlNodes.Add(rightNode);

            var leftEdge = TreeUiEdge.CreateEdge(internalNode, leftNode);

            _edges.Add(leftEdge);

            var rightEdge = TreeUiEdge.CreateEdge(internalNode, rightNode);

            _edges.Add(rightEdge);

            var leftSpan  = BuildChildNodes(left, leftNode);
            var rightSpan = BuildChildNodes(right, rightNode);

            return(AccomodateSpans(internalNode, leftNode, leftSpan, rightNode, rightSpan));
        }
        public static TreeUiEdge CreateEdge([NotNull] TreeUiNode upperNode, [NotNull] TreeUiNode lowerNode)
        {
            var edge = new TreeUiEdge();

            edge.UpperNode = upperNode;
            edge.LowerNode = lowerNode;
            return(edge);
        }
示例#3
0
        private void BuildNodes()
        {
            var root        = _tree.Root;
            var rootControl = new TreeUiNode(null)
            {
                Node = root
            };

            rootControl.Column = 0;
            rootControl.Row    = 0;

            _controlNodes.Add(rootControl);
            (int leftSpan, int rightSpan) = BuildChildNodes(root, rootControl);
            SetGridCoordinates(rightSpan - leftSpan + 1);
        }
示例#4
0
 private (int, int) AccomodateSpans([NotNull] TreeUiNode parent,
                                    [NotNull] TreeUiNode left, (int, int) leftSpan,