/// <summary>
        /// 
        /// </summary>
        void InitializeElements()
        {
            InitializeComponent();

            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.UserPaint, true);

            // Establishing a brand new state.
            _stateId = Guid.NewGuid();

            _drawingSpace = new RectangleF(0, 0, 0, 0);
            _drawingSpaceDisplayLimit = _drawingSpace;

            _actualSpaceGrid.Visible = false;
            _actualSpaceGrid.Pen = new Pen(Color.Gray);

            _yAxisLabelsPosition = YAxisLabelPosition.Right;

            _actualDrawingSpaceAreaMarginLeft = 15 + _additionalDrawingSpaceAreaMarginLeft;
            _actualDrawingSpaceAreaMarginTop = 60;
            _actualDrawingSpaceAreaMarginRight = 45 + _additionalDrawingSpaceAreaMarginRight;
            _actualDrawingSpaceAreaMarginBottom = 20;

            _resources = new ComponentResourceManager(typeof(ChartPane));

            _seriesTypeDynamicContextMenu = new ContextMenuStrip();

            _chartContextMenu = new ContextMenuStrip();
            _chartContextMenu.Opening += new CancelEventHandler(_chartContextMenu_Opening);

            ToolStripMenuItem item;

            item = new ToolStripMenuItem("Zoom In", ((Image)(_resources.GetObject("imageZoomIn"))), new EventHandler(ZoomInChartContextMenuItem_Click));
            _chartContextMenu.Items.Add(item);
            item = new ToolStripMenuItem("Zoom Out", ((Image)(_resources.GetObject("imageZoomOut"))), new EventHandler(ZoomOutChartContextMenuItem_Click));
            _chartContextMenu.Items.Add(item);
            _chartContextMenu.Items.Add(new ToolStripSeparator());

            item = new ToolStripMenuItem("Fit To Screen", ((Image)(_resources.GetObject("imageLayoutCenter"))), new EventHandler(FitToScreenChartContextMenuItem_Click));
            _chartContextMenu.Items.Add(item);
            item = new ToolStripMenuItem("Fit Horizontal", ((Image)(_resources.GetObject("imageLayoutHorizontal"))), new EventHandler(FitHorizontalChartContextMenuItem_Click));
            _chartContextMenu.Items.Add(item);
            item = new ToolStripMenuItem("Fit Vertical", ((Image)(_resources.GetObject("imageLayoutVertical"))), new EventHandler(FitVerticalChartContextMenuItem_Click));
            _chartContextMenu.Items.Add(item);
            _chartContextMenu.Items.Add(new ToolStripSeparator());

            ToolStripMenuItem selectionContextMenuItem = new ToolStripMenuItem("Selection");
            foreach(string name in Enum.GetNames(typeof(SelectionModeEnum)))
            {
                ToolStripItem subItem = selectionContextMenuItem.DropDownItems.Add(name, null, new EventHandler(SelectionChartContextMenuItem_Click));
                subItem.Tag = name;
            }
            _chartContextMenu.Items.Add(selectionContextMenuItem);
            _chartContextMenu.Items.Add(new ToolStripSeparator());

            ToolStripMenuItem scrollContextMenuItem = new ToolStripMenuItem("Scroll");
            foreach(string name in Enum.GetNames(typeof(ScrollModeEnum)))
            {
                ToolStripItem subItem = scrollContextMenuItem.DropDownItems.Add(name, null, new EventHandler(ScrollChartContextMenuItem_Click));
                subItem.Tag = name;
            }
            _chartContextMenu.Items.Add(scrollContextMenuItem);
            _chartContextMenu.Items.Add(new ToolStripSeparator());

            ToolStripMenuItem appearanceContextMenuItem = new ToolStripMenuItem("Appearance");
            foreach(string name in Enum.GetNames(typeof(AppearanceSchemeEnum)))
            {
                ToolStripItem subItem = appearanceContextMenuItem.DropDownItems.Add(GeneralHelper.SeparateCapitalLetters(name), null, new EventHandler(AppearanceChartContextMenuItem_Click));
                subItem.Tag = name;
            }

            _chartContextMenu.Items.Add(appearanceContextMenuItem);
            _chartContextMenu.Items.Add(new ToolStripSeparator());

            _autoScrollToEndContextMenuItem = new ToolStripMenuItem("Auto Scroll to End", ((Image)(_resources.GetObject("imageScrollToEnd"))), new EventHandler(AutoScrollToEndChartContextMenuItem_Click));
            _autoScrollToEndContextMenuItem.CheckOnClick = true;
            _autoScrollToEndContextMenuItem.Checked = this.AutoScrollToEnd;
            _chartContextMenu.Items.Add(_autoScrollToEndContextMenuItem);

            _crossHairContextMenuItem = new ToolStripMenuItem("Crosshair", ((Image)(_resources.GetObject("imageTarget"))), new EventHandler(CrosshairChartContextMenuItem_Click));
            _crossHairContextMenuItem.CheckOnClick = true;
            _crossHairContextMenuItem.Checked = false;
            _chartContextMenu.Items.Add(_crossHairContextMenuItem);

            _labelsContextMenuItem = new ToolStripMenuItem("Labels", ((Image)(_resources.GetObject("imageText"))), new EventHandler(LabelsChartContextMenuItem_Click));
            _labelsContextMenuItem.CheckOnClick = true;
            _labelsContextMenuItem.Checked = true;
            _chartContextMenu.Items.Add(_labelsContextMenuItem);

            _limitViewContextMenuItem = new ToolStripMenuItem("Limit View", ((Image)(_resources.GetObject("imageElementSelection"))), new EventHandler(LimitViewChartContextMenuItem_Click));
            _limitViewContextMenuItem.CheckOnClick = true;
            _limitViewContextMenuItem.Checked = true;
            _chartContextMenu.Items.Add(_limitViewContextMenuItem);

            _chartContextMenu.Items.Add(new ToolStripSeparator());

            _seriesPropertiesContextMenuItem = new ToolStripMenuItem("Series Properties", null);
            _chartContextMenu.Items.Add(_seriesPropertiesContextMenuItem);

            _chartContextMenu.Items.Add(new ToolStripSeparator());

            _selectedObjectsContextMenuItem = new ToolStripMenuItem("Selected Object(s) Properties");
            _selectedObjectsContextMenuItem.DropDownItemClicked += new ToolStripItemClickedEventHandler(_selectedObjectsContextMenuItem_DropDownItemClicked);
            _chartContextMenu.Items.Add(_selectedObjectsContextMenuItem);

            _customObjectsManager = new CustomObjectsManager();
            _customObjectsManager.Initialize(this);

            _customObjectDrawingImage = ((Image)(_resources.GetObject("imageBrush")));
        }
        public void RestoreState(SerializationInfoEx info, bool restoreCustomObjects)
        {
            this.Name = info.GetString("Name");
            this.Height = info.GetInt32("Height");

            _stateId = info.GetValue<Guid>("_stateId");
            _titleFont = info.GetValue<Font>("_titleFont");

            _titleFontBrush = info.GetValue<Brush>("_titleFontBrush");
            _fill = info.GetValue<Brush>("_fill");
            _axisLabelsFont = info.GetValue<Font>("_axisLabelsFont");
            _xAxisLabelsFontBrush = info.GetValue<Brush>("_xAxisLabelsFontBrush");
            _yAxisLabelsPosition = info.GetValue<YAxisLabelPosition>("_yAxisLabelsPosition");
            _yAxisLabelsFontBrush = info.GetValue<Brush>("_yAxisLabelsFontBrush");

            _xAxisLabelsFormat = info.GetString("_xAxisLabelsFormat");
            _yAxisLabelsFormat = info.GetString("_yAxisLabelsFormat");

            _labelsFont = info.GetValue<Font>("_labelsFont");
            _labelsFontBrush = info.GetValue<Brush>("_labelsFontBrush");
            _labelsFill = info.GetValue<Brush>("_labelsFill");

            _labelsTopMargin = info.GetSingle("_labelsTopMargin");
            _labelsMargin = info.GetSingle("_labelsMargin");

            _showSeriesLabels = info.GetBoolean("_showSeriesLabels");
            _showClippingRectangle = info.GetBoolean("_showClippingRectangle");
            _unitUnificationOptimizationEnabled = info.GetBoolean("_unitUnificationOptimizationEnabled");

            _smoothingMode = info.GetValue<SmoothingMode>("_smoothingMode");
            _defaultAbsoluteSelectionMargin = info.GetSingle("_defaultAbsoluteSelectionMargin");

            _scrollMode = info.GetValue<ScrollModeEnum>("_scrollMode");
            _rightMouseButtonSelectionMode = info.GetValue<SelectionModeEnum>("_rightMouseButtonSelectionMode");

            _selectionPen = info.GetValue<Pen>("_selectionPen");
            _selectionFill = info.GetValue<Brush>("_selectionFill");

            _additionalDrawingSpaceAreaMarginLeft = info.GetInt32("_additionalDrawingSpaceAreaMarginLeft");
            _additionalDrawingSpaceAreaMarginRight = info.GetInt32("_additionalDrawingSpaceAreaMarginRight");

            _actualDrawingSpaceAreaMarginLeft = info.GetInt32("_actualDrawingSpaceAreaMarginLeft");
            _actualDrawingSpaceAreaMarginTop = info.GetInt32("_actualDrawingSpaceAreaMarginTop");
            _actualDrawingSpaceAreaMarginRight = info.GetInt32("_actualDrawingSpaceAreaMarginRight");
            _actualDrawingSpaceAreaMarginBottom = info.GetInt32("_actualDrawingSpaceAreaMarginBottom");

            _actualDrawingSpaceAreaBorderPen = info.GetValue<Pen>("_actualDrawingSpaceAreaBorderPen");
            _actualDrawingSpaceAreaFill = info.GetValue<Brush>("_actualDrawingSpaceAreaFill");
            _limitedView = info.GetBoolean("_limitedView");

            _seriesItemWidth = info.GetSingle("_seriesItemWidth");
            _seriesItemMargin = info.GetSingle("_seriesItemMargin");

            if (restoreCustomObjects && info.GetBoolean("customObjectsSaved"))
            {// Restore custom objects.
                _customObjectsManager.RestoreState(info);
            }
            else
            {// New clear custom objects.
                _customObjectsManager.Clear();
            }

            _actualSpaceGrid = info.GetValue<ChartGrid>("_actualSpaceGrid");
            _drawingSpaceGrid = info.GetValue<ChartGrid>("_drawingSpaceGrid");
            _chartName = info.GetString("_chartName");
            _appearanceScheme = info.GetValue<AppearanceSchemeEnum>("_appearanceScheme");

            _autoScrollToEnd = info.GetBoolean("_autoScrollToEnd");

            if (info.ContainsValue("_maximumXZoom"))
            {
                _maximumXZoom = info.GetSingle("_maximumXZoom");
            }
            else
            {
                _maximumXZoom = null;
            }

            _xAxisLabelSpacing = info.GetSingle("_xAxisLabelSpacing");

            if (AppearanceSchemeChangedEvent != null)
            {
                AppearanceSchemeChangedEvent(this, _appearanceScheme);
            }
        }