1459 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1459 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#if FRAMEWORK20
 | 
						|
using System;
 | 
						|
using System.Text;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Collections;
 | 
						|
using DevComponents.DotNetBar;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
 | 
						|
namespace DevComponents.Editors
 | 
						|
{
 | 
						|
    [ToolboxItem(false)]
 | 
						|
    public class VisualControlBase : PopupItemControl, IInputButtonControl, ISupportInitialize
 | 
						|
    {
 | 
						|
        #region Private Variables
 | 
						|
        private VisualItem _RootVisual = null;
 | 
						|
        private bool _FocusHighlightEnabled = false;
 | 
						|
        private Color _LastBackColor = Color.Empty;
 | 
						|
        private static Color _DefaultHighlightColor = Color.FromArgb(0xFF, 0xFF, 0x88);
 | 
						|
        private Color _FocusHighlightColor = _DefaultHighlightColor;
 | 
						|
        private bool _MouseOver = false;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Events
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when ButtonCustom control is clicked.
 | 
						|
        /// </summary>
 | 
						|
        public event EventHandler ButtonCustomClick;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when ButtonCustom2 control is clicked.
 | 
						|
        /// </summary>
 | 
						|
        public event EventHandler ButtonCustom2Click;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructor
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the class.
 | 
						|
        /// </summary>
 | 
						|
        public VisualControlBase()
 | 
						|
        {
 | 
						|
            this.SetStyle(ControlStyles.UserPaint, true);
 | 
						|
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 | 
						|
            this.SetStyle(ControlStyles.Opaque, true);
 | 
						|
            this.SetStyle(ControlStyles.ResizeRedraw, true);
 | 
						|
            this.SetStyle(SystemOptions.DoubleBufferFlag, true);
 | 
						|
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 | 
						|
            this.SetStyle(ControlStyles.Selectable, true);
 | 
						|
 | 
						|
            this.IsAccessible = true;
 | 
						|
 | 
						|
            _Colors = new InputControlColors();
 | 
						|
            _Colors.ColorChanged += new EventHandler(ColorsColorChanged);
 | 
						|
 | 
						|
            _ButtonCustom = new InputButtonSettings(this);
 | 
						|
            _ButtonCustom2 = new InputButtonSettings(this);
 | 
						|
            _RootVisual = CreateRootVisual();
 | 
						|
            _RootVisual.ArrangeInvalid += new EventHandler(VisualArrangeInvalid);
 | 
						|
            _RootVisual.RenderInvalid += new EventHandler(VisualRenderInvalid);
 | 
						|
            _RootVisual.ResetMouseHover += VisualResetMouseHover;
 | 
						|
 | 
						|
            _BackgroundStyle.Class = ElementStyleClassKeys.DateTimeInputBackgroundKey;
 | 
						|
            _BackgroundStyle.SetColorScheme(this.ColorScheme);
 | 
						|
            _BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
 | 
						|
 | 
						|
            ApplyFieldNavigation();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
 | 
						|
        private void VisualResetMouseHover(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            DevComponents.AdvTree.Interop.WinApi.ResetHover(this);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Resets the input position so the new input overwrites current value.
 | 
						|
        /// </summary>
 | 
						|
        public void ResetInputPosition()
 | 
						|
        {
 | 
						|
            if (_RootVisual is VisualInputBase)
 | 
						|
                ((VisualInputBase)_RootVisual).ResetInputPosition();
 | 
						|
            else if (_RootVisual is VisualInputGroup)
 | 
						|
                ((VisualInputGroup)_RootVisual).ResetInputPosition();
 | 
						|
        }
 | 
						|
 | 
						|
        private void ColorsColorChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual PaintInfo CreatePaintInfo(PaintEventArgs e)
 | 
						|
        {
 | 
						|
            PaintInfo p = new PaintInfo();
 | 
						|
            p.Graphics = e.Graphics;
 | 
						|
            p.DefaultFont = this.Font;
 | 
						|
            p.ForeColor = this.ForeColor;
 | 
						|
            p.RenderOffset = new System.Drawing.Point();
 | 
						|
            p.WatermarkColor = _WatermarkColor;
 | 
						|
            p.WatermarkEnabled = _WatermarkEnabled;
 | 
						|
            p.WatermarkFont = _WatermarkFont;
 | 
						|
            p.AvailableSize = this.ClientRectangle.Size;
 | 
						|
            p.ParentEnabled = this.Enabled;
 | 
						|
            p.MouseOver = _MouseOver || this.Focused;
 | 
						|
            p.Colors = _Colors;
 | 
						|
            if (!_DisabledForeColor.IsEmpty) p.DisabledForeColor = _DisabledForeColor;
 | 
						|
            return p;
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _RenderControlButtons = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether control system buttons are rendered. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        internal bool RenderControlButtons
 | 
						|
        {
 | 
						|
            get { return _RenderControlButtons; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _RenderControlButtons = value;
 | 
						|
                OnRenderControlButtonsChanged();
 | 
						|
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private void OnRenderControlButtonsChanged()
 | 
						|
        {
 | 
						|
            // Update IsRendered on system items.
 | 
						|
            if (_RootVisual is VisualGroup)
 | 
						|
            {
 | 
						|
                VisualGroup group = (VisualGroup)_RootVisual;
 | 
						|
                VisualItem[] items = new VisualItem[group.Items.Count];
 | 
						|
                group.Items.CopyTo(items);
 | 
						|
                foreach (VisualItem item in items)
 | 
						|
                {
 | 
						|
                    if (item.ItemType == eSystemItemType.SystemButton || item is VisualUpDownButton || item is LockUpdateCheckBox)
 | 
						|
                    {
 | 
						|
                        item.IsRendered = _RenderControlButtons;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _CallBasePaintBackground = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether during painting OnPaintBackground on base control is called when BackColor=Transparent.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        internal bool CallBasePaintBackground
 | 
						|
        {
 | 
						|
            get { return _CallBasePaintBackground; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _CallBasePaintBackground = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        internal void InternalPaint(PaintEventArgs e)
 | 
						|
        {
 | 
						|
            OnPaint(e);
 | 
						|
        }
 | 
						|
 | 
						|
        private void PerformRootVisualLayout()
 | 
						|
        {
 | 
						|
            if (this.InvokeRequired)
 | 
						|
            {
 | 
						|
                this.BeginInvoke(new MethodInvoker(delegate { this.PerformRootVisualLayout(); }));
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            using (Graphics g = this.CreateGraphics())
 | 
						|
            {
 | 
						|
                PaintEventArgs e = new PaintEventArgs(g, Rectangle.Empty);
 | 
						|
                PaintInfo p = CreatePaintInfo(e);
 | 
						|
                Rectangle clientRect = this.ClientRectangle;
 | 
						|
                bool disposeStyle = false;
 | 
						|
                ElementStyle style = GetBackgroundStyle(out disposeStyle);
 | 
						|
                if (style.Custom)
 | 
						|
                {
 | 
						|
                    ElementStyleDisplayInfo displayInfo = new ElementStyleDisplayInfo(style, e.Graphics, clientRect);
 | 
						|
                    clientRect.X += ElementStyleLayout.LeftWhiteSpace(style);
 | 
						|
                    clientRect.Y += ElementStyleLayout.TopWhiteSpace(style);
 | 
						|
                    clientRect.Width -= ElementStyleLayout.HorizontalStyleWhiteSpace(style);
 | 
						|
                    clientRect.Height -= ElementStyleLayout.VerticalStyleWhiteSpace(style);
 | 
						|
                    p.RenderOffset = clientRect.Location;
 | 
						|
                    p.AvailableSize = clientRect.Size;
 | 
						|
                }
 | 
						|
                _RootVisual.PerformLayout(p);
 | 
						|
                e.Dispose();
 | 
						|
                if (disposeStyle) style.Dispose();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnPaint(PaintEventArgs e)
 | 
						|
        {
 | 
						|
            Rectangle clientRect = this.ClientRectangle;
 | 
						|
 | 
						|
            PaintInfo p = CreatePaintInfo(e);
 | 
						|
            bool enabled = this.Enabled;
 | 
						|
 | 
						|
            if (!enabled)
 | 
						|
            {
 | 
						|
                Color c = _DisabledBackColor;
 | 
						|
                if (c.IsEmpty) c = SystemColors.Control;
 | 
						|
                using (SolidBrush brush = new SolidBrush(c))
 | 
						|
                    e.Graphics.FillRectangle(brush, clientRect);
 | 
						|
            }
 | 
						|
            else if (this.BackColor != Color.Transparent)
 | 
						|
                e.Graphics.FillRectangle(SystemBrushes.Window, clientRect);
 | 
						|
            else if (this.BackColor == Color.Transparent && _CallBasePaintBackground)
 | 
						|
                base.OnPaintBackground(e);
 | 
						|
 | 
						|
            bool disposeStyle = false;
 | 
						|
            ElementStyle style = GetBackgroundStyle(out disposeStyle);
 | 
						|
            if (style.Custom)
 | 
						|
            {
 | 
						|
                ElementStyleDisplayInfo displayInfo = new ElementStyleDisplayInfo(style, e.Graphics, clientRect);
 | 
						|
                if (!enabled)
 | 
						|
                {
 | 
						|
                    ElementStyleDisplay.PaintBorder(displayInfo);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    ElementStyleDisplay.Paint(displayInfo);
 | 
						|
                clientRect.X += ElementStyleLayout.LeftWhiteSpace(style);
 | 
						|
                clientRect.Y += ElementStyleLayout.TopWhiteSpace(style);
 | 
						|
                clientRect.Width -= ElementStyleLayout.HorizontalStyleWhiteSpace(style);
 | 
						|
                clientRect.Height -= ElementStyleLayout.VerticalStyleWhiteSpace(style);
 | 
						|
                p.RenderOffset = clientRect.Location;
 | 
						|
                p.AvailableSize = clientRect.Size;
 | 
						|
            }
 | 
						|
 | 
						|
            if (_FocusHighlightEnabled && this.Focused && !_FocusHighlightColor.IsEmpty)
 | 
						|
            {
 | 
						|
                using (SolidBrush brush = new SolidBrush(_FocusHighlightColor))
 | 
						|
                    e.Graphics.FillRectangle(brush, clientRect);
 | 
						|
            }
 | 
						|
 | 
						|
            if (!_RootVisual.IsLayoutValid)
 | 
						|
            {
 | 
						|
                if (_RootVisual is VisualGroup)
 | 
						|
                    ((VisualGroup)_RootVisual).HorizontalItemAlignment = _InputHorizontalAlignment;
 | 
						|
                _RootVisual.PerformLayout(p);
 | 
						|
            }
 | 
						|
 | 
						|
            if (SupportsFreeTextEntry)
 | 
						|
            {
 | 
						|
                if (!IsFreeTextEntryVisible)
 | 
						|
                    HideFreeTextBoxEntry();
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    Control textBox = GetFreeTextBox();
 | 
						|
                    Rectangle r = GetFreeTextBounds(textBox.PreferredSize, clientRect);
 | 
						|
                    if (textBox.Bounds != r)
 | 
						|
                        textBox.Bounds = r;
 | 
						|
                    p.RenderSystemItemsOnly = true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (_InputHorizontalAlignment != eHorizontalAlignment.Left)
 | 
						|
            {
 | 
						|
                if (_InputHorizontalAlignment == eHorizontalAlignment.Right)
 | 
						|
                    p.RenderOffset = new Point(clientRect.Width - _RootVisual.Size.Width,
 | 
						|
                        (clientRect.Height - _RootVisual.Size.Height) / 2);
 | 
						|
                else
 | 
						|
                    p.RenderOffset = new Point((clientRect.Width - _RootVisual.Size.Width) / 2,
 | 
						|
                        (clientRect.Height - _RootVisual.Size.Height) / 2);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                p.RenderOffset = new Point(0, (clientRect.Height - _RootVisual.Size.Height) / 2);
 | 
						|
 | 
						|
            if (this.WatermarkEnabled && this.WatermarkText.Length > 0 && this.IsWatermarkRendered)
 | 
						|
            {
 | 
						|
                Rectangle watermarkBounds = clientRect;
 | 
						|
                watermarkBounds.Inflate(-1, -1);
 | 
						|
                DrawWatermark(p, watermarkBounds);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                _RootVisual.ProcessPaint(p);
 | 
						|
 | 
						|
            base.OnPaint(e);
 | 
						|
 | 
						|
            if (disposeStyle) style.Dispose();
 | 
						|
        }
 | 
						|
 | 
						|
        private ElementStyle GetBackgroundStyle(out bool disposeStyle)
 | 
						|
        {
 | 
						|
            disposeStyle = false;
 | 
						|
            _BackgroundStyle.SetColorScheme(this.ColorScheme);
 | 
						|
            return ElementStyleDisplay.GetElementStyle(_BackgroundStyle, out disposeStyle);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void DrawWatermark(PaintInfo p, Rectangle r)
 | 
						|
        {
 | 
						|
            if (this.WatermarkText.Length == 0) return;
 | 
						|
            Font font = p.DefaultFont;
 | 
						|
            if (this.WatermarkFont != null) font = this.WatermarkFont;
 | 
						|
 | 
						|
            eTextFormat format = eTextFormat.Default;
 | 
						|
            if (_WatermarkAlignment == eTextAlignment.Center)
 | 
						|
                format |= eTextFormat.HorizontalCenter;
 | 
						|
            else if (_WatermarkAlignment == eTextAlignment.Right)
 | 
						|
                format |= eTextFormat.Right;
 | 
						|
 | 
						|
            TextDrawing.DrawString(p.Graphics, this.WatermarkText, font, this.WatermarkColor, r, format);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether watermark text should be rendered.
 | 
						|
        /// </summary>
 | 
						|
        protected virtual bool IsWatermarkRendered
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool IsInputChar(char charCode)
 | 
						|
        {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnKeyDown(KeyEventArgs e)
 | 
						|
        {
 | 
						|
            base.OnKeyDown(e);
 | 
						|
            if(!e.Handled)
 | 
						|
                _RootVisual.ProcessKeyDown(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnKeyPress(KeyPressEventArgs e)
 | 
						|
        {
 | 
						|
            base.OnKeyPress(e);
 | 
						|
            if(!e.Handled)
 | 
						|
                _RootVisual.ProcessKeyPress(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnKeyUp(KeyEventArgs e)
 | 
						|
        {
 | 
						|
            base.OnKeyUp(e);
 | 
						|
            if(!e.Handled)
 | 
						|
                _RootVisual.ProcessKeyUp(e);        
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
 | 
						|
        {
 | 
						|
            if (!IsFreeTextEntryVisible && _RootVisual.ProcessCmdKey(ref msg, keyData))
 | 
						|
                return true;
 | 
						|
            return base.ProcessCmdKey(ref msg, keyData);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseDown(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            if (!this.Focused)
 | 
						|
            {
 | 
						|
                if (this.Parent is MenuPanel)
 | 
						|
                    this.Focus();
 | 
						|
                else
 | 
						|
                    this.Select();
 | 
						|
            }
 | 
						|
            _RootVisual.ProcessMouseDown(e);
 | 
						|
            base.OnMouseDown(e);
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _InputMouseWheelEnabled = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether mouse wheel affects the input control. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Behavior"), Description("Indicates whether mouse wheel affects the input control.")]
 | 
						|
        public bool InputMouseWheelEnabled
 | 
						|
        {
 | 
						|
            get { return _InputMouseWheelEnabled; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _InputMouseWheelEnabled = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        protected override void OnMouseWheel(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            if (_InputMouseWheelEnabled)
 | 
						|
                _RootVisual.ProcessMouseWheel(e);
 | 
						|
            base.OnMouseWheel(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseMove(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessMouseMove(e);
 | 
						|
            base.OnMouseMove(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseUp(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessMouseUp(e);
 | 
						|
            base.OnMouseUp(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseEnter(EventArgs e)
 | 
						|
        {
 | 
						|
            _MouseOver = true;
 | 
						|
            this.Invalidate();
 | 
						|
            base.OnMouseEnter(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseLeave(EventArgs e)
 | 
						|
        {
 | 
						|
            _MouseOver = false;
 | 
						|
            _RootVisual.ProcessMouseLeave();
 | 
						|
            this.Invalidate();
 | 
						|
            base.OnMouseLeave(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseHover(EventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessMouseHover(e);
 | 
						|
            base.OnMouseHover(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnClick(EventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessClick();
 | 
						|
            base.OnClick(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseClick(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessMouseClick(e);
 | 
						|
            base.OnMouseClick(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnGotFocus(EventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessGotFocus();
 | 
						|
            base.OnGotFocus(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnLostFocus(EventArgs e)
 | 
						|
        {
 | 
						|
            _RootVisual.ProcessLostFocus();
 | 
						|
            base.OnLostFocus(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool ProcessDialogKey(Keys keyData)
 | 
						|
        {
 | 
						|
            if (SupportsFreeTextEntry && (keyData & (Keys.Alt | Keys.Control)) == Keys.None && (keyData & Keys.Shift) == Keys.Shift && IsFreeTextEntryVisible)
 | 
						|
            {
 | 
						|
                Keys keys = keyData & Keys.KeyCode;
 | 
						|
                switch (keys)
 | 
						|
                {
 | 
						|
                    case Keys.Tab:
 | 
						|
                        if (this.ProcessTabKey(false))
 | 
						|
                        {
 | 
						|
                            return true;
 | 
						|
                        }
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return base.ProcessDialogKey(keyData);
 | 
						|
        }
 | 
						|
        protected virtual bool ProcessTabKey(bool forward)
 | 
						|
        {
 | 
						|
            return Parent.SelectNextControl(this, forward, true, false, false);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private bool _IsKeyboardFocusWithin = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether keyboard focus is within the control.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public bool IsKeyboardFocusWithin
 | 
						|
        {
 | 
						|
            get { return _IsKeyboardFocusWithin; }
 | 
						|
            internal set
 | 
						|
            {
 | 
						|
                _IsKeyboardFocusWithin = value;
 | 
						|
                OnIsKeyboardFocusWithinChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnIsKeyboardFocusWithinChanged()
 | 
						|
        {
 | 
						|
            if (SupportsFreeTextEntry)
 | 
						|
            {
 | 
						|
                if (!IsKeyboardFocusWithin) _RootVisual.ProcessLostFocus();
 | 
						|
            }
 | 
						|
            if (FocusHighlightEnabled) this.Invalidate();
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        protected override void OnEnter(EventArgs e)
 | 
						|
        {
 | 
						|
            this.IsKeyboardFocusWithin = true;
 | 
						|
            base.OnEnter(e);
 | 
						|
        }
 | 
						|
        protected override void OnLeave(EventArgs e)
 | 
						|
        {
 | 
						|
            this.IsKeyboardFocusWithin = false;
 | 
						|
            base.OnLeave(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual VisualItem CreateRootVisual()
 | 
						|
        {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the reference to internal visual item used as the root visual for the control. Using this property is in all cases not necessary except for some
 | 
						|
        /// very advanced usage scenarios.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public virtual VisualItem RootVisualItem
 | 
						|
        {
 | 
						|
            get { return _RootVisual; }
 | 
						|
        }
 | 
						|
 | 
						|
        private void VisualArrangeInvalid(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        private void VisualRenderInvalid(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        private eHorizontalAlignment _InputHorizontalAlignment = eHorizontalAlignment.Left;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the input field alignment inside the control
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(eHorizontalAlignment.Left), Category("Appearance"), Description("Indicates alignment of input fields inside of the control.")]
 | 
						|
        public virtual eHorizontalAlignment InputHorizontalAlignment
 | 
						|
        {
 | 
						|
            get { return _InputHorizontalAlignment; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_InputHorizontalAlignment != value)
 | 
						|
                {
 | 
						|
                    eHorizontalAlignment oldValue = _InputHorizontalAlignment;
 | 
						|
                    _InputHorizontalAlignment = value;
 | 
						|
                    _RootVisual.InvalidateArrange();
 | 
						|
                    OnInputHorizontalAlignmentChanged(oldValue, value);
 | 
						|
                    this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Called when InputHorizontalAlignment property value has changed.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="oldValue">Old value.</param>
 | 
						|
        /// <param name="newValue">New Value.</param>
 | 
						|
        protected virtual void OnInputHorizontalAlignmentChanged(eHorizontalAlignment oldValue, eHorizontalAlignment newValue)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        private Font _WatermarkFont = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the watermark font.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance"), Description("Indicates watermark font."), DefaultValue(null)]
 | 
						|
        public virtual Font WatermarkFont
 | 
						|
        {
 | 
						|
            get { return _WatermarkFont; }
 | 
						|
            set { _WatermarkFont = value; this.Invalidate(); }
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _WatermarkColor = SystemColors.GrayText;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the watermark text color.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance"), Description("Indicates watermark text color.")]
 | 
						|
        public virtual Color WatermarkColor
 | 
						|
        {
 | 
						|
            get { return _WatermarkColor; }
 | 
						|
            set { _WatermarkColor = value; this.Invalidate(); }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether property should be serialized by Windows Forms designer.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeWatermarkColor()
 | 
						|
        {
 | 
						|
            return _WatermarkColor != SystemColors.GrayText;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Resets the property to default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetWatermarkColor()
 | 
						|
        {
 | 
						|
            this.WatermarkColor = SystemColors.GrayText;
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _WatermarkEnabled = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether watermark text is displayed if set for the input items. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Description("Indicates whether watermark text is displayed if set for the input items.")]
 | 
						|
        public virtual bool WatermarkEnabled
 | 
						|
        {
 | 
						|
            get { return _WatermarkEnabled; }
 | 
						|
            set { _WatermarkEnabled = value; this.Invalidate(); }
 | 
						|
        }
 | 
						|
 | 
						|
        private string _WatermarkText = "";
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the watermark text displayed on the input control when control is empty.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(""), Description("Indicates watermark text displayed on the input control when control is empty."), Category("Watermark"), Localizable(true)]
 | 
						|
        public string WatermarkText
 | 
						|
        {
 | 
						|
            get { return _WatermarkText; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != null)
 | 
						|
                {
 | 
						|
                    _WatermarkText = value;
 | 
						|
                    this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private eTextAlignment _WatermarkAlignment = eTextAlignment.Left;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the watermark text alignment. Default value is left.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(eTextAlignment.Left), Description("Indicates watermark text alignment."), Category("Watermark")]
 | 
						|
        public eTextAlignment WatermarkAlignment
 | 
						|
        {
 | 
						|
            get { return _WatermarkAlignment; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_WatermarkAlignment != value)
 | 
						|
                {
 | 
						|
                    _WatermarkAlignment = value;
 | 
						|
                    this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Browsable(true), Category("Appearance"), Description("Indicates whether FocusHighlightColor is used as background color to highlight text box when it has input focus.")]
 | 
						|
        public virtual bool FocusHighlightEnabled
 | 
						|
        {
 | 
						|
            get { return _FocusHighlightEnabled; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FocusHighlightEnabled != value)
 | 
						|
                {
 | 
						|
                    _FocusHighlightEnabled = value;
 | 
						|
                    if (this.Focused)
 | 
						|
                        this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance"), Description("Indicates color used as background color to highlight text box when it has input focus and focus highlight is enabled.")]
 | 
						|
        public virtual Color FocusHighlightColor
 | 
						|
        {
 | 
						|
            get { return _FocusHighlightColor; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FocusHighlightColor != value)
 | 
						|
                {
 | 
						|
                    _FocusHighlightColor = value;
 | 
						|
                    if (this.Focused)
 | 
						|
                        this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeFocusHighlightColor()
 | 
						|
        {
 | 
						|
            return !_FocusHighlightColor.Equals(_DefaultHighlightColor);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetFocusHighlightColor()
 | 
						|
        {
 | 
						|
            FocusHighlightColor = _DefaultHighlightColor;
 | 
						|
        }
 | 
						|
 | 
						|
        private InputButtonSettings _ButtonCustom = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Buttons"), Description("Describes the settings for the custom button that can execute an custom action of your choosing when clicked."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public InputButtonSettings ButtonCustom
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _ButtonCustom;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private InputButtonSettings _ButtonCustom2 = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Buttons"), Description("Describes the settings for the custom button that can execute an custom action of your choosing when clicked."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public InputButtonSettings ButtonCustom2
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _ButtonCustom2;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        void IInputButtonControl.InputButtonSettingsChanged(InputButtonSettings inputButtonSettings)
 | 
						|
        {
 | 
						|
            OnInputButtonSettingsChanged(inputButtonSettings);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnInputButtonSettingsChanged(InputButtonSettings inputButtonSettings)
 | 
						|
        {
 | 
						|
            RecreateButtons();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void RecreateButtons()
 | 
						|
        {
 | 
						|
            VisualItem[] buttons = CreateOrderedButtonList();
 | 
						|
            if (_RootVisual is VisualGroup)
 | 
						|
            {
 | 
						|
                // Remove all system buttons that are already in the list
 | 
						|
                VisualGroup group = _RootVisual as VisualGroup;
 | 
						|
                VisualItem[] items = new VisualItem[group.Items.Count];
 | 
						|
                group.Items.CopyTo(items);
 | 
						|
                foreach (VisualItem item in items)
 | 
						|
                {
 | 
						|
                    if (item.ItemType == eSystemItemType.SystemButton)
 | 
						|
                    {
 | 
						|
                        group.Items.Remove(item);
 | 
						|
                        if (item == _ButtonCustom.ItemReference)
 | 
						|
                            item.Click -= new EventHandler(CustomButtonClick);
 | 
						|
                        else if (item == _ButtonCustom2.ItemReference)
 | 
						|
                            item.Click -= new EventHandler(CustomButton2Click);
 | 
						|
                        item.IsRendered = _RenderControlButtons;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                // Add new buttons to the list
 | 
						|
                group.Items.AddRange(buttons);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
 | 
						|
        {
 | 
						|
            if (Dpi.RecordScalePerControl)
 | 
						|
                Dpi.SetScaling(factor);
 | 
						|
            _RootVisual.InvalidateArrange();
 | 
						|
            RecreateButtons();
 | 
						|
            base.ScaleControl(factor, specified);
 | 
						|
        }
 | 
						|
 | 
						|
        private void CustomButtonClick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            OnButtonCustomClick(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnButtonCustomClick(EventArgs e)
 | 
						|
        {
 | 
						|
            if (ButtonCustomClick != null)
 | 
						|
                ButtonCustomClick(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        private void CustomButton2Click(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            OnButtonCustom2Click(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnButtonCustom2Click(EventArgs e)
 | 
						|
        {
 | 
						|
            if (ButtonCustom2Click != null)
 | 
						|
                ButtonCustom2Click(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        private VisualItem[] CreateOrderedButtonList()
 | 
						|
        {
 | 
						|
            SortedList list = CreateSortedButtonList();
 | 
						|
 | 
						|
            VisualItem[] items = new VisualItem[list.Count];
 | 
						|
            list.Values.CopyTo(items, 0);
 | 
						|
 | 
						|
            return items;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual SortedList CreateSortedButtonList()
 | 
						|
        {
 | 
						|
            SortedList list = new SortedList(4);
 | 
						|
            if (_ButtonCustom.Visible)
 | 
						|
            {
 | 
						|
                VisualItem button = CreateButton(_ButtonCustom);
 | 
						|
                if (_ButtonCustom.ItemReference != null)
 | 
						|
                    _ButtonCustom.ItemReference.Click -= new EventHandler(CustomButtonClick);
 | 
						|
                _ButtonCustom.ItemReference = button;
 | 
						|
                button.Click += new EventHandler(CustomButtonClick);
 | 
						|
                button.Enabled = _ButtonCustom.Enabled;
 | 
						|
                list.Add(_ButtonCustom, button);
 | 
						|
            }
 | 
						|
 | 
						|
            if (_ButtonCustom2.Visible)
 | 
						|
            {
 | 
						|
                VisualItem button = CreateButton(_ButtonCustom2);
 | 
						|
                if (_ButtonCustom.ItemReference != null)
 | 
						|
                    _ButtonCustom.ItemReference.Click -= new EventHandler(CustomButton2Click);
 | 
						|
                _ButtonCustom2.ItemReference = button;
 | 
						|
                button.Click += new EventHandler(CustomButton2Click);
 | 
						|
                button.Enabled = _ButtonCustom2.Enabled;
 | 
						|
                list.Add(_ButtonCustom2, button);
 | 
						|
            }
 | 
						|
 | 
						|
            return list;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual VisualItem CreateButton(InputButtonSettings buttonSettings)
 | 
						|
        {
 | 
						|
            VisualCustomButton button = new VisualCustomButton();
 | 
						|
            ApplyButtonSettings(buttonSettings, button);
 | 
						|
            return button;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void ApplyButtonSettings(InputButtonSettings buttonSettings, VisualButton button)
 | 
						|
        {
 | 
						|
            button.Text = buttonSettings.Text;
 | 
						|
            button.Image = buttonSettings.Image;
 | 
						|
            button.Alignment = eItemAlignment.Right;
 | 
						|
            button.ItemType = eSystemItemType.SystemButton;
 | 
						|
            button.Enabled = buttonSettings.Enabled;
 | 
						|
            button.Shortcut = buttonSettings.Shortcut;
 | 
						|
            button.Tooltip = buttonSettings.Tooltip;
 | 
						|
            button.Symbol = buttonSettings.Symbol;
 | 
						|
            button.SymbolSet = buttonSettings.SymbolSet;
 | 
						|
            button.SymbolColor = buttonSettings.SymbolColor;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnResize(EventArgs e)
 | 
						|
        {
 | 
						|
            AutoAdjustHeight();
 | 
						|
            _RootVisual.InvalidateArrange();
 | 
						|
            base.OnResize(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override PopupItem CreatePopupItem()
 | 
						|
        {
 | 
						|
            return new ButtonItem();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void RecalcSize()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        public override void PerformClick()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        private ElementStyle _BackgroundStyle = new ElementStyle();
 | 
						|
        /// <summary>
 | 
						|
        /// Specifies the background style of the control.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Style"), Description("Gets or sets control background style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public ElementStyle BackgroundStyle
 | 
						|
        {
 | 
						|
            get { return _BackgroundStyle; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Resets style to default value. Used by windows forms designer.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetBackgroundStyle()
 | 
						|
        {
 | 
						|
            _BackgroundStyle.StyleChanged -= new EventHandler(this.VisualPropertyChanged);
 | 
						|
            _BackgroundStyle = new ElementStyle();
 | 
						|
            _BackgroundStyle.StyleChanged += new EventHandler(this.VisualPropertyChanged);
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        private void VisualPropertyChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            OnVisualPropertyChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnVisualPropertyChanged()
 | 
						|
        {
 | 
						|
            _RootVisual.InvalidateArrange();
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            if (_BackgroundStyle != null) _BackgroundStyle.StyleChanged -= VisualPropertyChanged;
 | 
						|
            _BackgroundStyle.Dispose();
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public override string Text
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.Text;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.Text = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the preferred height of the control.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public int PreferredHeight
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return GetPreferredHeight();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private int _PreferredHeight = -1;
 | 
						|
        protected virtual int GetPreferredHeight()
 | 
						|
        {
 | 
						|
            if (_PreferredHeight > -1)
 | 
						|
            {
 | 
						|
                return _PreferredHeight;
 | 
						|
            }
 | 
						|
            bool disposeStyle = false;
 | 
						|
            ElementStyle style = GetBackgroundStyle(out disposeStyle);
 | 
						|
            int h = 0;
 | 
						|
            if (_AutoBorderSize != 0 || style.BorderTopWidth == 0 && style.BorderBottomWidth == 0)
 | 
						|
            {
 | 
						|
                h = this.Font.Height + ((_AutoBorderSize != 0) ? _AutoBorderSize : ((SystemInformation.BorderSize.Height * 4) + 3));
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                h = this.Font.Height + (style.BorderTopWidth * 2 + style.BorderBottomWidth * 2) + 3;
 | 
						|
            }
 | 
						|
            _PreferredHeight = h;
 | 
						|
            if (disposeStyle) style.Dispose();
 | 
						|
            return h;
 | 
						|
        }
 | 
						|
        private int _AutoBorderSize;
 | 
						|
        internal int AutoBorderSize
 | 
						|
        {
 | 
						|
            get { return _AutoBorderSize; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _AutoBorderSize = value;
 | 
						|
                _PreferredHeight = -1;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnFontChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            _PreferredHeight = -1;
 | 
						|
            this.Height = PreferredHeight;
 | 
						|
            base.OnFontChanged(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override Size DefaultSize
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return new Size(80, GetPreferredHeight());
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public override Size GetPreferredSize(Size proposedSize)
 | 
						|
        {
 | 
						|
            // Calculate preferred size
 | 
						|
            Size size = new Size(0, GetPreferredHeight());
 | 
						|
            if (!_RootVisual.IsLayoutValid)
 | 
						|
                PerformRootVisualLayout();
 | 
						|
            size.Width = _RootVisual.CalculatedSize.Width + 4; // borders and padding
 | 
						|
            return size;
 | 
						|
            //Size size = this.DefaultSize;
 | 
						|
            //if (proposedSize.Width > 0 && proposedSize.Width < size.Width)
 | 
						|
            //    size.Width = proposedSize.Width;
 | 
						|
            //return this.DefaultSize;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnHandleCreated(EventArgs e)
 | 
						|
        {
 | 
						|
            AutoAdjustHeight();
 | 
						|
            base.OnHandleCreated(e);
 | 
						|
        }
 | 
						|
 | 
						|
        private void AutoAdjustHeight()
 | 
						|
        {
 | 
						|
            if (this.Height != PreferredHeight)
 | 
						|
                this.Height = PreferredHeight;
 | 
						|
        }
 | 
						|
 | 
						|
        private eInputFieldNavigation _FieldNavigation = eInputFieldNavigation.All;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the keys used to navigate between the input fields provided by this control.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eInputFieldNavigation.All), Description("Indicates keys used to navigate between the input fields provided by this control")]
 | 
						|
        public eInputFieldNavigation FieldNavigation
 | 
						|
        {
 | 
						|
            get { return _FieldNavigation; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_FieldNavigation != value)
 | 
						|
                {
 | 
						|
                    _FieldNavigation = value;
 | 
						|
                    ApplyFieldNavigation();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void ApplyFieldNavigation()
 | 
						|
        {
 | 
						|
            if (_RootVisual is VisualInputGroup)
 | 
						|
            {
 | 
						|
                VisualInputGroup group = _RootVisual as VisualInputGroup;
 | 
						|
                group.ArrowNavigationEnabled = ((_FieldNavigation & eInputFieldNavigation.Arrows) == eInputFieldNavigation.Arrows);
 | 
						|
                group.TabNavigationEnabled = ((_FieldNavigation & eInputFieldNavigation.Tab) == eInputFieldNavigation.Tab);
 | 
						|
                group.EnterNavigationEnabled = ((_FieldNavigation & eInputFieldNavigation.Enter) == eInputFieldNavigation.Enter);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool IsNull(object value)
 | 
						|
        {
 | 
						|
            if (value == null || value is DBNull) return true;
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _DisabledBackColor = Color.Empty;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the control background color when control is disabled. Default value is an empty color which indicates that background is not changed when control is disabled.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Indicates control background color when control is disabled"), Category("Appearance")]
 | 
						|
        public Color DisabledBackColor
 | 
						|
        {
 | 
						|
            get { return _DisabledBackColor; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_DisabledBackColor != value)
 | 
						|
                {
 | 
						|
                    _DisabledBackColor = value;
 | 
						|
                    if (!this.Enabled) this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeDisabledBackColor()
 | 
						|
        {
 | 
						|
            return !_DisabledBackColor.IsEmpty;
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetDisabledBackColor()
 | 
						|
        {
 | 
						|
            DisabledBackColor = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _DisabledForeColor = Color.Empty;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the control text color when control is disabled. Default value is an empty color which indicates that background is not changed when control is disabled.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Indicates control background color when control is disabled"), Category("Appearance")]
 | 
						|
        public Color DisabledForeColor
 | 
						|
        {
 | 
						|
            get { return _DisabledForeColor; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_DisabledForeColor != value)
 | 
						|
                {
 | 
						|
                    _DisabledForeColor = value;
 | 
						|
                    if (!this.Enabled) this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeDisabledForeColor()
 | 
						|
        {
 | 
						|
            return !_DisabledForeColor.IsEmpty;
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetDisabledForeColor()
 | 
						|
        {
 | 
						|
            DisabledForeColor = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private InputControlColors _Colors = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the system colors used by the control.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Colors"), Description("System colors used by the control."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public InputControlColors Colors
 | 
						|
        {
 | 
						|
            get { return _Colors; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Selects next input field if possible.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>true if next input field was selected otherwise false.</returns>
 | 
						|
        public bool SelectNextInputField()
 | 
						|
        {
 | 
						|
            VisualInputGroup group = _RootVisual as VisualInputGroup;
 | 
						|
            if (group != null) return group.SelectNextInput();
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Selects previous input field if possible.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>true if previous input field was selected otherwise false.</returns>
 | 
						|
        public bool SelectPreviousInputField()
 | 
						|
        {
 | 
						|
            VisualInputGroup group = _RootVisual as VisualInputGroup;
 | 
						|
            if (group != null) return group.SelectPreviousInput();
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Free-Text Entry Support
 | 
						|
        protected virtual Rectangle GetFreeTextBounds(Size preferedSize, Rectangle clientRect)
 | 
						|
        {
 | 
						|
            Rectangle r = Rectangle.Empty;
 | 
						|
            if (_RootVisual == null) return r;
 | 
						|
 | 
						|
            r = clientRect; // _RootVisual.RenderBounds;
 | 
						|
            VisualGroup group = _RootVisual as VisualGroup;
 | 
						|
            foreach (VisualItem item in group.Items)
 | 
						|
            {
 | 
						|
                if (item.ItemType == eSystemItemType.SystemButton)
 | 
						|
                {
 | 
						|
                    DisplayHelp.ExcludeEdgeRect(ref r, item.RenderBounds);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (r.Width != clientRect.Width)
 | 
						|
            {
 | 
						|
                r.Inflate(-1, 0);
 | 
						|
            }
 | 
						|
 | 
						|
            if (preferedSize.Height > 0 && preferedSize.Height < r.Height)
 | 
						|
            {
 | 
						|
                r.Y += (r.Height - preferedSize.Height) / 2;
 | 
						|
                r.Height = preferedSize.Height;
 | 
						|
            }
 | 
						|
 | 
						|
            return r;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool SupportsFreeTextEntry
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual Control GetFreeTextBox()
 | 
						|
        {
 | 
						|
            throw new Exception("The method or operation is not implemented.");
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool IsFreeTextEntryVisible
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void HideFreeTextBoxEntry()
 | 
						|
        {
 | 
						|
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Property Hiding
 | 
						|
        [Browsable(false)]
 | 
						|
        public override Color BackColor
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.BackColor;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.BackColor = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false)]
 | 
						|
        public override Image BackgroundImage
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.BackgroundImage;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.BackgroundImage = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public override ImageLayout BackgroundImageLayout
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.BackgroundImageLayout;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.BackgroundImageLayout = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public override bool DisabledImagesGrayScale
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.DisabledImagesGrayScale;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.DisabledImagesGrayScale = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public new System.Windows.Forms.Padding Padding
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.Padding;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.Padding = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public override eDotNetBarStyle Style
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.Style;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.Style = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public override bool ThemeAware
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ThemeAware;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ThemeAware = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ISupportInitialize
 | 
						|
        private bool _Initializing = false;
 | 
						|
        protected virtual bool IsInitializing
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _Initializing;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// ISupportInitialize.BeginInit implementation. While initialization is in progress ValueChanged events will not be fired.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Advanced)]
 | 
						|
        public void BeginInit()
 | 
						|
        {
 | 
						|
            _Initializing = true;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// ISupportInitialize.EndInit implementation.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Advanced)]
 | 
						|
        public void EndInit()
 | 
						|
        {
 | 
						|
            _Initializing = false;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region Free Text Box Entry
 | 
						|
    internal class FreeTextEntryBox : TextBox
 | 
						|
    {
 | 
						|
        private bool _HideOnLostFocus;
 | 
						|
        public event EventHandler RevertValue;
 | 
						|
        public event EventHandler ApplyValue;
 | 
						|
        public event EventHandler IncreaseValue;
 | 
						|
        public event EventHandler DecreaseValue;
 | 
						|
        /// <summary>
 | 
						|
        /// Raises DecreaseValue event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnDecreaseValue(EventArgs e)
 | 
						|
        {
 | 
						|
            EventHandler handler = DecreaseValue;
 | 
						|
            if (handler != null)
 | 
						|
                handler(this, e);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Raises IncreaseValue event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnIncreaseValue(EventArgs e)
 | 
						|
        {
 | 
						|
            EventHandler handler = IncreaseValue;
 | 
						|
            if (handler != null)
 | 
						|
                handler(this, e);
 | 
						|
        }
 | 
						|
        public FreeTextEntryBox()
 | 
						|
        {
 | 
						|
            //this.MaxLength = 15;
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnApplyValue(EventArgs e)
 | 
						|
        {
 | 
						|
            if (ApplyValue != null) ApplyValue(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnRevertValue(EventArgs e)
 | 
						|
        {
 | 
						|
            if (RevertValue != null) RevertValue(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        public void HideOnLostFocus()
 | 
						|
        {
 | 
						|
            if (this.Focused)
 | 
						|
                _HideOnLostFocus = true;
 | 
						|
        }
 | 
						|
        protected override void OnLostFocus(EventArgs e)
 | 
						|
        {
 | 
						|
            if (_HideOnLostFocus)
 | 
						|
            {
 | 
						|
                this.Visible = false;
 | 
						|
                _HideOnLostFocus = false;
 | 
						|
            }
 | 
						|
            base.OnLostFocus(e);
 | 
						|
        }
 | 
						|
        protected override void OnKeyDown(KeyEventArgs e)
 | 
						|
        {
 | 
						|
            if (e.KeyCode == Keys.Enter)
 | 
						|
            {
 | 
						|
                OnApplyValue(e);
 | 
						|
            }
 | 
						|
            else if (e.KeyCode == Keys.Escape)
 | 
						|
            {
 | 
						|
                OnRevertValue(e);
 | 
						|
            }
 | 
						|
            else if (e.KeyCode == Keys.Up)
 | 
						|
            {
 | 
						|
                OnIncreaseValue(e);
 | 
						|
            }
 | 
						|
            else if (e.KeyCode == Keys.Down)
 | 
						|
            {
 | 
						|
                OnDecreaseValue(e);
 | 
						|
            }
 | 
						|
            //else
 | 
						|
            //{
 | 
						|
            //    char c = BarFunctions.GetCharForKeyValue(e.KeyValue);
 | 
						|
 | 
						|
            //    if (c != '.' && !char.IsDigit(c) && !char.IsControl(c))
 | 
						|
            //        e.SuppressKeyPress = true;
 | 
						|
            //}
 | 
						|
 | 
						|
            base.OnKeyDown(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseWheel(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            if (!this.ReadOnly)
 | 
						|
            {
 | 
						|
                if (!(this.Parent is VisualControlBase) || ((VisualControlBase)this.Parent).InputMouseWheelEnabled)
 | 
						|
                {
 | 
						|
                    if (e.Delta > 0)
 | 
						|
                    {
 | 
						|
                        OnIncreaseValue(EventArgs.Empty);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        OnDecreaseValue(EventArgs.Empty);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            base.OnMouseWheel(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnLeave(EventArgs e)
 | 
						|
        {
 | 
						|
            OnApplyValue(e);
 | 
						|
            base.OnLeave(e);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #region FreeTextEntryConversion Event Handler and Arguments
 | 
						|
    /// <summary>
 | 
						|
    /// Defines data for ConvertFreeTextEntry event.
 | 
						|
    /// </summary>
 | 
						|
    public class FreeTextEntryConversionEventArgs : EventArgs
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the string value that was entered by the user.
 | 
						|
        /// </summary>
 | 
						|
        public readonly string ValueEntered;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the converted ValueEntered into the control's value type. For example for IpAddressInput the value set here
 | 
						|
        /// must be of string type and in IP address format. For IntegerInput control the value set here must be an int type. For DateTimeInput
 | 
						|
        /// control value set here must be DateTime type.
 | 
						|
        /// If you provide ControlValue set ValueConverted=true to indicate so.
 | 
						|
        /// </summary>
 | 
						|
        public object ControlValue = null;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether ValueEntered has been converted to ControlValue. Set to true to indicate that you have performed conversion.
 | 
						|
        /// </summary>
 | 
						|
        public bool IsValueConverted = false;
 | 
						|
 | 
						|
 | 
						|
        public FreeTextEntryConversionEventArgs(string valueEntered)
 | 
						|
        {
 | 
						|
            this.ValueEntered = valueEntered;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    /// <summary>
 | 
						|
    /// Defines delegate for ConvertFreeTextEntry event.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="sender">Source of event.</param>
 | 
						|
    /// <param name="ea">Provides event data.</param>
 | 
						|
    public delegate void FreeTextEntryConversionEventHandler(object sender, FreeTextEntryConversionEventArgs e);
 | 
						|
    #endregion
 | 
						|
}
 | 
						|
#endif
 | 
						|
 |