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 { /// /// GridTextBoxEditControl /// [ToolboxItem(false)] public class GridTextBoxXEditControl : TextBoxX, IGridCellEditControl { /// /// GridTextBoxXEditControl /// public GridTextBoxXEditControl() { Multiline = true; } #region Private variables private GridCell _Cell; private EditorPanel _EditorPanel; private Bitmap _EditorCellBitmap; private bool _ValueChanged; private bool _SuspendUpdate; private StretchBehavior _StretchBehavior = StretchBehavior.None; #endregion #region OnTextChanged /// /// OnTextChanged /// /// protected override void OnTextChanged(EventArgs e) { if (_SuspendUpdate == false) _Cell.EditorValueChanged(this); base.OnTextChanged(e); } #endregion #region OnPaintBackground /// /// OnPaintBackground /// /// protected override void OnPaintBackground(PaintEventArgs e) { _Cell.PaintEditorBackground(e, this); } #endregion #region GetValue /// /// GetValue /// /// /// public virtual string GetValue(object value) { GridPanel panel = _Cell.GridPanel; if (value == null || (panel.NullValue == NullValue.DBNull && value == DBNull.Value)) { return (""); } if (value is SqlString) { SqlString sdt = (SqlString) value; if (sdt.IsNull == true) return (""); return (sdt.Value); } return (Convert.ToString(value)); } #endregion #region IGridCellEditControl Members #region Public properties #region CanInterrupt /// /// CanInterrupt /// public bool CanInterrupt { get { return (true); } } #endregion #region CellEditMode /// /// CellEditMode /// public CellEditMode CellEditMode { get { return (CellEditMode.Modal); } } #endregion #region EditorCell /// /// EditorCell /// public GridCell EditorCell { get { return (_Cell); } set { _Cell = value; } } #endregion #region EditorCellBitmap /// /// EditorCellBitmap /// public Bitmap EditorCellBitmap { get { return (_EditorCellBitmap); } set { if (_EditorCellBitmap != null) _EditorCellBitmap.Dispose(); _EditorCellBitmap = value; } } #endregion #region EditorFormattedValue /// /// EditorFormattedValue /// public virtual string EditorFormattedValue { get { if (_Cell != null && _Cell.IsValueNull == true) return (_Cell.NullString); return ((PasswordChar == '\0') ? Text : new string(PasswordChar, TextLength)); } } #endregion #region EditorPanel /// /// EditorPanel /// public EditorPanel EditorPanel { get { return (_EditorPanel); } set { _EditorPanel = value; } } #endregion #region EditorValue /// /// EditorValue /// public virtual object EditorValue { get { return (Text); } set { Text = GetValue(value); } } #endregion #region EditorValueChanged /// /// EditorValueChanged /// public virtual bool EditorValueChanged { get { return (_ValueChanged); } set { if (_ValueChanged != value) { _ValueChanged = value; if (value == true) _Cell.SetEditorDirty(this); } } } #endregion #region EditorValueType /// /// EditorValueType /// public virtual Type EditorValueType { get { return (typeof(string)); } } #endregion #region StretchBehavior /// /// StretchBehavior /// public virtual StretchBehavior StretchBehavior { get { return ((Multiline == true) ? StretchBehavior.VerticalOnly : StretchBehavior.None ); } set { _StretchBehavior = value; } } #endregion #region SuspendUpdate /// /// SuspendUpdate /// public bool SuspendUpdate { get { return (_SuspendUpdate); } set { _SuspendUpdate = value; } } #endregion #region ValueChangeBehavior /// /// ValueChangeBehavior /// public virtual ValueChangeBehavior ValueChangeBehavior { get { return (ValueChangeBehavior.InvalidateLayout); } } #endregion #endregion #region InitializeContext /// /// InitializeContext /// /// /// public virtual void InitializeContext(GridCell cell, CellVisualStyle style) { _Cell = cell; if (style != null) { Enabled = (_Cell.ReadOnly == false); WordWrap = (style.AllowWrap == Tbool.True); ForeColor = style.TextColor; Font = style.Font; Multiline = WordWrap; } Text = GetValue(_Cell.Value); _ValueChanged = false; } #region SetTextAlign private void SetTextAlign(CellVisualStyle style) { switch (style.Alignment) { case Alignment.TopLeft: case Alignment.MiddleLeft: case Alignment.BottomLeft: TextAlign = HorizontalAlignment.Left; break; case Alignment.TopCenter: case Alignment.MiddleCenter: case Alignment.BottomCenter: TextAlign = HorizontalAlignment.Center; break; case Alignment.TopRight: case Alignment.MiddleRight: case Alignment.BottomRight: TextAlign = HorizontalAlignment.Right; break; } } #endregion #endregion #region GetProposedSize /// /// GetProposedSize /// /// /// /// /// /// public virtual Size GetProposedSize(Graphics g, GridCell cell, CellVisualStyle style, Size constraintSize) { eTextFormat tf = style.GetTextFormatFlags(); string s = String.IsNullOrEmpty(Text) ? " " : Text; SetTextAlign(style); Size size = (constraintSize.IsEmpty == true) ? TextHelper.MeasureText(g, s, style.Font, new Size(10000, 0), tf) : TextHelper.MeasureText(g, s, style.Font, constraintSize, tf); return (size); } #endregion #region Edit support #region BeginEdit /// /// BeginEdit /// /// /// public virtual bool BeginEdit(bool selectAll) { if (selectAll == true) SelectAll(); else Select(Text.Length, 1); Show(); Focus(); return (false); } #endregion #region EndEdit /// /// EndEdit /// /// public virtual bool EndEdit() { return (false); } #endregion #region CancelEdit /// /// CancelEdit /// /// public virtual bool CancelEdit() { return (false); } #endregion #endregion #region CellRender /// /// CellRender /// /// public virtual void CellRender(Graphics g) { _Cell.CellRender(this, g); } #endregion #region Keyboard support #region CellKeyDown /// /// CellKeyDown /// public virtual void CellKeyDown(KeyEventArgs e) { } #endregion #region WantsInputKey /// /// WantsInputKey /// /// /// /// public virtual bool WantsInputKey(Keys key, bool gridWantsKey) { // Let the TextBox handle the following keys if (Multiline == true) { switch (key & Keys.KeyCode) { case Keys.Up: if (GetLineFromCharIndex(SelectionStart) != 0) return (true); break; case Keys.Down: int lastLine = GetLineFromCharIndex(int.MaxValue); if (GetLineFromCharIndex(SelectionStart) < lastLine) return (true); break; case Keys.Enter: if (AcceptsReturn == true) return (true); break; } } switch (key & Keys.KeyCode) { case Keys.Left: case Keys.Right: case Keys.Home: case Keys.End: return (true); case Keys.Tab: if (AcceptsTab == true) return (true); break; } return (gridWantsKey == false); } #endregion #endregion #region Mouse support #region OnCellMouseMove /// /// OnCellMouseMove /// /// public virtual void OnCellMouseMove(MouseEventArgs e) { } #endregion #region OnCellMouseEnter /// /// OnCellMouseEnter /// /// public virtual void OnCellMouseEnter(EventArgs e) { } #endregion #region OnCellMouseLeave /// /// OnCellMouseLeave /// /// public virtual void OnCellMouseLeave(EventArgs e) { } #endregion #region OnCellMouseUp /// /// OnCellMouseUp /// /// public virtual void OnCellMouseUp(MouseEventArgs e) { } #endregion #region OnCellMouseDown /// /// OnCellMouseDown /// /// public virtual void OnCellMouseDown(MouseEventArgs e) { } #endregion #endregion #endregion #region Dispose /// /// Dispose /// /// protected override void Dispose(bool disposing) { try { base.Dispose(disposing); } catch { } } #endregion } }