private void TableSplitterMoved(object sender, EventArgs e)
        {
            this._splitterChanged = true;

            var tbl = ((DynamicTableLayoutPanel)sender);

            this._columns = PreprocessorAreaData.FormatGridDimension(tbl.GetColumns());
            this._rows    = PreprocessorAreaData.FormatGridDimension(tbl.GetRows());

            UpdateSettings();

            OnSettingsChanged();
        }
        internal void Init(ConnectionTabControl parent, PreprocessorAreaData area, ConcreteTemplateNodeDefinition definition, MsSqlAuditorModel model)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            if (area == null)
            {
                throw new ArgumentNullException("area");
            }

            if (definition == null)
            {
                throw new ArgumentNullException("definition");
            }

            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            if (!area.IsConfigured)
            {
                throw new ArgumentOutOfRangeException("area");
            }

            this._area   = area;
            this._parent = parent;
            this._model  = model;

            table.StartConfiguring();

            var rows    = this._area.Rows;
            var columns = this._area.Columns;

            // _templateId = !String.IsNullOrWhiteSpace(definition.Connection.TemplateId) ? definition.Connection.TemplateId : definition.Connection.TemplateFileName;
            if (!String.IsNullOrWhiteSpace(definition.Connection.TemplateId))
            {
                this._templateId = definition.Connection.TemplateId;
            }
            else
            {
                this._templateId = string.IsNullOrEmpty(definition.Connection.TemplateDir)
                                        ? definition.Connection.TemplateFileName
                                        : Path.Combine(definition.Connection.TemplateDir, definition.Connection.TemplateFileName);
            }

            this._nodeId           = !String.IsNullOrWhiteSpace(definition.TemplateNode.Id) ? definition.TemplateNode.Id : definition.TemplateNode.Name;
            this._areaId           = !String.IsNullOrWhiteSpace(this._area.Id) ? this._area.Id : this._area.Name;
            this._reportLanguage   = this._model.Settings.ReportLanguage;
            this._splitterSettings = this._model.LayoutSettings.GetExtendedSettings <SplitterSettings>(this._templateId, String.Empty, this._reportLanguage);

            if (this._splitterSettings == null)
            {
                this._splitterSettings = new SplitterSettings
                {
                    SplitterNodeSettingList = new List <SplitterSetting>()
                };
            }

            var splitterSetting =
                this._splitterSettings.SplitterNodeSettingList.FirstOrDefault(
                    s =>
                    string.Equals(s.NodeId, this._nodeId, StringComparison.InvariantCultureIgnoreCase)
                    &&
                    string.Equals(s.AreaId, this._areaId, StringComparison.InvariantCultureIgnoreCase)
                    );

            if (splitterSetting != null)
            {
                var newRows    = PreprocessorAreaData.ParseGridDimension(splitterSetting.Rows, "splitterSetting.Rows");
                var newColumns = PreprocessorAreaData.ParseGridDimension(splitterSetting.Columns, "splitterSetting.Columns");

                if (rows.Length == newRows.Length && columns.Length == newColumns.Length)
                {
                    rows    = newRows;
                    columns = newColumns;
                }
            }

            table.SetRows(rows);
            table.SetColumns(columns);

            List <PreprocessorData> preprocessors = _area.Preprocessors;

            for (int i = 0, iMax = preprocessors.Count; i < iMax; i++)
            {
                PreprocessorData preprocessor = preprocessors[i];
                Control          control      = preprocessor.ContentFactory.CreateControl();

                if (control != null)
                {
                    if (control is WebBrowser)
                    {
                        // control.PreviewKeyDown += (s, e) =>
                        control.PreviewKeyDown += ConnectionTabArea_PreviewKeyDown;

                        this.Disposed += (s, e) =>
                        {
                            //
                            // #248 - fix memory leaks during Web rendering
                            //
                            // if (e.KeyCode == Keys.F5)
                            // {
                            //     _parent.F5RefreshView();
                            // }

                            control.PreviewKeyDown -= ConnectionTabArea_PreviewKeyDown;
                            IntPtr currentProcessHandle = (IntPtr)(-1);
                            SafeNativeMethods.EmptyWorkingSet(currentProcessHandle);
                        };
                    }

                    #region Wrap control to frame with title
                    if (preprocessor.VerticalTextAlign != null)
                    {
                        var titleFrame = new TitleFrame(
                            preprocessor.VerticalTextAlign,
                            preprocessor.TextAlign,
                            control
                            );

                        titleFrame.Title = preprocessor.Name;

                        control = titleFrame;
                    }
                    #endregion

                    table.AddControlToCell(
                        preprocessor.Column - 1,
                        preprocessor.Row - 1,
                        preprocessor.ColSpan,
                        preprocessor.RowSpan,
                        control
                        );
                }
            }

            table.StopConfiguring();

            this._splitterChanged = false;

            if (!this._handlingSplitterMoved)
            {
                this._handlingSplitterMoved = true;

                table.SplitterMoved += TableSplitterMoved;
            }
        }