216 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
 | 
						|
namespace DevComponents.AdvTree
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Represents node connector. Node connector is the line that is drawn to indicate connection between child and parent node.
 | 
						|
	/// </summary>
 | 
						|
	[ToolboxItem(false),System.ComponentModel.DesignTimeVisible(false),TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
 | 
						|
	public class NodeConnector:Component
 | 
						|
	{
 | 
						|
		#region Private Variables
 | 
						|
		private int m_LineWidth=1;
 | 
						|
		private Color m_LineColor=SystemColors.Highlight;
 | 
						|
		private eNodeConnectorType m_ConnectorType=eNodeConnectorType.Line;
 | 
						|
		//private bool m_UnderlineNoBorderNode=true;
 | 
						|
		//private eConnectorCap m_EndCap=eConnectorCap.Ellipse;
 | 
						|
		//private eConnectorCap m_StartCap=eConnectorCap.None;
 | 
						|
		//private Size m_EndCapSize=new Size(5,5);
 | 
						|
		//private Size m_StartCapSize=new Size(5,5);
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Events
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when appearance of the connector has changed as result of changed settings on the connector.
 | 
						|
		/// </summary>
 | 
						|
		public event EventHandler AppearanceChanged;
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Public Interface
 | 
						|
		/// <summary>
 | 
						|
		/// Default Constructor.
 | 
						|
		/// </summary>
 | 
						|
		public NodeConnector()
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of the object with specified parameters.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="lineWidth">Connector line width.</param>
 | 
						|
		/// <param name="type">Connector type.</param>
 | 
						|
		public NodeConnector(int lineWidth, eNodeConnectorType type)
 | 
						|
		{
 | 
						|
			this.LineWidth=lineWidth;
 | 
						|
			this.ConnectorType=type;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the connector line width.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(1),Category("Appearance"),Description("Indicates connector line width.")]
 | 
						|
		public int LineWidth
 | 
						|
		{
 | 
						|
			get {return m_LineWidth;}
 | 
						|
			set 
 | 
						|
			{
 | 
						|
				m_LineWidth=value;
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the color of the connector line.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),Category("Appearance"),Description("Indicates color of the connector line.")]
 | 
						|
		public Color LineColor
 | 
						|
		{
 | 
						|
			get {return m_LineColor;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_LineColor=value;
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Returns true if editor should serialize LineColor property.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
		public bool ShouldSerializeLineColor()
 | 
						|
		{
 | 
						|
			return m_LineColor!=SystemColors.Highlight;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the type of the connector.
 | 
						|
		/// </summary>
 | 
						|
		/// <remarks>
 | 
						|
		/// See <see cref="eNodeConnectorType">eNodeConnectorType</see> enum for list of
 | 
						|
		/// available connectors.
 | 
						|
		/// </remarks>
 | 
						|
		/// <seealso cref="eNodeConnectorType">eNodeConnectorType Enumeration</seealso>
 | 
						|
		[Browsable(false),DefaultValue(eNodeConnectorType.Line),Category("Appearance"),Description("Indicates visual type of the connector.")]
 | 
						|
		public eNodeConnectorType ConnectorType
 | 
						|
		{
 | 
						|
			get {return m_ConnectorType;}
 | 
						|
			set 
 | 
						|
			{
 | 
						|
				m_ConnectorType=value;
 | 
						|
				OnAppearanceChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        private DashStyle _DashStyle = DashStyle.Dot;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the DashStyle for the connector line. Default value is DashStyle.Dot.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(DashStyle.Dot), Category("Appearance"), Description("Indicates DashStyle for the connector line")]
 | 
						|
        public DashStyle DashStyle
 | 
						|
        {
 | 
						|
            get { return _DashStyle; }
 | 
						|
            set { _DashStyle = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        ///// <summary>
 | 
						|
        ///// Gets or sets whether the child node without borders is underlined as a
 | 
						|
        ///// continuation of the connector from node's parent. Default value is true.
 | 
						|
        ///// </summary>
 | 
						|
        ///// <remarks>
 | 
						|
        ///// To enhance visual appearance of the connectors that are connecting to the node
 | 
						|
        ///// with no borders assigned the connector is continued as a single line under the node
 | 
						|
        ///// when this property is set to true (default) value.
 | 
						|
        ///// </remarks>
 | 
						|
        //[Browsable(true), DefaultValue(true), Category("Behavior"), Description("Indicates whether connector is drawn under the nodes with no borders assigned.")]
 | 
						|
        //public bool UnderlineNoBorderNode
 | 
						|
        //{
 | 
						|
        //    get { return m_UnderlineNoBorderNode; }
 | 
						|
        //    set
 | 
						|
        //    {
 | 
						|
        //        m_UnderlineNoBorderNode = value;
 | 
						|
        //        OnAppearanceChanged();
 | 
						|
        //    }
 | 
						|
        //}
 | 
						|
 | 
						|
        ///// <summary>
 | 
						|
        ///// Gets or sets the type of the cap that connector is ended with. Note that connector starts with parent node and ends with the child node. Default value is Ellipse.
 | 
						|
        ///// </summary>
 | 
						|
        //[Browsable(true),DefaultValue(eConnectorCap.Ellipse),Category("Appearance"),Description("Indicates type of the cap that connector is ended with.")]
 | 
						|
        //public eConnectorCap EndCap
 | 
						|
        //{
 | 
						|
        //    get {return m_EndCap;}
 | 
						|
        //    set
 | 
						|
        //    {
 | 
						|
        //        m_EndCap=value;
 | 
						|
        //        OnAppearanceChanged();
 | 
						|
        //    }
 | 
						|
        //}
 | 
						|
 | 
						|
        ///// <summary>
 | 
						|
        ///// Gets or sets the size of the end cap.
 | 
						|
        ///// </summary>
 | 
						|
        //[Browsable(true),Category("Appearance"),Description("Indicates the size of the end cap.")]
 | 
						|
        //public System.Drawing.Size EndCapSize
 | 
						|
        //{
 | 
						|
        //    get {return m_EndCapSize;}
 | 
						|
        //    set
 | 
						|
        //    {
 | 
						|
        //        m_EndCapSize=value;
 | 
						|
        //        OnAppearanceChanged();
 | 
						|
        //    }
 | 
						|
        //}
 | 
						|
 | 
						|
        ///// <summary>
 | 
						|
        ///// Returns true if EndCapSize property should be serialized by editor.
 | 
						|
        ///// </summary>
 | 
						|
        ///// <returns></returns>
 | 
						|
        //[Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        //public bool ShouldSerializeEndCapSize()
 | 
						|
        //{
 | 
						|
        //    return (m_EndCapSize.Width!=5 || m_EndCapSize.Height!=5);
 | 
						|
        //}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Private Implementation
 | 
						|
		private void OnAppearanceChanged()
 | 
						|
		{
 | 
						|
			if(AppearanceChanged!=null)
 | 
						|
				AppearanceChanged(this,new EventArgs());
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
//		/// <summary>
 | 
						|
//		/// Gets or sets the type of the cap that connector is started with. Note that connector starts with parent node and ends with the child node.  Default value is None.
 | 
						|
//		/// </summary>
 | 
						|
//		[Browsable(true),DefaultValue(eConnectorCap.None),Category("Appearance"),Description("Indicates type of the cap that connector is starts with.")]
 | 
						|
//		public eConnectorCap StartCap
 | 
						|
//		{
 | 
						|
//			get {return m_StartCap;}
 | 
						|
//			set {m_StartCap=value;}
 | 
						|
//		}
 | 
						|
//
 | 
						|
//		/// <summary>
 | 
						|
//		/// Gets or sets the size of the start cap.
 | 
						|
//		/// </summary>
 | 
						|
//		[Browsable(true),Category("Appearance"),Description("Indicates the size of the start cap.")]
 | 
						|
//		public System.Drawing.Size StartCapSize
 | 
						|
//		{
 | 
						|
//			get {return m_StartCapSize;}
 | 
						|
//			set {m_StartCapSize=value;}
 | 
						|
//		}
 | 
						|
//
 | 
						|
//		/// <summary>
 | 
						|
//		/// Returns true if StartCapSize property should be serialized by editor.
 | 
						|
//		/// </summary>
 | 
						|
//		/// <returns></returns>
 | 
						|
//		[Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
//		public bool ShouldSerializeStartCapSize()
 | 
						|
//		{
 | 
						|
//			return (m_StartCapSize.Width!=5 || m_StartCapSize.Height!=5);
 | 
						|
//		}
 | 
						|
	}
 | 
						|
}
 |