Ejemplo n.º 1
0
        public void PressKey(CalculatorKey keyPressed)
        {
            switch (keyPressed)
            {
            case CalculatorKey.Plus:
            case CalculatorKey.Minus:
            case CalculatorKey.Multiply:
            case CalculatorKey.Divide:
                HandleOperatorKey(keyPressed);
                return;

            case CalculatorKey.Equals:
                HandleEqualsKey();
                return;

            case CalculatorKey.Dot:
                HandleDotKey();
                return;

            case CalculatorKey.Clr:
                HandleClrKey();
                return;
            }

            ClearDisplayIfNeeded();

            char keyChar = ConvertDigitKeyToCharacter(keyPressed);

            display.AddCharacter(keyChar);
        }
        bool OnPlusMinusPressed()
        {
            if (keysPressed.Count == 0)
            {
                return(true);
            }

            CalculatorKey lastKeyPressed = keysPressed [keysPressed.Count - 1];

            if (lastKeyPressed == CalculatorKey.PlusMinus)
            {
                RemoveLastKeyPressed();
                GenerateCalculationText();
                return(false);
            }

            if (lastKeyPressed.IsNumber())
            {
                int index = FindStartOfCurrentNumber();
                if (keysPressed [index] == CalculatorKey.PlusMinus)
                {
                    keysPressed.RemoveAt(index);
                }
                else
                {
                    keysPressed.Insert(index, CalculatorKey.PlusMinus);
                }
                GenerateCalculationText();
                return(false);
            }
            return(true);
        }
Ejemplo n.º 3
0
        private char PressADigitKey()
        {
            CalculatorKey digit = rnd.Next(10) + CalculatorKey.K0;

            calculator.PressKey(digit);
            return((char)(digit - CalculatorKey.K0 + CalculatorEngine.CharZero));
        }
Ejemplo n.º 4
0
        public void PressingOperatorKeyAfterDigitsDoesNothing(CalculatorKey operatorKey)
        {
            char digit1  = PressADigitKey();
            char dotChar = PressTheDotKey();
            char digit2  = PressADigitKey();

            PressTheKey(operatorKey);
            AssertDisplayShowsChars(digit1, dotChar, digit2);
        }
Ejemplo n.º 5
0
        public void EnteringDigitAfterOperatorKeyClearsThePreviousValueFromDisplay(
            CalculatorKey operatorKey)
        {
            PressADigitKey();
            PressTheKey(operatorKey);
            char digit1 = PressADigitKey();
            char digit2 = PressADigitKey();

            AssertDisplayShowsChars(digit1, digit2);
        }
        public void ProcessKeyPress(CalculatorKey key)
        {
            bool processed = true;

            switch (key)
            {
            case CalculatorKey.Clear:
                Clear();
                processed = false;
                break;

            case CalculatorKey.Nine:
            case CalculatorKey.Eight:
            case CalculatorKey.Seven:
            case CalculatorKey.Six:
            case CalculatorKey.Five:
            case CalculatorKey.Four:
            case CalculatorKey.Three:
            case CalculatorKey.Two:
            case CalculatorKey.One:
            case CalculatorKey.Zero:
                processed = true;
                break;

            case CalculatorKey.Plus:
            case CalculatorKey.Minus:
            case CalculatorKey.Multiply:
            case CalculatorKey.Divide:
                processed = OnOperationKeyPressed(key);
                break;

            case CalculatorKey.Point:
                processed = OnPointKeyPressed();
                break;

            case CalculatorKey.Equal:
                processed = OnEqualKeyPressed();
                break;

            case CalculatorKey.Backspace:
                processed = OnBackspaceKeyPressed();
                break;

            case CalculatorKey.PlusMinus:
                processed = OnPlusMinusPressed();
                break;
            }

            if (processed)
            {
                keysPressed.Add(key);
                GenerateCalculationText();
            }
        }
 int FindStartOfCurrentNumber()
 {
     for (int i = keysPressed.Count - 1; i >= 0; --i)
     {
         CalculatorKey key = keysPressed [i];
         if (key.IsOperationKey())
         {
             return(i + 1);
         }
     }
     return(0);
 }
