protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); if (_keyCommands.Count == 0) { var selector = new ObjCRuntime.Selector(KeySelector); for (var i = 0; i < 10; i++) { _keyCommands.Add(UIKeyCommand.Create((NSString)i.ToString(), 0, selector)); _keyCommands.Add(UIKeyCommand.Create((NSString)i.ToString(), UIKeyModifierFlags.NumericPad, selector)); } for (var i = 0; i < 26; i++) { var key = (char)('a' + i); _keyCommands.Add(UIKeyCommand.Create((NSString)key.ToString(), 0, selector)); } // Viewable on iPad (>= iOS 9) when holding down ⌘ _keyCommands.Add(UIKeyCommand.Create(new NSString("x"), UIKeyModifierFlags.Command, selector, new NSString("Cut"))); _keyCommands.Add(UIKeyCommand.Create(new NSString("c"), UIKeyModifierFlags.Command, selector, new NSString("Copy"))); _keyCommands.Add(UIKeyCommand.Create(new NSString("v"), UIKeyModifierFlags.Command, selector, new NSString("Paste"))); foreach (var kc in _keyCommands) { AddKeyCommand(kc); } } }
static UIKeyCommand UIKeyCommandFrom(NSString nsInput, HardwareKeyModifierKeys modifier, string descriptiveText) { var flags = UIKeyModifierFlagsFrom(modifier); return(string.IsNullOrWhiteSpace(descriptiveText) ? UIKeyCommand.Create(nsInput, flags, _onKeyPressSelector) : UIKeyCommand.Create(nsInput, flags, _onKeyPressSelector, new NSString(descriptiveText))); }
public CEditorController() { AddKeyCommand(UIKeyCommand.Create(new NSString("]"), UIKeyModifierFlags.Command, new ObjCRuntime.Selector("indent:"), new NSString("Indent".Localize()))); AddKeyCommand(UIKeyCommand.Create(new NSString("["), UIKeyModifierFlags.Command, new ObjCRuntime.Selector("outdent:"), new NSString("Outdent".Localize()))); AddKeyCommand(UIKeyCommand.Create(new NSString("/"), UIKeyModifierFlags.Command, new ObjCRuntime.Selector("toggleComment:"), new NSString("Toggle Comment".Localize()))); AddKeyCommand(UIKeyCommand.Create(new NSString("="), UIKeyModifierFlags.Command, new ObjCRuntime.Selector("increaseFontSize:"), new NSString("Increase Font Size".Localize()))); AddKeyCommand(UIKeyCommand.Create(new NSString("-"), UIKeyModifierFlags.Command, new ObjCRuntime.Selector("decreaseFontSize:"), new NSString("Decrease Font Size".Localize()))); AddKeyCommand(UIKeyCommand.Create(new NSString("0"), UIKeyModifierFlags.Command, new ObjCRuntime.Selector("restoreFontSize:"), new NSString("Restore Font Size".Localize()))); }
private void KeyCommand(UIKeyCommand keyCommand) { if (keyCommand == null) { return; } if (_keyCommands.Contains(keyCommand)) { if (keyCommand.ModifierFlags == UIKeyModifierFlags.Command) { switch (keyCommand.Input.ToString()) { case HardwareInput.CopyCharacter: Page?.OnKeyCommand(Controls.KeyCommand.Copy); break; case HardwareInput.PasteCharacter: Page?.OnKeyCommand(Controls.KeyCommand.Paste); break; case HardwareInput.RootCharacter: Page?.OnKeyCommand(Controls.KeyCommand.RootOperator); break; } } else if (keyCommand.Input == _enterKey || keyCommand.Input == HardwareInput.ResultOperator) { Page?.OnKeyCommand(Controls.KeyCommand.Calculate); } else if (keyCommand.Input == _backspaceKey) { Page?.OnKeyCommand(Controls.KeyCommand.Delete); } else if (char.TryParse(keyCommand.Input, out var keyCharacter)) { var handled = false; var keyCharacterAsString = keyCharacter.ToString(); if (char.IsDigit(keyCharacter)) { handled = true; } else if (HardwareInput.ParenthesesDecimalSeparatorsAndOperators.Contains(keyCharacterAsString)) { handled = true; } if (handled) { Page?.OnKeyUp(keyCharacter); } } } }
void IKeyPressReceiver.ProcessKey(UIKeyCommand cmd) { var keyCombination = new KeyCombination(cmd); if (_actions.ContainsKey(keyCombination)) { foreach (var action in _actions[keyCombination].ToArray()) { action(); } } }
public override void DidPressArrowKey(UIKeyCommand sender) { base.DidPressArrowKey(sender); var keyCommand = (UIKeyCommand)sender; if (keyCommand.Input == UIKeyCommand.UpArrow && TextView.Text.Length == 0) { var lastMessage = messages [0]; EditText(lastMessage.Text); var indexPath = NSIndexPath.FromRowSection(0, 0); TableView.ScrollToRow(indexPath, UITableViewScrollPosition.Bottom, true); } }
public void KeyRecv(UIKeyCommand cmd) { if (cmd == null) { return; } var inputValue = cmd.Input; if (inputValue == "\n" || inputValue == "\r") { SetKeyboardValue(_RecvValue); _RecvValue = string.Empty; } else { _RecvValue += inputValue; } }
public void RegisterHandler(KeyCombination combination, Action action) { if (_actions.ContainsKey(combination)) { _actions[combination].Add(action); } else { var command = UIKeyCommand.Create(combination.KeyCommand, combination.ModifierFlags, new Selector(KeyCommandMethodName)); _activeCommands.Add(command); _controller.AddKeyCommand(command); _actions.Add(combination, new List <Action>() { action }); } }
protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); string key = string.Empty; var selector = new Selector("KeyRecv:"); for (int i = 0; i <= 127; i++) { key = ((char)i).ToString(); UIKeyCommand accelerator1 = UIKeyCommand.Create((NSString)key, 0, selector); AddKeyCommand(accelerator1); UIKeyCommand acceleratorShift = UIKeyCommand.Create((NSString)key, UIKeyModifierFlags.Shift, selector); AddKeyCommand(acceleratorShift); } UIKeyCommand accelerator2 = UIKeyCommand.Create((NSString)"\n", 0, selector); AddKeyCommand(accelerator2); UIKeyCommand accelerator3 = UIKeyCommand.Create((NSString)"\r", 0, selector); AddKeyCommand(accelerator3); }
protected override void OnElementChanged(VisualElementChangedEventArgs args) { base.OnElementChanged(args); if (!_keyCommands.Any()) { var selector = new ObjCRuntime.Selector(_keySelector); // Add support for special commands (viewable on iPad (>= iOS 9) when holding down ⌘) _keyCommands.Add(UIKeyCommand.Create(new NSString(HardwareInput.CopyCharacter), UIKeyModifierFlags.Command, selector, new NSString(LocalizedStrings.Copy))); _keyCommands.Add(UIKeyCommand.Create(new NSString(HardwareInput.PasteCharacter), UIKeyModifierFlags.Command, selector, new NSString(LocalizedStrings.Paste))); _keyCommands.Add(UIKeyCommand.Create(new NSString(HardwareInput.RootCharacter), UIKeyModifierFlags.Command, selector, new NSString(LocalizedStrings.RootOperator))); // Add support for enter and equals key _keyCommands.Add(UIKeyCommand.Create((NSString)_enterKey, 0, selector)); _keyCommands.Add(UIKeyCommand.Create((NSString)HardwareInput.ResultOperator, 0, selector)); // Add support for backspace key _keyCommands.Add(UIKeyCommand.Create((NSString)_backspaceKey, 0, selector)); // Add support for numbers for (var i = 0; i < 10; i++) { _keyCommands.Add(UIKeyCommand.Create((NSString)i.ToString(), 0, selector)); } // Add support for parentheses, decimal separators and operators foreach (var symbol in HardwareInput.ParenthesesDecimalSeparatorsAndOperators) { _keyCommands.Add(UIKeyCommand.Create((NSString)symbol, 0, selector)); } foreach (var kc in _keyCommands) { AddKeyCommand(kc); } } }
private void KeyCommand(UIKeyCommand keyCmd) { if (keyCmd == null) { return; } if (_keyCommands.Contains(keyCmd)) { if (keyCmd.ModifierFlags == UIKeyModifierFlags.Command) { switch (keyCmd.Input.ToString()) { case "x": _page?.OnKeyCommand(Controls.KeyCommand.Cut); break; case "c": _page?.OnKeyCommand(Controls.KeyCommand.Copy); break; case "v": _page?.OnKeyCommand(Controls.KeyCommand.Paste); break; default: break; } } else { var desc = $"{_page?.Name ?? string.Empty} : {nameof(KeyCommand)} : {keyCmd.Input}"; System.Diagnostics.Debug.WriteLine(desc); _page?.OnKeyUp(keyCmd.Input, desc); } } }
private void KeyCommand(UIKeyCommand cmd) { _keyboard.CastTo <IKeyPressReceiver>().ProcessKey(cmd); }
internal static void ProcessKeyPress(UIKeyCommand cmd) { if (cmd == _lastKeyCommand) { return; } _lastKeyCommand = cmd; var element = HardwareKeyPage.FocusedElement ?? HardwareKeyPage.DefaultFocusedElement; if (element == null) { return; } //System.Diagnostics.Debug.WriteLine("Forms9Patch.PageRenderer: cmd.Input=[" + cmd.Input + "] cmd.ModifierFlags[" + cmd.ModifierFlags + "] "); //var isFirstResponder = CanBecomeFirstResponder; //var directBinding = (bool)this.GetPropertyValue("IsDirectBinding"); string keyInput = cmd.Input.ToString().ToUpper(); bool useShift = true; if (cmd.Input == UIKeyCommand.DownArrow) { keyInput = HardwareKey.DownArrowKeyInput; } else if (cmd.Input == UIKeyCommand.UpArrow) { keyInput = HardwareKey.UpArrowKeyInput; } else if (cmd.Input == UIKeyCommand.LeftArrow) { keyInput = HardwareKey.LeftArrowKeyInput; } else if (cmd.Input == UIKeyCommand.RightArrow) { keyInput = HardwareKey.RightArrowKeyInput; } else if (cmd.Input == UIKeyCommand.Escape) { keyInput = HardwareKey.EscapeKeyInput; } else if (cmd.Input == UIKeyCommand_BackspaceDeleteKeyInput) { keyInput = HardwareKey.BackspaceDeleteKeyInput; } else if (cmd.Input == UIKeyCommand_ForwardDeleteKeyInput) { keyInput = HardwareKey.ForwardDeleteKeyInput; } else if (cmd.Input == UIKeyCommand_TabKeyInput) { keyInput = HardwareKey.TabKeyInput; } else if (cmd.Input == UIKeyCommand_EnterReturnKeyInput) { keyInput = HardwareKey.EnterReturnKeyInput; } else if (cmd.Input == UIKeyCommand_PageUpKeyInput) { keyInput = HardwareKey.PageUpKeyInput; } else if (cmd.Input == UIKeyCommand_PageDownKeyInput) { keyInput = HardwareKey.PageDownKeyInput; } else if (cmd.Input == UIKeyCommand_HomeKeyInput) { keyInput = HardwareKey.HomeKeyInput; } else if (cmd.Input == UIKeyCommand_EndKeyInput) { keyInput = HardwareKey.EndKeyInput; } else if (cmd.Input == UIKeyCommand_InsertKeyInput) { keyInput = HardwareKey.InsertKeyInput; } else if (cmd.Input == UIKeyCommand_InputDeleteKeyInput) { keyInput = HardwareKey.ForwardDeleteKeyInput; } else { useShift = keyInput.Length > 0 && char.IsLetter(keyInput[0]); } var modifiers = GetModifierKeys(cmd.ModifierFlags, useShift); var listeners = element.GetHardwareKeyListeners(); for (int i = 0; i < listeners.Count; i++) { var listener = listeners[i]; if (string.IsNullOrEmpty(listener?.HardwareKey?.KeyInput)) { continue; } if (listener.HardwareKey.KeyInput == keyInput.ToUpper() && (listener.HardwareKey.ModifierKeys == modifiers || listener.HardwareKey.ModifierKeys.HasFlag(HardwareKeyModifierKeys.Any))) { if (listener.Command != null && listener.Command.CanExecute(listener.CommandParameter)) { listener.Command.Execute(listener.CommandParameter); } var observedHardwareKey = new HardwareKey(keyInput.ToUpper(), modifiers); listener.Pressed?.Invoke(element, new HardwareKeyEventArgs(observedHardwareKey, element)); //System.Diagnostics.Debug.WriteLine("SUCCESS!!!"); return; } } }
void TabBackward(UIKeyCommand cmd) => FocusSearch(forwardDirection: false);
void OnKeyPress(UIKeyCommand cmd) => ProcessKeyPress(cmd);
private void keyPressed(UIKeyCommand cmd) => HandleKeyCommand?.Invoke(cmd);
public void Create() { using (var key = new NSString("a")) { Assert.NotNull(UIKeyCommand.Create(key, UIKeyModifierFlags.Command, new Selector("foo")), "Create"); } }
void OnKeyPress(UIKeyCommand cmd) { var element = HardwareKeyPage.FocusedElement ?? HardwareKeyPage.DefaultFocusedElement; if (element == null) { return; } //System.Diagnostics.Debug.WriteLine("Forms9Patch.PageRenderer: cmd.Input=[" + cmd.Input + "] cmd.ModifierFlags[" + cmd.ModifierFlags + "] "); //var isFirstResponder = CanBecomeFirstResponder; //var directBinding = (bool)this.GetPropertyValue("IsDirectBinding"); string keyInput = cmd.Input.ToString().ToUpper(); bool useShift = true; if (cmd.Input == UIKeyCommand.DownArrow) { keyInput = HardwareKey.DownArrowKeyInput; } else if (cmd.Input == UIKeyCommand.UpArrow) { keyInput = HardwareKey.UpArrowKeyInput; } else if (cmd.Input == UIKeyCommand.LeftArrow) { keyInput = HardwareKey.LeftArrowKeyInput; } else if (cmd.Input == UIKeyCommand.RightArrow) { keyInput = HardwareKey.RightArrowKeyInput; } else if (cmd.Input == UIKeyCommand.Escape) { keyInput = HardwareKey.EscapeKeyInput; } else if (cmd.Input == "\b") { keyInput = HardwareKey.BackspaceDeleteKeyInput; } else if (cmd.Input == "\0x7F") { keyInput = HardwareKey.ForwardDeleteKeyInput; } else if (cmd.Input == "\t") { keyInput = HardwareKey.TabKeyInput; } else if (cmd.Input == "\r") { keyInput = HardwareKey.EnterReturnKeyInput; } else if (cmd.Input == "UIKeyInputPageUp") { keyInput = HardwareKey.PageUpKeyInput; } else if (cmd.Input == "UIKeyInputPageDown") { keyInput = HardwareKey.PageDownKeyInput; } else if (cmd.Input == "UIKeyInputHome") { keyInput = HardwareKey.HomeKeyInput; } else if (cmd.Input == "UIKeyInputEnd") { keyInput = HardwareKey.EndKeyInput; } else if (cmd.Input == "UIKeyInputInsert") { keyInput = HardwareKey.InsertKeyInput; } else if (cmd.Input == "UIKeyInputDelete") { keyInput = HardwareKey.ForwardDeleteKeyInput; } else { useShift = keyInput.Length > 0 && char.IsLetter(keyInput[0]); } /* * else if (cmd.Input == "\\^P") * input = HardwareKey.F1Label; * else if (cmd.Input == "UIKeyInputF2") * input = HardwareKey.F2KeyInput; * else if (cmd.Input == "UIKeyInputF3") * input = HardwareKey.F3KeyInput; * else if (cmd.Input == "UIKeyInputF4") * input = HardwareKey.F4KeyInput; * else if (cmd.Input == "UIKeyInputF5") * input = HardwareKey.F5KeyInput; * else if (cmd.Input == "UIKeyInputF6") * input = HardwareKey.F6KeyInput; * else if (cmd.Input == "UIKeyInputF7") * input = HardwareKey.F7KeyInput; * else if (cmd.Input == "UIKeyInputF8") * input = HardwareKey.F8KeyInput; * else if (cmd.Input == "UIKeyInputF9") * input = HardwareKey.F9KeyInput; * else if (cmd.Input == "UIKeyInputF10") * input = HardwareKey.F10KeyInput; * else if (cmd.Input == "UIKeyInputF11") * input = HardwareKey.F11KeyInput; * else if (cmd.Input == "UIKeyInputF12") * input = HardwareKey.F12KeyInput; */ /* * var modifiers = HardwareKeyModifierKeys.None; * if ((cmd.ModifierFlags & UIKeyModifierFlags.AlphaShift) > 0) * modifiers |= HardwareKeyModifierKeys.CapsLock; * if ((cmd.ModifierFlags & UIKeyModifierFlags.Alternate) > 0) * modifiers |= HardwareKeyModifierKeys.Alternate; * if ((cmd.ModifierFlags & UIKeyModifierFlags.Control) > 0) * modifiers |= HardwareKeyModifierKeys.Control; * if ((cmd.ModifierFlags & UIKeyModifierFlags.NumericPad) > 0) * modifiers |= HardwareKeyModifierKeys.NumericPadKey; * if ((cmd.ModifierFlags & UIKeyModifierFlags.Command) > 0) * modifiers |= HardwareKeyModifierKeys.PlatformKey; * if (keyInput.Length > 0 && char.IsLetter(keyInput[0]) && (cmd.ModifierFlags & UIKeyModifierFlags.Shift) > 0) * modifiers |= HardwareKeyModifierKeys.Shift; */ var modifiers = GetModifierKeys(cmd.ModifierFlags, useShift); /* * if (!modifiers.HasFlag(HardwareKeyModifierKeys.NumericPadKey)) * { * switch (Forms9Patch.KeyboardService.LanguageRegion) * { * case "fr-FR": * { * switch (cmd.Input) * { * case "1": * keyInput = "&"; * break; * case "2": * keyInput = "é"; * break; * case "3": * keyInput = "\""; * break; * case "4": * keyInput = "'"; * break; * case "5": * keyInput = "("; * System.Diagnostics.Debug.WriteLine("fr-FR [ ( ]"); * break; * case "6": * keyInput = "-"; * break; * case "7": * keyInput = "è"; * break; * case "8": * keyInput = "_"; * break; * case "9": * keyInput = "ç"; * break; * case "0": * keyInput = "à"; * break; * case "-": * keyInput = ")"; * break; * } * } * break; * } * } */ var listeners = element.GetHardwareKeyListeners(); for (int i = 0; i < listeners.Count; i++) { var listener = listeners[i]; if (string.IsNullOrEmpty(listener?.HardwareKey?.KeyInput)) { continue; } if (listener.HardwareKey.KeyInput == keyInput.ToUpper() && (listener.HardwareKey.ModifierKeys == modifiers || listener.HardwareKey.ModifierKeys.HasFlag(HardwareKeyModifierKeys.Any))) { if (listener.Command != null && listener.Command.CanExecute(listener.CommandParameter)) { listener.Command.Execute(listener.CommandParameter); } var observedHardwareKey = new HardwareKey(keyInput.ToUpper(), modifiers); listener.Pressed?.Invoke(element, new HardwareKeyEventArgs(observedHardwareKey, element)); //System.Diagnostics.Debug.WriteLine("SUCCESS!!!"); return; } } }
public KeyCombination(UIKeyCommand keyModifier) { _key = new Key(keyModifier.Input); ModifierFlags = keyModifier.ModifierFlags; }
void TabForward(UIKeyCommand cmd) => FocusSearch(forwardDirection: true);
void OnKeyPress(UIKeyCommand cmd) => HardwareKeyPageRenderer.ProcessKeyPress(cmd);
private void handleKeyCommand(UIKeyCommand cmd) { Key? key; bool upper = false; // UIKeyCommand constants are not actually constants, so we can't use a switch if (cmd.Input == UIKeyCommand.LeftArrow) { key = Key.Left; } else if (cmd.Input == UIKeyCommand.RightArrow) { key = Key.Right; } else if (cmd.Input == UIKeyCommand.UpArrow) { key = Key.Up; } else if (cmd.Input == UIKeyCommand.DownArrow) { key = Key.Down; } else { key = keyForString(cmd.Input, out upper); } if (!key.HasValue) { return; } bool shiftHeld = (cmd.ModifierFlags & UIKeyModifierFlags.Shift) > 0 || upper; bool superHeld = (cmd.ModifierFlags & UIKeyModifierFlags.Command) > 0; bool ctrlHeld = (cmd.ModifierFlags & UIKeyModifierFlags.Control) > 0; bool optionHeld = (cmd.ModifierFlags & UIKeyModifierFlags.Alternate) > 0; if (shiftHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, true)); } if (superHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LWin, true)); } if (ctrlHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LControl, true)); } if (optionHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LAlt, true)); } PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, true)); PendingInputs.Enqueue(new KeyboardKeyInput(key.Value, false)); if (optionHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LAlt, false)); } if (ctrlHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LControl, false)); } if (superHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LWin, false)); } if (shiftHeld) { PendingInputs.Enqueue(new KeyboardKeyInput(Key.LShift, false)); } }
public override void DidPressArrowKey (UIKeyCommand sender) { base.DidPressArrowKey (sender); var keyCommand = (UIKeyCommand)sender; if (keyCommand.Input == UIKeyCommand.UpArrow && TextView.Text.Length == 0) { var lastMessage = messages [0]; EditText (lastMessage.Text); var indexPath = NSIndexPath.FromRowSection (0, 0); TableView.ScrollToRow (indexPath, UITableViewScrollPosition.Bottom, true); } }