From 87f73054300456431f72121205159b3b97b47405 Mon Sep 17 00:00:00 2001 From: brianlagunas_cp Date: Fri, 25 Mar 2011 17:46:11 +0000 Subject: [PATCH] Calculator: got the rest of math functions working. Now I am moving on to the Memory functions. --- .../Calculator/Implementation/Calculator.cs | 164 ++++++++++-------- .../Calculator/Themes/Generic.xaml | 9 +- .../Core/Utilities/CalculatorUtilities.cs | 28 ++- 3 files changed, 129 insertions(+), 72 deletions(-) diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Implementation/Calculator.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Implementation/Calculator.cs index 03701980..8ded816c 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Implementation/Calculator.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Implementation/Calculator.cs @@ -2,7 +2,6 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Input; -using System.Windows.Media; using System.Windows.Threading; using Microsoft.Windows.Controls.Core.Utilities; @@ -16,10 +15,9 @@ namespace Microsoft.Windows.Controls private readonly DispatcherTimer _timer; private Button _calculatorButton; - bool _showNewNumber = true; - decimal _previousValue; - CalculatorButtonType _lastButtonPressed; - Operation _lastOperation = Operation.None; + private bool _showNewNumber = true; + private decimal _previousValue; + private Operation _lastOperation = Operation.None; #endregion //Members @@ -37,19 +35,19 @@ namespace Microsoft.Windows.Controls Equal, Five, Four, - Fract, + Fraction, MAdd, MC, MR, MS, MSub, Multiply, + Negate, Nine, None, One, Percent, Seven, - Sign, Six, Sqrt, Subtract, @@ -64,7 +62,12 @@ namespace Microsoft.Windows.Controls Subtract, Divide, Multiply, - None + Percent, + Sqrt, + Fraction, + None, + Clear, + Negate } #endregion //Enumerations @@ -178,7 +181,7 @@ namespace Microsoft.Windows.Controls var buttonType = CalculatorUtilities.GetCalculatorButtonTypeFromText(e.Text); if (buttonType != CalculatorButtonType.None) { - AnimateCalculatorButtonClick(buttonType); + SimulateCalculatorButtonClick(buttonType); ProcessCalculatorButton(buttonType); } } @@ -202,23 +205,12 @@ namespace Microsoft.Windows.Controls #region Methods - private void AnimateCalculatorButtonClick(CalculatorButtonType buttonType) - { - _calculatorButton = CalculatorUtilities.FindButtonByCalculatorButtonType(_buttonPanel, buttonType); - VisualStateManager.GoToState(_calculatorButton, "Pressed", true); - _timer.Start(); - } - private void ProcessCalculatorButton(CalculatorButtonType buttonType) { if (CalculatorUtilities.IsDigit(buttonType)) ProcessDigit(buttonType); - else if (CalculatorUtilities.IsOperation(buttonType)) - ProcessOperation(buttonType); else - ProcessMisc(buttonType); - - _lastButtonPressed = buttonType; + ProcessOperation(buttonType); } private void ProcessDigit(CalculatorButtonType buttonType) @@ -232,57 +224,51 @@ namespace Microsoft.Windows.Controls } private void ProcessOperation(CalculatorButtonType buttonType) - { - if (_lastButtonPressed != CalculatorButtonType.Add && - _lastButtonPressed != CalculatorButtonType.Subtract && - _lastButtonPressed != CalculatorButtonType.Multiply && - _lastButtonPressed != CalculatorButtonType.Divide) - { - - Operation operation = Operation.None; - - switch (buttonType) - { - case CalculatorButtonType.Add: - operation = Operation.Add; - break; - case CalculatorButtonType.Subtract: - operation = Operation.Subtract; - break; - case CalculatorButtonType.Multiply: - operation = Operation.Multiply; - break; - case CalculatorButtonType.Divide: - operation = Operation.Divide; - break; - default: - operation = Operation.None; - break; - } - - Calculate(); - - _previousValue = Decimal.Parse(DisplayText); - - _showNewNumber = true; - _lastOperation = operation; - } - } - - private void ProcessMisc(CalculatorButtonType buttonType) { switch (buttonType) { - case CalculatorButtonType.Clear: - Value = decimal.Zero; - _showNewNumber = true; + case CalculatorButtonType.Add: + Calculate(Operation.Add); + break; + case CalculatorButtonType.Subtract: + Calculate(Operation.Subtract); + break; + case CalculatorButtonType.Multiply: + Calculate(Operation.Multiply); + break; + case CalculatorButtonType.Divide: + Calculate(Operation.Divide); + break; + case CalculatorButtonType.Percent: + Calculate(Operation.Percent); + break; + case CalculatorButtonType.Sqrt: + Calculate(Operation.Sqrt, Operation.None); + break; + case CalculatorButtonType.Fraction: + Calculate(Operation.Fraction, Operation.None); + break; + case CalculatorButtonType.Negate: + Calculate(Operation.Negate, Operation.None); break; case CalculatorButtonType.Equal: - Calculate(); + Calculate(Operation.None); + break; + case CalculatorButtonType.Clear: + Calculate(Operation.Clear, Operation.None); + DisplayText = Value.ToString(); + break; + case CalculatorButtonType.Cancel: + DisplayText = _previousValue.ToString(); _lastOperation = Operation.None; _showNewNumber = true; + return; + default: break; } + + _previousValue = Decimal.Parse(DisplayText); + _showNewNumber = true; } private void Calculate() @@ -293,23 +279,65 @@ namespace Microsoft.Windows.Controls Value = CalculateValue(_lastOperation); } + private void Calculate(Operation newOperation) + { + if (!_showNewNumber) + Calculate(); + + _lastOperation = newOperation; + } + + private void Calculate(Operation currentOperation, Operation newOperation) + { + _lastOperation = currentOperation; + Calculate(); + _lastOperation = newOperation; + } + private decimal CalculateValue(Operation operation) { + decimal newValue = decimal.Zero; decimal currentValue = Decimal.Parse(DisplayText); switch (operation) { case Operation.Add: - return CalculatorUtilities.Add(_previousValue, currentValue); + newValue = CalculatorUtilities.Add(_previousValue, currentValue); + break; case Operation.Subtract: - return CalculatorUtilities.Subtract(_previousValue, currentValue); + newValue = CalculatorUtilities.Subtract(_previousValue, currentValue); + break; case Operation.Multiply: - return CalculatorUtilities.Multiply(_previousValue, currentValue); + newValue = CalculatorUtilities.Multiply(_previousValue, currentValue); + break; case Operation.Divide: - return CalculatorUtilities.Divide(_previousValue, currentValue); + newValue = CalculatorUtilities.Divide(_previousValue, currentValue); + break; + case Operation.Percent: + newValue = CalculatorUtilities.Percent(_previousValue, currentValue); + break; + case Operation.Sqrt: + newValue = CalculatorUtilities.SquareRoot(currentValue); + break; + case Operation.Fraction: + newValue = CalculatorUtilities.Fraction(currentValue); + break; + case Operation.Negate: + newValue = CalculatorUtilities.Negate(currentValue); + break; default: - return decimal.Zero; + newValue = decimal.Zero; + break; } + + return newValue; + } + + private void SimulateCalculatorButtonClick(CalculatorButtonType buttonType) + { + _calculatorButton = CalculatorUtilities.FindButtonByCalculatorButtonType(_buttonPanel, buttonType); + VisualStateManager.GoToState(_calculatorButton, "Pressed", true); + _timer.Start(); } #endregion //Methods diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Themes/Generic.xaml index b07215ec..89b4969c 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Themes/Generic.xaml +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Themes/Generic.xaml @@ -339,7 +339,7 @@ Style="{StaticResource CalculatorOperatorButtonStyle}"/>