Ejemplo n.º 8
0
        public void PressKey(CalculatorKey key)
        {
            if (_numbers.Count > 1)
            {
                var leftOperand  = _numbers.Dequeue();
                var rightOperand = _numbers.Dequeue();
                var result       = Calculate(leftOperand, rightOperand, _key);
                _numbers.Enqueue(result);
            }

            _key = key;
        }
 void ProcessOperationKey(CalculatorKey key)
 {
     if (firstNumber)
     {
         operation   = key;
         firstNumber = false;
         result      = ConvertCurrentNumberTextToDouble();
     }
     else
     {
         result = ApplyOperation(result, ConvertCurrentNumberTextToDouble());
     }
     number.Clear();
 }
 bool PointAlreadyPressedForCurrentNumber()
 {
     for (int i = keysPressed.Count - 1; i >= 0; --i)
     {
         CalculatorKey key = keysPressed [i];
         if (key == CalculatorKey.Point)
         {
             return(true);
         }
         else if (key.IsOperationKey())
         {
             return(false);
         }
     }
     return(false);
 }
        bool OnOperationKeyPressed(CalculatorKey key)
        {
            if (keysPressed.Count == 0)
            {
                return(false);
            }

            if (LastKeyPressedIsPlusMinus())
            {
                return(false);
            }

            if (LastKeyPressedIsOperation())
            {
                RemoveLastKeyPressed();
            }
            return(true);
        }
        public static string GetText(this CalculatorKey key)
        {
            switch (key)
            {
            case CalculatorKey.Nine:
            case CalculatorKey.Eight:
            case CalculatorKey.Seven:
            case CalculatorKey.Six:
            case CalculatorKey.Five:
            case CalculatorKey.Four:
            case CalculatorKey.Three:
            case CalculatorKey.Two:
            case CalculatorKey.One:
            case CalculatorKey.Zero:
                return(((int)key).ToString());

            case CalculatorKey.Plus:
                return("+");

            case CalculatorKey.Minus:
                return("-");

            case CalculatorKey.Multiply:
                return("*");

            case CalculatorKey.Divide:
                return("/");

            case CalculatorKey.Point:
                return(".");

            case CalculatorKey.PlusMinus:
                return("-");

            default:
                return("");
            }
        }
Ejemplo n.º 13
0
        private double Calculate(double leftOperand, double rightOperand, CalculatorKey key)
        {
            switch (key)
            {
            case CalculatorKey.Add:
                return(leftOperand + rightOperand);

            case CalculatorKey.Subtract:
                return(leftOperand - rightOperand);

            case CalculatorKey.Multiply:
                return(leftOperand * rightOperand);

            case CalculatorKey.Divide:
                return(leftOperand / rightOperand);

            case CalculatorKey.Equal:
                return(rightOperand);

            default:
                throw new ArgumentOutOfRangeException(nameof(key), key, null);
            }
        }
 public static bool IsOperationKey(this CalculatorKey key)
 {
     return(operationKeys.Contains(key));
 }
Ejemplo n.º 15
0
 public void PressingOperatorKeyAtStartDoesNothing(CalculatorKey operatorKey)
 {
     PressTheKey(operatorKey);
     AssertDisplayShowsZero();
 }
Ejemplo n.º 16
0
 private void PressTheKey(CalculatorKey key)
 {
     calculator.PressKey(key);
 }
Ejemplo n.º 17
0
 private static char ConvertDigitKeyToCharacter(CalculatorKey keyPressed)
 {
     return((char)(keyPressed - CalculatorKey.K0 + CharZero));
 }
Ejemplo n.º 18
0
 internal CalculatorButton(CalculatorKey key, string text)
 {
     Key  = key;
     Text = text;
 }
Ejemplo n.º 19
0
 private void HandleOperatorKey(CalculatorKey keyPressed)
 {
     currentOperator = keyPressed;
     StoreCurrentValue();
     clearDisplayOnNextDigit = true;
 }
Ejemplo n.º 20
0
 void OnCalculatorKeyPress(CalculatorKey key)
 {
     calculatorEngine.ProcessKeyPress(key);
 }
 public static bool IsNumber(this CalculatorKey key)
 {
     return(numberKeys.Contains(key));
 }
Ejemplo n.º 22
0
		internal CalculatorButton (CalculatorKey key, string text)
		{
			Key = key;
			Text = text;
		}