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
{
///
/// Defines the grid column header
///
public class GridColumn : GridElement, IDisposable
{
#region Events
///
/// Occurs after column header DisplayIndex has changed.
///
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
///
/// GridColumn
///
public GridColumn()
{
SetState(Cs.AllowEdit, true);
SetState(Cs.InfoImageOverlay, true);
SetState(Cs.MarkRowDirtyOnCellValueChange, true);
_SelectedCells = new SelectedElements(SelectedElementType.SelectedCells);
}
///
/// GridColumn
///
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