using System;
using System.Drawing;
using System.ComponentModel;
using System.Drawing.Drawing2D;
namespace DevComponents.AdvTree
{
///
/// Represents node connector. Node connector is the line that is drawn to indicate connection between child and parent node.
///
[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
///
/// Occurs when appearance of the connector has changed as result of changed settings on the connector.
///
public event EventHandler AppearanceChanged;
#endregion
#region Public Interface
///
/// Default Constructor.
///
public NodeConnector()
{
}
///
/// Creates new instance of the object with specified parameters.
///
/// Connector line width.
/// Connector type.
public NodeConnector(int lineWidth, eNodeConnectorType type)
{
this.LineWidth=lineWidth;
this.ConnectorType=type;
}
///
/// Gets or sets the connector line width.
///
[Browsable(true),DefaultValue(1),Category("Appearance"),Description("Indicates connector line width.")]
public int LineWidth
{
get {return m_LineWidth;}
set
{
m_LineWidth=value;
OnAppearanceChanged();
}
}
///
/// Gets or sets the color of the connector line.
///
[Browsable(true),Category("Appearance"),Description("Indicates color of the connector line.")]
public Color LineColor
{
get {return m_LineColor;}
set
{
m_LineColor=value;
OnAppearanceChanged();
}
}
///
/// Returns true if editor should serialize LineColor property.
///
[Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeLineColor()
{
return m_LineColor!=SystemColors.Highlight;
}
///
/// Gets or sets the type of the connector.
///
///
/// See eNodeConnectorType enum for list of
/// available connectors.
///
/// eNodeConnectorType Enumeration
[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;
///
/// Gets or sets the DashStyle for the connector line. Default value is DashStyle.Dot.
///
[DefaultValue(DashStyle.Dot), Category("Appearance"), Description("Indicates DashStyle for the connector line")]
public DashStyle DashStyle
{
get { return _DashStyle; }
set { _DashStyle = value; }
}
/////
///// 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.
/////
/////
///// 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.
/////
//[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();
// }
//}
/////
///// 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.
/////
//[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();
// }
//}
/////
///// Gets or sets the size of the end cap.
/////
//[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();
// }
//}
/////
///// Returns true if EndCapSize property should be serialized by editor.
/////
/////
//[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
// ///
// /// 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.
// ///
// [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;}
// }
//
// ///
// /// Gets or sets the size of the start cap.
// ///
// [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;}
// }
//
// ///
// /// Returns true if StartCapSize property should be serialized by editor.
// ///
// ///
// [Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
// public bool ShouldSerializeStartCapSize()
// {
// return (m_StartCapSize.Width!=5 || m_StartCapSize.Height!=5);
// }
}
}