Browse Source

Calculator: got basic math working.

pull/1645/head
brianlagunas_cp 15 years ago
parent
commit
67b8175d62
  1. 104
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Implementation/Calculator.cs
  2. 22
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Utilities/CalculatorUtilities.cs

104
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Calculator/Implementation/Calculator.cs

@ -16,6 +16,11 @@ namespace Microsoft.Windows.Controls
private readonly DispatcherTimer _timer;
private Button _calculatorButton;
bool _showNewNumber = true;
decimal _previousValue;
CalculatorButtonType _lastButtonPressed;
Operation _lastOperation = Operation.None;
#endregion //Members
#region Enumerations
@ -53,6 +58,15 @@ namespace Microsoft.Windows.Controls
Zero
}
public enum Operation
{
Add,
Subtract,
Divide,
Multiply,
None
}
#endregion //Enumerations
#region Properties
@ -124,7 +138,7 @@ namespace Microsoft.Windows.Controls
protected virtual void OnValueChanged(decimal oldValue, decimal newValue)
{
// TODO: Add your property changed side-effects. Descendants can override as well.
DisplayText = newValue.ToString();
}
#endregion //Value
@ -193,7 +207,7 @@ namespace Microsoft.Windows.Controls
_calculatorButton = CalculatorUtilities.FindButtonByCalculatorButtonType(_buttonPanel, buttonType);
VisualStateManager.GoToState(_calculatorButton, "Pressed", true);
_timer.Start();
}
}
private void ProcessCalculatorButton(CalculatorButtonType buttonType)
{
@ -203,43 +217,99 @@ namespace Microsoft.Windows.Controls
ProcessOperation(buttonType);
else
ProcessMisc(buttonType);
_lastButtonPressed = buttonType;
}
private void ProcessDigit(CalculatorButtonType butonType)
private void ProcessDigit(CalculatorButtonType buttonType)
{
if (_showNewNumber)
DisplayText = CalculatorUtilities.GetCalculatorButtonContent(buttonType);
else
DisplayText += CalculatorUtilities.GetCalculatorButtonContent(buttonType);
_showNewNumber = false;
}
private void ProcessOperation(CalculatorButtonType buttonType)
{
switch (buttonType)
if (_lastButtonPressed != CalculatorButtonType.Add &&
_lastButtonPressed != CalculatorButtonType.Subtract &&
_lastButtonPressed != CalculatorButtonType.Multiply &&
_lastButtonPressed != CalculatorButtonType.Divide)
{
case CalculatorButtonType.Add:
break;
case CalculatorButtonType.Subtract:
break;
case CalculatorButtonType.Multiply:
break;
case 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;
break;
case CalculatorButtonType.Percent:
case CalculatorButtonType.Equal:
Calculate();
_lastOperation = Operation.None;
_showNewNumber = true;
break;
}
}
private void ProcessMisc(CalculatorButtonType buttonType)
private void Calculate()
{
if (_lastOperation == Operation.None)
return;
Value = CalculateValue(_lastOperation);
}
private void CalculateValue()
private decimal CalculateValue(Operation operation)
{
decimal currentValue = Decimal.Parse(DisplayText);
switch (operation)
{
case Operation.Add:
return CalculatorUtilities.Add(_previousValue, currentValue);
case Operation.Subtract:
return CalculatorUtilities.Subtract(_previousValue, currentValue);
case Operation.Multiply:
return CalculatorUtilities.Multiply(_previousValue, currentValue);
case Operation.Divide:
return CalculatorUtilities.Divide(_previousValue, currentValue);
default:
return decimal.Zero;
}
}
#endregion //Methods

22
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Utilities/CalculatorUtilities.cs

@ -29,6 +29,7 @@ namespace Microsoft.Windows.Controls.Core.Utilities
case "\b": return Calculator.CalculatorButtonType.Back;
case "\r":
case "=": return Calculator.CalculatorButtonType.Equal;
case ".": return Calculator.CalculatorButtonType.Decimal;
}
//check for the escape key
@ -170,6 +171,7 @@ namespace Microsoft.Windows.Controls.Core.Utilities
case Calculator.CalculatorButtonType.Seven:
case Calculator.CalculatorButtonType.Eight:
case Calculator.CalculatorButtonType.Nine:
case Calculator.CalculatorButtonType.Decimal:
return true;
default:
return false;
@ -190,5 +192,25 @@ namespace Microsoft.Windows.Controls.Core.Utilities
return false;
}
}
public static decimal Add(decimal firstNumber, decimal secondNumber)
{
return firstNumber + secondNumber;
}
public static decimal Subtract(decimal firstNumber, decimal secondNumber)
{
return firstNumber - secondNumber;
}
public static decimal Multiply(decimal firstNumber, decimal secondNumber)
{
return firstNumber * secondNumber;
}
public static decimal Divide(decimal firstNumber, decimal secondNumber)
{
return firstNumber / secondNumber;
}
}
}

Loading…
Cancel
Save