787 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			787 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Text;
 | |
| using System.Drawing;
 | |
| using System.ComponentModel;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Controls
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Represents the Check Box control with extended styles.
 | |
|     /// </summary>
 | |
|     [ToolboxBitmap(typeof(CheckBoxX), "Controls.CheckBoxX.ico"), ToolboxItem(true), DefaultEvent("CheckedChanged"), System.Runtime.InteropServices.ComVisible(false), Designer("DevComponents.DotNetBar.Design.CheckBoxXDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | |
|     public class CheckBoxX : BaseItemControl, ICommandSource
 | |
|     {
 | |
|         #region Private Variables
 | |
|         private const string DefaultCheckValueUnchecked = "N";
 | |
|         private const string DefaultCheckValueChecked = "Y";
 | |
|         private const object DefaultCheckValueIndeterminate = null;
 | |
| 
 | |
|         private CheckBoxItem m_CheckBox = null;
 | |
|         private object m_CheckValue = DefaultCheckValueUnchecked;
 | |
| 
 | |
|         private object m_CheckValueUnchecked = DefaultCheckValueUnchecked;
 | |
|         private object m_CheckValueChecked = DefaultCheckValueChecked;
 | |
|         private object m_CheckValueIndeterminate = DefaultCheckValueIndeterminate;
 | |
|         private bool m_ConsiderEmptyStringAsNull = true;
 | |
|         #endregion
 | |
| 
 | |
|         #region Events
 | |
|         /// <summary>
 | |
|         /// Occurs before Checked property is changed and allows you to cancel the change.
 | |
|         /// </summary>
 | |
|         public event CheckBoxXChangeEventHandler CheckedChanging;
 | |
|         
 | |
|         /// <summary>
 | |
|         /// Occurs after Checked property is changed with extended information.
 | |
|         /// </summary>
 | |
|         public event CheckBoxXChangeEventHandler CheckedChangedEx;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs after Checked property is changed. This event is provided for the Windows Forms data binding support. You can use CheckedChangedEx to get extended information about the changed.
 | |
|         /// </summary>
 | |
|         public event EventHandler CheckedChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs after Checked property is changed. This event is provided for the Windows Forms data binding support. You can use CheckedChangedEx to get extended information about the changed.
 | |
|         /// </summary>
 | |
|         public event EventHandler CheckValueChanged;
 | |
|         #endregion
 | |
| 
 | |
|         #region Constructor, Dispose
 | |
|         public CheckBoxX()
 | |
|         {
 | |
|             this.SetStyle(ControlStyles.Selectable, true);
 | |
|             m_CheckBox = new CheckBoxItem();
 | |
|             m_CheckBox.VerticalPadding = 0;
 | |
|             m_CheckBox.Style = eDotNetBarStyle.Office2007;
 | |
|             m_CheckBox.CheckedChanging += new CheckBoxChangeEventHandler(OnCheckedChanging);
 | |
|             m_CheckBox.CheckedChanged += new CheckBoxChangeEventHandler(OnCheckedChanged);
 | |
|             this.HostItem = m_CheckBox;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal Implementation
 | |
|         /// <summary>
 | |
|         /// Gets or sets the size of the check or radio sign. Default value is 13x13. Minimum value is 6x6.
 | |
|         /// </summary>
 | |
|         [Category("Appearance"), Description("Indicates size of the check or radio sign. Default value is 13x13.")]
 | |
|         public Size CheckSignSize
 | |
|         {
 | |
|             get { return m_CheckBox.CheckSignSize; }
 | |
|             set { m_CheckBox.CheckSignSize = value; this.RecalcLayout(); this.Invalidate(); }
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public bool ShouldSerializeCheckSignSize()
 | |
|         {
 | |
|             return m_CheckBox.ShouldSerializeCheckSignSize();
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetCheckSignSize()
 | |
|         {
 | |
|             this.CheckSignSize = new Size(13, 13);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether text-markup support is enabled for controls Text property. Default value is true.
 | |
|         /// Set this property to false to display HTML or other markup in the control instead of it being parsed as text-markup.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Appearance"), Description("Indicates whether text-markup support is enabled for controls Text property.")]
 | |
|         public bool EnableMarkup
 | |
|         {
 | |
|             get { return m_CheckBox.EnableMarkup; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.EnableMarkup = value;
 | |
|             }
 | |
|         }
 | |
|         protected override MouseButtons MouseDownFocusButtons
 | |
|         {
 | |
|             get { return MouseButtons.Left | MouseButtons.Right | MouseButtons.Middle | MouseButtons.XButton1 | MouseButtons.XButton2; }
 | |
|         }
 | |
|         //protected override void OnMouseDown(MouseEventArgs e)
 | |
|         //{
 | |
|         //    if (!this.Focused)
 | |
|         //        this.Select();
 | |
|         //    base.OnMouseDown(e);
 | |
|         //}
 | |
| 
 | |
|         //protected override void OnEnter(EventArgs e)
 | |
|         //{
 | |
|         //    if (this.CheckBoxStyle == eCheckBoxStyle.RadioButton && Control.MouseButtons == MouseButtons.None && WinApi.GetKeyState(9) < 0 && this.AutoCheck)
 | |
|         //    {
 | |
|         //        m_CheckBox.SetChecked(true, eEventSource.Keyboard);
 | |
|         //    }
 | |
|         //    base.OnEnter(e);
 | |
|         //}
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Invokes the CheckedChanged event.
 | |
|         /// </summary>
 | |
|         private void OnCheckedChanged(object sender, CheckBoxChangeEventArgs e)
 | |
|         {
 | |
|             CheckBoxX previous = null;
 | |
|             if (m_CheckBox.CheckBoxStyle == eCheckBoxStyle.RadioButton && m_CheckBox.Checked && this.Parent != null)
 | |
|             {
 | |
|                 foreach (Control c in this.Parent.Controls)
 | |
|                 {
 | |
|                     if (c == this)
 | |
|                     {
 | |
|                         //c.TabStop = true;
 | |
|                         continue;
 | |
|                     }
 | |
|                     CheckBoxX b = c as CheckBoxX;
 | |
|                     if (b != null && b.Checked && b.CheckBoxStyle == eCheckBoxStyle.RadioButton)
 | |
|                     {
 | |
|                         b.Checked = false;
 | |
|                         //b.TabStop = false;
 | |
|                         previous = b;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (this.Command != null)
 | |
|                 this.Command.Checked = this.Checked;
 | |
| 
 | |
|             CheckBoxXChangeEventArgs e1 = new CheckBoxXChangeEventArgs(previous, this, e.EventSource);
 | |
| 
 | |
|             if (CheckedChangedEx != null)
 | |
|                 CheckedChangedEx(this, e1);
 | |
| 
 | |
|             if (CheckedChanged != null)
 | |
|                 CheckedChanged(this, new EventArgs());
 | |
| 
 | |
|             if (GetCheckState(m_CheckValue) != this.CheckState)
 | |
|                 m_CheckValue = GetCheckValue(this.CheckState);
 | |
| 
 | |
|             if (CheckValueChanged != null)
 | |
|                 CheckValueChanged(this, new EventArgs());
 | |
| 
 | |
|             ExecuteCommand();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Invokes CheckedChanging event.
 | |
|         /// </summary>
 | |
|         private void OnCheckedChanging(object sender, CheckBoxChangeEventArgs e)
 | |
|         {
 | |
|             CheckBoxXChangeEventArgs e1 = new CheckBoxXChangeEventArgs(null, this, e.EventSource);
 | |
| 
 | |
|             if (m_CheckBox.CheckBoxStyle == eCheckBoxStyle.RadioButton && !m_CheckBox.Checked && this.Parent != null)
 | |
|             {
 | |
|                 CheckBoxX b = null;
 | |
|                 foreach (Control c in this.Parent.Controls)
 | |
|                 {
 | |
|                     if (c == this)
 | |
|                         continue;
 | |
|                     b = c as CheckBoxX;
 | |
|                     if (b != null && b.Checked && b.CheckBoxStyle == eCheckBoxStyle.RadioButton)
 | |
|                     {
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|                 e1 = new CheckBoxXChangeEventArgs(b, this, e.EventSource);
 | |
|             }
 | |
| 
 | |
|             if (CheckedChanging != null)
 | |
|             {
 | |
|                 CheckedChanging(this, e1);
 | |
|                 e.Cancel = e1.Cancel;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the appearance style of the item. Default value is CheckBox. Item can also assume the style of radio-button.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue(eCheckBoxStyle.CheckBox), Category("Appearance"), Description("Indicates appearance style of the item. Default value is CheckBox. Item can also assume the style of radio-button.")]
 | |
|         public eCheckBoxStyle CheckBoxStyle
 | |
|         {
 | |
|             get { return m_CheckBox.CheckBoxStyle; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.CheckBoxStyle = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the check box position relative to the text. Default value is Left.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue(eCheckBoxPosition.Left), Category("Appearance"), Description("Indicates the check box position relative to the text.")]
 | |
|         public eCheckBoxPosition CheckBoxPosition
 | |
|         {
 | |
|             get { return m_CheckBox.CheckBoxPosition; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.CheckBoxPosition = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or set a value indicating whether the button is in the checked state.
 | |
|         /// </summary>
 | |
|         [Browsable(true), Bindable(true), DevCoBrowsable(true), Category("Appearance"), Description("Indicates whether item is checked or not."), DefaultValue(false)]
 | |
|         public virtual bool Checked
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return m_CheckBox.Checked;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.Checked = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether text assigned to the check box is visible. Default value is true.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue(true), Category("Appearance"), Description("Indicates whether text assigned to the check box is visible.")]
 | |
|         public bool TextVisible
 | |
|         {
 | |
|             get { return m_CheckBox.TextVisible; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.TextVisible = value;
 | |
|                 this.RecalcLayout();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the text color. Default value is Color.Empty which indicates that default color is used.
 | |
|         /// </summary>
 | |
|         [Browsable(true), Category("Appearance"), Description("Indicates text color.")]
 | |
|         public Color TextColor
 | |
|         {
 | |
|             get { return m_CheckBox.TextColor; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.TextColor = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public bool ShouldSerializeTextColor()
 | |
|         {
 | |
|             return !m_CheckBox.TextColor.IsEmpty;
 | |
|         }
 | |
| 
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetTextColor()
 | |
|         {
 | |
|             this.TextColor = Color.Empty;
 | |
|         }
 | |
| 
 | |
|         [Browsable(false)]
 | |
|         public override Color ForeColor
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.ForeColor;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 base.ForeColor = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void OnKeyDown(KeyEventArgs e)
 | |
|         {
 | |
|             if (e.KeyCode == Keys.Space && this.Enabled && this.AutoCheck)
 | |
|             {
 | |
|                 if (this.CheckBoxStyle == eCheckBoxStyle.CheckBox)
 | |
|                     SetChecked(!this.Checked, eEventSource.Keyboard);
 | |
|                 else if (!this.Checked)
 | |
|                     SetChecked(true, eEventSource.Keyboard);
 | |
|             }
 | |
|             base.OnKeyDown(e);
 | |
|         }
 | |
| 
 | |
|         private void SetChecked(bool newValue, eEventSource source)
 | |
|         {
 | |
|             m_CheckBox.SetChecked(newValue, source);
 | |
|         }
 | |
| 
 | |
|         private void SetChecked(CheckState newValue, eEventSource source)
 | |
|         {
 | |
|             m_CheckBox.SetChecked(newValue, source);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the text associated with the control.
 | |
|         /// </summary>
 | |
|         [Browsable(true), Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)), Category("Appearance"), Description("Indicates text associated with this button.."), Localizable(true), DefaultValue("")]
 | |
|         public override string Text
 | |
|         {
 | |
|             get { return base.Text; }
 | |
|             set { base.Text = value; }
 | |
|         }
 | |
| 
 | |
| #if FRAMEWORK20
 | |
|         [Localizable(true), Browsable(false)]
 | |
|         public new System.Windows.Forms.Padding Padding
 | |
|         {
 | |
|             get { return base.Padding; }
 | |
|             set { base.Padding = value; }
 | |
|         }
 | |
| 
 | |
|         public override Size GetPreferredSize(Size proposedSize)
 | |
|         {
 | |
|             if (!BarFunctions.IsHandleValid(this))
 | |
|                 return base.GetPreferredSize(proposedSize);
 | |
|             if (this.Text.Length == 0)
 | |
|                 return base.GetPreferredSize(proposedSize);
 | |
| 
 | |
|             m_CheckBox.RecalcSize();
 | |
|             Size s = m_CheckBox.Size;
 | |
|             s.Width += 2;
 | |
|             s.Height += 2;
 | |
|             if (!this.TextVisible) s.Width += 2;
 | |
|             m_CheckBox.Bounds = GetItemBounds();
 | |
|             return s;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue(false), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
 | |
|         public override bool AutoSize
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.AutoSize;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 if (this.AutoSize != value)
 | |
|                 {
 | |
|                     base.AutoSize = value;
 | |
|                     AdjustSize();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
 | |
|         {
 | |
|             if (this.AutoSize)
 | |
|             {
 | |
|                 Size preferredSize = base.PreferredSize;
 | |
|                 width = preferredSize.Width;
 | |
|                 height = preferredSize.Height;
 | |
|             }
 | |
|             base.SetBoundsCore(x, y, width, height, specified);
 | |
|         }
 | |
| 
 | |
|         private void AdjustSize()
 | |
|         {
 | |
|             if (this.AutoSize)
 | |
|             {
 | |
|                 this.Size = base.PreferredSize;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void OnTextChanged(EventArgs e)
 | |
|         {
 | |
|             base.OnTextChanged(e);
 | |
|             this.AdjustSize();
 | |
|         }
 | |
| 
 | |
|         protected override void OnHandleCreated(EventArgs e)
 | |
|         {
 | |
|             base.OnHandleCreated(e);
 | |
|             if (this.AutoSize)
 | |
|                 this.AdjustSize();
 | |
|         }
 | |
| #endif
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets a value indicating whether the CheckBox will allow three check states rather than two. If the ThreeState property is set to true
 | |
|         /// CheckState property should be used instead of Checked property to set the extended state of the control.
 | |
|         /// </summary>
 | |
|         [Browsable(true), Category("Behavior"), DefaultValue(false), Description("Indicates whether the CheckBox will allow three check states rather than two.")]
 | |
|         public bool ThreeState
 | |
|         {
 | |
|             get { return m_CheckBox.ThreeState; }
 | |
|             set { m_CheckBox.ThreeState = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Specifies the state of a control, such as a check box, that can be checked, unchecked, or set to an indeterminate state. 
 | |
|         /// </summary>
 | |
|         [Browsable(true), Category("Behavior"), DefaultValue(CheckState.Unchecked), Description("Specifies the state of a control, such as a check box, that can be checked, unchecked, or set to an indeterminate state")]
 | |
|         public CheckState CheckState
 | |
|         {
 | |
|             get { return m_CheckBox.CheckState; }
 | |
|             set { m_CheckBox.CheckState = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the underlying CheckBoxItem
 | |
|         /// </summary>
 | |
|         internal CheckBoxItem CheckBoxItem
 | |
|         {
 | |
|             get { return (m_CheckBox); }
 | |
|         }
 | |
| 
 | |
|         private bool _EnableMnemonicWithAltKeyOnly = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether mnemonic character assigned to control is processed only if Alt key is pressed. Default value is false which indicate that Alt key is not required.
 | |
|         /// </summary>
 | |
|         [DefaultValue(false), Category("Behavior"), Description("Indicates whether mnemonic character assigned to control is processed only if Alt key is pressed")]
 | |
|         public bool EnableMnemonicWithAltKeyOnly
 | |
|         {
 | |
|             get { return _EnableMnemonicWithAltKeyOnly; }
 | |
|             set
 | |
|             {
 | |
|                 _EnableMnemonicWithAltKeyOnly = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override bool ProcessMnemonic(char charCode)
 | |
|         {
 | |
|             if (AutoCheck && CanSelect && IsMnemonic(charCode, this.Text) && this.Enabled &&
 | |
|                 (!_EnableMnemonicWithAltKeyOnly || Control.ModifierKeys == Keys.Alt || this.Focused) && !m_CheckBox.IsUsingTextMarkup)
 | |
|             {
 | |
|                 if (Focus())
 | |
|                 {
 | |
|                     if (this.CheckBoxStyle == eCheckBoxStyle.CheckBox)
 | |
|                         SetChecked(!this.Checked, eEventSource.Keyboard);
 | |
|                     else if (!this.Checked)
 | |
|                         SetChecked(true, eEventSource.Keyboard);
 | |
|                     return true;
 | |
|                 }
 | |
|             }
 | |
|             return false;
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Data-Binding Support
 | |
|         /// <summary>
 | |
|         /// Gets or set whether the Checked values and the item appearance are automatically changed when the Check-Box is clicked. Default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Behavior"), Description("Indicates whether the Checked values and the item appearance are automatically changed when the Check-Box is clicked.")]
 | |
|         public bool AutoCheck
 | |
|         {
 | |
|             get { return m_CheckBox.AutoCheck; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.AutoCheck = value;
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the object that represents the Checked state of control.
 | |
|         /// </summary>
 | |
|         [DefaultValue("N"), Bindable(true), RefreshProperties(RefreshProperties.All), TypeConverter(typeof(StringConverter)), Description("Indicates object that represents the Checked state of control.")]
 | |
|         public object CheckValue
 | |
|         {
 | |
|             get { return m_CheckValue; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckValue = value;
 | |
|                 OnCheckValueChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void OnCheckValueChanged()
 | |
|         {
 | |
|             CheckState cs = GetCheckState(m_CheckValue);
 | |
|             this.CheckState = cs;
 | |
|         }
 | |
| 
 | |
|         private bool IsNull(object value)
 | |
|         {
 | |
|             return value == null || value is string && (string)value == string.Empty && m_ConsiderEmptyStringAsNull ||
 | |
|                 value == DBNull.Value;
 | |
|         }
 | |
| 
 | |
|         private object GetCheckValue(CheckState cs)
 | |
|         {
 | |
|             if (cs == CheckState.Indeterminate)
 | |
|                 return m_CheckValueIndeterminate;
 | |
| 
 | |
|             if (cs == CheckState.Unchecked)
 | |
|                 return m_CheckValueUnchecked;
 | |
| 
 | |
|             return m_CheckValueChecked;
 | |
|         }
 | |
| 
 | |
|         private CheckState GetCheckState(object value)
 | |
|         {
 | |
|             if (m_CheckValueIndeterminate == null && IsNull(value) || m_CheckValueIndeterminate!=null && m_CheckValueIndeterminate.Equals(value))
 | |
|             {
 | |
|                 return CheckState.Indeterminate;
 | |
|             }
 | |
|             else if (m_CheckValueChecked == null && IsNull(value) || m_CheckValueChecked!=null && m_CheckValueChecked.Equals(value))
 | |
|             {
 | |
|                 return CheckState.Checked;
 | |
|             }
 | |
|             else if (m_CheckValueUnchecked == null && IsNull(value) || m_CheckValueUnchecked!=null && m_CheckValueUnchecked.Equals(value))
 | |
|             {
 | |
|                 return CheckState.Unchecked;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 if (value is System.Data.SqlTypes.SqlBoolean)
 | |
|                 {
 | |
|                     System.Data.SqlTypes.SqlBoolean sqlBool = (System.Data.SqlTypes.SqlBoolean)value;
 | |
|                     if (sqlBool.IsTrue)
 | |
|                         return CheckState.Checked;
 | |
|                     else if (sqlBool.IsNull)
 | |
|                         return CheckState.Indeterminate;
 | |
|                     else
 | |
|                         return CheckState.Unchecked;
 | |
|                 }
 | |
|                 else if (value is int? && this.ThreeState)
 | |
|                 {
 | |
|                     if (value == null) return CheckState.Indeterminate;
 | |
|                     if (((int?)value).Value == 0)
 | |
|                         return CheckState.Unchecked;
 | |
|                     return CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is int)
 | |
|                 {
 | |
|                     if (this.ThreeState && (int)value == -1)
 | |
|                         return CheckState.Indeterminate;
 | |
|                     return ((int)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is long)
 | |
|                 {
 | |
|                     if (this.ThreeState && (long)value == -1)
 | |
|                         return CheckState.Indeterminate;
 | |
|                     return ((long)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is short)
 | |
|                 {
 | |
|                     if (this.ThreeState && (short)value == -1)
 | |
|                         return CheckState.Indeterminate;
 | |
|                     return ((short)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is float)
 | |
|                 {
 | |
|                     if (this.ThreeState && (float)value == -1)
 | |
|                         return CheckState.Indeterminate;
 | |
|                     return ((float)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is double)
 | |
|                 {
 | |
|                     if (this.ThreeState && (double)value == -1)
 | |
|                         return CheckState.Indeterminate;
 | |
|                     return ((double)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is byte)
 | |
|                 {
 | |
|                     return ((byte)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is uint)
 | |
|                 {
 | |
|                     return ((uint)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is ulong)
 | |
|                 {
 | |
|                     return ((ulong)value) == 0 ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 else if (value is bool)
 | |
|                 {
 | |
|                     return ((bool)value) == false ? CheckState.Unchecked : CheckState.Checked;
 | |
|                 }
 | |
|                 
 | |
|                 return CheckState.Indeterminate;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether empty string is consider as null value during CheckValue value comparison. Default value is true.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Behavior"), Browsable(true), Description("Indicates whether empty string is consider as null value during CheckValue value comparison.")]
 | |
|         public bool ConsiderEmptyStringAsNull
 | |
|         {
 | |
|             get { return m_ConsiderEmptyStringAsNull; }
 | |
|             set { m_ConsiderEmptyStringAsNull = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value that represents the Indeterminate state of check box when CheckValue property is set to that value. Default value is null.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue(null), Category("Behavior"), TypeConverter(typeof(StringConverter)), Description("Represents the Indeterminate state value of check box when CheckValue property is set to that value")]
 | |
|         public object CheckValueIndeterminate
 | |
|         {
 | |
|             get { return m_CheckValueIndeterminate; }
 | |
|             set { m_CheckValueIndeterminate = value; OnCheckValueChanged(); }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value that represents the Checked state of check box when CheckValue property is set to that value. Default value is null.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue("Y"), Category("Behavior"), TypeConverter(typeof(StringConverter)), Description("Represents the Checked state value of check box when CheckValue property is set to that value")]
 | |
|         public object CheckValueChecked
 | |
|         {
 | |
|             get { return m_CheckValueChecked; }
 | |
|             set { m_CheckValueChecked = value; OnCheckValueChanged(); }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value that represents the Unchecked state of check box when CheckValue property is set to that value. Default value is null.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue("N"), Category("Behavior"), TypeConverter(typeof(StringConverter)), Description("Represents the Unchecked state value of check box when CheckValue property is set to that value")]
 | |
|         public object CheckValueUnchecked
 | |
|         {
 | |
|             get { return m_CheckValueUnchecked; }
 | |
|             set { m_CheckValueUnchecked = value; OnCheckValueChanged(); }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the custom image that is displayed instead default check box representation when check box is checked.
 | |
|         /// </summary>
 | |
|         [DefaultValue(null), Category("CheckBox Images"), Description("Indicates custom image that is displayed instead default check box representation when check box is checked")]
 | |
|         public Image CheckBoxImageChecked
 | |
|         {
 | |
|             get { return m_CheckBox.CheckBoxImageChecked; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.CheckBoxImageChecked = value;
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the custom image that is displayed instead default check box representation when check box is unchecked.
 | |
|         /// </summary>
 | |
|         [DefaultValue(null), Category("CheckBox Images"), Description("Indicates custom image that is displayed instead default check box representation when check box is unchecked")]
 | |
|         public Image CheckBoxImageUnChecked
 | |
|         {
 | |
|             get { return m_CheckBox.CheckBoxImageUnChecked; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.CheckBoxImageUnChecked = value;
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the custom image that is displayed instead default check box representation when check box is in indeterminate state.
 | |
|         /// </summary>
 | |
|         [DefaultValue(null), Category("CheckBox Images"), Description("Indicates custom image that is displayed instead default check box representation when check box is in indeterminate state")]
 | |
|         public Image CheckBoxImageIndeterminate
 | |
|         {
 | |
|             get { return m_CheckBox.CheckBoxImageIndeterminate; }
 | |
|             set
 | |
|             {
 | |
|                 m_CheckBox.CheckBoxImageIndeterminate = value;
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region ICommandSource Members
 | |
|         protected virtual void ExecuteCommand()
 | |
|         {
 | |
|             if (_Command == null) return;
 | |
|             CommandManager.ExecuteCommand(this);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the command assigned to the item. Default value is null.
 | |
|         /// <remarks>Note that if this property is set to null Enabled property will be set to false automatically to disable the item.</remarks>
 | |
|         /// </summary>
 | |
|         [DefaultValue(null), Category("Commands"), Description("Indicates the command assigned to the item.")]
 | |
|         public Command Command
 | |
|         {
 | |
|             get { return (Command)((ICommandSource)this).Command; }
 | |
|             set
 | |
|             {
 | |
|                 ((ICommandSource)this).Command = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private ICommand _Command = null;
 | |
|         //[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         ICommand ICommandSource.Command
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _Command;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 bool changed = false;
 | |
|                 if (_Command != value)
 | |
|                     changed = true;
 | |
| 
 | |
|                 if (_Command != null)
 | |
|                     CommandManager.UnRegisterCommandSource(this, _Command);
 | |
|                 _Command = value;
 | |
|                 if (value != null)
 | |
|                     CommandManager.RegisterCommand(this, value);
 | |
|                 if (changed)
 | |
|                     OnCommandChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called when Command property value changes.
 | |
|         /// </summary>
 | |
|         protected virtual void OnCommandChanged()
 | |
|         {
 | |
|             Command command = this.Command;
 | |
|             if (command != null && command.Checked != this.Checked)
 | |
|             {
 | |
|                 SetChecked(command.Checked, eEventSource.Code);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private object _CommandParameter = null;
 | |
|         /// <summary>
 | |
|         /// Gets or sets user defined data value that can be passed to the command when it is executed.
 | |
|         /// </summary>
 | |
|         [Browsable(true), DefaultValue(null), Category("Commands"), Description("Indicates user defined data value that can be passed to the command when it is executed."), System.ComponentModel.TypeConverter(typeof(System.ComponentModel.StringConverter)), System.ComponentModel.Localizable(true)]
 | |
|         public object CommandParameter
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _CommandParameter;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _CommandParameter = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Delegate for OptionGroupChanging event.
 | |
|     /// </summary>
 | |
|     public delegate void CheckBoxXChangeEventHandler(object sender, CheckBoxXChangeEventArgs e);
 | |
| 
 | |
|     #region CheckBoxXChangeEventArgs
 | |
|     /// <summary>
 | |
|     /// Represents event arguments for OptionGroupChanging event.
 | |
|     /// </summary>
 | |
|     public class CheckBoxXChangeEventArgs : EventArgs
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Set to true to cancel the checking on NewChecked button.
 | |
|         /// </summary>
 | |
|         public bool Cancel = false;
 | |
|         /// <summary>
 | |
|         /// Check-box that will become checked if operation is not cancelled.
 | |
|         /// </summary>
 | |
|         public readonly CheckBoxX NewChecked;
 | |
|         /// <summary>
 | |
|         /// Check-box that is currently checked and which will be unchecked if operation is not cancelled. This property will have only valid values for eCheckBoxStyle.RadioButton style CheckBoxItems.
 | |
|         /// </summary>
 | |
|         public readonly CheckBoxX OldChecked;
 | |
|         /// <summary>
 | |
|         /// Indicates the action that has caused the event.
 | |
|         /// </summary>
 | |
|         public readonly eEventSource EventSource = eEventSource.Code;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Default constructor.
 | |
|         /// </summary>
 | |
|         public CheckBoxXChangeEventArgs(CheckBoxX oldchecked, CheckBoxX newchecked, eEventSource eventSource)
 | |
|         {
 | |
|             NewChecked = newchecked;
 | |
|             OldChecked = oldchecked;
 | |
|             EventSource = eventSource;
 | |
|         }
 | |
|     }
 | |
|     #endregion
 | |
| }
 |