Ejemplo n.º 1
0
        internal CompositeRenderingKey(KeyOperator op, string leftText, string rightText)
        {
            Operator = op;

            RenderingType expectedType;

            switch (Operator)
            {
            case KeyOperator.Equal:
            case KeyOperator.Different:
            case KeyOperator.Assignment:
            case KeyOperator.Contains:
            case KeyOperator.And:
            case KeyOperator.Or:
                expectedType = RenderingType.Any;
                break;

            case KeyOperator.Begins:
            case KeyOperator.Ends:
                expectedType = RenderingType.String;
                break;

            default:
                expectedType = RenderingType.Numeric;
                break;
            }

            this.leftSide  = RenderingKey.Parse(leftText, expectedType);
            this.rightSide = RenderingKey.Parse(rightText, expectedType);
        }
 private void ClearDisplayText()
 {
     Result = 0;
     HasError = false;
     ClearTextBeforeNumbersInput = true;
     this.DisplayResult = KeyBoardWords.Zero;
     lastOperator = KeyOperator.GetResult;
     isFirstOperator = true;
 }
        private void ShowResult(KeyOperator keyOperator)
        {
            var currentValue = Double.Parse(displayResult);

            if (keyOperator == KeyOperator.GetResult)
            {
                currentValue = lastStepValue;

                if (keyOperator != KeyOperator.None)
                {
                    keyOperator = lastOperator;
                }

                HasOperatorChanged = false;

                SendingOperating = false;
            }
            else
            {
                HasOperatorChanged = true;
                SendingOperating = true;
            }

            ClearTextBeforeNumbersInput = true;
            LastOperator = keyOperator;

            if (lastOperator == KeyOperator.None)
            {
                result = lastStepValue;
            }

            if (isFirstOperator)
            {
                result = currentValue;
                isFirstOperator = false;
                return;
            }

            if (keyOperator != KeyOperator.GetResult && HasOperatorChanged)
            {
                if (_lastKey.Type == KeyType.Number)
                {
                    if (keyOperator == KeyOperator.Plus)
                        result += lastStepValue;
                    else if (keyOperator == KeyOperator.Minus)
                        result = result - lastStepValue;
                    else if (keyOperator == KeyOperator.Multiply)
                        result = result * lastStepValue;
                    else if (keyOperator == KeyOperator.Divide)
                    {
                        if (currentValue == 0)
                        {
                            DisplayResult = AppResources.DividerCantBeZero;
                            HasError = true;
                            return;
                        }
                        else
                        {
                            result = result / lastStepValue;
                        }
                    }
                }
                else
                {
                    lastStepValue = currentValue;
                }

                DisplayCalculatingResult(result);
                return;
            }

            if (keyOperator == KeyOperator.Plus)
                result += currentValue;
            else if (keyOperator == KeyOperator.Minus)
                result = result - currentValue;
            else if (keyOperator == KeyOperator.Multiply)
                result = result * currentValue;
            else if (keyOperator == KeyOperator.Divide)
            {
                if (currentValue == 0)
                {
                    DisplayResult = AppResources.DividerCantBeZero;
                    HasError = true;
                    return;
                }
                else
                {
                    result = result / currentValue;
                }
            }

            DisplayCalculatingResult(result);
        }
Ejemplo n.º 4
0
        private static object InternalEvaluate(KeyOperator op, object left, object right)
        {
            switch (op)
            {
            case KeyOperator.Different:
                return(!(bool)InternalEvaluate(KeyOperator.Equal, left, right));

            case KeyOperator.LessOrEqual:
                return(!(bool)InternalEvaluate(KeyOperator.Greater, left, right));

            case KeyOperator.GreaterOrEqual:
                return(!(bool)InternalEvaluate(KeyOperator.Less, left, right));

            case KeyOperator.And:
            {
                var leftVal  = EvaluateBool(left);
                var rightVal = EvaluateBool(right);
                return(leftVal && rightVal);
            }

            case KeyOperator.Or:
            {
                var leftVal  = EvaluateBool(left);
                var rightVal = EvaluateBool(right);
                return(leftVal || rightVal);
            }

            case KeyOperator.Contains:
            {
                if (right == null)
                {
                    return(false);
                }

                var rightVal = right.ToString();
                if (string.IsNullOrEmpty(rightVal))
                {
                    return(false);
                }

                if (left == null)
                {
                    return(false);
                }

                if (left is IEnumerable)
                {
                    var list = (IEnumerable)left;
                    foreach (var entry in list)
                    {
                        if (entry.ToString() == rightVal)
                        {
                            return(true);
                        }
                    }
                    return(false);
                }
                else
                {
                    var leftVal = left.ToString();
                    return(leftVal.Contains(rightVal));
                }
            }

            case KeyOperator.Begins:
            {
                var leftVal  = left.ToString();
                var rightVal = right.ToString();
                return(leftVal.StartsWith(rightVal));
            }

            case KeyOperator.Ends:
            {
                var leftVal  = left.ToString();
                var rightVal = right.ToString();
                return(leftVal.EndsWith(rightVal));
            }

            case KeyOperator.Equal:
            {
                if (left == null && right == null)
                {
                    return(true);
                }
                else
                if ((left == null && right != null) || (left != null && right == null))
                {
                    return(false);
                }
                else
                {
                    return(left.ToString().Equals(right.ToString()));
                }
            }

            case KeyOperator.Less:
            {
                var leftNumber  = EvaluateNumber(left);
                var rightNumber = EvaluateNumber(right);
                return(leftNumber < rightNumber);
            }

            case KeyOperator.Greater:
            {
                var leftNumber  = EvaluateNumber(left);
                var rightNumber = EvaluateNumber(right);
                return(leftNumber > rightNumber);
            }

            case KeyOperator.Plus:
            {
                var leftNumber  = EvaluateNumber(left);
                var rightNumber = EvaluateNumber(right);
                return(leftNumber + rightNumber);
            }

            case KeyOperator.Multiply:
            {
                var leftNumber  = EvaluateNumber(left);
                var rightNumber = EvaluateNumber(right);
                return(leftNumber * rightNumber);
            }

            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 5
0
 public CustomizedKey(string keyChar, KeyType keyType = KeyType.Number, KeyOperator opt = KeyOperator.None)
 {
     this.KeyChar = keyChar;
     this.Type = keyType;
     this.Opeartor = opt;
 }