private void ChartAreaValuesView1_AddClicked(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(_expressionTextProvider.Text))
            {
                _errorHandler.DisplayError(Strings.Expression_should_not_be_empty_,
                                           Strings.Warning_);
                return;
            }

            if (!AreChartValuesValid)
            {
                _errorHandler.DisplayError(
                    $"{Strings.Min_value_needs_to_be_less_than_Max_value}{Environment.NewLine}{Strings.CheckChartAreaValues}: x0, xN, y0, yN.",
                    Strings.Warning_);
                return;
            }
            try
            {
                customFunctionsEditor.ClearHighlightedErrors();
                CurrentChart.AddFunction(_expressionsEvaluator.Evaluate(_expressionTextProvider.Text,
                                                                        customFunctionsEditor.Text,
                                                                        _calculationsMode));
            }
            catch (Exception ex)
            {
                _exceptionsHandler.HandleException(ex);
            }
        }
        public void HandleException(Exception ex)
        {
            HandleCustomFunctionsErrors(ex as CompilationException);

            var message = ex.Message + Environment.NewLine + (ex.InnerException?.Message ?? "");

            _errorHandler.DisplayError(message, Strings.Error);

            if (!ex.IsInternal())
            {
                _errorHandler.LogError(message, ErrorType.General, ex);
            }
        }
        private void _view_CalculateClicked(object sender, EventArgs e)
        {
            if (_expressionTextProvider.Text != "")
            {
                try
                {
                    _customFunctionsEditor.ClearHighlightedErrors();
                    var function = _expressionsEvaluator.Evaluate(_expressionTextProvider.Text,
                                                                  _customFunctionsEditor.Text, _calculationsMode);

                    var x = _view.X;
                    var y = _view.Y;
                    var z = new Complex(x, y);

                    dynamic result = function.EvaluateDynamic(x, y);

                    var resultStr = ScriptingExtensions.ToMathString(result);

                    _view.AddResult(_expressionTextProvider.Text,
                                    _calculationsMode == CalculationsMode.Complex
                            ? z.ToMathString()
                            : (_calculationsMode == CalculationsMode.Fxy
                                ? $"{x.ToMathString()}, {y.ToMathString()}"
                                : x.ToMathString()), resultStr);
                }
                catch (Exception ex)
                {
                    _exceptionsHandler.HandleException(ex);
                }
            }
            else
            {
                _errorHandler.DisplayError(Strings.Expression_should_not_be_empty_,
                                           Strings.Warning_);
            }
        }
        private void _view_ComputeClicked(object sender, EventArgs e)
        {
            if (_calculationsMode == CalculationsMode.Real)
            {
                try
                {
                    customFunctionsEditor.ClearHighlightedErrors();
                    var function = expressionsEvaluator.Evaluate(_expressionTextProvider.Text,
                                                                 customFunctionsEditor.Text, _calculationsMode);

                    Func <double, double> fx = x => function.Evaluate(x);

                    var result = double.NaN;
                    var eps    = _view.Epsilon;

                    if (_view.SelectedOperation == Strings.Derivative ||
                        _view.SelectedOperation == Strings.Function_root)
                    {
                        if (double.IsNaN(eps))
                        {
                            _errorHandler.DisplayError(Strings.GivenΕIsNotValid, Strings.Error);
                            return;
                        }
                        if (!(eps > 0.0) || !(eps <= 1))
                        {
                            _errorHandler.DisplayError(
                                Strings.GivenΕIsNotValidΕShouldBeSmallPositiveNumber, Strings.Error);
                            return;
                        }
                    }

                    var parametersStr = "";


                    if (_view.SelectedOperation == Strings.Integral)
                    {
                        result =
                            ((dynamic)
                             Convert.ChangeType(
                                 NumericalMethodsInfo.Instance._methods[_view.SelectedOperation][_view.SelectedMethod
                                 ],
                                 _integrationType))
                                (fx, _view.A, _view.B, _view.N);
                        parametersStr = $"a={_view.A.ToMathString()}; b={_view.B.ToMathString()}; N={_view.N}";
                    }
                    else if (_view.SelectedOperation == Strings.Derivative)
                    {
                        result =
                            ((dynamic)
                             Convert.ChangeType(
                                 NumericalMethodsInfo.Instance._methods[_view.SelectedOperation][_view.SelectedMethod
                                 ],
                                 _derivationType))
                                (fx, _view.X, _view.Order, eps);
                        parametersStr = $"n={_view.Order}; x={_view.X.ToMathString()}; ε={eps.ToMathString()}";
                    }
                    else if (_view.SelectedOperation == Strings.Function_root)
                    {
                        result =
                            ((dynamic)
                             Convert.ChangeType(
                                 NumericalMethodsInfo.Instance._methods[_view.SelectedOperation][_view.SelectedMethod
                                 ],
                                 _functionRootType))
                                (fx, _view.A, _view.B, eps, _view.N);
                        parametersStr =
                            $"a={_view.A.ToMathString()}; b={_view.B.ToMathString()}; ε={eps.ToMathString()}; N={_view.N}";
                    }

                    _view.AddResult(_expressionTextProvider.Text,
                                    _view.SelectedOperation,
                                    _view.SelectedMethod,
                                    parametersStr,
                                    result.ToMathString());
                }
                catch (Exception ex)
                {
                    _exceptionsHandler.HandleException(ex);
                }
            }
            else
            {
                _errorHandler.DisplayError(
                    Strings
                    .Only_Real_mode_is_supported_in_Numerical_calculations_right_now__more_to_come_in_next_versions_ +
                    Environment.NewLine +
                    Strings.Check__Real___f_x___mode,
                    Strings.Warning_);
            }
        }