152 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
 | 
						|
namespace DevComponents.AdvTree
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Represents the width of the Column. Supports absolute width in Pixels and
 | 
						|
	/// relative width as percentage of the width of parent control.
 | 
						|
	/// </summary>
 | 
						|
	[ToolboxItem(false) ,System.ComponentModel.DesignTimeVisible(false),TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
 | 
						|
    public class ColumnWidth
 | 
						|
	{
 | 
						|
		private int m_Relative=0;
 | 
						|
		private int m_Absolute=0;
 | 
						|
		internal event EventHandler WidthChanged;
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of the object.
 | 
						|
		/// </summary>
 | 
						|
		public ColumnWidth()
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets relative width expressed as percentage between 1-100. 0 indicates that
 | 
						|
		/// absolute width will be used.
 | 
						|
		/// </summary>
 | 
						|
		/// <remarks>
 | 
						|
		/// Relative width is expressed as percentage between 1-100 of the parent controls
 | 
						|
		/// width. 0 indicates that absolute width will be used. Absolute width always takes
 | 
						|
		/// priority over relative width. For example value of 30 assigned to this property
 | 
						|
		/// indicates that width of the column will be 30% of the total client width of the
 | 
						|
		/// control.
 | 
						|
		/// </remarks>
 | 
						|
		[DefaultValue(0),Browsable(true),Description("Gets or sets relative width in percent. Valid values are between 1-100 with 0 indicating that absolute width will be used.")]
 | 
						|
		public int Relative
 | 
						|
		{
 | 
						|
			get {return m_Relative;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Relative!=value)
 | 
						|
				{
 | 
						|
					m_Relative=value;
 | 
						|
					OnSizeChanged();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>Gets or sets the absolute width of the column in pixels.</summary>
 | 
						|
		/// <remarks>
 | 
						|
		/// Absolute width always takes precedence over the relative width of the
 | 
						|
		/// column.
 | 
						|
		/// </remarks>
 | 
						|
		[DefaultValue(0),Browsable(true),Description("Gets or sets the absolute width of the column in pixels.")]
 | 
						|
		public int Absolute
 | 
						|
		{
 | 
						|
			get {return m_Absolute;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Absolute<0)
 | 
						|
					return;
 | 
						|
				if(m_Absolute!=value)
 | 
						|
				{
 | 
						|
					m_Absolute=value;
 | 
						|
					if(m_Absolute!=0)
 | 
						|
						m_Relative=0;
 | 
						|
					OnSizeChanged();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        internal void SetAbsolute(int value)
 | 
						|
        {
 | 
						|
            m_Absolute = value;
 | 
						|
        }
 | 
						|
 | 
						|
        internal int GetWidth(int containerWidth)
 | 
						|
        {
 | 
						|
            if (m_Absolute > 0)
 | 
						|
                return m_Absolute;
 | 
						|
            if(m_Relative>0)
 | 
						|
                return (100 / m_Relative) * containerWidth;
 | 
						|
            return 0;
 | 
						|
        }
 | 
						|
 | 
						|
		private void OnSizeChanged()
 | 
						|
		{
 | 
						|
			if(WidthChanged!=null)
 | 
						|
				WidthChanged(this,new EventArgs());
 | 
						|
		}
 | 
						|
 | 
						|
        private bool _AutoSize = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether column width is automatically set based on the column's content. Default value is false.
 | 
						|
        /// When set absolute and relative size values are ignored.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Description("Indicates whether column is sized based on the content.")]
 | 
						|
        public bool AutoSize
 | 
						|
        {
 | 
						|
            get { return _AutoSize; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_AutoSize != value)
 | 
						|
                {
 | 
						|
                    _AutoSize = value;
 | 
						|
                    OnSizeChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        internal void SetAutoSize(bool autoSize)
 | 
						|
        {
 | 
						|
            _AutoSize = autoSize;
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _AutoSizeMinHeader = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether column auto-width is set to minimum of the column header text width. Applies to AutoSize=true only.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Description("Indicates whether column auto-width is set to minimum of the column header text width. Applies to AutoSize=true only.")]
 | 
						|
        public bool AutoSizeMinHeader
 | 
						|
        {
 | 
						|
            get { return _AutoSizeMinHeader; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _AutoSizeMinHeader = value;
 | 
						|
                OnSizeChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
 | 
						|
        private int _AutoSizeWidth = 0;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the auto-size calculated width of the column after tree layout is performed and column has AutoSize=true.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public int AutoSizeWidth
 | 
						|
        {
 | 
						|
            get { return _AutoSizeWidth; }
 | 
						|
//            internal set
 | 
						|
//            {
 | 
						|
//                _AutoSizeWidth = value;
 | 
						|
//            }
 | 
						|
        }
 | 
						|
		internal void SetAutoSizeWidth(int value)
 | 
						|
		{
 | 
						|
			_AutoSizeWidth = value;
 | 
						|
		}
 | 
						|
        
 | 
						|
	}
 | 
						|
}
 |