283 lines
8.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|