Exemple #1
0
        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();
        }
Exemple #2
0
        private void HandleSubtract()
        {
            EntryLineParser parser = this.ParseEntryLineToCaret();

            if (parser.InComplex || parser.InDateTime)
            {
                this.ClearError();
                this.InsertInEntryLine("-");
            }
            else
            {
                this.ExecuteCommand("Subtract");
            }
        }
Exemple #3
0
        private void HandleNegate()
        {
            EntryLineParser parser = this.ParseEntryLineToCaret();

            if (parser.InNegatableScalarValue)
            {
                this.ClearError();
                this.HandleEntryLineNegation(parser);
            }
            else
            {
                this.ExecuteCommand("Negate");
            }
        }
Exemple #4
0
        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);
        }