private void HandleEntryLineNegation(EntryLineParser parser) { string lastToken = parser.Tokens[parser.Tokens.Count - 1]; int lastTokenLength = lastToken.Length; int tokenStart = this.GetEntryLineTextBox().SelectionStart - lastTokenLength; string entryLine = parser.EntryLine; if (entryLine[tokenStart] == '+') { // Change the unary plus to a negative sign. var sb = new StringBuilder(entryLine); sb[tokenStart] = '-'; entryLine = sb.ToString(); } else if (entryLine[tokenStart] == '-') { // Remove the negative sign. entryLine = entryLine.Remove(tokenStart, 1); } else { // Insert a negative sign. entryLine = entryLine.Insert(tokenStart, "-"); } this.entryLine.Text = entryLine; this.MoveEntryLineCaretToEnd(); this.UpdateEntryLineBindingSource(); }
private void HandleSubtract() { EntryLineParser parser = this.ParseEntryLineToCaret(); if (parser.InComplex || parser.InDateTime) { this.ClearError(); this.InsertInEntryLine("-"); } else { this.ExecuteCommand("Subtract"); } }
private void HandleNegate() { EntryLineParser parser = this.ParseEntryLineToCaret(); if (parser.InNegatableScalarValue) { this.ClearError(); this.HandleEntryLineNegation(parser); } else { this.ExecuteCommand("Negate"); } }
private ShortcutKey GetShortcutKey(Key key, ModifierKeys modifiers) { ShortcutKey result = ShortcutKey.None; // Debug.WriteLine(string.Format("Key: {0}, Modifiers: {1}", key, modifiers)); #pragma warning disable CC0019 // Use 'switch'. A switch of switch statements would be more confusing. if (modifiers == ModifierKeys.None) { switch (key) { case Key.Enter: result = ShortcutKey.Enter; break; case Key.Add: result = ShortcutKey.Add; break; case Key.Subtract: result = ShortcutKey.Subtract; break; case Key.Multiply: result = ShortcutKey.Multiply; break; case Key.Divide: result = ShortcutKey.Divide; break; case Key.Back: result = ShortcutKey.Back; break; case Key.Up: result = ShortcutKey.Up; break; case Key.Down: result = ShortcutKey.Down; break; } } else if (modifiers == ModifierKeys.Shift) { switch (key) { case Key.Add: // Shift+= -> '+' result = ShortcutKey.Add; break; case Key.D8: // Shift+8 -> '*' result = ShortcutKey.Multiply; break; } } else if (modifiers == ModifierKeys.Control) { switch (key) { case Key.Subtract: result = ShortcutKey.Negate; break; } } else if (modifiers == (ModifierKeys.Control | ModifierKeys.Shift)) { // IE uses Ctrl+? and Ctrl+Shift+? key bindings for a lot of things, // so I had to settle for second and third choices to find shortcuts // it would allow. I don't know if these will work in other browsers // though, but they should always work out-of-browser. // // Note: SL4 won't raise ALT key events because IE doesn't pass // them on to ActiveX plug-ins, so ALT isn't even a possibility. switch (key) { case Key.Subtract: result = ShortcutKey.Dash; break; case Key.Divide: result = ShortcutKey.ForwardSlash; break; case Key.R: result = ShortcutKey.Power; break; case Key.U: result = ShortcutKey.SquareRoot; break; case Key.W: result = ShortcutKey.Swap; break; } } #pragma warning restore CC0019 // Use 'switch' // If we're editing a DateTime value, then don't // treat arithmetic key characters as operators. if (result >= ShortcutKey.Add && result <= ShortcutKey.Divide) { EntryLineParser parser = this.ParseEntryLineToCaret(); if (parser.InDateTime) { result = ShortcutKey.None; } } return(result); }