677 lines
15 KiB
C#
677 lines
15 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Data.SqlTypes;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using DevComponents.DotNetBar.Controls;
|
|
using DevComponents.DotNetBar.SuperGrid.Style;
|
|
|
|
namespace DevComponents.DotNetBar.SuperGrid
|
|
{
|
|
///<summary>
|
|
/// GridCheckBoxEditControl
|
|
///</summary>
|
|
[ToolboxItem(false)]
|
|
public class GridCheckBoxXEditControl : CheckBoxX, IGridCellEditControl
|
|
{
|
|
#region Private variables
|
|
|
|
private GridCell _Cell;
|
|
private EditorPanel _EditorPanel;
|
|
private Bitmap _EditorCellBitmap;
|
|
|
|
private bool _ValueChanged;
|
|
private bool _SuspendUpdate;
|
|
|
|
private StretchBehavior _StretchBehavior = StretchBehavior.None;
|
|
|
|
#endregion
|
|
|
|
///<summary>
|
|
/// GridCheckBoxXEditControl
|
|
///</summary>
|
|
public GridCheckBoxXEditControl()
|
|
{
|
|
CheckValueChecked = null;
|
|
CheckValueUnchecked = null;
|
|
|
|
Text = "";
|
|
|
|
CheckedChanged += ControlCheckedChanged;
|
|
}
|
|
|
|
#region ControlCheckedChanged
|
|
|
|
private void ControlCheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (_SuspendUpdate == false)
|
|
{
|
|
if (CheckState == CheckState.Checked)
|
|
{
|
|
_Cell.Value = (CheckValueChecked ?? true);
|
|
}
|
|
else if (CheckState == CheckState.Unchecked)
|
|
{
|
|
_Cell.Value = (CheckValueUnchecked ?? false);
|
|
}
|
|
else
|
|
{
|
|
_Cell.Value = CheckValueIndeterminate;
|
|
}
|
|
|
|
_Cell.EditorValueChanged(this);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnInvalidated
|
|
|
|
/// <summary>
|
|
/// OnInvalidated
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
protected override void OnInvalidated(InvalidateEventArgs e)
|
|
{
|
|
base.OnInvalidated(e);
|
|
|
|
if (_Cell != null && _SuspendUpdate == false)
|
|
_Cell.InvalidateRender();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnPaint
|
|
|
|
/// <summary>
|
|
/// OnPaint
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
_Cell.PaintEditorBackground(e, this);
|
|
|
|
PaintControl(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Text
|
|
|
|
/// <summary>
|
|
/// Text
|
|
/// </summary>
|
|
public override string Text
|
|
{
|
|
get { return (base.Text); }
|
|
|
|
set
|
|
{
|
|
if (string.IsNullOrEmpty(value))
|
|
{
|
|
value = "";
|
|
|
|
TextVisible = false;
|
|
}
|
|
else
|
|
{
|
|
TextVisible = true;
|
|
}
|
|
|
|
base.Text = value;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GetValue
|
|
|
|
///<summary>
|
|
/// GetValue
|
|
///</summary>
|
|
///<param name="value"></param>
|
|
///<returns></returns>
|
|
///<exception cref="Exception"></exception>
|
|
public virtual CheckState GetValue(object value)
|
|
{
|
|
GridPanel panel = _Cell.GridPanel;
|
|
|
|
if (value == null ||
|
|
(panel.NullValue == NullValue.DBNull && value == DBNull.Value))
|
|
{
|
|
return (ThreeState ? CheckState.Indeterminate : CheckState.Unchecked);
|
|
}
|
|
|
|
Type type = value.GetType();
|
|
|
|
if (CheckValueChecked != null)
|
|
{
|
|
if (value.Equals(CheckValueChecked))
|
|
return (CheckState.Checked);
|
|
}
|
|
|
|
if (CheckValueUnchecked != null)
|
|
{
|
|
if (value.Equals(CheckValueUnchecked))
|
|
return (CheckState.Unchecked);
|
|
}
|
|
|
|
if (type == typeof (bool))
|
|
return ((bool) value ? CheckState.Checked : CheckState.Unchecked);
|
|
|
|
if (type == typeof (string))
|
|
{
|
|
string s = (string) value;
|
|
|
|
if (_Cell.IsValueExpression == true)
|
|
s = _Cell.GetExpValue(s);
|
|
|
|
switch (s.ToLower())
|
|
{
|
|
case "y":
|
|
case "yes":
|
|
case "t":
|
|
case "true":
|
|
case "1":
|
|
return (CheckState.Checked);
|
|
|
|
case "":
|
|
case "0":
|
|
case "n":
|
|
case "no":
|
|
case "f":
|
|
case "false":
|
|
return (CheckState.Unchecked);
|
|
}
|
|
}
|
|
else if (type == typeof (SqlBoolean))
|
|
{
|
|
SqlBoolean sb = (SqlBoolean) value;
|
|
|
|
if (sb.IsNull == true)
|
|
return (ThreeState ? CheckState.Indeterminate : CheckState.Unchecked);
|
|
|
|
return (sb.IsTrue ? CheckState.Checked : CheckState.Unchecked);
|
|
}
|
|
else if (type == typeof(char))
|
|
{
|
|
char c = (char)value;
|
|
|
|
switch (Char.ToLower(c))
|
|
{
|
|
case 't':
|
|
case 'y':
|
|
case '1':
|
|
return (CheckState.Checked);
|
|
|
|
case 'f':
|
|
case 'n':
|
|
case '0':
|
|
return (CheckState.Unchecked);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int n = Convert.ToInt32(value);
|
|
|
|
return (n == 0 ? CheckState.Unchecked : CheckState.Checked);
|
|
}
|
|
|
|
throw new Exception("Invalid checkBox cell value (" + value + ").");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IGridCellEditControl Members
|
|
|
|
#region Public properties
|
|
|
|
#region CanInterrupt
|
|
|
|
/// <summary>
|
|
/// CanInterrupt
|
|
/// </summary>
|
|
public bool CanInterrupt
|
|
{
|
|
get { return (true); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CellEditMode
|
|
|
|
/// <summary>
|
|
/// CellEditMode
|
|
/// </summary>
|
|
public CellEditMode CellEditMode
|
|
{
|
|
get { return (CellEditMode.InPlace); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorCell
|
|
|
|
/// <summary>
|
|
/// EditorCell
|
|
/// </summary>
|
|
public GridCell EditorCell
|
|
{
|
|
get { return (_Cell); }
|
|
set { _Cell = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorCellBitmap
|
|
|
|
///<summary>
|
|
/// EditorCellBitmap
|
|
///</summary>
|
|
public Bitmap EditorCellBitmap
|
|
{
|
|
get { return (_EditorCellBitmap); }
|
|
|
|
set
|
|
{
|
|
if (_EditorCellBitmap != null)
|
|
_EditorCellBitmap.Dispose();
|
|
|
|
_EditorCellBitmap = value;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorFormattedValue
|
|
|
|
///<summary>
|
|
/// EditorFormattedValue
|
|
///</summary>
|
|
public virtual string EditorFormattedValue
|
|
{
|
|
get
|
|
{
|
|
if (_Cell != null && _Cell.IsValueNull == true)
|
|
return (_Cell.NullString);
|
|
|
|
return (EditorValue.ToString());
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorPanel
|
|
|
|
/// <summary>
|
|
/// EditorPanel
|
|
/// </summary>
|
|
public EditorPanel EditorPanel
|
|
{
|
|
get { return (_EditorPanel); }
|
|
set { _EditorPanel = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorValue
|
|
|
|
/// <summary>
|
|
/// EditorValue
|
|
/// </summary>
|
|
public virtual object EditorValue
|
|
{
|
|
get { return (CheckState); }
|
|
set { CheckState = GetValue(value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorValueChanged
|
|
|
|
/// <summary>
|
|
/// EditorValueChanged
|
|
/// </summary>
|
|
public virtual bool EditorValueChanged
|
|
{
|
|
get { return (_ValueChanged); }
|
|
|
|
set
|
|
{
|
|
if (_ValueChanged != value)
|
|
{
|
|
_ValueChanged = value;
|
|
|
|
if (value == true)
|
|
_Cell.SetEditorDirty(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorValueType
|
|
|
|
///<summary>
|
|
/// EditorValueType
|
|
///</summary>
|
|
public virtual Type EditorValueType
|
|
{
|
|
get { return (typeof(bool)); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region StretchBehavior
|
|
|
|
/// <summary>
|
|
/// StretchBehavior
|
|
/// </summary>
|
|
public virtual StretchBehavior StretchBehavior
|
|
{
|
|
get { return (_StretchBehavior); }
|
|
set { _StretchBehavior = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SuspendUpdate
|
|
|
|
/// <summary>
|
|
/// SuspendUpdate
|
|
/// </summary>
|
|
public bool SuspendUpdate
|
|
{
|
|
get { return (_SuspendUpdate); }
|
|
set { _SuspendUpdate = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ValueChangeBehavior
|
|
|
|
/// <summary>
|
|
/// ValueChangeBehavior
|
|
/// </summary>
|
|
public virtual ValueChangeBehavior ValueChangeBehavior
|
|
{
|
|
get { return (ValueChangeBehavior.InvalidateRender); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region InitializeContext
|
|
|
|
///<summary>
|
|
/// InitializeContext
|
|
///</summary>
|
|
///<param name="cell"></param>
|
|
///<param name="style"></param>
|
|
public virtual void InitializeContext(GridCell cell, CellVisualStyle style)
|
|
{
|
|
_Cell = cell;
|
|
|
|
if (style != null)
|
|
{
|
|
Enabled = (_Cell.IsReadOnly == false);
|
|
|
|
Font = style.Font;
|
|
ForeColor = style.TextColor;
|
|
}
|
|
|
|
CheckState = GetValue(_Cell.Value);
|
|
|
|
_ValueChanged = false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GetProposedSize
|
|
|
|
///<summary>
|
|
/// GetProposedSize
|
|
///</summary>
|
|
///<param name="g"></param>
|
|
///<param name="cell"></param>
|
|
///<param name="style"></param>
|
|
///<param name="constraintSize"></param>
|
|
///<returns></returns>
|
|
public virtual Size GetProposedSize(Graphics g,
|
|
GridCell cell, CellVisualStyle style, Size constraintSize)
|
|
{
|
|
HostItem.RecalcSize();
|
|
Size size = HostItem.Size;
|
|
|
|
if (TextVisible == false)
|
|
{
|
|
// RadioButtons are not actually 13 - they are 14, even
|
|
// though the system thinks they are 13.
|
|
|
|
if (CheckBoxStyle == eCheckBoxStyle.RadioButton)
|
|
size.Height += Dpi.Height1;
|
|
|
|
if (size.Width < size.Height)
|
|
size.Width = size.Height;
|
|
}
|
|
|
|
return (size);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Edit support
|
|
|
|
#region BeginEdit
|
|
|
|
/// <summary>
|
|
/// BeginEdit
|
|
/// </summary>
|
|
/// <param name="selectAll"></param>
|
|
/// <returns></returns>
|
|
public virtual bool BeginEdit(bool selectAll)
|
|
{
|
|
return (false);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EndEdit
|
|
|
|
/// <summary>
|
|
/// EndEdit
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public virtual bool EndEdit()
|
|
{
|
|
return (false);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CancelEdit
|
|
|
|
/// <summary>
|
|
/// CancelEdit
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public virtual bool CancelEdit()
|
|
{
|
|
return (false);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region CellRender
|
|
|
|
/// <summary>
|
|
/// CellRender
|
|
/// </summary>
|
|
/// <param name="g"></param>
|
|
public virtual void CellRender(Graphics g)
|
|
{
|
|
_Cell.CellRender(this, g);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Keyboard support
|
|
|
|
#region CellKeyDown
|
|
|
|
///<summary>
|
|
/// CellKeyDown
|
|
///</summary>
|
|
public virtual void CellKeyDown(KeyEventArgs e)
|
|
{
|
|
switch (e.KeyData)
|
|
{
|
|
case Keys.T:
|
|
case Keys.Y:
|
|
if (Checked == false)
|
|
Checked = true;
|
|
break;
|
|
|
|
case Keys.F:
|
|
case Keys.N:
|
|
if (Checked == true)
|
|
Checked = false;
|
|
break;
|
|
|
|
default:
|
|
OnKeyDown(e);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region WantsInputKey
|
|
|
|
/// <summary>
|
|
/// WantsInputKey
|
|
/// </summary>
|
|
/// <param name="key"></param>
|
|
/// <param name="gridWantsKey"></param>
|
|
/// <returns></returns>
|
|
public virtual bool WantsInputKey(Keys key, bool gridWantsKey)
|
|
{
|
|
switch (key & Keys.KeyCode)
|
|
{
|
|
case Keys.T:
|
|
case Keys.F:
|
|
case Keys.Y:
|
|
case Keys.N:
|
|
case Keys.Space:
|
|
return (true);
|
|
|
|
default:
|
|
return (gridWantsKey == false);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Mouse support
|
|
|
|
#region OnCellMouseMove
|
|
|
|
///<summary>
|
|
/// OnCellMouseMove
|
|
///</summary>
|
|
///<param name="e"></param>
|
|
public virtual void OnCellMouseMove(MouseEventArgs e)
|
|
{
|
|
OnMouseMove(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCellMouseEnter
|
|
|
|
///<summary>
|
|
/// OnCellMouseEnter
|
|
///</summary>
|
|
///<param name="e"></param>
|
|
public virtual void OnCellMouseEnter(EventArgs e)
|
|
{
|
|
OnMouseEnter(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCellMouseLeave
|
|
|
|
///<summary>
|
|
/// OnCellMouseLeave
|
|
///</summary>
|
|
///<param name="e"></param>
|
|
public virtual void OnCellMouseLeave(EventArgs e)
|
|
{
|
|
OnMouseLeave(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCellMouseUp
|
|
|
|
///<summary>
|
|
/// OnCellMouseUp
|
|
///</summary>
|
|
///<param name="e"></param>
|
|
public virtual void OnCellMouseUp(MouseEventArgs e)
|
|
{
|
|
eCheckBoxStyle style = CheckBoxStyle;
|
|
CheckBoxStyle = eCheckBoxStyle.CheckBox;
|
|
|
|
try
|
|
{
|
|
OnMouseUp(e);
|
|
}
|
|
finally
|
|
{
|
|
CheckBoxStyle = style;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCellMouseDown
|
|
|
|
///<summary>
|
|
/// OnCellMouseDown
|
|
///</summary>
|
|
///<param name="e"></param>
|
|
public virtual void OnCellMouseDown(MouseEventArgs e)
|
|
{
|
|
OnMouseDown(e);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Dispose
|
|
|
|
/// <summary>
|
|
/// Dispose
|
|
/// </summary>
|
|
/// <param name="disposing"></param>
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
CheckedChanged -= ControlCheckedChanged;
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|