示例#1
0
        private static void FillGraphConnectorNodes(TreeGraphLabelNode originalGraphNode, TreeGraphLabelNode resutLabelNode, TraverseTreeGraphContext context)
        {
            if (originalGraphNode.Children.Count > 0)
            {
                int startX = originalGraphNode.Children[0].X;
                int endX   = originalGraphNode.Children[originalGraphNode.Children.Count - 1].X;

                for (int i = startX; i <= endX; i++)
                {
                    TreeGraphConnectorNode connector = null;

                    TreeGraphNodeBase child = originalGraphNode.Children.Find(c => c.X == i);

                    if (child != null)
                    {
                        if (originalGraphNode.Children.Count == 1)
                        {
                            connector = new TreeGraphConnectorNode(TreeGraphNodeType.VLine, i, originalGraphNode.Y + 1);
                        }
                        else
                        {
                            if (child == originalGraphNode.Children[0])
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.LeftCorner, i, originalGraphNode.Y + 1);
                            }
                            else
                            if (child == originalGraphNode.Children[originalGraphNode.Children.Count - 1])
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.RightCorner, i, originalGraphNode.Y + 1);
                            }
                            else
                            if (child.X == originalGraphNode.X)
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.Cross, i, originalGraphNode.Y + 1);
                            }
                            else
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.Tee, i, originalGraphNode.Y + 1);
                            }
                        }
                    }
                    else
                    {
                        if (i == originalGraphNode.X)
                        {
                            connector = new TreeGraphConnectorNode(TreeGraphNodeType.ReverseTee, i, originalGraphNode.Y + 1);
                        }
                        else
                        {
                            connector = new TreeGraphConnectorNode(TreeGraphNodeType.HLine, i, originalGraphNode.Y + 1);
                        }
                    }

                    context.Width  = Math.Max(context.Width, connector.X + 1);
                    context.Height = Math.Max(context.Height, connector.Y + 1);

                    resutLabelNode.Children.Add(connector);
                }
            }
        }
        private static Control CreateConnectorCell(TreeGraphConnectorNode connector)
        {
            HtmlGenericControl imageContainer = new HtmlGenericControl("div");

            imageContainer.Attributes["class"] = "org-node";

            Image image = new Image();

            image.Attributes["class"] = "org-connector";
            image.ImageUrl = GetConnectorImageUrl(connector.NodeType);

            imageContainer.Controls.Add(image);

            return imageContainer;
        }