3911 lines
		
	
	
		
			109 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			3911 lines
		
	
	
		
			109 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Design;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.Globalization;
 | 
						|
using System.IO;
 | 
						|
using System.Reflection;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.DotNetBar.SuperGrid.Style;
 | 
						|
using DevComponents.SuperGrid.TextMarkup;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.SuperGrid
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Defines the grid column header
 | 
						|
    /// </summary>
 | 
						|
    public class GridColumn : GridElement, IDisposable
 | 
						|
    {
 | 
						|
        #region Events
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs after column header DisplayIndex has changed.
 | 
						|
        /// </summary>
 | 
						|
        public event EventHandler DisplayIndexChanged;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Static variables
 | 
						|
 | 
						|
        static Image _InfoImageCache;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        private ColumnAutoSizeMode _AutoSizeMode = ColumnAutoSizeMode.NotSet;
 | 
						|
        private ColumnSortMode _ColumnSortMode = ColumnSortMode.Single;
 | 
						|
        private ColumnResizeMode _ResizeMode = ColumnResizeMode.MoveFollowingElements;
 | 
						|
 | 
						|
        private CellHighlightMode _CellHighlightMode = CellHighlightMode.Full;
 | 
						|
        private CellMergeMode _CellMergeMode = CellMergeMode.NotSet;
 | 
						|
 | 
						|
        private SortDirection _SortDirection = SortDirection.None;
 | 
						|
        private SortDirection _GroupDirection = SortDirection.None;
 | 
						|
        private SortIndicator _SortIndicator = SortIndicator.Auto;
 | 
						|
        private SortCycle _SortCycle = SortCycle.NotSet;
 | 
						|
 | 
						|
        private int _ColumnIndex;
 | 
						|
        private int _DisplayIndex = -1;
 | 
						|
 | 
						|
        private int _MinimumWidth = 5;
 | 
						|
        private int _FillWeight = 100;
 | 
						|
 | 
						|
        private string _NullString;
 | 
						|
        private string _HeaderText;
 | 
						|
 | 
						|
        private Size _HeaderSize;
 | 
						|
        private Size _HeaderTextSize;
 | 
						|
 | 
						|
        private Cs _States;
 | 
						|
 | 
						|
        private BodyElement _HeaderTextMarkup;
 | 
						|
 | 
						|
        private string _Name;
 | 
						|
        private int _Width = 100;
 | 
						|
 | 
						|
        private ushort _SelectionUpdateCount;
 | 
						|
        private SelectedElements _SelectedCells;
 | 
						|
 | 
						|
        private Type _EditorType = typeof(GridTextBoxXEditControl);
 | 
						|
        private Type _RenderType;
 | 
						|
 | 
						|
        private IGridCellEditControl _EditControl;
 | 
						|
        private IGridCellEditControl _RenderControl;
 | 
						|
 | 
						|
        private object[] _EditorParams;
 | 
						|
        private object[] _RenderParams;
 | 
						|
 | 
						|
        private ushort _MeasureCount;
 | 
						|
 | 
						|
        private Image _InfoImage;
 | 
						|
        private Alignment _InfoImageAlignment = Alignment.MiddleRight;
 | 
						|
 | 
						|
        private string _DataPropertyName;
 | 
						|
        private object _DefaultNewRowCellValue;
 | 
						|
        private Type _DataType;
 | 
						|
 | 
						|
        private CellVisualStyles _CellStyles;
 | 
						|
        private ColumnHeaderVisualStyles _HeaderStyles;
 | 
						|
        private FilterColumnHeaderVisualStyles _FilterRowStyles;
 | 
						|
 | 
						|
        private ColumnHeaderVisualStyles _EffectiveStyles;
 | 
						|
        private FilterColumnHeaderVisualStyles _EffectiveFilterStyles;
 | 
						|
        private CellVisualStyles _EffectiveCellStyles;
 | 
						|
 | 
						|
        private StyleState _LastStyleState;
 | 
						|
        private int _StyleUpdateCount;
 | 
						|
 | 
						|
        private Rectangle _SortImageBounds;
 | 
						|
 | 
						|
        private string _FilterExpr;
 | 
						|
        private FilterEval _FilterEval;
 | 
						|
 | 
						|
        private object _FilterValue;
 | 
						|
        private object _FilterDisplayValue;
 | 
						|
 | 
						|
        private Tbool _EnableFiltering = Tbool.NotSet;
 | 
						|
        private Tbool _ShowPanelFilterExpr = Tbool.NotSet;
 | 
						|
        private Tbool _AllowNullCellMerge = Tbool.NotSet;
 | 
						|
 | 
						|
        private Rectangle _FilterImageBounds;
 | 
						|
        private Size _FilterPopupSize = Size.Empty;
 | 
						|
        private int _FilterPopupMaxItems = 100;
 | 
						|
        private FilterScan _FilterScan;
 | 
						|
 | 
						|
        private FilterEditType _FilterEditType = FilterEditType.Auto;
 | 
						|
        private FilterMatchType _FilterMatchType = FilterMatchType.NotSet;
 | 
						|
        private GroupBoxEffects _GroupBoxEffects = GroupBoxEffects.NotSet;
 | 
						|
 | 
						|
        private string _ToolTip;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructors
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// GridColumn
 | 
						|
        ///</summary>
 | 
						|
        public GridColumn()
 | 
						|
        {
 | 
						|
            SetState(Cs.AllowEdit, true);
 | 
						|
            SetState(Cs.InfoImageOverlay, true);
 | 
						|
            SetState(Cs.MarkRowDirtyOnCellValueChange, true);
 | 
						|
 | 
						|
            _SelectedCells = new SelectedElements(SelectedElementType.SelectedCells);
 | 
						|
        }
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// GridColumn
 | 
						|
        ///</summary>
 | 
						|
        public GridColumn(string name)
 | 
						|
            : this()
 | 
						|
        {
 | 
						|
            Name = name;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal properties
 | 
						|
 | 
						|
        #region CanResize
 | 
						|
 | 
						|
        internal bool CanResize
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                ColumnAutoSizeMode mode = GetAutoSizeMode();
 | 
						|
 | 
						|
                switch (mode)
 | 
						|
                {
 | 
						|
                    case ColumnAutoSizeMode.None:
 | 
						|
                    case ColumnAutoSizeMode.Fill:
 | 
						|
                        return (true);
 | 
						|
 | 
						|
                    default:
 | 
						|
                        return (false);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CanShowFilterExpr
 | 
						|
 | 
						|
        internal bool CanShowFilterExpr
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_ShowPanelFilterExpr != Tbool.NotSet)
 | 
						|
                    return (_ShowPanelFilterExpr == Tbool.True);
 | 
						|
 | 
						|
                if (GridPanel != null)
 | 
						|
                    return (GridPanel.Filter.ShowPanelFilterExpr);
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EffectiveCellStyles
 | 
						|
 | 
						|
        internal CellVisualStyles EffectiveCellStyles
 | 
						|
        {
 | 
						|
            get { return (_EffectiveCellStyles); }
 | 
						|
            set { _EffectiveCellStyles = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EffectiveFilterStyles
 | 
						|
 | 
						|
        internal FilterColumnHeaderVisualStyles EffectiveFilterStyles
 | 
						|
        {
 | 
						|
            get { return (_EffectiveFilterStyles); }
 | 
						|
            set { _EffectiveFilterStyles = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EffectiveStyles
 | 
						|
 | 
						|
        internal ColumnHeaderVisualStyles EffectiveStyles
 | 
						|
        {
 | 
						|
            get { return (_EffectiveStyles); }
 | 
						|
            set { _EffectiveStyles = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterError
 | 
						|
 | 
						|
        internal bool FilterError
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.FilterError)); }
 | 
						|
            set { SetState(Cs.FilterError, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterExprUsesName
 | 
						|
 | 
						|
        internal bool FilterExprUsesName
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.FilterExprUsesName)); }
 | 
						|
            set { SetState(Cs.FilterExprUsesName, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterEval
 | 
						|
 | 
						|
        internal FilterEval FilterEval
 | 
						|
        {
 | 
						|
            get { return (_FilterEval); }
 | 
						|
            set { _FilterEval = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterImageBounds
 | 
						|
 | 
						|
        internal Rectangle FilterImageBounds
 | 
						|
        {
 | 
						|
            get { return (_FilterImageBounds); }
 | 
						|
            set { _FilterImageBounds = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterScan
 | 
						|
 | 
						|
        internal FilterScan FilterScan
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_FilterScan == null)
 | 
						|
                    FilterScan = new FilterScan(this);
 | 
						|
 | 
						|
                return (_FilterScan);
 | 
						|
            }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FilterScan != value)
 | 
						|
                {
 | 
						|
                    if (_FilterScan != null)
 | 
						|
                        _FilterScan.EndScan();
 | 
						|
 | 
						|
                    _FilterScan = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GroupBoxEffectsEx
 | 
						|
 | 
						|
        internal GroupBoxEffects GroupBoxEffectsEx
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_GroupBoxEffects != GroupBoxEffects.NotSet)
 | 
						|
                    return (_GroupBoxEffects);
 | 
						|
                
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null && panel.GroupByRow != null)
 | 
						|
                {
 | 
						|
                    if (panel.GroupByRow.GroupBoxEffects != GroupBoxEffects.NotSet)
 | 
						|
                        return (panel.GroupByRow.GroupBoxEffects);
 | 
						|
                }
 | 
						|
 | 
						|
                return (GroupBoxEffects.Move);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region HeaderSize
 | 
						|
 | 
						|
        internal Size HeaderSize
 | 
						|
        {
 | 
						|
            get { return (_HeaderSize); }
 | 
						|
            set { _HeaderSize = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region HeaderTextMarkup
 | 
						|
 | 
						|
        internal BodyElement HeaderTextMarkup
 | 
						|
        {
 | 
						|
            get { return (_HeaderTextMarkup); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region HeaderTextSize
 | 
						|
 | 
						|
        internal Size HeaderTextSize
 | 
						|
        {
 | 
						|
            get { return (_HeaderTextSize); }
 | 
						|
            set { _HeaderTextSize = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsFiltered
 | 
						|
 | 
						|
        internal bool IsFiltered
 | 
						|
        {
 | 
						|
            get { return (IsFilteringEnabled == true &&
 | 
						|
                String.IsNullOrEmpty(FilterExpr) == false); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsHFrozenEx
 | 
						|
 | 
						|
        internal bool IsHFrozenEx
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = Parent as GridPanel;
 | 
						|
 | 
						|
                if (panel != null && panel.IsSubPanel == false)
 | 
						|
                {
 | 
						|
                    if (panel.FrozenColumnCount > 0)
 | 
						|
                    {
 | 
						|
                        int n = panel.Columns.GetDisplayIndex(this);
 | 
						|
 | 
						|
                        if (n < panel.FrozenColumnCount)
 | 
						|
                            return (true);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsReadOnly
 | 
						|
 | 
						|
        internal bool IsReadOnly
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    if (panel.ReadOnly || ReadOnly)
 | 
						|
                        return (true);
 | 
						|
                }
 | 
						|
 | 
						|
                return (TestState(Cs.ReadOnly));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region LastStyleState
 | 
						|
 | 
						|
        internal StyleState LastStyleState
 | 
						|
        {
 | 
						|
            get { return (_LastStyleState); }
 | 
						|
            set { _LastStyleState = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MeasureCount
 | 
						|
 | 
						|
        internal ushort MeasureCount
 | 
						|
        {
 | 
						|
            get { return (_MeasureCount); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region NeedsFilterScan
 | 
						|
 | 
						|
        internal bool NeedsFilterScan
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.NeedsFilterScan)); }
 | 
						|
            set { SetState(Cs.NeedsFilterScan, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region NeedsMeasured
 | 
						|
 | 
						|
        internal override bool NeedsMeasured
 | 
						|
        {
 | 
						|
            get { return (base.NeedsMeasured); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value == true)
 | 
						|
                    _MeasureCount++;
 | 
						|
 | 
						|
                base.NeedsMeasured = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region NeedsResized
 | 
						|
 | 
						|
        internal bool NeedsResized
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.NeedsResized)); }
 | 
						|
            set { SetState(Cs.NeedsResized, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Processed
 | 
						|
 | 
						|
        internal bool Processed
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.Processed)); }
 | 
						|
            set { SetState(Cs.Processed, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ScanItems
 | 
						|
 | 
						|
        internal List<object> ScanItems
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_FilterScan != null)
 | 
						|
                    return (_FilterScan.ScanItems);
 | 
						|
 | 
						|
                return (null);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SelectedCells
 | 
						|
 | 
						|
        internal SelectedElements SelectedCells
 | 
						|
        {
 | 
						|
            get { return (_SelectedCells); }
 | 
						|
            set { _SelectedCells = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SortImageBounds
 | 
						|
 | 
						|
        internal Rectangle SortImageBounds
 | 
						|
        {
 | 
						|
            get { return (_SortImageBounds); }
 | 
						|
            set { _SortImageBounds = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region StyleUpdateCount
 | 
						|
 | 
						|
        internal int StyleUpdateCount
 | 
						|
        {
 | 
						|
            get { return (_StyleUpdateCount); }
 | 
						|
            set { _StyleUpdateCount = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        #region AdjustSortImagePositionByMargin
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets whether the Column Header sort image
 | 
						|
        /// position is adjusted by the header margin
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(false), Category("Appearance")]
 | 
						|
        [Description("Indicates whether the Column Header sort image position is adjusted by the header margin.")]
 | 
						|
        public bool AdjustSortImagePositionByMargin
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.AdjustSortImagePositionByMargin)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (AdjustSortImagePositionByMargin != value)
 | 
						|
                {
 | 
						|
                    SetState(Cs.AdjustSortImagePositionByMargin, value);
 | 
						|
 | 
						|
                    OnPropertyChangedEx("AdjustSortImagePositionByMargin", VisualChangeType.Render);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AllowEdit
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether column cells can be edited by the user. 
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Behavior")]
 | 
						|
        [Description("Indicates whether column cells can be edited by the user.")]
 | 
						|
        public bool AllowEdit
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.AllowEdit)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != AllowEdit)
 | 
						|
                {
 | 
						|
                    SetState(Cs.AllowEdit, value);
 | 
						|
 | 
						|
                    OnPropertyChanged("AllowEdit");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AllowNullCellMerge
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether cells with null/empty values are allowed to be merged. 
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(Tbool.NotSet), Category("Behavior")]
 | 
						|
        [Description("Indicates whether cells with null/empty values are allowed to be merged.")]
 | 
						|
        public Tbool AllowNullCellMerge
 | 
						|
        {
 | 
						|
            get { return (_AllowNullCellMerge); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _AllowNullCellMerge)
 | 
						|
                {
 | 
						|
                    _AllowNullCellMerge = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("AllowNullCellMerge", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AutoSizeMode
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets how column auto-sizing is performed
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(ColumnAutoSizeMode.NotSet), Category("Sizing")]
 | 
						|
        [Description("Indicates how column auto-sizing is performed.")]
 | 
						|
        public ColumnAutoSizeMode AutoSizeMode
 | 
						|
        {
 | 
						|
            get { return (_AutoSizeMode); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _AutoSizeMode)
 | 
						|
                {
 | 
						|
                    _AutoSizeMode = value;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("AutoSizeMode", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Bounds
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets the scroll adjusted bounds of the Column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public override Rectangle Bounds
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    Rectangle r = BoundsRelative;
 | 
						|
 | 
						|
                    if (IsHFrozen == false)
 | 
						|
                        r.X -= HScrollOffset;
 | 
						|
 | 
						|
                    if (panel.IsSubPanel == true)
 | 
						|
                        r.Y -= VScrollOffset;
 | 
						|
 | 
						|
                    return (r);
 | 
						|
                }
 | 
						|
 | 
						|
                return (Rectangle.Empty);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CellHighlightMode
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the type of highlighting
 | 
						|
        /// to perform when a cell is selected
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(CellHighlightMode.Full), Category("Behavior")]
 | 
						|
        [Description("Indicates the type of highlighting to perform when a cell is selected.")]
 | 
						|
        public CellHighlightMode CellHighlightMode
 | 
						|
        {
 | 
						|
            get { return (_CellHighlightMode); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _CellHighlightMode)
 | 
						|
                {
 | 
						|
                    _CellHighlightMode = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("CellHighlightType");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CellMergeMode
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the type of cell merging
 | 
						|
        /// that is supported by each cell in the column
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(CellMergeMode.NotSet), Category("Behavior")]
 | 
						|
        [Description("Indicates the type of cell merging supported by each cell in the column.")]
 | 
						|
        public CellMergeMode CellMergeMode
 | 
						|
        {
 | 
						|
            get { return (_CellMergeMode); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _CellMergeMode)
 | 
						|
                {
 | 
						|
                    _CellMergeMode = value;
 | 
						|
 | 
						|
                    GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                    if (panel != null)
 | 
						|
                        panel.InvalidateMerge();
 | 
						|
 | 
						|
                    OnPropertyChangedEx("CellMergeMode", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CellStyles
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the default visual styles assigned to the column cells
 | 
						|
        /// </summary>
 | 
						|
        [Category("Style")]
 | 
						|
        [Description("Indicates default visual style assigned to the column cells.")]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public CellVisualStyles CellStyles
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_CellStyles == null)
 | 
						|
                {
 | 
						|
                    _CellStyles = new CellVisualStyles();
 | 
						|
 | 
						|
                    StyleVisualChangeHandler(null, _CellStyles);
 | 
						|
                }
 | 
						|
 | 
						|
                return (_CellStyles);
 | 
						|
            }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_CellStyles != value)
 | 
						|
                {
 | 
						|
                    StyleVisualChangeHandler(_CellStyles, value);
 | 
						|
 | 
						|
                    _CellStyles = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("CellStyles", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ColumnIndex
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the panel level, Columns collection index of the column
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public int ColumnIndex
 | 
						|
        {
 | 
						|
            get { return (_ColumnIndex); }
 | 
						|
            internal set { _ColumnIndex = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ColumnSortMode
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets how column sorting is performed
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(ColumnSortMode.Single), Category("Sorting")]
 | 
						|
        [Description("Indicates how column sorting is performed.")]
 | 
						|
        public ColumnSortMode ColumnSortMode
 | 
						|
        {
 | 
						|
            get { return (_ColumnSortMode); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _ColumnSortMode)
 | 
						|
                {
 | 
						|
                    _ColumnSortMode = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("ColumnSortMode");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DataPropertyName
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the name of the data source property
 | 
						|
        /// or database column to which the column is bound
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(null), Category("Data")]
 | 
						|
        [Description("Indicates the name of the data source property or database column to which the column is bound.")]
 | 
						|
        public string DataPropertyName
 | 
						|
        {
 | 
						|
            get { return (_DataPropertyName); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _DataPropertyName)
 | 
						|
                {
 | 
						|
                    _DataPropertyName = value;
 | 
						|
 | 
						|
                    if (GridPanel != null)
 | 
						|
                        GridPanel.NeedToUpdateBindings = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("DataPropertyName", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DataType
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Gets or sets the underlying data type
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public Type DataType
 | 
						|
        {
 | 
						|
            get { return (_DataType); }
 | 
						|
            set { _DataType = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DefaultNewRowCellValue
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the default cell value used when a new row is added
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null), Category("Data")]
 | 
						|
        [Description("Indicates the default cell value used when a new row is added.")]
 | 
						|
        [TypeConverter(typeof(ValueTypeConverter))]
 | 
						|
        [Editor("DevComponents.SuperGrid.Design.ValueTypeEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))]
 | 
						|
        public object DefaultNewRowCellValue
 | 
						|
        {
 | 
						|
            get 
 | 
						|
            {
 | 
						|
                if (_DefaultNewRowCellValue is DBNull)
 | 
						|
                    return null;
 | 
						|
 | 
						|
                return (_DefaultNewRowCellValue); 
 | 
						|
            }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _DefaultNewRowCellValue)
 | 
						|
                {
 | 
						|
                    _DefaultNewRowCellValue = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("DefaultNewRowCellValue");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DisplayIndex
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets display index of the column.
 | 
						|
        /// </summary>
 | 
						|
        /// <remarks>
 | 
						|
        /// A lower display index means a column will appear first (to the left) of columns with a higher display index. 
 | 
						|
        /// Allowable values are from 0 to num columns - 1. (-1 is legal only as the default value). SuperGrid enforces
 | 
						|
        /// that no two columns have the same display index, ie. changing the display index of a column will cause the index
 | 
						|
        /// of other columns to adjust as well.
 | 
						|
        /// </remarks>
 | 
						|
        [DefaultValue(-1), Category("Appearance")]
 | 
						|
        [Description("Indicates the display index of the column. -1 indicates default value.")]
 | 
						|
        public int DisplayIndex
 | 
						|
        {
 | 
						|
            get { return (_DisplayIndex); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _DisplayIndex)
 | 
						|
                {
 | 
						|
                    _DisplayIndex = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("DisplayIndex", VisualChangeType.Layout);
 | 
						|
                    OnDisplayIndexChanged(EventArgs.Empty);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EditControl
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets the default Edit Control used for each cell in the column.
 | 
						|
        /// The column level edit control is a shared control, created and
 | 
						|
        /// based upon the column level EditorType and EditorParams properties.
 | 
						|
        /// Each cell in the column, that does not define its own EditorType,
 | 
						|
        /// will utilize the column level EditorControl.
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public IGridCellEditControl EditControl
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_EditControl == null)
 | 
						|
                    EditControl = GetEditControl(_EditorType, _EditorParams);
 | 
						|
 | 
						|
                if (_EditControl != null)
 | 
						|
                {
 | 
						|
                    if (_EditControl.EditorPanel.Parent == null && SuperGrid != null)
 | 
						|
                        SuperGrid.Controls.Add(_EditControl.EditorPanel);
 | 
						|
                }
 | 
						|
 | 
						|
                return (_EditControl);
 | 
						|
            }
 | 
						|
 | 
						|
            internal set
 | 
						|
            {
 | 
						|
                if (_EditControl != value)
 | 
						|
                {
 | 
						|
                    if (_EditControl != null)
 | 
						|
                    {
 | 
						|
                        if (_EditControl.EditorPanel != null)
 | 
						|
                        {
 | 
						|
                            if (_EditControl.EditorPanel.Parent != null)
 | 
						|
                                SuperGrid.Controls.Remove(_EditControl.EditorPanel);
 | 
						|
 | 
						|
                            _EditControl.EditorPanel.Visible = false;
 | 
						|
 | 
						|
                            if (_EditControl.EditorPanel.Controls.Count > 0)
 | 
						|
                                _EditControl.EditorPanel.Controls[0].Visible = false;
 | 
						|
 | 
						|
                            _EditControl.EditorPanel.Dispose();
 | 
						|
                        }
 | 
						|
 | 
						|
                        _EditControl.EditorCellBitmap = null;
 | 
						|
 | 
						|
                        ((Control)_EditControl).Dispose();
 | 
						|
 | 
						|
                        InvalidateLayout();
 | 
						|
                    }
 | 
						|
 | 
						|
                    _EditControl = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EditorParams
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets an array of arguments that match in number,
 | 
						|
        /// order, and type the parameters of the EditControl constructor
 | 
						|
        /// to invoke. If empty or null, the default constructor is invoked.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public object[] EditorParams
 | 
						|
        {
 | 
						|
            get { return (_EditorParams); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_EditorParams != value)
 | 
						|
                {
 | 
						|
                    _EditorParams = value;
 | 
						|
 | 
						|
                    EditControl = null;
 | 
						|
                    RenderControl = null;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("EditorParams", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EditorType
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the default cell editor type. This is the default
 | 
						|
        /// control type used to perform the actual modification of the cell value
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(typeof(GridTextBoxXEditControl)), Category("Data")]
 | 
						|
        [Description("Indicates the default cell editor type. This is the default control type used to perform the actual modification of the cell value.")]
 | 
						|
        [TypeConverter(typeof(EditTypeConverter))]
 | 
						|
        [Editor("DevComponents.SuperGrid.Design.EditTypeEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))]
 | 
						|
        public Type EditorType
 | 
						|
        {
 | 
						|
            get { return (_EditorType); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _EditorType)
 | 
						|
                {
 | 
						|
                    _EditorType = value;
 | 
						|
 | 
						|
                    EditControl = null;
 | 
						|
                    RenderControl = null;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("EditorType", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EffectiveCellMergeMode
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Gets the "effective" CellMergeMode for the column (ie. returns
 | 
						|
        ///the GridPanel CellMergeMode if column CellMergeMode is NotSet)
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public CellMergeMode EffectiveCellMergeMode
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_CellMergeMode != CellMergeMode.NotSet)
 | 
						|
                    return (_CellMergeMode);
 | 
						|
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                return ((panel != null) ? panel.CellMergeMode : CellMergeMode.None);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EnableFiltering
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether filtering is enabled for the column
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(Tbool.NotSet), Category("Filtering")]
 | 
						|
        [Description("Indicates whether filtering is enabled for the column.")]
 | 
						|
        public Tbool EnableFiltering
 | 
						|
        {
 | 
						|
            get { return (_EnableFiltering); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_EnableFiltering != value)
 | 
						|
                {
 | 
						|
                    _EnableFiltering = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("EnableFiltering", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EnableGroupHeaderMarkup
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether text-markup support is enabled for the Group Header Text
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Grouping")]
 | 
						|
        [Description("Indicates whether text-markup support is enabled for the Group Header Text.")]
 | 
						|
        public bool EnableGroupHeaderMarkup
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.EnableGroupHeaderMarkup)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (EnableGroupHeaderMarkup != value)
 | 
						|
                {
 | 
						|
                    SetState(Cs.EnableGroupHeaderMarkup, value);
 | 
						|
 | 
						|
                    if (GridPanel != null)
 | 
						|
                        GridPanel.NeedsGrouped = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("EnableGroupHeaderMarkup", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EnableHeaderMarkup
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether text-markup support is enabled for the HeaderText
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Appearance")]
 | 
						|
        [Description("Indicates whether text-markup support is enabled for the HeaderText.")]
 | 
						|
        public bool EnableHeaderMarkup
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.EnableHeaderMarkup)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (EnableHeaderMarkup != value)
 | 
						|
                {
 | 
						|
                    SetState(Cs.EnableHeaderMarkup, value);
 | 
						|
 | 
						|
                    MarkupHeaderTextChanged();
 | 
						|
 | 
						|
                    OnPropertyChangedEx("EnableHeaderMarkup", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterAutoScan
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether the column's FilterPopup
 | 
						|
        /// is filled by auto-scanning the column contents.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Filtering")]
 | 
						|
        [Description("Indicates whether the column's FilterPopup is filled by auto-scanning the column contents.")]
 | 
						|
        public bool FilterAutoScan
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.FilterAutoScan)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (FilterAutoScan != value)
 | 
						|
                {
 | 
						|
                    SetState(Cs.FilterAutoScan, value);
 | 
						|
                    SetState(Cs.NeedsFilterScan, true);
 | 
						|
 | 
						|
                    if (value == false)
 | 
						|
                        FilterScan = null;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("FilterAutoScan", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterDisplayValue
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the value used to filter grid rows.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public object FilterDisplayValue
 | 
						|
        {
 | 
						|
            get { return (_FilterDisplayValue); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FilterDisplayValue != value)
 | 
						|
                {
 | 
						|
                    _FilterDisplayValue = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("FilterDisplayValue");
 | 
						|
 | 
						|
                    if (GridPanel != null)
 | 
						|
                    {
 | 
						|
                        if (GridPanel.ColumnHeader.Visible == true)
 | 
						|
                            GridPanel.ColumnHeader.InvalidateRender();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterEditType
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the filter edit type
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(FilterEditType.Auto), Category("Filtering")]
 | 
						|
        [Description("Indicates the filter edit type).")]
 | 
						|
        public FilterEditType FilterEditType
 | 
						|
        {
 | 
						|
            get { return (_FilterEditType); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FilterEditType != value)
 | 
						|
                {
 | 
						|
                    _FilterEditType = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("FilterEditType", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterExpr
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the value used to filter grid rows.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public string FilterExpr
 | 
						|
        {
 | 
						|
            get { return (_FilterExpr); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if ("".Equals(value))
 | 
						|
                    value = null;
 | 
						|
 | 
						|
                if ((_FilterExpr == null && _FilterExpr != value) ||
 | 
						|
                    (_FilterExpr != null && _FilterExpr.Equals(value) == false))
 | 
						|
                {
 | 
						|
                    _FilterExpr = value;
 | 
						|
 | 
						|
                    _FilterEval = null;
 | 
						|
 | 
						|
                    if (_FilterExpr == null)
 | 
						|
                    {
 | 
						|
                        _FilterValue = null;
 | 
						|
                        _FilterDisplayValue = null;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (GridPanel != null)
 | 
						|
                    {
 | 
						|
                        GridPanel.NeedToUpdateDataFilter = true;
 | 
						|
                        GridPanel.NeedsGrouped = true;
 | 
						|
                    }
 | 
						|
 | 
						|
                    OnPropertyChangedEx("FilterExpr", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterMatchType
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the filter data match type (how data elements are matched)
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(FilterMatchType.NotSet), Category("Filtering")]
 | 
						|
        [Description("Indicates the filter data match style (how data elements are matched).")]
 | 
						|
        public FilterMatchType FilterMatchType
 | 
						|
        {
 | 
						|
            get { return (_FilterMatchType); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FilterMatchType != value)
 | 
						|
                {
 | 
						|
                    _FilterMatchType = value;
 | 
						|
 | 
						|
                    FilterEval = null;
 | 
						|
 | 
						|
                    if (GridPanel != null)
 | 
						|
                        GridPanel.NeedToUpdateDataFilter = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("FilterMatchType", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region GetFilterMatchType
 | 
						|
 | 
						|
        internal FilterMatchType GetFilterMatchType()
 | 
						|
        {
 | 
						|
            if (_FilterMatchType != FilterMatchType.NotSet)
 | 
						|
                return (_FilterMatchType);
 | 
						|
 | 
						|
            if (GridPanel != null)
 | 
						|
                return (GridPanel.GetFilterMatchType());
 | 
						|
 | 
						|
            return (FilterMatchType.None);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterPopupMaxItems
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the filter popup maximum number of drop-down items
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(100), Category("Filtering")]
 | 
						|
        [Description("Indicates the filter popup maximum number of drop-down items.")]
 | 
						|
        public int FilterPopupMaxItems
 | 
						|
        {
 | 
						|
            get { return (_FilterPopupMaxItems); }
 | 
						|
            set { _FilterPopupMaxItems = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterPopupSize
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the filter popup size
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public Size FilterPopupSize
 | 
						|
        {
 | 
						|
            get { return (_FilterPopupSize); }
 | 
						|
            set { _FilterPopupSize = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterRowStyles
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the visual styles assigned to the Filter Row
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null), Category("Style")]
 | 
						|
        [Description("Indicates visual style assigned to the Filter Row.")]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public FilterColumnHeaderVisualStyles FilterRowStyles
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_FilterRowStyles == null)
 | 
						|
                {
 | 
						|
                    _FilterRowStyles = new FilterColumnHeaderVisualStyles();
 | 
						|
 | 
						|
                    StyleVisualChangeHandler(null, _FilterRowStyles);
 | 
						|
                }
 | 
						|
 | 
						|
                return (_FilterRowStyles);
 | 
						|
            }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FilterRowStyles != value)
 | 
						|
                {
 | 
						|
                    StyleVisualChangeHandler(_FilterRowStyles, value);
 | 
						|
 | 
						|
                    _FilterRowStyles = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("FilterRowStyles", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FilterValue
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the current filter value (the value that is
 | 
						|
        /// loaded into, or retrieved from, the editing filter control
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public object FilterValue
 | 
						|
        {
 | 
						|
            get { return (_FilterValue); }
 | 
						|
            set { _FilterValue = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region FillWeight
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets a value which, when AutoSizeMode is Fill,
 | 
						|
        /// represents the width of the column relative to the widths
 | 
						|
        /// of other fill-mode columns (default value is 100).
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(100), Category("Sizing")]
 | 
						|
        [Description("Indicates a value which, when AutoSizeMode is Fill, represents the width of the column relative to the widths of other fill-mode columns (default value is 100).")]
 | 
						|
        public int FillWeight
 | 
						|
        {
 | 
						|
            get { return (_FillWeight); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _FillWeight)
 | 
						|
                {
 | 
						|
                    _FillWeight = value;
 | 
						|
 | 
						|
                    GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                    if (panel != null)
 | 
						|
                        panel.NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("FillWeight", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GroupBoxEffects
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets how the column interacts with the GroupBox
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(GroupBoxEffects.NotSet), Category("Grouping")]
 | 
						|
        [Description("Indicates how the column interacts with the GroupBox.")]
 | 
						|
        public GroupBoxEffects GroupBoxEffects
 | 
						|
        {
 | 
						|
            get { return (_GroupBoxEffects); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_GroupBoxEffects != value)
 | 
						|
                {
 | 
						|
                    _GroupBoxEffects = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("GroupBoxEffects");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GroupDirection
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the grouping sort direction (ie. ascending or descending).
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public SortDirection GroupDirection
 | 
						|
        {
 | 
						|
            get { return (_GroupDirection); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_GroupDirection != value)
 | 
						|
                {
 | 
						|
                    _GroupDirection = value;
 | 
						|
 | 
						|
                    OnGroupDirectionChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region OnGroupDirectionChanged
 | 
						|
 | 
						|
        private void OnGroupDirectionChanged()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                panel.NeedsGroupSorted = true;
 | 
						|
 | 
						|
                if (panel.VirtualMode == true)
 | 
						|
                    panel.VirtualRows.Clear();
 | 
						|
 | 
						|
                OnPropertyChangedEx("GroupDirection", VisualChangeType.Layout);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region HeaderText
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the column header text. If the HeaderText is null
 | 
						|
        /// then the Name of the columns is used in its place.
 | 
						|
        /// </summary>
 | 
						|
        [Localizable(true), DefaultValue(null), Category("Appearance")]
 | 
						|
        [Description("Indicates the column header text. If the HeaderText is null then the Name of the columns is used in its place.")]
 | 
						|
        public string HeaderText
 | 
						|
        {
 | 
						|
            get { return (_HeaderText); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_HeaderText != value)
 | 
						|
                {
 | 
						|
                    _HeaderText = value;
 | 
						|
 | 
						|
                    MarkupHeaderTextChanged();
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("HeaderText", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region HeaderStyles
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the visual styles assigned to the Column Header
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null), Category("Style")]
 | 
						|
        [Description("Indicates visual style assigned to the Column Header.")]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public ColumnHeaderVisualStyles HeaderStyles
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_HeaderStyles == null)
 | 
						|
                {
 | 
						|
                    _HeaderStyles = new ColumnHeaderVisualStyles();
 | 
						|
 | 
						|
                    StyleVisualChangeHandler(null, _HeaderStyles);
 | 
						|
                }
 | 
						|
 | 
						|
                return (_HeaderStyles);
 | 
						|
            }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_HeaderStyles != value)
 | 
						|
                {
 | 
						|
                    StyleVisualChangeHandler(_HeaderStyles, value);
 | 
						|
 | 
						|
                    _HeaderStyles = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("HeaderStyles", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InfoImage
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the default cell informational Image
 | 
						|
        /// (the image to display when InfoText is non-empty).
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null), Category("Appearance")]
 | 
						|
        [Description("Indicates the default cell informational Image (the image to display when InfoText is non-empty).")]
 | 
						|
        public Image InfoImage
 | 
						|
        {
 | 
						|
            get { return (_InfoImage); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_InfoImage != value)
 | 
						|
                {
 | 
						|
                    if (_InfoImageCache != null)
 | 
						|
                    {
 | 
						|
                        _InfoImageCache.Dispose();
 | 
						|
                        _InfoImageCache = null;
 | 
						|
                    }
 | 
						|
 | 
						|
                    _InfoImage = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("InfoImage", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region GetInfoImage
 | 
						|
 | 
						|
        internal Image GetInfoImage()
 | 
						|
        {
 | 
						|
            if (_InfoImage != null)
 | 
						|
                return (_InfoImage);
 | 
						|
 | 
						|
            if (_InfoImageCache == null)
 | 
						|
                _InfoImageCache = GridPanel.GetResourceImage("InfoImage");
 | 
						|
 | 
						|
            return (_InfoImageCache);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InfoImageAlignment
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets how the InfoImage is aligned within the cell
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(Alignment.MiddleRight), Category("Appearance")]
 | 
						|
        [Description("Indicates how the InfoImage is aligned within the cell.")]
 | 
						|
        public Alignment InfoImageAlignment
 | 
						|
        {
 | 
						|
            get { return (_InfoImageAlignment); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_InfoImageAlignment != value)
 | 
						|
                {
 | 
						|
                    _InfoImageAlignment = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("InfoImageAlignment");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InfoImageOverlay
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets how the InfoImage is overlayed with respect to the cell edit control.
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(true), Category("Appearance")]
 | 
						|
        [Description("Indicates how the InfoImage is overlayed with respect to the cell edit control.")]
 | 
						|
        public bool InfoImageOverlay
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.InfoImageOverlay)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != InfoImageOverlay)
 | 
						|
                {
 | 
						|
                    SetState(Cs.InfoImageOverlay, value);
 | 
						|
 | 
						|
                    OnPropertyChanged("InfoImageOverlay");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsDataBound
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column is data bound.
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsDataBound
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                    return (panel.DataBinder.IsColumnDataBound(this));
 | 
						|
 | 
						|
                return (false); 
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsFilteringEnabled
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether filtering is enabled for the column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsFilteringEnabled
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    if (panel.EnableFiltering == false)
 | 
						|
                        return (false);
 | 
						|
 | 
						|
                    if (_EnableFiltering != Tbool.NotSet)
 | 
						|
                        return (_EnableFiltering == Tbool.True);
 | 
						|
 | 
						|
                    return (panel.EnableColumnFiltering == true);
 | 
						|
                }
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsGroupColumn
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column is a Grouping column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsGroupColumn
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                    return (panel.GroupColumns.Contains(this));
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsHFrozen
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column is horizontally frozen
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsHFrozen
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = Parent as GridPanel;
 | 
						|
 | 
						|
                if (panel != null && panel.IsSubPanel == false)
 | 
						|
                {
 | 
						|
                    if (panel.FrozenColumnCount > 0)
 | 
						|
                    {
 | 
						|
                        int n = panel.Columns.GetDisplayIndex(this);
 | 
						|
 | 
						|
                        if (n < panel.FrozenColumnCount)
 | 
						|
                            return (true);
 | 
						|
 | 
						|
                        ColumnGroupHeader cgh = panel.ColumnHeader.GetColumnGroupHeader(n);
 | 
						|
 | 
						|
                        if (cgh != null)
 | 
						|
                            return (panel.ColumnHeader.IsGroupHeaderHFrozen(panel, cgh));
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsOnScreen
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column is visibly on screen.
 | 
						|
        ///</summary>
 | 
						|
        [Browsable (false)]
 | 
						|
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsOnScreen
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (Visible == true)
 | 
						|
                {
 | 
						|
                    GridPanel panel = Parent as GridPanel;
 | 
						|
 | 
						|
                    if (panel != null)
 | 
						|
                    {
 | 
						|
                        Rectangle t = SViewRect;
 | 
						|
                        Rectangle bounds = BoundsRelative;
 | 
						|
 | 
						|
                        if (IsHFrozen == false)
 | 
						|
                        {
 | 
						|
                            bounds.X -= HScrollOffset;
 | 
						|
 | 
						|
                            GridColumn fcol = panel.Columns.GetLastVisibleFrozenColumn();
 | 
						|
 | 
						|
                            if (fcol != null)
 | 
						|
                            {
 | 
						|
                                int n = fcol.BoundsRelative.Right - t.X;
 | 
						|
 | 
						|
                                t.X = fcol.BoundsRelative.Right;
 | 
						|
                                t.Width -= n;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
 | 
						|
                        if (panel.IsVFrozen == false)
 | 
						|
                            bounds.Y -= VScrollOffset;
 | 
						|
 | 
						|
                        return (t.IntersectsWith(bounds));
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsPrimaryColumn
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column is the Primary column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsPrimaryColumn
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = Parent as GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                    return (panel.PrimaryColumn == this);
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsSelectable
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column can be selected.
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsSelectable
 | 
						|
        {
 | 
						|
            get { return (AllowSelection == true); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsSelected
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets whether the column is selected
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsSelected
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    if (_SelectionUpdateCount != panel.SelectionUpdateCount)
 | 
						|
                    {
 | 
						|
                        SetState(Cs.Selected, panel.IsItemSelected(this));
 | 
						|
                        _SelectionUpdateCount = panel.SelectionUpdateCount;
 | 
						|
                    }
 | 
						|
 | 
						|
                    return (TestState(Cs.Selected));
 | 
						|
                }
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    if (panel.SetSelected(this, value) == true)
 | 
						|
                    {
 | 
						|
                        SetState(Cs.Selected, value);
 | 
						|
                        _SelectionUpdateCount = panel.SelectionUpdateCount;
 | 
						|
 | 
						|
                        InvalidateRender();
 | 
						|
 | 
						|
                        panel.ColumnHeader.InvalidateRender();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsSortColumn
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets whether the column is a Sort column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public bool IsSortColumn
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                    return (panel.SortColumns.Contains(this));
 | 
						|
 | 
						|
                return (false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MarkRowDirtyOnCellValueChange
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether cell Value changes within this column
 | 
						|
        /// will result in the associated Row being marked as 'dirty'
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Data")]
 | 
						|
        [Description("Indicates whether cell Value changes within this column will result in the associated Row being marked as 'dirty'.")]
 | 
						|
        public bool MarkRowDirtyOnCellValueChange
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.MarkRowDirtyOnCellValueChange)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != MarkRowDirtyOnCellValueChange)
 | 
						|
                {
 | 
						|
                    SetState(Cs.MarkRowDirtyOnCellValueChange, value);
 | 
						|
 | 
						|
                    OnPropertyChanged("MarkRowDirtyOnCellValueChange");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MinimumWidth
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the minimum column width (default value is 5)
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(5), Category("Sizing")]
 | 
						|
        [Description("Indicates the minimum column width (default value is 5).")]
 | 
						|
        public int MinimumWidth
 | 
						|
        {
 | 
						|
            get { return _MinimumWidth; }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_MinimumWidth != value)
 | 
						|
                {
 | 
						|
                    if (value < 0)
 | 
						|
                        throw new ArgumentException("Value must be 0 or greater.");
 | 
						|
 
 | 
						|
                    _MinimumWidth = value;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("MinimumWidth", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Name
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the Column name.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null)]
 | 
						|
        [Description("Indicates the Column name.")]
 | 
						|
        public string Name
 | 
						|
        {
 | 
						|
            get { return (_Name); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_Name != value)
 | 
						|
                {
 | 
						|
                    _Name = value;
 | 
						|
 | 
						|
                    if (String.IsNullOrEmpty(_HeaderText) == true)
 | 
						|
                        OnPropertyChangedEx("Name", VisualChangeType.Layout);
 | 
						|
                    else
 | 
						|
                        OnPropertyChanged("Name");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region NextVisibleColumn
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets the next visible column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public GridColumn NextVisibleColumn
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                    return (panel.Columns.GetNextVisibleColumn(this));
 | 
						|
 | 
						|
                return (null);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region NullString
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the default text to display for null values. 
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null), Category("Data")]
 | 
						|
        [Description("Indicates the default text to display for null values.")]
 | 
						|
        public string NullString
 | 
						|
        {
 | 
						|
            get { return (_NullString); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_NullString != value)
 | 
						|
                {
 | 
						|
                    _NullString = value;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("NullString", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PrevVisibleColumn
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets the previous visible column
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public GridColumn PrevVisibleColumn
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                    return (panel.Columns.GetPrevVisibleColumn(this));
 | 
						|
 | 
						|
                return (null);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ReadOnly
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether the user can change column cell contents
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Behavior")]
 | 
						|
        [Description("Indicates whether the user can change column cell contents.")]
 | 
						|
        public bool ReadOnly
 | 
						|
        {
 | 
						|
            get { return (TestState(Cs.ReadOnly)); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (ReadOnly != value)
 | 
						|
                {
 | 
						|
                    SetState(Cs.ReadOnly, value);
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("ReadOnly", VisualChangeType.Render);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region RenderControl
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets the default render control for the column cells
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public IGridCellEditControl RenderControl
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_RenderControl == null)
 | 
						|
                {
 | 
						|
                    RenderControl = (_RenderType != null)
 | 
						|
                                        ? GetEditControl(_RenderType, _RenderParams)
 | 
						|
                                        : GetEditControl(_EditorType, _EditorParams);
 | 
						|
 | 
						|
                    if (_RenderControl != null)
 | 
						|
                    {
 | 
						|
                        if (_RenderControl.EditorPanel.Parent == null && SuperGrid != null)
 | 
						|
                            SuperGrid.Controls.Add(_RenderControl.EditorPanel);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                return (_RenderControl);
 | 
						|
            }
 | 
						|
 | 
						|
            internal set
 | 
						|
            {
 | 
						|
                if (_RenderControl != value)
 | 
						|
                {
 | 
						|
                    if (_RenderControl != null)
 | 
						|
                    {
 | 
						|
                        if (_RenderControl.EditorPanel.Parent != null)
 | 
						|
                        {
 | 
						|
                            SuperGrid.Controls.Remove(_RenderControl.EditorPanel);
 | 
						|
 | 
						|
                            _RenderControl.EditorPanel.Visible = false;
 | 
						|
 | 
						|
                            if (_RenderControl.EditorPanel.Controls.Count > 0)
 | 
						|
                                _RenderControl.EditorPanel.Controls[0].Visible = false;
 | 
						|
 | 
						|
                            _RenderControl.EditorPanel.Dispose();
 | 
						|
                        }
 | 
						|
 | 
						|
                        _RenderControl.EditorCellBitmap = null;
 | 
						|
 | 
						|
                        ((Control)_RenderControl).Dispose();
 | 
						|
 | 
						|
                        InvalidateLayout();
 | 
						|
                    }
 | 
						|
 | 
						|
                    _RenderControl = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region RenderParams
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets an array of arguments that match in number,
 | 
						|
        /// order, and type the parameters of the RenderControl constructor
 | 
						|
        /// to invoke. If empty or null, the default constructor is invoked.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public object[] RenderParams
 | 
						|
        {
 | 
						|
            get { return (_RenderParams); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_RenderParams != value)
 | 
						|
                {
 | 
						|
                    _RenderParams = value;
 | 
						|
 | 
						|
                    RenderControl = null;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("RenderParams", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region RenderType
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the cell render control type (defaults to EditorType, when not set)
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(null), Category("Data")]
 | 
						|
        [Description("Indicates cell render control type (defaults to EditorType, when not set)")]
 | 
						|
        [TypeConverter(typeof(EditTypeConverter))]
 | 
						|
        [Editor("DevComponents.SuperGrid.Design.EditTypeEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))]
 | 
						|
        public Type RenderType
 | 
						|
        {
 | 
						|
            get { return (_RenderType); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _RenderType)
 | 
						|
                {
 | 
						|
                    _RenderType = value;
 | 
						|
 | 
						|
                    RenderControl = null;
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("RenderType", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ResizeMode
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets how the column is resized by the user
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(ColumnResizeMode.MoveFollowingElements), Category("Sizing")]
 | 
						|
        [Description("Indicates how the column is resized by the user.")]
 | 
						|
        public ColumnResizeMode ResizeMode
 | 
						|
        {
 | 
						|
            get { return (_ResizeMode); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_ResizeMode != value)
 | 
						|
                {
 | 
						|
                    _ResizeMode = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("ResizeMode");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SelectedCellCount
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets the current count of selected cells in the column.
 | 
						|
        ///</summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public int SelectedCellCount
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                int n = 0;
 | 
						|
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    if (panel.VirtualMode == true)
 | 
						|
                    {
 | 
						|
                        foreach (SelectedRange range in _SelectedCells.Ranges)
 | 
						|
                            n += range.Count;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        foreach (SelectedRange range in _SelectedCells.Ranges)
 | 
						|
                        {
 | 
						|
                            for (int i = range.StartIndex; i <= range.EndIndex; i++)
 | 
						|
                            {
 | 
						|
                                GridRow row = panel.GetRowFromIndex(i) as GridRow;
 | 
						|
 | 
						|
                                if (row != null)
 | 
						|
                                {
 | 
						|
                                    if (row.Cells.Count > _ColumnIndex)
 | 
						|
                                    {
 | 
						|
                                        if (row.Cells[_ColumnIndex].AllowSelection == true)
 | 
						|
                                            n++;
 | 
						|
                                    }
 | 
						|
                                    else
 | 
						|
                                    {
 | 
						|
                                        n++;
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                return (n);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ShowCustomFilterExpr
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets whether the filter expression is displayed in the panel area
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(Tbool.NotSet), Category("Filtering")]
 | 
						|
        [Description("Indicates whether the filter expression is displayed in the panel area.")]
 | 
						|
        public Tbool ShowPanelFilterExpr
 | 
						|
        {
 | 
						|
            get { return (_ShowPanelFilterExpr); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_ShowPanelFilterExpr != value)
 | 
						|
                {
 | 
						|
                    _ShowPanelFilterExpr = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("ShowPanelFilterExpr", VisualChangeType.Render);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SortCycle
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets how the sort direction cycles
 | 
						|
        /// when the column header is clicked to sort.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true)]
 | 
						|
        [DefaultValue(SortCycle.NotSet), Category("Sorting")]
 | 
						|
        [Description("Indicates how the sort direction cycles when the column header is clicked to sort.")]
 | 
						|
        public SortCycle SortCycle
 | 
						|
        {
 | 
						|
            get { return (_SortCycle); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_SortCycle != value)
 | 
						|
                {
 | 
						|
                    _SortCycle = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("SortCycle");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SortDirection
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the Sorting direction (ascending or descending)
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DefaultValue(SortDirection.None), Category("Sorting")]
 | 
						|
        [Description("Indicates the Sorting direction (ascending or descending).")]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public SortDirection SortDirection
 | 
						|
        {
 | 
						|
            get { return (_SortDirection); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_SortDirection != value)
 | 
						|
                {
 | 
						|
                    _SortDirection = value;
 | 
						|
 | 
						|
                    OnSortDirectionChanged();
 | 
						|
                    OnPropertyChangedEx("SortDirection", VisualChangeType.Render);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region OnSortDirectionChanged
 | 
						|
 | 
						|
        private void OnSortDirectionChanged()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                panel.NeedsSorted = true;
 | 
						|
                panel.ColumnHeader.InvalidateHeader(panel, this);
 | 
						|
 | 
						|
                if (panel.VirtualMode == true)
 | 
						|
                    panel.VirtualRows.Clear();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SortIndicator
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the sort indicator
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(SortIndicator.Auto), Category("Sorting")]
 | 
						|
        [Description("Indicates the Sorting indicator.")]
 | 
						|
        public SortIndicator SortIndicator
 | 
						|
        {
 | 
						|
            get { return (_SortIndicator); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_SortIndicator != value)
 | 
						|
                {
 | 
						|
                    _SortIndicator = value;
 | 
						|
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    OnSortIndicatorChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region OnSortIndicatorChanged
 | 
						|
 | 
						|
        private void OnSortIndicatorChanged()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
                panel.ColumnHeader.InvalidateRender();
 | 
						|
 | 
						|
            OnPropertyChanged("SortIndicator");
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ToolTip
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the ToolTip text for the column header.
 | 
						|
        ///</summary>
 | 
						|
        [Localizable(true), DefaultValue(null), Category("Appearance")]
 | 
						|
        [Description("Indicates ththe ToolTip text for the column header.")]
 | 
						|
        public string ToolTip
 | 
						|
        {
 | 
						|
            get { return (_ToolTip); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_ToolTip != value)
 | 
						|
                {
 | 
						|
                    _ToolTip = value;
 | 
						|
 | 
						|
                    OnPropertyChanged("ToolTip");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Width
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the column width.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(100), Category("Sizing")]
 | 
						|
        [Description("Indicates the column width.")]
 | 
						|
        public int Width
 | 
						|
        {
 | 
						|
            get { return _Width; }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_Width != value)
 | 
						|
                {
 | 
						|
                    _Width = value;
 | 
						|
 | 
						|
                    OnWidthChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region OnWidthChanged
 | 
						|
 | 
						|
        private void OnWidthChanged()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
                SuperGrid.DoColumnResizedEvent(panel, this);
 | 
						|
 | 
						|
            NeedsMeasured = true;
 | 
						|
 | 
						|
            OnPropertyChangedEx("Width", VisualChangeType.Layout);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region TestState
 | 
						|
 | 
						|
        private bool TestState(Cs state)
 | 
						|
        {
 | 
						|
            return ((_States & state) == state);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SetState
 | 
						|
 | 
						|
        private void SetState(Cs state, bool value)
 | 
						|
        {
 | 
						|
            if (value == true)
 | 
						|
                _States |= state;
 | 
						|
            else
 | 
						|
                _States &= ~state;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnEvent processing
 | 
						|
 | 
						|
        #region OnDisplayIndexChanged
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises DisplayIndexChanged event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnDisplayIndexChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            EventHandler handler = DisplayIndexChanged;
 | 
						|
 | 
						|
            if (handler != null)
 | 
						|
                handler(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MeasureOverride
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Performs the layout of the item and sets the Size property to size that item will take.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="layoutInfo">Layout information.</param>
 | 
						|
        /// <param name="stateInfo"></param>
 | 
						|
        /// <param name="constraintSize"></param>
 | 
						|
        protected override void MeasureOverride(
 | 
						|
            GridLayoutInfo layoutInfo, GridLayoutStateInfo stateInfo, Size constraintSize)
 | 
						|
        {
 | 
						|
            if (NeedsResized == true || NeedsMeasured == true || stateInfo.GridPanel.NeedsMeasured == true)
 | 
						|
            {
 | 
						|
                Size sizeNeeded = Size.Empty;
 | 
						|
 | 
						|
                ColumnAutoSizeMode autoSizeMode = GetAutoSizeMode();
 | 
						|
 | 
						|
                int baseWidth = Dpi.Width(MinimumWidth);
 | 
						|
 | 
						|
                switch (autoSizeMode)
 | 
						|
                {
 | 
						|
                    case ColumnAutoSizeMode.AllCells:
 | 
						|
                    case ColumnAutoSizeMode.DisplayedCells:
 | 
						|
                    case ColumnAutoSizeMode.ColumnHeader:
 | 
						|
                        baseWidth = Math.Max(baseWidth, _HeaderSize.Width);
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
 | 
						|
                int height = 0;
 | 
						|
 | 
						|
                switch (autoSizeMode)
 | 
						|
                {
 | 
						|
                    case ColumnAutoSizeMode.None:
 | 
						|
                        sizeNeeded.Width = Math.Max(baseWidth, Dpi.Width(Width));
 | 
						|
                        break;
 | 
						|
 | 
						|
                    case ColumnAutoSizeMode.AllCells:
 | 
						|
                    case ColumnAutoSizeMode.AllCellsExceptHeader:
 | 
						|
                        sizeNeeded.Width = GetColumnWidth(layoutInfo, stateInfo,
 | 
						|
                            autoSizeMode, stateInfo.GridPanel.Rows, baseWidth, 0, ref height);
 | 
						|
                        break;
 | 
						|
 | 
						|
                    case ColumnAutoSizeMode.ColumnHeader:
 | 
						|
                        sizeNeeded = new Size(baseWidth, 0);
 | 
						|
                        MarkRowsToMeasure(stateInfo.GridPanel.Rows);
 | 
						|
                        break;
 | 
						|
 | 
						|
                    default:
 | 
						|
                        sizeNeeded.Width = GetColumnWidth(layoutInfo, stateInfo, autoSizeMode,
 | 
						|
                            stateInfo.GridPanel.Rows, baseWidth, layoutInfo.ClientBounds.Height, ref height);
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
 | 
						|
                Size = sizeNeeded;
 | 
						|
 | 
						|
                NeedsResized = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region GetColumnWidth
 | 
						|
 | 
						|
        private int GetColumnWidth(GridLayoutInfo layoutInfo,
 | 
						|
            GridLayoutStateInfo stateInfo, ColumnAutoSizeMode autoSizeMode,
 | 
						|
            IEnumerable<GridElement> items, int width, int maxHeight, ref int height)
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                if (panel.VirtualMode == true)
 | 
						|
                {
 | 
						|
                    if (panel.VirtualRowCount > 0)
 | 
						|
                    {
 | 
						|
                        //panel.VirtualRows.Clear();
 | 
						|
 | 
						|
                        int n = GetVirtualColumnWidthEx(layoutInfo,
 | 
						|
                            stateInfo, autoSizeMode, ref height);
 | 
						|
 | 
						|
                        width = Math.Max(width, n);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    int n = GetColumnWidthEx(layoutInfo,
 | 
						|
                            stateInfo, autoSizeMode, items, maxHeight, ref height);
 | 
						|
 | 
						|
                    width = Math.Max(width, n);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (width);
 | 
						|
        }
 | 
						|
 | 
						|
        #region GetVirtualColumnWidthEx
 | 
						|
 | 
						|
        private int GetVirtualColumnWidthEx(GridLayoutInfo layoutInfo,
 | 
						|
            GridLayoutStateInfo stateInfo, ColumnAutoSizeMode autoSizeMode, ref int height)
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            int start = panel.FirstOnScreenRowIndex;
 | 
						|
            int end = panel.LastOnScreenRowIndex;
 | 
						|
 | 
						|
            int width = 0;
 | 
						|
 | 
						|
            for (int i = start; i <= end; i++)
 | 
						|
            {
 | 
						|
                GridRow row = panel.VirtualRows[i];
 | 
						|
 | 
						|
                if (ColumnIndex < row.GridPanel.Columns.Count)
 | 
						|
                {
 | 
						|
                    if (ColumnIndex < row.Cells.Count)
 | 
						|
                    {
 | 
						|
                        GridCell cell = row.Cells[ColumnIndex];
 | 
						|
 | 
						|
                        MeasureCell(layoutInfo, stateInfo, autoSizeMode, row, cell);
 | 
						|
 | 
						|
                        width = Math.Max(width, cell.CellSize.Width);
 | 
						|
                        height += cell.Size.Height;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        width = Math.Max(width, Width);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (width);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetColumnWidthEx
 | 
						|
 | 
						|
        private int GetColumnWidthEx(GridLayoutInfo layoutInfo,
 | 
						|
            GridLayoutStateInfo stateInfo, ColumnAutoSizeMode autoSizeMode,
 | 
						|
            IEnumerable<GridElement> items, int maxHeight, ref int height)
 | 
						|
        {
 | 
						|
            int width = 0;
 | 
						|
 | 
						|
            foreach (GridElement item in items)
 | 
						|
            {
 | 
						|
                GridRow row = item as GridRow;
 | 
						|
 | 
						|
                if (row != null && row.Visible == true)
 | 
						|
                {
 | 
						|
                    if (ColumnIndex < row.GridPanel.Columns.Count)
 | 
						|
                    {
 | 
						|
                        if (ColumnIndex < row.Cells.Count)
 | 
						|
                        {
 | 
						|
                            GridCell cell = row.Cells[ColumnIndex];
 | 
						|
 | 
						|
                            if (maxHeight <= 0 || height < maxHeight)
 | 
						|
                            {
 | 
						|
                                MeasureCell(layoutInfo, stateInfo, autoSizeMode, row, cell);
 | 
						|
 | 
						|
                                width = Math.Max(width, cell.CellSize.Width);
 | 
						|
                                height += cell.Size.Height;
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                cell.NeedsMeasured = true;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            width = Math.Max(width, Width);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (row.Rows != null && row.Expanded == true)
 | 
						|
                    {
 | 
						|
                        GridLayoutStateInfo itemStateInfo = new
 | 
						|
                            GridLayoutStateInfo(stateInfo.GridPanel, stateInfo.IndentLevel + 1);
 | 
						|
 | 
						|
                        width = GetColumnWidth(layoutInfo, itemStateInfo,
 | 
						|
                            autoSizeMode, row.Rows, width, maxHeight, ref height);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    GridGroup group = item as GridGroup;
 | 
						|
 | 
						|
                    if (group != null)
 | 
						|
                    {
 | 
						|
                        GridPanel panel = group.GridPanel;
 | 
						|
 | 
						|
                        int n = GetColumnWidthEx(layoutInfo,
 | 
						|
                            stateInfo, autoSizeMode, group.Rows, maxHeight, ref height);
 | 
						|
 | 
						|
                        n += panel.TreeButtonIndent + 
 | 
						|
                            Dpi.Width(stateInfo.IndentLevel * panel.LevelIndentSize.Width);
 | 
						|
 | 
						|
                        width = Math.Max(width, n);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (width);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MeasureCell
 | 
						|
 | 
						|
        private void MeasureCell(GridLayoutInfo layoutInfo, GridLayoutStateInfo stateInfo,
 | 
						|
            ColumnAutoSizeMode autoSizeMode, GridRow row, GridCell cell)
 | 
						|
        {
 | 
						|
            if (cell.NeedsMeasured || NeedsMeasured || 
 | 
						|
                row.NeedsMeasured || stateInfo.GridPanel.NeedsMeasured)
 | 
						|
            {
 | 
						|
                int rowHeight = row.GetRowHeight();
 | 
						|
 | 
						|
                if (rowHeight > 0)
 | 
						|
                {
 | 
						|
                    Size size = new Size(Width, rowHeight);
 | 
						|
 | 
						|
                    if (autoSizeMode != ColumnAutoSizeMode.None)
 | 
						|
                    {
 | 
						|
                        cell.Measure(layoutInfo, stateInfo, Size.Empty);
 | 
						|
 | 
						|
                        size.Width = cell.Size.Width;
 | 
						|
                        size.Width += GetColumnIndent(stateInfo.IndentLevel);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        cell.Measure(layoutInfo, stateInfo, size);
 | 
						|
                    }
 | 
						|
 | 
						|
                    cell.Size = size;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    Size size = Size.Empty;
 | 
						|
 | 
						|
                    if (autoSizeMode == ColumnAutoSizeMode.None)
 | 
						|
                    {
 | 
						|
                        size.Width = Width;
 | 
						|
                        size.Width -= GetColumnIndent(stateInfo.IndentLevel);
 | 
						|
                        size.Width = Math.Max(1, size.Width);
 | 
						|
                    }
 | 
						|
 | 
						|
                    cell.Measure(layoutInfo, stateInfo, new Size(size.Width, 0));
 | 
						|
 | 
						|
                    if (autoSizeMode != ColumnAutoSizeMode.None)
 | 
						|
                    {
 | 
						|
                        size = cell.Size;
 | 
						|
                        size.Width += GetColumnIndent(stateInfo.IndentLevel);
 | 
						|
                        cell.Size = size;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        size = cell.Size;
 | 
						|
                        size.Width = Width;
 | 
						|
                        cell.Size = size;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                cell.CellSize = cell.Size;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MarkRowsToMeasure
 | 
						|
 | 
						|
        private void MarkRowsToMeasure(IEnumerable<GridElement> items)
 | 
						|
        {
 | 
						|
            foreach (GridElement item in items)
 | 
						|
            {
 | 
						|
                GridRow row = item as GridRow;
 | 
						|
 | 
						|
                if (row != null && row.Visible == true)
 | 
						|
                {
 | 
						|
                    if (row.GetRowHeight() <= 0)
 | 
						|
                        row.NeedsMeasured = true;
 | 
						|
 | 
						|
                    if (row.Rows != null && row.Expanded == true)
 | 
						|
                        MarkRowsToMeasure(row.Rows);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ArrangeOverride
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Performs the arrange pass layout of the item when final position and size of the item has been set.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="layoutInfo">Layout information.</param>
 | 
						|
        /// <param name="stateInfo"></param>
 | 
						|
        /// <param name="layoutBounds">Layout bounds</param>
 | 
						|
        protected override void ArrangeOverride(GridLayoutInfo layoutInfo,
 | 
						|
            GridLayoutStateInfo stateInfo, Rectangle layoutBounds)
 | 
						|
        {
 | 
						|
            GridPanel panel = stateInfo.GridPanel;
 | 
						|
 | 
						|
            if (NeedsFilterScan == true || panel.NeedsFilterScan == true)
 | 
						|
            {
 | 
						|
                if (FilterAutoScan == true && 
 | 
						|
                    (panel.Filter.Visible == true || panel.ColumnHeader.FilterImageVisibility != ImageVisibility.Never))
 | 
						|
                {
 | 
						|
                    NeedsFilterScan = false;
 | 
						|
 | 
						|
                    FilterScan.BeginScan();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region RenderOverride
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Performs drawing of the item and its children.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="renderInfo">Holds contextual rendering information.</param>
 | 
						|
        protected override void RenderOverride(GridRenderInfo renderInfo)
 | 
						|
        {
 | 
						|
            RenderDesignerElement(renderInfo, Bounds);
 | 
						|
        }
 | 
						|
 | 
						|
        #region RenderDesignerElement
 | 
						|
 | 
						|
        private void RenderDesignerElement(
 | 
						|
            GridRenderInfo renderInfo, Rectangle r)
 | 
						|
        {
 | 
						|
            if (SuperGrid.DesignerElement == this)
 | 
						|
            {
 | 
						|
                int n = r.Y - (GridPanel.ColumnHeader.Bounds.Y + 4);
 | 
						|
 | 
						|
                r.X += Dpi.Width2;
 | 
						|
                r.Y = GridPanel.ColumnHeader.Bounds.Y - Dpi.Width4;
 | 
						|
                r.Width -= Dpi.Width6;
 | 
						|
                r.Height += n + Dpi.Width4;
 | 
						|
 | 
						|
                if (r.Width > 0 && r.Height > 0)
 | 
						|
                {
 | 
						|
                    using (Pen pen = new Pen(Color.Purple, Dpi.Width1))
 | 
						|
                    {
 | 
						|
                        pen.DashStyle = DashStyle.Dash;
 | 
						|
 | 
						|
                        renderInfo.Graphics.DrawRectangle(pen, r);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetHeaderText
 | 
						|
 | 
						|
        internal string GetHeaderText()
 | 
						|
        {
 | 
						|
            return (_HeaderText ?? _Name);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetColumnIndent
 | 
						|
 | 
						|
        internal int GetColumnIndent(int indentLevel)
 | 
						|
        {
 | 
						|
            int n = 0;
 | 
						|
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                if (panel.PrimaryColumn == this)
 | 
						|
                {
 | 
						|
                    if (panel.ShowTreeButtons == true || panel.ShowTreeLines == true)
 | 
						|
                        n += panel.TreeButtonIndent;
 | 
						|
 | 
						|
                    if (panel.CheckBoxes == true)
 | 
						|
                    {
 | 
						|
                        if (panel.ShowTreeButtons == true || panel.ShowTreeLines == true)
 | 
						|
                            n += Dpi.Width3;
 | 
						|
 | 
						|
                        n += Dpi.Width(panel.CheckBoxSize.Width + 2);
 | 
						|
                    }
 | 
						|
 | 
						|
                    n += Dpi.Width(panel.LevelIndentSize.Width * indentLevel);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (n);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetAutoSizeMode
 | 
						|
 | 
						|
        internal ColumnAutoSizeMode GetAutoSizeMode()
 | 
						|
        {
 | 
						|
            GridPanel panel = Parent as GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                ColumnAutoSizeMode mode = AutoSizeMode;
 | 
						|
 | 
						|
                if (mode == ColumnAutoSizeMode.NotSet)
 | 
						|
                {
 | 
						|
                    mode = panel.ColumnAutoSizeMode;
 | 
						|
 | 
						|
                    if (mode != ColumnAutoSizeMode.NotSet)
 | 
						|
                        return (mode);
 | 
						|
                }
 | 
						|
 | 
						|
                return (mode);
 | 
						|
            }
 | 
						|
 | 
						|
            return (ColumnAutoSizeMode.None);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetMaximumCellSize
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// This routine calculates and returns the maximum cell
 | 
						|
        /// size from each cell in the column, as limited by the
 | 
						|
        /// given row scope ('AllRows' or 'OnScreenRows').
 | 
						|
        /// If 'includeHeader' is true, then the width of the header
 | 
						|
        /// is included in the max calculation.
 | 
						|
        ///</summary>
 | 
						|
        ///<returns>Maximum cell size.</returns>
 | 
						|
        public Size GetMaximumCellSize(RowScope scope, bool includeHeader)
 | 
						|
        {
 | 
						|
            Size size = Size.Empty;
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                using (Graphics g = SuperGrid.CreateGraphics())
 | 
						|
                {
 | 
						|
                    GridLayoutInfo layoutInfo = new GridLayoutInfo(g, panel.BoundsRelative);
 | 
						|
                    GridLayoutStateInfo layoutState = new GridLayoutStateInfo(panel, 0);
 | 
						|
 | 
						|
                    if (includeHeader == true)
 | 
						|
                    {
 | 
						|
                        Size oldSize = panel.ColumnHeader.Size;
 | 
						|
 | 
						|
                        panel.ColumnHeader.MeasureHeader(layoutInfo, Size.Empty, panel, this);
 | 
						|
 | 
						|
                        size.Width = _HeaderSize.Width;
 | 
						|
 | 
						|
                        panel.ColumnHeader.Size = oldSize;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (panel.VirtualMode == true)
 | 
						|
                    {
 | 
						|
                        int firstRow = 0;
 | 
						|
                        int lastRow = panel.VirtualRowCountEx;
 | 
						|
 | 
						|
                        if (scope == RowScope.OnScreenRows)
 | 
						|
                        {
 | 
						|
                            firstRow = panel.FirstOnScreenRowIndex;
 | 
						|
                            lastRow = panel.LastOnScreenRowIndex + 1;
 | 
						|
                        }
 | 
						|
 | 
						|
                        for (int i = firstRow; i < lastRow; i++)
 | 
						|
                        {
 | 
						|
                            GridRow row = panel.VirtualRows[i];
 | 
						|
                            GridCell cell = row.Cells[ColumnIndex];
 | 
						|
 | 
						|
                            Size oldSize = cell.Size;
 | 
						|
 | 
						|
                            cell.Measure(layoutInfo, layoutState, Size.Empty);
 | 
						|
 | 
						|
                            int n = GetColumnIndent(cell.IndentLevel);
 | 
						|
 | 
						|
                            size.Width = Math.Max(size.Width, cell.Size.Width + n);
 | 
						|
                            size.Height = Math.Max(size.Height, cell.Size.Height);
 | 
						|
 | 
						|
                            cell.Size = oldSize;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (panel.Rows.Count > 0)
 | 
						|
                        {
 | 
						|
                            int firstRow = 0;
 | 
						|
                            int lastRow = panel.Rows.Count;
 | 
						|
 | 
						|
                            if (scope == RowScope.OnScreenRows)
 | 
						|
                            {
 | 
						|
                                firstRow = panel.FirstOnScreenRowIndex;
 | 
						|
                                lastRow = firstRow + 100;
 | 
						|
                            }
 | 
						|
 | 
						|
                            Size cellSize = GetMaximumCellSize(
 | 
						|
                                panel.Rows, firstRow, lastRow, layoutInfo, layoutState);
 | 
						|
 | 
						|
                            size.Width = Math.Max(size.Width, cellSize.Width);
 | 
						|
                            size.Height = Math.Max(size.Height, cellSize.Height);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (size);
 | 
						|
        }
 | 
						|
 | 
						|
        private Size GetMaximumCellSize(GridItemsCollection rows,
 | 
						|
            int firstRow, int lastRow, GridLayoutInfo layoutInfo, GridLayoutStateInfo layoutState)
 | 
						|
        {
 | 
						|
            Size size = Size.Empty;
 | 
						|
 | 
						|
            for (int i = firstRow; i < lastRow; i++)
 | 
						|
            {
 | 
						|
                if (i >= rows.Count)
 | 
						|
                    break;
 | 
						|
 | 
						|
                GridContainer item = rows[i] as GridContainer;
 | 
						|
 | 
						|
                if (item != null)
 | 
						|
                {
 | 
						|
                    Size cellSize = Size.Empty;
 | 
						|
 | 
						|
                    if (item is GridRow)
 | 
						|
                    {
 | 
						|
                        cellSize = GetMaxRowCellSize(
 | 
						|
                            (GridRow) item, layoutInfo, layoutState);
 | 
						|
                    }
 | 
						|
                    else if (item is GridGroup)
 | 
						|
                    {
 | 
						|
                        cellSize = GetMaximumCellSize(
 | 
						|
                            item.Rows, 0, lastRow - i, layoutInfo, layoutState);
 | 
						|
                    }
 | 
						|
 | 
						|
                    size.Width = Math.Max(size.Width, cellSize.Width);
 | 
						|
                    size.Height = Math.Max(size.Height, cellSize.Height);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (size);
 | 
						|
        }
 | 
						|
 | 
						|
        #region GetMaxRowCellSize
 | 
						|
 | 
						|
        private Size GetMaxRowCellSize(GridRow row,
 | 
						|
            GridLayoutInfo layoutInfo, GridLayoutStateInfo layoutState)
 | 
						|
        {
 | 
						|
            if (row.Cells.Count <= ColumnIndex)
 | 
						|
                return (Size.Empty);
 | 
						|
 | 
						|
            GridCell cell = row.Cells[ColumnIndex];
 | 
						|
 | 
						|
            Size oldSize = cell.Size;
 | 
						|
 | 
						|
            cell.Measure(layoutInfo, layoutState, Size.Empty);
 | 
						|
 | 
						|
            Size size = cell.Size;
 | 
						|
            size.Width += GetColumnIndent(cell.IndentLevel);
 | 
						|
 | 
						|
            cell.Size = oldSize;
 | 
						|
 | 
						|
            if (row.Rows.Count > 0 && row.Expanded == true)
 | 
						|
            {
 | 
						|
                layoutState.IndentLevel++;
 | 
						|
 | 
						|
                foreach (GridContainer item in row.Rows)
 | 
						|
                {
 | 
						|
                    if (item is GridRow)
 | 
						|
                    {
 | 
						|
                        Size cellSize =
 | 
						|
                            GetMaxRowCellSize((GridRow)item, layoutInfo, layoutState);
 | 
						|
 | 
						|
                        size.Width = Math.Max(size.Width, cellSize.Width);
 | 
						|
                        size.Height = Math.Max(size.Height, cellSize.Height);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                layoutState.IndentLevel--;
 | 
						|
            }
 | 
						|
 | 
						|
            return (size);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetSelectedCells
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// GetSelectedCells
 | 
						|
        ///</summary>
 | 
						|
        public SelectedElementCollection GetSelectedCells()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                SelectedElementCollection cells = new
 | 
						|
                    SelectedElementCollection(SelectedCells.Count);
 | 
						|
 | 
						|
                panel.GetSelectedCells(cells, this);
 | 
						|
 | 
						|
                return (cells);
 | 
						|
            }
 | 
						|
 | 
						|
            return (null);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region EnsureVisible
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// EnsureVisible
 | 
						|
        ///</summary>
 | 
						|
        ///<param name="center"></param>
 | 
						|
        public override void EnsureVisible(bool center)
 | 
						|
        {
 | 
						|
            if (Visible == true)
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                if (panel != null)
 | 
						|
                {
 | 
						|
                    if (IsHFrozen == false)
 | 
						|
                    {
 | 
						|
                        Rectangle t = SViewRect;
 | 
						|
 | 
						|
                        GridColumn pcol = panel.Columns.GetLastVisibleFrozenColumn();
 | 
						|
 | 
						|
                        if (pcol != null)
 | 
						|
                        {
 | 
						|
                            t.Width -= (pcol.BoundsRelative.Right - t.X);
 | 
						|
                            t.X = pcol.BoundsRelative.Right;
 | 
						|
                        }
 | 
						|
 | 
						|
                        Rectangle bounds = BoundsRelative;
 | 
						|
 | 
						|
                        if (bounds.Width >= t.Width || bounds.X - HScrollOffset < t.X)
 | 
						|
                        {
 | 
						|
                            int n = bounds.X - t.X;
 | 
						|
 | 
						|
                            if (center == false || bounds.Width >= t.Width)
 | 
						|
                                SuperGrid.SetHScrollValue(n - 1);
 | 
						|
                            else
 | 
						|
                                SuperGrid.SetHScrollValue(n - (t.Width - bounds.Width)/2);
 | 
						|
                        }
 | 
						|
                        else if (bounds.X - HScrollOffset > t.Right - bounds.Width)
 | 
						|
                        {
 | 
						|
                            int n = bounds.X - (t.Right - bounds.Width);
 | 
						|
 | 
						|
                            if (center == false)
 | 
						|
                                SuperGrid.SetHScrollValue(n + 1);
 | 
						|
                            else
 | 
						|
                                SuperGrid.SetHScrollValue(n + (t.Width - bounds.Width)/2);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ToggleSort
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// ToggleSort
 | 
						|
        ///</summary>
 | 
						|
        public void ToggleSort()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                SortDirection sortDirection;
 | 
						|
 | 
						|
                switch (_SortDirection)
 | 
						|
                {
 | 
						|
                    case SortDirection.None:
 | 
						|
                    case SortDirection.Descending:
 | 
						|
                        sortDirection = SortDirection.Ascending;
 | 
						|
                        break;
 | 
						|
 | 
						|
                    default:
 | 
						|
                        sortDirection = SortDirection.Descending;
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
 | 
						|
                panel.AddSort(this, sortDirection);
 | 
						|
 | 
						|
                SuperGrid.DoSortChangedEvent(panel);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Edit support
 | 
						|
 | 
						|
        #region GetEditControl
 | 
						|
 | 
						|
        internal IGridCellEditControl GetEditControl(Type type, object[] args)
 | 
						|
        {
 | 
						|
            if (type != null)
 | 
						|
            {
 | 
						|
                IGridCellEditControl editor =
 | 
						|
                    Activator.CreateInstance(type, args) as IGridCellEditControl;
 | 
						|
 | 
						|
                if (editor != null)
 | 
						|
                {
 | 
						|
                    if (editor is Control == false)
 | 
						|
                        throw new Exception("Edit/Render Type must be based on 'Control'.");
 | 
						|
 | 
						|
                    editor.EditorPanel = new EditorPanel();
 | 
						|
                    editor.EditorPanel.Visible = false;
 | 
						|
                    editor.EditorPanel.Controls.Add((Control) editor);
 | 
						|
                }
 | 
						|
 | 
						|
                return (editor);
 | 
						|
            }
 | 
						|
 | 
						|
            return (null);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Style support routines
 | 
						|
 | 
						|
        #region StyleVisualChangeHandler
 | 
						|
 | 
						|
        private void StyleVisualChangeHandler(
 | 
						|
            INotifyPropertyChanged oldValue, INotifyPropertyChanged newValue)
 | 
						|
        {
 | 
						|
            NeedsMeasured = true;
 | 
						|
 | 
						|
            if (oldValue != null)
 | 
						|
                oldValue.PropertyChanged -= StyleChanged;
 | 
						|
 | 
						|
            if (newValue != null)
 | 
						|
                newValue.PropertyChanged += StyleChanged;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region StyleChanged
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when one of element visual styles has property changes.
 | 
						|
        /// Default implementation invalidates visual appearance of element.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sender">VisualStyle that changed.</param>
 | 
						|
        /// <param name="e">Event arguments.</param>
 | 
						|
        protected virtual void StyleChanged(object sender, PropertyChangedEventArgs e)
 | 
						|
        {
 | 
						|
            if (SuperGrid != null)
 | 
						|
            {
 | 
						|
                SuperGrid.UpdateStyleCount();
 | 
						|
 | 
						|
                VisualChangeType changeType = ((VisualPropertyChangedEventArgs) e).ChangeType;
 | 
						|
 | 
						|
                if (changeType == VisualChangeType.Layout)
 | 
						|
                {
 | 
						|
                    NeedsMeasured = true;
 | 
						|
 | 
						|
                    InvalidateLayout();
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    GridPanel.InvalidateRender();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetFilterStyle
 | 
						|
 | 
						|
        internal FilterColumnHeaderVisualStyle GetFilterStyle(StyleType e)
 | 
						|
        {
 | 
						|
            ValidateStyle();
 | 
						|
 | 
						|
            if (EffectiveFilterStyles == null)
 | 
						|
                EffectiveFilterStyles = new FilterColumnHeaderVisualStyles();
 | 
						|
 | 
						|
            if (EffectiveFilterStyles.IsValid(e) == false)
 | 
						|
            {
 | 
						|
                FilterColumnHeaderVisualStyle style = new FilterColumnHeaderVisualStyle();
 | 
						|
 | 
						|
                StyleType[] css = style.GetApplyStyleTypes(e);
 | 
						|
 | 
						|
                if (css != null)
 | 
						|
                {
 | 
						|
                    foreach (StyleType cs in css)
 | 
						|
                    {
 | 
						|
                        style.ApplyStyle(SuperGrid.BaseVisualStyles.FilterColumnHeaderStyles[cs]);
 | 
						|
                        style.ApplyStyle(SuperGrid.DefaultVisualStyles.FilterColumnHeaderStyles[cs]);
 | 
						|
                        style.ApplyStyle(GridPanel.DefaultVisualStyles.FilterColumnHeaderStyles[cs]);
 | 
						|
                        style.ApplyStyle(FilterRowStyles[cs]);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                SuperGrid.DoGetFilterColumnHeaderStyleEvent(this, e, ref style);
 | 
						|
 | 
						|
                if (style.Background == null || style.Background.IsEmpty == true)
 | 
						|
                    style.Background = new Background(Color.White);
 | 
						|
 | 
						|
                if (style.Font == null)
 | 
						|
                {
 | 
						|
                    Font font = SystemFonts.DefaultFont;
 | 
						|
                    style.Font = font;
 | 
						|
                }
 | 
						|
 | 
						|
                EffectiveFilterStyles[e] = style;
 | 
						|
            }
 | 
						|
 | 
						|
            return (EffectiveFilterStyles[e]);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetHeaderStyle
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Gets the effective header style for the given StyleType.
 | 
						|
        ///</summary>
 | 
						|
        ///<param name="e">StyleType</param>
 | 
						|
        ///<returns></returns>
 | 
						|
        public ColumnHeaderVisualStyle GetHeaderStyle(StyleType e)
 | 
						|
        {
 | 
						|
            ValidateStyle();
 | 
						|
 | 
						|
            if (EffectiveStyles == null)
 | 
						|
                EffectiveStyles = new ColumnHeaderVisualStyles();
 | 
						|
 | 
						|
            if (EffectiveStyles.IsValid(e) == false)
 | 
						|
            {
 | 
						|
                ColumnHeaderVisualStyle style = new ColumnHeaderVisualStyle();
 | 
						|
 | 
						|
                StyleType[] css = style.GetApplyStyleTypes(e);
 | 
						|
 | 
						|
                if (css != null)
 | 
						|
                {
 | 
						|
                    GridColumnHeader colHeader = GridPanel.ColumnHeader;
 | 
						|
 | 
						|
                    ColumnGroupHeader cgh = colHeader.GetParentHeader(this) as ColumnGroupHeader;
 | 
						|
 | 
						|
                    if (cgh != null) 
 | 
						|
                    {
 | 
						|
                        if (colHeader.GetAutoApplyGroupColor(cgh) != true)
 | 
						|
                            cgh = null;
 | 
						|
                    }
 | 
						|
 | 
						|
                    foreach (StyleType cs in css)
 | 
						|
                    {
 | 
						|
                        style.ApplyStyle(SuperGrid.BaseVisualStyles.ColumnHeaderStyles[cs]);
 | 
						|
                        style.ApplyStyle(SuperGrid.DefaultVisualStyles.ColumnHeaderStyles[cs]);
 | 
						|
                        style.ApplyStyle(GridPanel.DefaultVisualStyles.ColumnHeaderStyles[cs]);
 | 
						|
 | 
						|
                        style.ApplyStyle(HeaderStyles[cs]);
 | 
						|
 | 
						|
                        if (cgh != null)
 | 
						|
                        {
 | 
						|
                            ColumnHeaderVisualStyle gstyle = colHeader.GetEffectiveStyle(cgh, cs);
 | 
						|
 | 
						|
                            if (gstyle.Background != null)
 | 
						|
                            {
 | 
						|
                                if (HeaderStyles[cs].Background == null || HeaderStyles[cs].Background.IsEmpty)
 | 
						|
                                    style.Background = gstyle.Background.Copy();
 | 
						|
                            }
 | 
						|
 | 
						|
                            if (gstyle.TextColor.IsEmpty == false)
 | 
						|
                            {
 | 
						|
                                if (HeaderStyles[cs].TextColor.IsEmpty)
 | 
						|
                                    style.TextColor = gstyle.TextColor;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
 | 
						|
                    style.ApplyDefaults();
 | 
						|
                }
 | 
						|
 | 
						|
                SuperGrid.DoGetColumnHeaderStyleEvent(this, e, ref style);
 | 
						|
 | 
						|
                if (style.Background == null || style.Background.IsEmpty == true)
 | 
						|
                    style.Background = new Background(Color.White);
 | 
						|
 | 
						|
                if (style.Font == null)
 | 
						|
                    style.Font = SystemFonts.DefaultFont;
 | 
						|
 | 
						|
                EffectiveStyles[e] = style;
 | 
						|
            }
 | 
						|
 | 
						|
            return (EffectiveStyles[e]);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ApplyCellStyle
 | 
						|
 | 
						|
        internal void ApplyCellStyle(CellVisualStyle style, StyleType cs)
 | 
						|
        {
 | 
						|
            CellVisualStyle cstyle = GetEffectiveCellStyle(cs);
 | 
						|
 | 
						|
            style.ApplyStyle(cstyle);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetEffectiveCellStyle
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Get the default Effective CellStyle for the given StyleType.
 | 
						|
        ///</summary>
 | 
						|
        ///<param name="type"></param>
 | 
						|
        ///<returns></returns>
 | 
						|
        public CellVisualStyle GetEffectiveCellStyle(StyleType type)
 | 
						|
        {
 | 
						|
            ValidateStyle();
 | 
						|
 | 
						|
            if (_EffectiveCellStyles == null)
 | 
						|
                _EffectiveCellStyles = new CellVisualStyles();
 | 
						|
 | 
						|
            if (_EffectiveCellStyles.IsValid(type) == false)
 | 
						|
            {
 | 
						|
                GridPanel panel = GridPanel;
 | 
						|
 | 
						|
                int colIndex = panel.UseAlternateColumnStyle
 | 
						|
                    ? panel.Columns.GetDisplayIndex(this) : -1;
 | 
						|
 | 
						|
                CellVisualStyle cstyle = new CellVisualStyle();
 | 
						|
 | 
						|
                panel.ApplyCellStyle(cstyle, type);
 | 
						|
 | 
						|
                if ((colIndex % 2) > 0)
 | 
						|
                {
 | 
						|
                    cstyle.ApplyStyle(SuperGrid.BaseVisualStyles.AlternateColumnCellStyles[type]);
 | 
						|
                    cstyle.ApplyStyle(SuperGrid.DefaultVisualStyles.AlternateColumnCellStyles[type]);
 | 
						|
                    cstyle.ApplyStyle(GridPanel.DefaultVisualStyles.AlternateColumnCellStyles[type]);
 | 
						|
                }
 | 
						|
 | 
						|
                cstyle.ApplyStyle(CellStyles[type]);
 | 
						|
 | 
						|
                _EffectiveCellStyles[type] = cstyle;
 | 
						|
            }
 | 
						|
 | 
						|
            return (_EffectiveCellStyles[type]);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InvalidateStyle
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Invalidates the cached Style
 | 
						|
        ///definition for all defined StyleTypes
 | 
						|
        ///</summary>
 | 
						|
        public void InvalidateStyle()
 | 
						|
        {
 | 
						|
            if (EffectiveStyles != null)
 | 
						|
            {
 | 
						|
                EffectiveStyles.Dispose();
 | 
						|
                EffectiveStyles = null;
 | 
						|
            }
 | 
						|
 | 
						|
            if (EffectiveFilterStyles != null)
 | 
						|
            {
 | 
						|
                EffectiveFilterStyles.Dispose();
 | 
						|
                EffectiveFilterStyles = null;
 | 
						|
            }
 | 
						|
 | 
						|
            InvalidateLayout();
 | 
						|
        }
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Invalidate the cached Style
 | 
						|
        ///definition for the given StyleType
 | 
						|
        ///</summary>
 | 
						|
        ///<param name="type"></param>
 | 
						|
        public void InvalidateStyle(StyleType type)
 | 
						|
        {
 | 
						|
            if (_EffectiveStyles != null)
 | 
						|
            {
 | 
						|
                _EffectiveStyles[type] = null;
 | 
						|
                _EffectiveFilterStyles[type] = null;
 | 
						|
 | 
						|
                InvalidateLayout();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ValidateStyle
 | 
						|
 | 
						|
        private void ValidateStyle()
 | 
						|
        {
 | 
						|
            if (_StyleUpdateCount != SuperGrid.StyleUpdateCount)
 | 
						|
            {
 | 
						|
                ClearEffectiveStyles();
 | 
						|
 | 
						|
                _StyleUpdateCount = SuperGrid.StyleUpdateCount;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ClearEffectiveStyles
 | 
						|
 | 
						|
        internal void ClearEffectiveStyles()
 | 
						|
        {
 | 
						|
            if (_EffectiveStyles != null)
 | 
						|
            {
 | 
						|
                _EffectiveStyles.Dispose();
 | 
						|
                _EffectiveStyles = null;
 | 
						|
            }
 | 
						|
 | 
						|
            if (_EffectiveFilterStyles != null)
 | 
						|
            {
 | 
						|
                _EffectiveFilterStyles.Dispose();
 | 
						|
                _EffectiveFilterStyles = null;
 | 
						|
            }
 | 
						|
 | 
						|
            if (_EffectiveCellStyles != null)
 | 
						|
            {
 | 
						|
                _EffectiveCellStyles.Dispose();
 | 
						|
                _EffectiveCellStyles = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetFilterPanelType
 | 
						|
 | 
						|
        internal FilterEditType GetFilterPanelType()
 | 
						|
        {
 | 
						|
            FilterEditType filterType = FilterEditType;
 | 
						|
            
 | 
						|
            if (filterType == FilterEditType.Auto)
 | 
						|
            {
 | 
						|
                IGridCellEditControl editor = EditControl;
 | 
						|
 | 
						|
                if (editor != null)
 | 
						|
                {
 | 
						|
                    if (editor is ComboBox)
 | 
						|
                    {
 | 
						|
                        filterType = FilterEditType.ComboBox;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (editor.EditorValueType == typeof(bool))
 | 
						|
                            filterType = FilterEditType.CheckBox;
 | 
						|
 | 
						|
                        else if (editor.EditorValueType == typeof(DateTime))
 | 
						|
                            filterType = FilterEditType.DateTime;
 | 
						|
 | 
						|
                        else
 | 
						|
                            filterType = FilterEditType.TextBox;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    filterType = FilterEditType.TextBox;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            SuperGrid.DoGetFilterEditTypeEvent(this, ref filterType);
 | 
						|
 | 
						|
            return (filterType);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Markup support
 | 
						|
 | 
						|
        private void MarkupHeaderTextChanged()
 | 
						|
        {
 | 
						|
            if (_HeaderTextMarkup != null)
 | 
						|
                _HeaderTextMarkup.HyperLinkClick -= HeaderTextMarkupLinkClick;
 | 
						|
 | 
						|
            _HeaderTextMarkup = null;
 | 
						|
 | 
						|
            if (EnableHeaderMarkup == true)
 | 
						|
            {
 | 
						|
                if (MarkupParser.IsMarkup(_HeaderText) == true)
 | 
						|
                {
 | 
						|
                    _HeaderTextMarkup = MarkupParser.Parse(_HeaderText);
 | 
						|
 | 
						|
                    if (_HeaderTextMarkup != null)
 | 
						|
                        _HeaderTextMarkup.HyperLinkClick += HeaderTextMarkupLinkClick;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when a header text markup link is clicked
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void HeaderTextMarkupLinkClick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            HyperLink link = sender as HyperLink;
 | 
						|
 | 
						|
            SuperGrid.DoColumnHeaderMarkupLinkClickEvent(this, link);
 | 
						|
 | 
						|
            GridPanel.ColumnHeader.InvalidateHeader(GridPanel, this);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets plain Header text without text-markup (if text-markup is used in Text)
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public string PlainHeaderText
 | 
						|
        {
 | 
						|
            get { return (_HeaderTextMarkup != null ? _HeaderTextMarkup.PlainText : _HeaderText); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ActivateFilterPopup
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Activates the column's FilterPopup
 | 
						|
        ///</summary>
 | 
						|
        public void ActivateFilterPopup()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
                panel.ColumnHeader.ActivateFilterPopup(panel, this);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DeactivateFilterPopup
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        ///Deactivates the column's FilterPopup
 | 
						|
        ///</summary>
 | 
						|
        public void DeactivateFilterPopup()
 | 
						|
        {
 | 
						|
            GridPanel panel = GridPanel;
 | 
						|
 | 
						|
            if (panel != null)
 | 
						|
                panel.ColumnHeader.DeactivateFilterPopup(panel, this);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ToString
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// ToString
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override string ToString()
 | 
						|
        {
 | 
						|
            string s = base.ToString();
 | 
						|
 | 
						|
            string t = GetHeaderText();
 | 
						|
 | 
						|
            if (String.IsNullOrEmpty(t) == false)
 | 
						|
                s += ": (\"" + t + "\")";
 | 
						|
 | 
						|
            return (s);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ColumnStates
 | 
						|
 | 
						|
        [Flags]
 | 
						|
        private enum Cs
 | 
						|
        {
 | 
						|
            AdjustSortImagePositionByMargin = (1 << 0),
 | 
						|
            AllowEdit = (1 << 1),
 | 
						|
 | 
						|
            EnableGroupHeaderMarkup = (1 << 2),
 | 
						|
            EnableHeaderMarkup = (1 << 3),
 | 
						|
 | 
						|
            FilterAutoScan = (1 << 4),
 | 
						|
            FilterError = (1 << 5),
 | 
						|
            FilterExprUsesName = (1 << 6),
 | 
						|
 | 
						|
            MarkRowDirtyOnCellValueChange = (1 << 7),
 | 
						|
 | 
						|
            NeedsFilterScan = (1 << 8),
 | 
						|
            NeedsResized = (1 << 9),
 | 
						|
 | 
						|
            Processed = (1 << 10),
 | 
						|
 | 
						|
            ReadOnly = (1 << 11),
 | 
						|
            Selected = (1 << 12),
 | 
						|
 | 
						|
            InfoImageOverlay = (1 << 13),
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IDisposable
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Dispose
 | 
						|
        /// </summary>
 | 
						|
        public void Dispose()
 | 
						|
        {
 | 
						|
            CellStyles = null;
 | 
						|
            HeaderStyles = null;
 | 
						|
            FilterRowStyles = null;
 | 
						|
 | 
						|
            if (_HeaderTextMarkup != null)
 | 
						|
                _HeaderTextMarkup.HyperLinkClick -= HeaderTextMarkupLinkClick;
 | 
						|
 | 
						|
            ClearEffectiveStyles();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region enums
 | 
						|
 | 
						|
    #region ColumnAutoSizeMode
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Defines columns auto-sizing mode.
 | 
						|
    /// </summary>
 | 
						|
    public enum ColumnAutoSizeMode
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// The sizing behavior of the column is inherited
 | 
						|
        /// from the GridPanel.AutoSizeColumnsMode property.
 | 
						|
        /// </summary>
 | 
						|
        NotSet,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Auto-sizing does not take place.
 | 
						|
        /// </summary>
 | 
						|
        None,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The column width adjusts so that the widths of all columns
 | 
						|
        /// exactly fills the display area of the control, requiring
 | 
						|
        /// horizontal scrolling only to keep column widths above the
 | 
						|
        /// ColumnHeader.MinimumWidth property values. Relative column widths
 | 
						|
        /// are determined by the relative Column.FillWeight property values.
 | 
						|
        /// </summary>
 | 
						|
        Fill,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The column width adjusts to fit the contents of all cells in the column
 | 
						|
        /// that are in rows currently displayed on screen, excluding the header cell. 
 | 
						|
        /// </summary>
 | 
						|
        DisplayedCellsExceptHeader,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The column width adjusts to fit the contents of all cells in the column
 | 
						|
        /// that are in rows currently displayed on screen, including the header cell. 
 | 
						|
        /// </summary>
 | 
						|
        DisplayedCells,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The column width adjusts to fit the contents of the column header cell. 
 | 
						|
        /// </summary>
 | 
						|
        ColumnHeader,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The column width adjusts to fit the contents of all
 | 
						|
        /// cells in the column, excluding the header cell. 
 | 
						|
        /// </summary>
 | 
						|
        AllCellsExceptHeader,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The column width adjusts to fit the contents of all
 | 
						|
        /// cells in the column, including the header cell. 
 | 
						|
        /// </summary>
 | 
						|
        AllCells
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region ColumnAutoMode
 | 
						|
 | 
						|
    ///<summary>
 | 
						|
    /// Indicates the column sorting mode
 | 
						|
    ///</summary>
 | 
						|
    public enum ColumnSortMode
 | 
						|
    {
 | 
						|
        ///<summary>
 | 
						|
        /// No sorting permitted
 | 
						|
        ///</summary>
 | 
						|
        None,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Can participate in Single column sorts only
 | 
						|
        ///</summary>
 | 
						|
        Single,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Can participate in Single and Multiple column sorts
 | 
						|
        ///</summary>
 | 
						|
        Multiple,
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region ColumnResizeMode
 | 
						|
 | 
						|
    ///<summary>
 | 
						|
    /// ColumnResizeMode
 | 
						|
    ///</summary>
 | 
						|
    public enum ColumnResizeMode
 | 
						|
    {
 | 
						|
        ///<summary>
 | 
						|
        /// The element cannot be resized by the user
 | 
						|
        ///</summary>
 | 
						|
        None,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// The size of the element plus that of its adjacent element
 | 
						|
        /// is changed so that the total size of the elements is maintained
 | 
						|
        ///</summary>
 | 
						|
        MaintainTotalWidth,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// When the element size is changed, all following
 | 
						|
        /// elements are offset accordingly
 | 
						|
        ///</summary>
 | 
						|
        MoveFollowingElements,
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region SortIndicator
 | 
						|
 | 
						|
    ///<summary>
 | 
						|
    /// SortIndicator
 | 
						|
    ///</summary>
 | 
						|
    public enum SortIndicator
 | 
						|
    {
 | 
						|
        ///<summary>
 | 
						|
        /// No indicator is displayed
 | 
						|
        ///</summary>
 | 
						|
        None,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Ascending indicator is displayed
 | 
						|
        ///</summary>
 | 
						|
        Ascending,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Descending indicator is displayed
 | 
						|
        ///</summary>
 | 
						|
        Descending,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Set automatically based on current
 | 
						|
        /// column sort criteria
 | 
						|
        ///</summary>
 | 
						|
        Auto,
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region RowScope
 | 
						|
 | 
						|
    ///<summary>
 | 
						|
    /// RowScope
 | 
						|
    ///</summary>
 | 
						|
    public enum RowScope
 | 
						|
    {
 | 
						|
        ///<summary>
 | 
						|
        /// All Rows
 | 
						|
        ///</summary>
 | 
						|
        AllRows,
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Only On Screen rows
 | 
						|
        ///</summary>
 | 
						|
        OnScreenRows,
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region EditTypeConverter
 | 
						|
 | 
						|
    ///<summary>
 | 
						|
    /// EditTypeConverter
 | 
						|
    ///</summary>
 | 
						|
    public class EditTypeConverter : TypeConverter
 | 
						|
    {
 | 
						|
        ///<summary>
 | 
						|
        /// ConvertTo
 | 
						|
        ///</summary>
 | 
						|
        ///<param name="context"></param>
 | 
						|
        ///<param name="culture"></param>
 | 
						|
        ///<param name="value"></param>
 | 
						|
        ///<param name="destinationType"></param>
 | 
						|
        ///<returns></returns>
 | 
						|
        public override object ConvertTo(
 | 
						|
            ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
 | 
						|
        {
 | 
						|
            if (destinationType == typeof(string))
 | 
						|
            {
 | 
						|
                Type type = value as Type;
 | 
						|
 | 
						|
                if (type != null)
 | 
						|
                    return (type.Name);
 | 
						|
            }
 | 
						|
 | 
						|
            return (base.ConvertTo(context, culture, value, destinationType));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
}
 |