using System;
using System.ComponentModel;
using System.Drawing;
namespace DevComponents.Tree
{
/// Represents the node or tree ColumnHeader.
[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
///
/// Creates new instance of the object.
///
public ColumnHeader():this("")
{
}
///
/// Creates new instance of the object and initalizes it with text.
///
/// Text to initalize object with.
public ColumnHeader(string text)
{
m_Text=text;
m_Width=new ColumnWidth();
m_Width.WidthChanged+=new EventHandler(this.WidthChanged);
}
#endregion
#region Methods
///
/// Makes a copy of ColumnHeader object.
///
/// Returns new instance of column header object.
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
///
/// Returns name of the column header that can be used to identify it from the code.
///
[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;
}
}
///
/// Returns rectangle that this column occupies. If the layout has not been performed on the column the return value will be Rectangle.Empty.
///
[Browsable(false)]
public Rectangle Bounds
{
get {return m_Bounds;}
}
///
/// Sets the column bounds.
///
internal void SetBounds(Rectangle bounds)
{
m_Bounds=bounds;
}
///
/// Gets the reference to the object that represents width of the column as either
/// absolute or relative value.
///
///
/// Set Width using Absolute or Relative properties of ColumnWidth object.
///
/// Absolute Property (DevComponents.Tree.ColumnWidth)
/// Relative Property (DevComponents.Tree.ColumnWidth)
[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;}
}
///
/// 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.
///
///
/// 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.
///
///
/// 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.
///
/// StyleMouseDown Property
/// StyleMouseOver Property
[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();
}
}
///
/// 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.
///
///
/// 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.
///
///
/// 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.
///
/// StyleNormal Property
/// StyleMouseOver Property
[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();
}
}
///
/// 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.
///
///
/// 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.
///
///
/// 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.
///
/// StyleNormal Property
/// StyleMouseDown Property
[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();
}
}
///
/// Gets or sets the name of the column in the ColumnHeaderCollection.
///
[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;
}
}
///
/// Gets or sets the column caption.
///
[Browsable(true),DefaultValue(""),Category("Appearance"),Description("Indicates column caption.")]
public string Text
{
get {return m_Text;}
set
{
m_Text=value;
}
}
///
/// Gets or sets whether column is visible. Hidding the header column will also hide coresponding data column.
///
[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
///
/// Gets or sets whether column size has changed and it's layout needs to be recalculated.
///
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
}
}