public FractalCalculatorViewPresenter(IFractal fractal,
                                              IDimensionCalculatorFactory dimensionCalculatorFactory,
                                              IFractalCalculatorView fractalCalculatorView,
                                              IControlPanel controlPanel)
        {
            if (fractal == null)
            {
                throw new ArgumentNullException("fractal");
            }
            if (dimensionCalculatorFactory == null)
            {
                throw new ArgumentNullException("dimensionCalculatorFactory");
            }
            if (fractalCalculatorView == null)
            {
                throw new ArgumentNullException("fractalCalculatorView");
            }
            if (controlPanel == null)
            {
                throw new ArgumentNullException("controlPanel");
            }
            _fractal = fractal;
            _dimensionCalculatorFactory = dimensionCalculatorFactory;
            _fractalCalculatorView      = fractalCalculatorView;
            _controlPanel = controlPanel;

            _fractalCalculatorView.ClearPoints        += new EventHandler(_fractalCalculatorView_ClearPoints);
            _fractalCalculatorView.CalculatePoints    += new EventHandler(_fractalCalculatorView_CalculatePoints);
            _fractalCalculatorView.ResetControlPanel  += new EventHandler(_fractalCalculatorView_ResetControlPanel);
            _fractalCalculatorView.CalculateDimension += new EventHandler(_fractalCalculatorView_CalculateDimension);
            _fractalCalculatorView.ValidatingUI       += new Events.ValidatingEventHandler(_fractalCalculatorView_Validating);

            InitValidators();
        }
        private void _fractalCalculatorView_Validating(object sender, Events.ValidatingEventArgs e)
        {
            IFractalCalculatorView fractalCalculatorView = sender as IFractalCalculatorView;

            if (fractalCalculatorView == null)
            {
                throw new ApplicationException("fractalCalculatorView == null");
            }
            if (_fractalCalculatorView != fractalCalculatorView)
            {
                throw new ApplicationException("_fractalCalculatorView != fractalCalculatorView");
            }
            _viewValidator.Validate(_fractalCalculatorView);
            if (!_viewValidator.IsValid)
            {
                e.Cancel            = true;
                e.ValidationMessage = _viewValidator.ErrorMessage;
                return;
            }
        }