802 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			802 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using System.ComponentModel;
 | |
| using System.Windows.Forms;
 | |
| using System.Drawing;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Keyboard
 | |
| {
 | |
|     [ToolboxItem(true), ProvideProperty("ShowTouchKeyboard", typeof(Control))]
 | |
|     public class TouchKeyboard : Component, IExtenderProvider
 | |
|     {
 | |
|         private List<Control> _Targets = new List<Control>();
 | |
|         private Control _CurrentTarget;
 | |
|         private PopupVirtualKeyboard _PopupKeyboard;
 | |
|         private KeyboardControl _VirtualKeyboard;
 | |
| 
 | |
| 
 | |
|         public TouchKeyboard()
 | |
|         {
 | |
|             _PopupKeyboard = new PopupVirtualKeyboard();
 | |
|             _VirtualKeyboard = new KeyboardControl();
 | |
| 
 | |
|             //_PopupKeyboard.Size = Dpi.Size(new Size(KeyboardControl.DefaultWidth, KeyboardControl.DefaultHeight));
 | |
| 
 | |
|             // Track floating keyboard location and size changed. The user can change this at runtime with the mouse.
 | |
|             //_PopupKeyboard.SizeChanged += new EventHandler(PopupKeyboard_SizeChanged);
 | |
|             _PopupKeyboard.ResizeEnd += PopupKeyboard_ResizeEnd;
 | |
|             _PopupKeyboard.LocationChanged += new EventHandler(PopupKeyboard_LocationChanged);
 | |
| 
 | |
|             // Track changes when the keyboard is inline.
 | |
|             _VirtualKeyboard.SizeChanged += new EventHandler(VirtualKeyboard_SizeChanged);
 | |
|             _VirtualKeyboard.LocationChanged += new EventHandler(VirtualKeyboard_LocationChanged);
 | |
|             _VirtualKeyboard.DockChanged += new EventHandler(VirtualKeyboard_DockChanged);
 | |
|             _VirtualKeyboard.SendingKey += new KeyCancelEventHandler(VirtualKeyboardSendingKey);
 | |
|             _VirtualKeyboard.KeySent += new KeyEventHandler(VirtualKeyboardKeySent);
 | |
|         }
 | |
| 
 | |
|         #region Handle Changed events.
 | |
|         /// <summary>
 | |
|         /// Occurs before the key pressed on keyboard is sent to target control and allows cancellation of the message
 | |
|         /// </summary>
 | |
|         [Description("Occurs before the key pressed on keyboard is sent to target control and allows cancellation of the message.")]
 | |
|         public event KeyCancelEventHandler SendingKey;
 | |
|         /// <summary>
 | |
|         /// Raises SendingKey event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnSendingKey(KeyboardKeyCancelEventArgs e)
 | |
|         {
 | |
|             KeyCancelEventHandler handler = SendingKey;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Occurs after the key is sent to target control.
 | |
|         /// </summary>
 | |
|         [Description("Occurs after the key is sent to target control.")]
 | |
|         public event KeyEventHandler KeySent;
 | |
|         /// <summary>
 | |
|         /// Raises KeySent event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnKeySent(KeyboardKeyEventArgs e)
 | |
|         {
 | |
|             KeyEventHandler handler = KeySent;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
| 
 | |
|         private void VirtualKeyboardKeySent(object sender, KeyboardKeyEventArgs e)
 | |
|         {
 | |
|             OnKeySent(e);
 | |
|         }
 | |
| 
 | |
|         private void VirtualKeyboardSendingKey(object sender, KeyboardKeyCancelEventArgs e)
 | |
|         {
 | |
|             OnSendingKey(e);
 | |
|         }
 | |
| 
 | |
|         void PopupKeyboard_ResizeEnd(object sender, EventArgs e)
 | |
|         {
 | |
|             _FloatingSize = _PopupKeyboard.Size;
 | |
|             OnFloatingSizeChanged();
 | |
|         }
 | |
| 
 | |
|         //void PopupKeyboard_SizeChanged(object sender, EventArgs e)
 | |
|         //{
 | |
|         //    _FloatingSize = _PopupKeyboard.Size;
 | |
|         //    OnFloatingSizeChanged();
 | |
|         //}
 | |
| 
 | |
|         void PopupKeyboard_LocationChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             OnFloatingLocationChanged();
 | |
|         }
 | |
| 
 | |
|         void VirtualKeyboard_LocationChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (_VirtualKeyboard.FindForm() != _PopupKeyboard)
 | |
|             {
 | |
|                 OnLocationChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void VirtualKeyboard_SizeChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (_VirtualKeyboard.FindForm() != _PopupKeyboard)
 | |
|             {
 | |
|                 _Size = _VirtualKeyboard.Size;
 | |
|                 OnSizeChanged();
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         void VirtualKeyboard_DockChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (_VirtualKeyboard.FindForm() != _PopupKeyboard)
 | |
|             {
 | |
|                 OnDockChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the reference to internal keyboard control that is used to provide Keyboard visual.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public KeyboardControl KeyboardControl 
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _VirtualKeyboard;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Attaches the Keyboard to the specified control. The keyboard will automatically appear when the control receives input focus.
 | |
|         /// </summary>
 | |
|         /// <param name="control">The control to which the Keyboard will be attached.</param>
 | |
|         private void AttachTo(Control control)
 | |
|         {
 | |
|             control.GotFocus += new EventHandler(control_GotFocus);
 | |
|             control.LostFocus += new EventHandler(control_LostFocus);
 | |
| 
 | |
|             _Targets.Add(control);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Detaches the Keyboard from the specified control.
 | |
|         /// </summary>
 | |
|         /// <param name="control">The control from which the Keyboard will be detached.</param>
 | |
|         private void DetachFrom(Control control)
 | |
|         {
 | |
|             if (_Targets.Contains(control))
 | |
|             {
 | |
|                 control.GotFocus -= new EventHandler(control_GotFocus);
 | |
|                 control.LostFocus -= new EventHandler(control_LostFocus);
 | |
| 
 | |
|                 _Targets.Remove(control);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs before keyboard is shown and allows canceling of opening.
 | |
|         /// </summary>
 | |
|         [Description("Occurs before keyboard is shown and allows canceling of opening.")]
 | |
|         public event CancelKeyboardEventHandler KeyboardOpening;
 | |
|         /// <summary>
 | |
|         /// Raises KeyboardOpening event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnKeyboardOpening(CancelKeyboardEventArgs e)
 | |
|         {
 | |
|             CancelKeyboardEventHandler handler = KeyboardOpening;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Occurs after keyboard is shown.
 | |
|         /// </summary>
 | |
|         [Description("Occurs after keyboard is shown.")]
 | |
|         public event EventHandler KeyboardOpened;
 | |
|         /// <summary>
 | |
|         /// Raises KeyboardOpened event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnKeyboardOpened(EventArgs e)
 | |
|         {
 | |
|             EventHandler handler = KeyboardOpened;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
| 
 | |
|         private bool _ShowingFloatingKeyboard = false;
 | |
|         public void ShowKeyboard(Control control, TouchKeyboardStyle style)
 | |
|         {
 | |
|             CancelKeyboardEventArgs ce = new CancelKeyboardEventArgs(control, style);
 | |
|             OnKeyboardOpening(ce);
 | |
|             if (ce.Cancel) return;
 | |
| 
 | |
|             _CurrentTarget = ce.TargetControl;
 | |
|             style = ce.Style;
 | |
| 
 | |
|             _PopupKeyboard.CurrentControl = _CurrentTarget;
 | |
| 
 | |
|             _VirtualKeyboard.UnlockCapsLock();
 | |
| 
 | |
|             if (_CurrentTarget != null)
 | |
|             {
 | |
|                 if (style == TouchKeyboardStyle.Floating)
 | |
|                 {
 | |
|                     try
 | |
|                     {
 | |
|                         if (_FloatingSize.IsEmpty)
 | |
|                             _PopupKeyboard.Size = Dpi.Size(new Size(KeyboardControl.DefaultWidth, KeyboardControl.DefaultHeight));
 | |
|                         else
 | |
|                             _PopupKeyboard.Size = _FloatingSize;
 | |
| 
 | |
|                         _ShowingFloatingKeyboard = true;
 | |
|                         _PopupKeyboard.Owner = _CurrentTarget.FindForm();
 | |
|                         _PopupKeyboard.Controls.Add(_VirtualKeyboard);
 | |
|                         _VirtualKeyboard.Dock = DockStyle.Fill;
 | |
|                         _VirtualKeyboard.Visible = true;
 | |
|                         _PopupKeyboard.Show();
 | |
| 
 | |
|                         // When floating, don't show the top bar. The information on the top bar are on the window's title bar.
 | |
|                         _VirtualKeyboard.IsTopBarVisible = false;
 | |
|                     }
 | |
|                     finally
 | |
|                     {
 | |
|                         _ShowingFloatingKeyboard = false;
 | |
|                     }
 | |
|                 }
 | |
|                 else if (style == TouchKeyboardStyle.Inline)
 | |
|                 {
 | |
|                     Form owner = _CurrentTarget.FindForm();
 | |
|                     if (_Size.IsEmpty)
 | |
|                         _VirtualKeyboard.Size = Dpi.Size(new Size(KeyboardControl.DefaultWidth, KeyboardControl.DefaultHeight));
 | |
|                     else
 | |
|                         _VirtualKeyboard.Size = _Size;
 | |
|                     _VirtualKeyboard.Dock = Dock;
 | |
|                     owner.Controls.Add(_VirtualKeyboard);
 | |
|                     _VirtualKeyboard.BringToFront();
 | |
|                     _VirtualKeyboard.Visible = true;
 | |
| 
 | |
|                     // When inline, show the top bar.
 | |
|                     _VirtualKeyboard.IsTopBarVisible = true;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             OnKeyboardOpened(EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets keyboard target control.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         public Control CurrentKeyboardTarget
 | |
|         {
 | |
|             get { return _CurrentTarget; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs before the keyboard is closed and allows canceling of keyboard closing.
 | |
|         /// </summary>
 | |
|         [Description("Occurs before the keyboard is closed and allows canceling of keyboard closing.")]
 | |
|         public event CancelEventHandler KeyboardClosing;
 | |
|         /// <summary>
 | |
|         /// Raises KeyboardClosing event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnKeyboardClosing(CancelEventArgs e)
 | |
|         {
 | |
|             CancelEventHandler handler = KeyboardClosing;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs after keyboard is closed.
 | |
|         /// </summary>
 | |
|         [Description("Occurs after keyboard is closed.")]
 | |
|         public event EventHandler KeyboardClosed;
 | |
|         /// <summary>
 | |
|         /// Raises KeyboardClosed event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event arguments.</param>
 | |
|         protected virtual void OnKeyboardClosed(EventArgs e)
 | |
|         {
 | |
|             EventHandler handler = KeyboardClosed;
 | |
|             if (handler != null)
 | |
|                 handler(this, e);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Hides the keyboard.
 | |
|         /// </summary>
 | |
|         public void HideKeyboard()
 | |
|         {
 | |
|             CancelEventArgs ce = new CancelEventArgs();
 | |
|             OnKeyboardClosing(ce);
 | |
|             if (ce.Cancel) return;
 | |
| 
 | |
|             _PopupKeyboard.Hide();
 | |
|             Form form = _VirtualKeyboard.FindForm();
 | |
|             if (form != null && !(form is PopupVirtualKeyboard))
 | |
|             {
 | |
|                 form.Controls.Remove(_VirtualKeyboard);
 | |
|             }
 | |
| 
 | |
|             OnKeyboardClosed(EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets reference to the form which hosts popup keyboard.
 | |
|         /// </summary>
 | |
|         public Form FloatingKeyboardForm
 | |
|         {
 | |
|             get { return _PopupKeyboard; }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         void control_GotFocus(object sender, EventArgs e)
 | |
|         {
 | |
|             Control control = sender as Control;
 | |
| 
 | |
|             if (control != null)
 | |
|             {
 | |
|                 TouchKeyboardStyle style = TouchKeyboardStyle.No;
 | |
|                 TouchKeyboardStyle formStyle = GetShowTouchKeyboard(control.FindForm());
 | |
| 
 | |
|                 // If the form specifies a mode to show the keyboard, then use that mode. If we want for the control to have the last
 | |
|                 // word about how to show the keyboard, the following two if instructions should be inverted.
 | |
| 
 | |
|                 if (_ExtendedControls.ContainsKey(control))
 | |
|                     style = _ExtendedControls[control];
 | |
| 
 | |
|                 if (formStyle != TouchKeyboardStyle.No)
 | |
|                     style = formStyle;
 | |
| 
 | |
|                 if (style != TouchKeyboardStyle.No)
 | |
|                 {
 | |
|                     ShowKeyboard(control, style);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool IsPopupKeyboardActivated 
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_PopupKeyboard == null) return false;
 | |
|                 return Form.ActiveForm == _PopupKeyboard;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         void control_LostFocus(object sender, EventArgs e)
 | |
|         {
 | |
|             if (!_ShowingFloatingKeyboard && !IsPopupKeyboardActivated)
 | |
|             {
 | |
|                 _CurrentTarget = null;
 | |
|                 HideKeyboard();
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary> 
 | |
|         /// Clean up any resources being used.
 | |
|         /// </summary>
 | |
|         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
 | |
|         protected override void Dispose(bool disposing)
 | |
|         {
 | |
|             if (disposing)
 | |
|             {
 | |
|                 if (_VirtualKeyboard != null)
 | |
|                     _VirtualKeyboard.Dispose();
 | |
|                 if (_PopupKeyboard != null)
 | |
|                     _PopupKeyboard.Dispose();
 | |
|             }
 | |
| 
 | |
|             base.Dispose(disposing);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         bool IExtenderProvider.CanExtend(object extendee)
 | |
|         {
 | |
|             if (extendee is Control && !(extendee is KeyboardControl))
 | |
|                 return true;
 | |
|             else
 | |
|                 return false;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         Dictionary<Control, TouchKeyboardStyle> _ExtendedControls = new Dictionary<Control, TouchKeyboardStyle>();
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Retursn the way the keyboard will be shown when controls receive focus.
 | |
|         /// </summary>
 | |
|         /// <param name="extendee">The control for which to retrieve the value.</param>
 | |
|         /// <returns>A TouchKeyboardStyle value defining the way the keyboard appears.</returns>
 | |
|         [Description("Shows an on screen touch keyboard when the control is focused.")]
 | |
|         [Category("Touch Keyboard")]
 | |
|         [DefaultValue(TouchKeyboardStyle.No)]
 | |
|         public TouchKeyboardStyle GetShowTouchKeyboard(Control extendee)
 | |
|         {
 | |
|             if (extendee == null)
 | |
|                 return TouchKeyboardStyle.No;
 | |
| 
 | |
|             if (_ExtendedControls.ContainsKey(extendee))
 | |
|                 return _ExtendedControls[extendee];
 | |
|             else
 | |
|                 return TouchKeyboardStyle.No;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets the way the keyboard will be shown when controls receive focus. If the control is a Form,
 | |
|         /// all controls on the Form will support this way of displaying the touch keyboard.
 | |
|         /// </summary>
 | |
|         /// <param name="extendee">The control for which this value is specified.</param>
 | |
|         /// <param name="value">A TouchKeyboardStyle value defining the way the keyboard appears.</param>
 | |
|         public void SetShowTouchKeyboard(Control extendee, TouchKeyboardStyle value)
 | |
|         {
 | |
|             if (extendee is Form)
 | |
|             {
 | |
|                 if (value != TouchKeyboardStyle.No)
 | |
|                 {
 | |
|                     foreach (Control c in extendee.Controls)
 | |
|                     {
 | |
|                         AttachTo(c);
 | |
|                     }
 | |
| 
 | |
|                     // If other controls are added to the form, attach to those controls also.
 | |
|                     extendee.ControlAdded += new ControlEventHandler(form_ControlAdded);
 | |
| 
 | |
|                     // If controls are removed from the form, dettach from them, we don't want to keep a reference to them.
 | |
|                     extendee.ControlRemoved += new ControlEventHandler(form_ControlRemoved);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (!_ExtendedControls.ContainsKey(extendee))
 | |
|                 _ExtendedControls.Add(extendee, value);
 | |
|             else
 | |
|                 _ExtendedControls[extendee] = value;
 | |
| 
 | |
|             if (value == TouchKeyboardStyle.No)
 | |
|                 DetachFrom(extendee);
 | |
|             else
 | |
|                 AttachTo(extendee);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         void form_ControlAdded(object sender, ControlEventArgs e)
 | |
|         {
 | |
|             if (sender is KeyboardControl)
 | |
|                 return;
 | |
| 
 | |
|             AttachTo(e.Control);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         void form_ControlRemoved(object sender, ControlEventArgs e)
 | |
|         {
 | |
|             if (sender is KeyboardControl)
 | |
|                 return;
 | |
| 
 | |
|             DetachFrom(e.Control);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or set the ColorTable used to draw the keyboard.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         public VirtualKeyboardColorTable ColorTable
 | |
|         {
 | |
|             get { return _VirtualKeyboard.ColorTable; }
 | |
|             set { _VirtualKeyboard.ColorTable = value; }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or set the Renderer used to draw the keyboard.
 | |
|         /// </summary>
 | |
|         [Browsable(false)]
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         public Renderer Renderer
 | |
|         {
 | |
|             get { return _VirtualKeyboard.Renderer; }
 | |
|             set { _VirtualKeyboard.Renderer = value; }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private Size _Size = Size.Empty; //new Size(KeyboardControl.DefaultWidth, KeyboardControl.DefaultHeight);
 | |
|         /// <summary>
 | |
|         /// Gets or sets the size of the keyboard, when shown inline.
 | |
|         /// </summary>
 | |
|         [Category("Inline Layout")]
 | |
|         [Description("Gets or sets the size of the keyboard, when the keyboard is shown inline.")]
 | |
|         [Browsable(true)]
 | |
|         public Size Size
 | |
|         {
 | |
|             get { return _Size; }
 | |
|             set
 | |
|             {
 | |
|                 if (_Size != value)
 | |
|                 {
 | |
|                     _Size = value; 
 | |
|                     OnSizeChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public bool ShouldSerializeSize()
 | |
|         {
 | |
|             return !_Size.IsEmpty;
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetSize()
 | |
|         {
 | |
|             Size = Size.Empty;
 | |
|         }
 | |
|         private void OnSizeChanged()
 | |
|         {
 | |
|             Size newSize = Size;
 | |
|             if (newSize.IsEmpty)
 | |
|                 newSize = Dpi.Size(new Size(KeyboardControl.DefaultWidth, KeyboardControl.DefaultHeight));
 | |
| 
 | |
|             _VirtualKeyboard.Size = newSize;
 | |
| 
 | |
|             if (SizeChanged != null)
 | |
|                 SizeChanged(this, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the coordinates of the upper-left corner of the keyboard when shown inline, relative to the form.
 | |
|         /// </summary>
 | |
|         [Category("Inline Layout")]
 | |
|         [Description("The coordinates of the upper-left corner of the keyboard, when the keyboard is shown inline, relative to the form.")]
 | |
|         [Browsable(true)]
 | |
|         public Point Location
 | |
|         {
 | |
|             get { return _VirtualKeyboard.Location; }
 | |
|             set 
 | |
|             {
 | |
|                 if (_VirtualKeyboard.Location != value)
 | |
|                 {
 | |
|                     _VirtualKeyboard.Location = value;
 | |
|                     OnLocationChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void OnLocationChanged()
 | |
|         {
 | |
|             if (LocationChanged != null)
 | |
|                 LocationChanged(this, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private DockStyle _Dock = DockStyle.Bottom;
 | |
|         /// <summary>
 | |
|         /// Defines which borders of the keyboard are bound to the container.
 | |
|         /// </summary>
 | |
|         [Category("Inline Layout")]
 | |
|         [Description("Defines which border of the keyboard are bound to the form, when the keyboard is shown inline. Default value is DockStyle.Bottom.")]
 | |
|         [DefaultValue(DockStyle.Bottom)]
 | |
|         [Browsable(true)]
 | |
|         public DockStyle Dock
 | |
|         {
 | |
|             get { return _Dock; }
 | |
|             set
 | |
|             {
 | |
|                 if (_Dock != value)
 | |
|                 {
 | |
|                     _Dock = value; 
 | |
|                     OnDockChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void OnDockChanged()
 | |
|         {
 | |
|             // When keybaord style is Floating, dock is always fill (to fill to popup window).
 | |
|             if (_PopupKeyboard.Controls.Contains(_VirtualKeyboard))
 | |
|                 _VirtualKeyboard.Dock = DockStyle.Fill;
 | |
|             else
 | |
|                 _VirtualKeyboard.Dock = _Dock;
 | |
| 
 | |
|             if (DockChanged != null)
 | |
|                 DockChanged(this, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the coordinates of the upper-left corner of the keyboard when shown floating, relative to the screen.
 | |
|         /// </summary>
 | |
|         [Category("Floating Layout")]
 | |
|         [Description("The coordinates of the upper-left corner of the keyboard, when the keyboard is shown floating, relative to the screen.")]
 | |
|         [Browsable(true)]
 | |
|         public Point FloatingLocation
 | |
|         {
 | |
|             get { return _PopupKeyboard.Location; }
 | |
|             set
 | |
|             {
 | |
|                 if (_PopupKeyboard.Location != value)
 | |
|                 {
 | |
|                     _PopupKeyboard.Location = value;
 | |
|                     OnFloatingLocationChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void OnFloatingLocationChanged()
 | |
|         {
 | |
|             if (FloatingLocationChanged != null)
 | |
|                 FloatingLocationChanged(this, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether touch support is enabled when provided by hardware.
 | |
|         /// </summary>
 | |
|         [DefaultValue(true), Category("Behavior"), Description("Indicates whether touch support is enabled when provided by hardware.")]
 | |
|         public bool TouchEnabled
 | |
|         {
 | |
|             get { return _VirtualKeyboard.TouchEnabled; }
 | |
|             set
 | |
|             {
 | |
|                 _VirtualKeyboard.TouchEnabled = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private Size _FloatingSize = System.Drawing.Size.Empty;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the size of the keyboard, when shown floating.
 | |
|         /// </summary>
 | |
|         [Category("Floating Layout")]
 | |
|         [Description("Gets or sets the size of the keyboard, when the keyboard is shown floating.")]
 | |
|         [Browsable(true)]
 | |
|         public Size FloatingSize
 | |
|         {
 | |
|             get { return _FloatingSize; }
 | |
|             set 
 | |
|             {
 | |
|                 if (_FloatingSize != value)
 | |
|                 {
 | |
|                     _FloatingSize = value;
 | |
|                     OnFloatingSizeChanged();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public bool ShouldSerializeFloatingSize()
 | |
|         {
 | |
|             return !_FloatingSize.IsEmpty;
 | |
|         }
 | |
|         [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetFloatingSize()
 | |
|         {
 | |
|             FloatingSize = Size.Empty;
 | |
|         }
 | |
|         private void OnFloatingSizeChanged()
 | |
|         {
 | |
|             Size newSize = FloatingSize;
 | |
|             if (newSize.IsEmpty)
 | |
|                 newSize = Dpi.Size(new Size(KeyboardControl.DefaultWidth, KeyboardControl.DefaultHeight));
 | |
| 
 | |
|             _PopupKeyboard.Size = newSize;
 | |
| 
 | |
|             if (FloatingSizeChanged != null)
 | |
|                 FloatingSizeChanged(this, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets a text associated with this control.
 | |
|         /// </summary>
 | |
|         [Category("Appearance")]
 | |
|         [Description("The text associated with this control.")]
 | |
|         [Browsable(true)]
 | |
|         public string Text
 | |
|         {
 | |
|             get { return _VirtualKeyboard.Text; }
 | |
|             set 
 | |
|             {
 | |
|                 _VirtualKeyboard.Text = value; 
 | |
|                 _PopupKeyboard.Text = value; 
 | |
|                 OnTextChanged(); 
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Raises the TextChanged event.
 | |
|         /// </summary>
 | |
|         [EditorBrowsable(EditorBrowsableState.Advanced)]
 | |
|         protected void OnTextChanged()
 | |
|         {
 | |
|             if (TextChanged != null)
 | |
|                 TextChanged(this, EventArgs.Empty);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs when the Text property has changed.
 | |
|         /// </summary>
 | |
|         [Category("PropertyChanged")]
 | |
|         [Description("Event raised when the Text property has changed.")]
 | |
|         public event EventHandler TextChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs when the Size property has changed.
 | |
|         /// </summary>
 | |
|         [Category("Inline Layout")]
 | |
|         [Description("Event raised when the Size property has changed.")]
 | |
|         public event EventHandler SizeChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs when the Location property has changed.
 | |
|         /// </summary>
 | |
|         [Category("Inline Layout")]
 | |
|         [Description("Event raised when the Location property has changed.")]
 | |
|         public event EventHandler LocationChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs when the Dock property has changed.
 | |
|         /// </summary>
 | |
|         [Category("Inline Layout")]
 | |
|         [Description("Event raised when the Dock property has changed.")]
 | |
|         public event EventHandler DockChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs when the FloatingSize property has changed.
 | |
|         /// </summary>
 | |
|         [Category("Floating Layout")]
 | |
|         [Description("Event raised when the FloatingSize property has changed.")]
 | |
|         public event EventHandler FloatingSizeChanged;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs when the FloatingLocation property has changed.
 | |
|         /// </summary>
 | |
|         [Category("Floating Layout")]
 | |
|         [Description("Event raised when the FloatingLocation property has changed.")]
 | |
|         public event EventHandler FloatingLocationChanged;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Defines the way the touch keyboard will appear when attached to controls.
 | |
|     /// </summary>
 | |
|     public enum TouchKeyboardStyle
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Touch keyboard will not be visible.
 | |
|         /// </summary>
 | |
|         No,
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Touch keyboard will appear inline in the form.
 | |
|         /// </summary>
 | |
|         Inline,
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Touch keyboard will appear floating on the screen.
 | |
|         /// </summary>
 | |
|         Floating
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Defines delegate for keyboard events.
 | |
|     /// </summary>
 | |
|     public delegate void CancelKeyboardEventHandler(object sender, CancelKeyboardEventArgs e);
 | |
|     /// <summary>
 | |
|     /// Defines event arguments for keyboard based events.
 | |
|     /// </summary>
 | |
|     public class CancelKeyboardEventArgs : CancelEventArgs
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Initializes a new instance of the CancelKeyboardEventArgs class.
 | |
|         /// </summary>
 | |
|         /// <param name="targetControl"></param>
 | |
|         /// <param name="style"></param>
 | |
|         public CancelKeyboardEventArgs(Control targetControl, TouchKeyboardStyle style)
 | |
|         {
 | |
|             TargetControl = targetControl;
 | |
|             Style = style;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the keyboard target control.
 | |
|         /// </summary>
 | |
|         public Control TargetControl;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the keyboard style.
 | |
|         /// </summary>
 | |
|         public TouchKeyboardStyle Style;
 | |
|     }
 | |
| 
 | |
| }
 |