internal void ApplyInput(ICalculatorInput calculatorinput) { if (!ValidateInput(calculatorinput)) { return; } var input = InputHistory.LastOrDefault(); if (input is CalculatorOperator && calculatorinput is CalculatorOperator) { InputHistory.RemoveAt(InputHistory.Count - 1); InputHistory.Add(calculatorinput); FireChange("Input"); return; } if ((input == null || input is CalculatorOperator) && calculatorinput.Value == ".") { InputHistory.Add(InputButtons.FirstOrDefault(b => b.Value == "0")); InputHistory.Add(calculatorinput); } else { InputHistory.Add(calculatorinput); } CurrentInput = Input.Replace(" ", "").Split(OperatorButtons.Select(b => b.Value).ToArray(), StringSplitOptions.RemoveEmptyEntries).Where(s => !string.IsNullOrEmpty(s)).LastOrDefault(); FireChange("Input"); if (calculatorinput is CalculatorOperator) { CurrentOperator = calculatorinput as CalculatorOperator; Calculate(); } }
internal bool ValidateInput(ICalculatorInput calculatorinput) { if (calculatorinput == null) { return(false); } var input = InputHistory.LastOrDefault(); if (input == null && double.Parse(Result) == 0) { return(calculatorinput is CalculatorValue || calculatorinput == null); } if (input is CalculatorOperator && ((CalculatorOperator)input).OperatorType == OperatorTypes.Divide) { return(!(calculatorinput.Value == "0")); } var last = Input.Replace(" ", "").Split(OperatorButtons.Select(o => o.Value).ToArray(), StringSplitOptions.RemoveEmptyEntries).LastOrDefault(); if ((last == "0." || last == "0") && (calculatorinput is CalculatorOperator && ((CalculatorOperator)calculatorinput).OperatorType == OperatorTypes.Equals)) { return(false); } if ((calculatorinput.Value == "." || calculatorinput.Value == "0.") && last != null && last.Contains(".") && !(input is CalculatorOperator)) { return(false); } return(true); }
public CalculatorDistributor ( ) { this.outputting = new ConsoleOut(); this.inputting = new ConsoleIn(); }
public CalculatorDistributor (ICalculatorOutput outputDirection) { this.outputting = outputDirection; this.inputting = new ConsoleIn(); }
public CalculatorDistributor (ICalculatorOutput outputDirection, ICalculatorInput inputDirection) { this.outputting = outputDirection; this.inputting = inputDirection; }
public void Input(ICalculatorInput input) { input.ApplyTo(_register); }