private static LayoutData CreateLayoutData(IGraph tree, INode centerNode) { var data = new TreeLayoutData { NodePlacers = { Delegate = delegate(INode node) { var employee = node.Tag as XmlElement; if (tree.OutDegree(node) == 0 || employee == null) { return(null); } var layout = employee.GetAttribute("layout"); switch (layout) { case "rightHanging": return(new AssistantNodePlacer() { ChildNodePlacer = new DefaultNodePlacer(ChildPlacement.VerticalToRight, RootAlignment.LeadingOnBus, 30, 30) { RoutingStyle = RoutingStyle.ForkAtRoot } }); case "leftHanging": return(new AssistantNodePlacer() { ChildNodePlacer = new DefaultNodePlacer(ChildPlacement.VerticalToLeft, RootAlignment.LeadingOnBus, 30, 30) { RoutingStyle = RoutingStyle.ForkAtRoot } }); case "bothHanging": return(new AssistantNodePlacer() { ChildNodePlacer = new LeftRightNodePlacer() { PlaceLastOnBottom = false } }); default: return(new AssistantNodePlacer() { ChildNodePlacer = new DefaultNodePlacer(ChildPlacement.HorizontalDownward, RootAlignment.Median, 30, 30) }); } } }, AssistantNodes = { Delegate = delegate(INode node) { var employee = node.Tag as XmlElement; var assistant = employee != null ? employee.Attributes["assistant"] : null; return(assistant != null && assistant.Value == "true"); } } }; return(data.CombineWith(new FixNodeLayoutData { FixedNodes = { Item = centerNode } })); }
private static LayoutData CreateLayoutData(IGraph tree, INode centerNode) { var data = new TreeLayoutData { NodePlacers = { Delegate = delegate(INode node) { var employee = node.Tag as Employee; if (tree.OutDegree(node) == 0 || employee == null) { return(null); } var layout = employee.Layout; switch (layout) { case EmployeeLayout.RightHanging: return(new AssistantNodePlacer { ChildNodePlacer = new DefaultNodePlacer(ChildPlacement.VerticalToRight, RootAlignment.LeadingOnBus, 30, 30) { RoutingStyle = RoutingStyle.ForkAtRoot } }); case EmployeeLayout.LeftHanging: return(new AssistantNodePlacer { ChildNodePlacer = new DefaultNodePlacer(ChildPlacement.VerticalToLeft, RootAlignment.LeadingOnBus, 30, 30) { RoutingStyle = RoutingStyle.ForkAtRoot } }); case EmployeeLayout.BothHanging: return(new AssistantNodePlacer { ChildNodePlacer = new LeftRightNodePlacer() { PlaceLastOnBottom = false } }); default: return(new AssistantNodePlacer { ChildNodePlacer = new DefaultNodePlacer(ChildPlacement.HorizontalDownward, RootAlignment.Median, 30, 30) }); } } }, AssistantNodes = { Delegate = delegate(INode node) { var employee = node.Tag as Employee; return(employee != null && employee.Assistant); } } }; return(data.CombineWith(new FixNodeLayoutData { FixedNodes = { Item = centerNode } })); }