269 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
 | 
						|
namespace DevComponents.Tree
 | 
						|
{
 | 
						|
	/// <summary>Represents the node or tree ColumnHeader.</summary>
 | 
						|
	[ToolboxItem(false)]
 | 
						|
	public class ColumnHeader:Component
 | 
						|
	{
 | 
						|
		#region Private Variables
 | 
						|
		private string m_Text="";
 | 
						|
		private ColumnWidth m_Width=null;
 | 
						|
		private string m_StyleNormal="";
 | 
						|
		private string m_StyleMouseDown="";
 | 
						|
		private string m_StyleMouseOver="";
 | 
						|
		private string m_ColumnName="";
 | 
						|
		private bool m_Visible=true;
 | 
						|
		private Rectangle m_Bounds=Rectangle.Empty;
 | 
						|
		private bool m_SizeChanged=true;
 | 
						|
		private string m_Name="";
 | 
						|
 | 
						|
		internal event EventHandler HeaderSizeChanged;
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Constructor
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of the object.
 | 
						|
		/// </summary>
 | 
						|
		public ColumnHeader():this("")
 | 
						|
		{
 | 
						|
			
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of the object and initalizes it with text.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="text">Text to initalize object with.</param>
 | 
						|
		public ColumnHeader(string text)
 | 
						|
		{
 | 
						|
			m_Text=text;
 | 
						|
			m_Width=new ColumnWidth();
 | 
						|
			m_Width.WidthChanged+=new EventHandler(this.WidthChanged);
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Methods
 | 
						|
		/// <summary>
 | 
						|
		/// Makes a copy of ColumnHeader object.
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>Returns new instance of column header object.</returns>
 | 
						|
		public virtual ColumnHeader Copy()
 | 
						|
		{
 | 
						|
			ColumnHeader c=new ColumnHeader();
 | 
						|
			c.ColumnName=this.ColumnName;
 | 
						|
			c.StyleMouseDown=this.StyleMouseDown;
 | 
						|
			c.StyleMouseOver=this.StyleMouseOver;
 | 
						|
			c.StyleNormal=this.StyleNormal;
 | 
						|
			c.Text=this.Text;
 | 
						|
			c.Visible=this.Visible;
 | 
						|
			c.Width.Absolute=this.Width.Absolute;
 | 
						|
			c.Width.Relative=this.Width.Relative;
 | 
						|
 | 
						|
			return c;
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Properties
 | 
						|
		/// <summary>
 | 
						|
		/// Returns name of the column header that can be used to identify it from the code.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false),Category("Design"),Description("Indicates the name used to identify column header.")]
 | 
						|
		public string Name
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(this.Site!=null)
 | 
						|
					m_Name=this.Site.Name;
 | 
						|
				return m_Name;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(this.Site!=null)
 | 
						|
					this.Site.Name=value;
 | 
						|
				if(value==null)
 | 
						|
					m_Name="";
 | 
						|
				else
 | 
						|
					m_Name=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Returns rectangle that this column occupies. If the layout has not been performed on the column the return value will be Rectangle.Empty.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false)]
 | 
						|
		public Rectangle Bounds
 | 
						|
		{
 | 
						|
			get {return m_Bounds;}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Sets the column bounds.
 | 
						|
		/// </summary>
 | 
						|
		internal void SetBounds(Rectangle bounds)
 | 
						|
		{
 | 
						|
			m_Bounds=bounds;
 | 
						|
		}
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// Gets the reference to the object that represents width of the column as either
 | 
						|
		/// absolute or relative value.
 | 
						|
		/// </summary>
 | 
						|
		/// <remarks>
 | 
						|
		/// Set Width using Absolute or Relative properties of ColumnWidth object.
 | 
						|
		/// </remarks>
 | 
						|
		/// <seealso cref="ColumnWidth.Absolute">Absolute Property (DevComponents.Tree.ColumnWidth)</seealso>
 | 
						|
		/// <seealso cref="ColumnWidth.Relative">Relative Property (DevComponents.Tree.ColumnWidth)</seealso>
 | 
						|
		[Browsable(true),Category("Layout"),Description("Gets or sets the width of the column."),DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
		public ColumnWidth Width
 | 
						|
		{
 | 
						|
			// TODO: Add Proper TypeConverter for ColumnWidth object and test design-time support
 | 
						|
			get {return m_Width;}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the style class assigned to the column. Empty value indicates that
 | 
						|
		/// default style is used as specified on cell's parent's control.
 | 
						|
		/// </summary>
 | 
						|
		/// <value>
 | 
						|
		/// Name of the style assigned to the cell or an empty string indicating that default
 | 
						|
		/// style setting from tree control is applied. Default is empty string.
 | 
						|
		/// </value>
 | 
						|
		/// <remarks>
 | 
						|
		/// When property is set to an empty string the style setting from parent tree
 | 
						|
		/// controls is used. ColumnStyleNormal on TreeGX control is a root style for a cell.
 | 
						|
		/// </remarks>
 | 
						|
		/// <seealso cref="StyleMouseDown">StyleMouseDown Property</seealso>
 | 
						|
		/// <seealso cref="StyleMouseOver">StyleMouseOver Property</seealso>
 | 
						|
		[Browsable(true),DefaultValue(""),Category("Style"),Description("Indicates the style class assigned to the column.")]
 | 
						|
		public string StyleNormal
 | 
						|
		{
 | 
						|
			get {return m_StyleNormal;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_StyleNormal=value;
 | 
						|
				this.OnSizeChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the style class assigned to the column which is applied when mouse
 | 
						|
		/// button is pressed over the header. Empty value indicates that default
 | 
						|
		/// style is used as specified on column's parent.
 | 
						|
		/// </summary>
 | 
						|
		/// <value>
 | 
						|
		/// Name of the style assigned to the column or an empty string indicating that default
 | 
						|
		/// style setting from tree control is applied. Default is empty string.
 | 
						|
		/// </value>
 | 
						|
		/// <remarks>
 | 
						|
		/// When property is set to an empty string the style setting from parent tree
 | 
						|
		/// controls is used. ColumnStyleMouseDown on TreeGX control is a root style for a
 | 
						|
		/// cell.
 | 
						|
		/// </remarks>
 | 
						|
		/// <seealso cref="StyleNormal">StyleNormal Property</seealso>
 | 
						|
		/// <seealso cref="StyleMouseOver">StyleMouseOver Property</seealso>
 | 
						|
		[Browsable(true),DefaultValue(""),Category("Style"),Description("Indicates the style class assigned to the column when mouse is down.")]
 | 
						|
		public string StyleMouseDown
 | 
						|
		{
 | 
						|
			get {return m_StyleMouseDown;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_StyleMouseDown=value;
 | 
						|
				this.OnSizeChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the style class assigned to the column which is applied when mouse is
 | 
						|
		/// over the column. Empty value indicates that default style is used as specified on column's
 | 
						|
		/// parent control.
 | 
						|
		/// </summary>
 | 
						|
		/// <value>
 | 
						|
		/// Name of the style assigned to the column or an empty string indicating that default
 | 
						|
		/// style setting from tree control is applied. Default is empty string.
 | 
						|
		/// </value>
 | 
						|
		/// <remarks>
 | 
						|
		/// When property is set to an empty string the style setting from parent tree
 | 
						|
		/// controls is used. ColumnStyleMouseOver on TreeGX control is a root style for a
 | 
						|
		/// cell.
 | 
						|
		/// </remarks>
 | 
						|
		/// <seealso cref="StyleNormal">StyleNormal Property</seealso>
 | 
						|
		/// <seealso cref="StyleMouseDown">StyleMouseDown Property</seealso>
 | 
						|
		[Browsable(true),DefaultValue(""),Category("Style"),Description("Indicates the style class assigned to the cell when mouse is over the column.")]
 | 
						|
		public string StyleMouseOver
 | 
						|
		{
 | 
						|
			get {return m_StyleMouseOver;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_StyleMouseOver=value;
 | 
						|
				this.OnSizeChanged();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the name of the column in the ColumnHeaderCollection.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(""),Category("Data"),Description("Indicates the name of the column in the ColumnHeaderCollection.")]
 | 
						|
		public string ColumnName
 | 
						|
		{
 | 
						|
			get {return m_ColumnName;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_ColumnName=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the column caption.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(""),Category("Appearance"),Description("Indicates column caption.")]
 | 
						|
		public string Text
 | 
						|
		{
 | 
						|
			get {return m_Text;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_Text=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether column is visible. Hidding the header column will also hide coresponding data column.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(true),Category("Behavior"),Description("Indicates whether column is visible.")]
 | 
						|
		public bool Visible
 | 
						|
		{
 | 
						|
			get {return m_Visible;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Visible!=value)
 | 
						|
				{
 | 
						|
					m_Visible=value;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Internal Implementation
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether column size has changed and it's layout needs to be recalculated.
 | 
						|
		/// </summary>
 | 
						|
		internal bool SizeChanged
 | 
						|
		{
 | 
						|
			get {return m_SizeChanged;}
 | 
						|
			set {m_SizeChanged=value;}
 | 
						|
		}
 | 
						|
 | 
						|
		private void OnSizeChanged()
 | 
						|
		{
 | 
						|
			m_SizeChanged=true;
 | 
						|
			if(HeaderSizeChanged!=null)
 | 
						|
				HeaderSizeChanged(this,new EventArgs());
 | 
						|
		}
 | 
						|
 | 
						|
		private void WidthChanged(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			this.OnSizeChanged();
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
	}
 | 
						|
}
 |