static VisualNode BreadthFirstEnumaration(ITextTree tree) { var nodeQueue = new Queue <VisualNode>(); var root = new VisualNode { X = 0, Y = 0, TreeNode = tree.Root }; nodeQueue.Enqueue(root); var curDepth = 0; var x = 0; while (nodeQueue.Count > 0) { var node = nodeQueue.Dequeue(); if (curDepth != node.Y) { x = node.X; curDepth = node.Y; } if (node.TreeNode.Children == null) { continue; } node.Children = new List <VisualNode>(); foreach (var tn in node.TreeNode.Children) { var vn = new VisualNode { X = x++, Y = node.Y + 1, TreeNode = tn }; node.Children.Add(vn); nodeQueue.Enqueue(vn); } } return(root); }
private void BuildIndent(VisualNode vn) { if (indent.ContainsKey(vn.Y)) { if (indent[vn.Y] < vn.X + 1) { indent[vn.Y] = vn.X + 1; } } else { indent.Add(vn.Y, vn.X + 1); } if (vn.Children == null) { return; } foreach (var cvn in vn.Children) { BuildIndent(cvn); } }
private Pen GetEdgePen(VisualNode parent, VisualNode child) { return(NeedHighLight(parent.TreeNode.Tree.TreeId, parent.TreeNode.PreorderIndex, child.TreeNode.PreorderIndex) ? highLightEdgePen : normalEdgePen); }
private Pen GetNodePen(VisualNode vn) { return(NeedHighLight(vn.TreeNode.Tree.TreeId, vn.TreeNode.PreorderIndex) ? highLightNodePen : normalNodePen); }
private SolidBrush GetIndexBrush(VisualNode vn) { return(NeedHighLight(vn.TreeNode.Tree.TreeId, vn.TreeNode.PreorderIndex) ? highLightIndexBrush : normalIndexBrush); }