Files
WPFToolkit/Src/Xceed.Wpf.Toolkit/Core/Utilities/CalculatorUtilities.cs
2024-02-23 07:03:56 -05:00

283 lines
8.7 KiB
C#

/*************************************************************************************
Extended WPF Toolkit
Copyright (C) 2007-2013 Xceed Software Inc.
This program is provided to you under the terms of the Microsoft Public
License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
For more features, controls, and fast professional support,
pick up the Plus Edition at http://xceed.com/wpf_toolkit
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
***********************************************************************************/
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Xceed.Wpf.Toolkit.Core.Utilities
{
static class CalculatorUtilities
{
public static Calculator.CalculatorButtonType GetCalculatorButtonTypeFromText( string text )
{
switch( text )
{
case "0":
return Calculator.CalculatorButtonType.Zero;
case "1":
return Calculator.CalculatorButtonType.One;
case "2":
return Calculator.CalculatorButtonType.Two;
case "3":
return Calculator.CalculatorButtonType.Three;
case "4":
return Calculator.CalculatorButtonType.Four;
case "5":
return Calculator.CalculatorButtonType.Five;
case "6":
return Calculator.CalculatorButtonType.Six;
case "7":
return Calculator.CalculatorButtonType.Seven;
case "8":
return Calculator.CalculatorButtonType.Eight;
case "9":
return Calculator.CalculatorButtonType.Nine;
case "+":
return Calculator.CalculatorButtonType.Add;
case "-":
return Calculator.CalculatorButtonType.Subtract;
case "*":
return Calculator.CalculatorButtonType.Multiply;
case "/":
return Calculator.CalculatorButtonType.Divide;
case "%":
return Calculator.CalculatorButtonType.Percent;
case "\b":
return Calculator.CalculatorButtonType.Back;
case "\r":
case "=":
return Calculator.CalculatorButtonType.Equal;
}
//the check for the decimal is not in the switch statement. To help localize we check against the current culture's decimal seperator
if( text == CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator )
return Calculator.CalculatorButtonType.Decimal;
//check for the escape key
if( text == ( ( char )27 ).ToString() )
return Calculator.CalculatorButtonType.Clear;
return Calculator.CalculatorButtonType.None;
}
public static Button FindButtonByCalculatorButtonType( DependencyObject parent, Calculator.CalculatorButtonType type )
{
for( int i = 0; i < VisualTreeHelper.GetChildrenCount( parent ); i++ )
{
var child = VisualTreeHelper.GetChild( parent, i );
if( child == null )
continue;
object buttonType = child.GetValue( Button.CommandParameterProperty );
if( buttonType != null && ( Calculator.CalculatorButtonType )buttonType == type )
{
return child as Button;
}
else
{
var result = FindButtonByCalculatorButtonType( child, type );
if( result != null )
return result;
}
}
return null;
}
public static string GetCalculatorButtonContent( Calculator.CalculatorButtonType type )
{
string content = string.Empty;
switch( type )
{
case Calculator.CalculatorButtonType.Add:
content = "+";
break;
case Calculator.CalculatorButtonType.Back:
content = "Back";
break;
case Calculator.CalculatorButtonType.Cancel:
content = "CE";
break;
case Calculator.CalculatorButtonType.Clear:
content = "C";
break;
case Calculator.CalculatorButtonType.Decimal:
content = CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
break;
case Calculator.CalculatorButtonType.Divide:
content = "/";
break;
case Calculator.CalculatorButtonType.Eight:
content = "8";
break;
case Calculator.CalculatorButtonType.Equal:
content = "=";
break;
case Calculator.CalculatorButtonType.Five:
content = "5";
break;
case Calculator.CalculatorButtonType.Four:
content = "4";
break;
case Calculator.CalculatorButtonType.Fraction:
content = "1/x";
break;
case Calculator.CalculatorButtonType.MAdd:
content = "M+";
break;
case Calculator.CalculatorButtonType.MC:
content = "MC";
break;
case Calculator.CalculatorButtonType.MR:
content = "MR";
break;
case Calculator.CalculatorButtonType.MS:
content = "MS";
break;
case Calculator.CalculatorButtonType.MSub:
content = "M-";
break;
case Calculator.CalculatorButtonType.Multiply:
content = "*";
break;
case Calculator.CalculatorButtonType.Nine:
content = "9";
break;
case Calculator.CalculatorButtonType.None:
break;
case Calculator.CalculatorButtonType.One:
content = "1";
break;
case Calculator.CalculatorButtonType.Percent:
content = "%";
break;
case Calculator.CalculatorButtonType.Seven:
content = "7";
break;
case Calculator.CalculatorButtonType.Negate:
content = "+/-";
break;
case Calculator.CalculatorButtonType.Six:
content = "6";
break;
case Calculator.CalculatorButtonType.Sqrt:
content = "Sqrt";
break;
case Calculator.CalculatorButtonType.Subtract:
content = "-";
break;
case Calculator.CalculatorButtonType.Three:
content = "3";
break;
case Calculator.CalculatorButtonType.Two:
content = "2";
break;
case Calculator.CalculatorButtonType.Zero:
content = "0";
break;
}
return content;
}
public static bool IsDigit( Calculator.CalculatorButtonType buttonType )
{
switch( buttonType )
{
case Calculator.CalculatorButtonType.Zero:
case Calculator.CalculatorButtonType.One:
case Calculator.CalculatorButtonType.Two:
case Calculator.CalculatorButtonType.Three:
case Calculator.CalculatorButtonType.Four:
case Calculator.CalculatorButtonType.Five:
case Calculator.CalculatorButtonType.Six:
case Calculator.CalculatorButtonType.Seven:
case Calculator.CalculatorButtonType.Eight:
case Calculator.CalculatorButtonType.Nine:
case Calculator.CalculatorButtonType.Decimal:
return true;
default:
return false;
}
}
public static bool IsMemory( Calculator.CalculatorButtonType buttonType )
{
switch( buttonType )
{
case Calculator.CalculatorButtonType.MAdd:
case Calculator.CalculatorButtonType.MC:
case Calculator.CalculatorButtonType.MR:
case Calculator.CalculatorButtonType.MS:
case Calculator.CalculatorButtonType.MSub:
return true;
default:
return false;
}
}
public static decimal ParseDecimal( string text )
{
decimal result;
var success = Decimal.TryParse( text, NumberStyles.Any, CultureInfo.CurrentCulture, out result );
return success ? result : decimal.Zero;
}
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;
}
public static decimal Percent( decimal firstNumber, decimal secondNumber )
{
return firstNumber * secondNumber / 100M;
}
public static decimal SquareRoot( decimal operand )
{
return Convert.ToDecimal( Math.Sqrt( Convert.ToDouble( operand ) ) );
}
public static decimal Fraction( decimal operand )
{
return 1 / operand;
}
public static decimal Negate( decimal operand )
{
return operand * -1M;
}
}
}