diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/GraphicObjects/GraphicObject.cs | 4 | ||||
| -rw-r--r-- | src/GraphicObjects/TextBox.cs | 73 | ||||
| -rw-r--r-- | src/Input/KeyPressEventArgs.cs | 58 | ||||
| -rw-r--r-- | src/Interface.cs | 8 |
4 files changed, 87 insertions, 56 deletions
diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index b61ecb32..c526e909 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -156,6 +156,7 @@ namespace Crow public event EventHandler<MouseMoveEventArgs> MouseLeave; public event EventHandler<KeyboardKeyEventArgs> KeyDown; public event EventHandler<KeyboardKeyEventArgs> KeyUp; + public event EventHandler<KeyPressEventArgs> KeyPress; public event EventHandler Focused; public event EventHandler Unfocused; public event EventHandler<LayoutingEventArgs> LayoutChanged; @@ -939,6 +940,9 @@ namespace Crow public virtual void onKeyDown(object sender, KeyboardKeyEventArgs e){ KeyDown.Raise (sender, e); } + public virtual void onKeyPress(object sender, KeyPressEventArgs e){ + KeyPress.Raise (sender, e); + } #endregion #region Mouse handling diff --git a/src/GraphicObjects/TextBox.cs b/src/GraphicObjects/TextBox.cs index 14cc1830..d3b8319c 100644 --- a/src/GraphicObjects/TextBox.cs +++ b/src/GraphicObjects/TextBox.cs @@ -72,7 +72,6 @@ namespace Crow public override void onKeyDown (object sender, KeyboardKeyEventArgs e) { base.onKeyDown (sender, e); - Key key = e.Key; switch (key) @@ -80,9 +79,9 @@ namespace Crow case Key.Back: if (!selectionIsEmpty) { -// Text = Text.Remove(selectionStart, selectionEnd - selectionStart); -// selReleasePos = -1; -// currentCol = selBeginPos; + // Text = Text.Remove(selectionStart, selectionEnd - selectionStart); + // selReleasePos = -1; + // currentCol = selBeginPos; } else this.DeleteChar(); @@ -141,62 +140,24 @@ namespace Crow break; case Key.RWin: break; - case Key.Tab: - this.Insert("\t"); - break; - case Key.KeypadDecimal: - this.Insert ("."); - break; - case Key.Space: - this.Insert(" "); - break; - case Key.KeypadDivide: - case Key.Slash: - this.Insert("/"); - break; - case Key.KeypadMultiply: - this.Insert("*"); - break; - case Key.KeypadMinus: - case Key.Minus: - this.Insert("-"); - break; - case Key.KeypadPlus: - case Key.Plus: - this.Insert("+"); - break; - case Key.ShiftLeft: - case Key.ShiftRight: - case Key.AltLeft: - case Key.AltRight: - break; - case Key.Semicolon: - this.Insert(";"); - break; default: - if (!selectionIsEmpty) - { -// Text = Text.Remove(selectionStart, selectionEnd - selectionStart); -// currentCol = selBeginPos; - } - - string k = "?"; - if ((char)key >= 67 && (char)key <= 76) - k = ((int)key - 67).ToString(); - else if ((char)key >= 109 && (char)key <= 118) - k = ((int)key - 109).ToString(); - else if (e.Shift) - k = key.ToString(); - else - k = key.ToString().ToLower(); + break; + } + if (Width < 0) + RegisterForLayouting (LayoutingType.Width); + if (Height < 0) + RegisterForLayouting (LayoutingType.Height); + RegisterForGraphicUpdate(); + } + public override void onKeyPress (object sender, KeyPressEventArgs e) + { + base.onKeyPress (sender, e); - this.Insert (k); + this.Insert (e.KeyChar.ToString()); - SelRelease = -1; - SelBegin = new Point(CurrentColumn, SelBegin.Y); + SelRelease = -1; + SelBegin = new Point(CurrentColumn, SelBegin.Y); - break; - } if (Width < 0) RegisterForLayouting (LayoutingType.Width); if (Height < 0) diff --git a/src/Input/KeyPressEventArgs.cs b/src/Input/KeyPressEventArgs.cs new file mode 100644 index 00000000..73990613 --- /dev/null +++ b/src/Input/KeyPressEventArgs.cs @@ -0,0 +1,58 @@ +// #region License +// // +// // The Open Toolkit Library License +// // +// // Copyright (c) 2006 - 2009 the Open Toolkit library. +// // +// // Permission is hereby granted, free of charge, to any person obtaining a copy +// // of this software and associated documentation files (the "Software"), to deal +// // in the Software without restriction, including without limitation the rights to +// // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// // the Software, and to permit persons to whom the Software is furnished to do +// // so, subject to the following conditions: +// // +// // The above copyright notice and this permission notice shall be included in all +// // copies or substantial portions of the Software. +// // +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// // OTHER DEALINGS IN THE SOFTWARE. +// // +// #endregion + +using System; + +namespace Crow +{ + /// <summary> + /// Defines the event arguments for KeyPress events. Instances of this class are cached: + /// KeyPressEventArgs should only be used inside the relevant event, unless manually cloned. + /// </summary> + public class KeyPressEventArgs : EventArgs + { + char key_char; + + /// <summary> + /// Constructs a new instance. + /// </summary> + /// <param name="keyChar">The ASCII character that was typed.</param> + public KeyPressEventArgs(char keyChar) + { + KeyChar = keyChar; + } + + /// <summary> + /// Gets a <see cref="System.Char"/> that defines the ASCII character that was typed. + /// </summary> + public char KeyChar + { + get { return key_char; } + internal set { key_char = value; } + } + } +} diff --git a/src/Interface.cs b/src/Interface.cs index 75310918..86f30088 100644 --- a/src/Interface.cs +++ b/src/Interface.cs @@ -663,6 +663,14 @@ namespace Crow return true; } + public bool ProcessKeyPress(char Key){ + if (_focusedWidget == null) + return false; + KeyPressEventArgs e = new KeyPressEventArgs(Key); + _focusedWidget.onKeyPress (this, e); + return true; + } + volatile bool mouseRepeatOn; volatile int mouseRepeatCount; Thread mouseRepeatThread; |