53 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Drawing;
 | |
| using System.Drawing.Drawing2D;
 | |
| using DevComponents.AdvTree.Display;
 | |
| 
 | |
| namespace DevComponents.AdvTree.Display
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Represents the line connector display class.
 | |
| 	/// </summary>
 | |
| 	public class LineConnectorDisplay:NodeConnectorDisplay
 | |
| 	{
 | |
| 		/// <summary>
 | |
| 		/// Draws connector line between two nodes.
 | |
| 		/// </summary>
 | |
| 		/// <param name="info">Connector context information.</param>
 | |
| 		public override void DrawConnector(ConnectorRendererEventArgs info)
 | |
| 		{
 | |
| 			if(info.NodeConnector.LineColor.IsEmpty || info.NodeConnector.LineWidth<=0)
 | |
| 				return;
 | |
| 
 | |
|             Point pStart, pEnd;
 | |
| 
 | |
|             // FromNode is null when connector is rendered for the child node
 | |
|             if (info.FromNode == null)
 | |
|             {
 | |
|                 Rectangle cellBounds = NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds, info.ToNode, info.Offset);
 | |
|                 Rectangle expandBounds = NodeDisplay.GetNodeRectangle(eNodeRectanglePart.ExpandBounds, info.ToNode, info.Offset);
 | |
|                 pStart = new Point(cellBounds.X - 4, cellBounds.Y + cellBounds.Height / 2);
 | |
|                 pEnd = new Point(expandBounds.X + expandBounds.Width / 2, pStart.Y);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 // FromNode is parent node, ToNode is last visible child node. Connector is vertical line from parent to last visible child
 | |
|                 Rectangle cellBounds = NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds, info.FromNode, info.Offset);
 | |
|                 Rectangle expandBounds = NodeDisplay.GetNodeRectangle(eNodeRectanglePart.ExpandBounds, info.ToNode, info.Offset);
 | |
|                 pStart = new Point(expandBounds.X + expandBounds.Width / 2, cellBounds.Bottom);
 | |
|                 pEnd = new Point(pStart.X, expandBounds.Y + expandBounds.Height / 2);
 | |
|             }
 | |
| 
 | |
|             Graphics g = info.Graphics;
 | |
|             using (Pen pen = GetLinePen(info))
 | |
|             {
 | |
|                 SmoothingMode sm = g.SmoothingMode;
 | |
|                 if (pen.DashStyle != DashStyle.Solid)
 | |
|                     g.SmoothingMode = SmoothingMode.Default;
 | |
|                 g.DrawLine(pen, pStart, pEnd);
 | |
|                 g.SmoothingMode = sm;
 | |
|             }
 | |
| 		}
 | |
| 	}
 | |
| }
 |