Exemple #1
0
 public CalculatorViewModel()
 {
     _storedResult        = _currentNumber = 0;
     _currentOp           = CurrentOperationEnum.NONE;
     _clearOnNextNumber   = true;
     _lastOperationEquals = false;
 }
Exemple #2
0
        public void ProcessString(string input)
        {
            // first check for numbers
            int curNumber;

            if (int.TryParse(input, out curNumber))
            {
                if (_clearOnNextNumber)
                {
                    _currentNumber     = 0;
                    _clearOnNextNumber = false;
                }
                _currentNumber = _currentNumber * 10 + curNumber;
            }
            else if (input == "*")
            {
                _storedResult  = _currentNumber;
                _currentNumber = 0;
                _currentOp     = CurrentOperationEnum.MULTIPLY;
            }
            else if (input == "-")
            {
                _storedResult  = _currentNumber;
                _currentNumber = 0;
                _currentOp     = CurrentOperationEnum.SUBTRACT;
            }
            else if (input == "+")
            {
                _storedResult  = _currentNumber + _storedResult;
                _currentNumber = 0;
                _currentOp     = CurrentOperationEnum.ADD;
            }
            else if (input == "=" && _storedResult.HasValue)
            {
                double oldCurrent = _currentNumber;
                switch (_currentOp)
                {
                case CurrentOperationEnum.ADD:
                    _currentNumber = _currentNumber + _storedResult.Value;
                    break;

                case CurrentOperationEnum.MULTIPLY:
                    _currentNumber = _currentNumber * _storedResult.Value;
                    break;

                case CurrentOperationEnum.SUBTRACT:
                    _currentNumber = _lastOperationEquals ? _currentNumber - _storedResult.Value : _storedResult.Value - _currentNumber;
                    break;
                }
                if (!_lastOperationEquals)
                {
                    _storedResult = oldCurrent;
                }
                _clearOnNextNumber = true;
            }
            else if (input == "C")
            {
                _storedResult = _currentNumber = 0;
                _currentOp    = CurrentOperationEnum.NONE;
            }

            // record whether the last operation was an equals
            _lastOperationEquals = (input == "=");

            // Ensure that the 2 properties are updated in the UI
            RaisePropertyChanged("Output");
            RaisePropertyChanged("OutputCharArray");
        }