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;
 | 
						|
            }
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |