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); }
private char PressADigitKey() { CalculatorKey digit = rnd.Next(10) + CalculatorKey.K0; calculator.PressKey(digit); return((char)(digit - CalculatorKey.K0 + CalculatorEngine.CharZero)); }
public void PressingOperatorKeyAfterDigitsDoesNothing(CalculatorKey operatorKey) { char digit1 = PressADigitKey(); char dotChar = PressTheDotKey(); char digit2 = PressADigitKey(); PressTheKey(operatorKey); AssertDisplayShowsChars(digit1, dotChar, digit2); }
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); }
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(""); } }
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)); }
public void PressingOperatorKeyAtStartDoesNothing(CalculatorKey operatorKey) { PressTheKey(operatorKey); AssertDisplayShowsZero(); }
private void PressTheKey(CalculatorKey key) { calculator.PressKey(key); }
private static char ConvertDigitKeyToCharacter(CalculatorKey keyPressed) { return((char)(keyPressed - CalculatorKey.K0 + CharZero)); }
internal CalculatorButton(CalculatorKey key, string text) { Key = key; Text = text; }
private void HandleOperatorKey(CalculatorKey keyPressed) { currentOperator = keyPressed; StoreCurrentValue(); clearDisplayOnNextDigit = true; }
void OnCalculatorKeyPress(CalculatorKey key) { calculatorEngine.ProcessKeyPress(key); }
public static bool IsNumber(this CalculatorKey key) { return(numberKeys.Contains(key)); }
internal CalculatorButton (CalculatorKey key, string text) { Key = key; Text = text; }