File: Common\General\CommonElements.cs
Project: ndp\fx\src\DataVisualization\System.Web.DataVisualization.csproj (System.Web.DataVisualization)
//-------------------------------------------------------------
// <copyright company=’Microsoft Corporation’>
//   Copyright © Microsoft Corporation. All Rights Reserved.
// </copyright>
//-------------------------------------------------------------
// @owner=alexgor, deliant
//=================================================================
//  File:		CommonElements.cs
//
//  Namespace:	DataVisualization.Charting
//
//	Classes:	CommonElements
//
//  Purpose:	CommonElements class provides references to common 
//              chart classes like DataManager, ChartTypeRegistry, 
//              ImageLoader and others. It is passed to different 
//              chart elements to simplify access to those common 
//              classes.
//
//	Reviewed:	GS - August 2, 2002
//				AG - August 8, 2002
//              AG - Microsoft 15, 2007
//
//===================================================================
 
#region Used namespaces
 
using System;
using System.ComponentModel.Design;
using System.Drawing.Drawing2D;
using System.Drawing;
using System.Globalization;
 
#if Microsoft_CONTROL
	using System.Windows.Forms.DataVisualization.Charting.Data;
	using System.Windows.Forms.DataVisualization.Charting.ChartTypes;
	using System.Windows.Forms.DataVisualization.Charting.Utilities;
	using System.Windows.Forms.DataVisualization.Charting.Borders3D;
	using System.Windows.Forms.DataVisualization.Charting;
	using System.Windows.Forms.DataVisualization.Charting.Formulas;
#else
	using System.Web.UI.DataVisualization.Charting.ChartTypes;
	using System.Web.UI.DataVisualization.Charting.Data;
	using System.Web.UI.DataVisualization.Charting.Utilities;
	using System.Web.UI.DataVisualization.Charting.Borders3D;
	using System.Web.UI.DataVisualization.Charting.Formulas;
#endif
 
#endregion
		
#if Microsoft_CONTROL
	namespace System.Windows.Forms.DataVisualization.Charting
#else
namespace System.Web.UI.DataVisualization.Charting
 
#endif
{
	/// <summary>
    /// CommonElements class provides references to common chart classes like 
    /// DataManager, ChartTypeRegistry, ImageLoader and others. It is passed 
    /// to different chart elements to simplify access to those common classes.
	/// </summary>
	internal class CommonElements
	{
		#region Fields
 
        private Chart _chart;
        private ChartImage _chartPicture; 
 
		// Reference to Chart Graphics Object
		internal ChartGraphics graph = null;
 
		/// <summary>
		/// Service Container
		/// </summary>
		internal IServiceContainer	container = null;
 
		/// <summary>
		/// Indicates painting mode
		/// </summary>
		internal bool processModePaint = true;
 
		/// <summary>
		/// Indicates selection mode
		/// </summary>
		internal bool processModeRegions = false;
 
		// Private Fields
		private int _width = 0;
		private int _height = 0;
 
		#endregion
 
		#region Properties
 
		/// <summary>
		/// Reference to the Data Manager
		/// </summary>
		internal DataManager DataManager
		{
			get
			{
				return (DataManager)container.GetService(typeof(DataManager));
			}
		}
 
		/// <summary>
		/// True if painting mode is active
		/// </summary>
		public bool ProcessModePaint
		{
			get
			{
				return processModePaint;
			}
		}
 
		/// <summary>
		/// True if Hot region or image maps mode is active
		/// </summary>
		public bool ProcessModeRegions
		{
			get
			{
				return processModeRegions;
			}
		}
 
		/// <summary>
		/// Reference to the hot regions object
		/// </summary>
		public HotRegionsList HotRegionsList
		{
			get
			{
				return ChartPicture.hotRegionsList;
			}
		}
 
		/// <summary>
		/// Reference to the Data Manipulator
		/// </summary>
		public DataManipulator DataManipulator
		{
			get
			{
				return ChartPicture.DataManipulator;
			}
		}
 
		/// <summary>
		/// Reference to the ImageLoader
		/// </summary>
		internal ImageLoader ImageLoader
		{
			get
			{
				return (ImageLoader)container.GetService(typeof(ImageLoader));
			}
		}
 
		/// <summary>
		/// Reference to the Chart
		/// </summary>
		internal Chart Chart
		{
			get
			{
				if (_chart==null)
                    _chart = (Chart)container.GetService(typeof(Chart));
                return _chart;
			}
		}
 
		/// <summary>
		/// Reference to the ChartTypeRegistry
		/// </summary>
		internal ChartTypeRegistry ChartTypeRegistry
		{
			get
			{
				return (ChartTypeRegistry)container.GetService(typeof(ChartTypeRegistry));
			}
		}
 
		/// <summary>
		/// Reference to the BorderTypeRegistry
		/// </summary>
		internal BorderTypeRegistry BorderTypeRegistry
		{
			get
			{
				return (BorderTypeRegistry)container.GetService(typeof(BorderTypeRegistry));
			}
		}
 
		/// <summary>
		/// Reference to the FormulaRegistry
		/// </summary>
		internal FormulaRegistry FormulaRegistry
		{
			get
			{
				return (FormulaRegistry)container.GetService(typeof(FormulaRegistry));
			}
		}
 
 
 
		/// <summary>
		/// Reference to the ChartPicture
		/// </summary>
		internal ChartImage ChartPicture
		{
			get
			{
				if (_chartPicture ==null)
                    _chartPicture = (ChartImage)container.GetService(typeof(ChartImage));
                return _chartPicture;
			}
		}
 
		/// <summary>
		/// Width of the chart picture
		/// </summary>
		internal int Width
		{
			get
			{
				return _width;
			}
			set
			{
				_width = value;
			}
		}
 
		/// <summary>
		/// Height of the chart picture
		/// </summary>
		internal int Height
		{
			get
			{
				return _height;
			}
			set
			{
				_height = value;
			}
		}
 
		#endregion
 
		#region Methods
 
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="container">Service container.</param>
        internal CommonElements(IServiceContainer container)
		{
			this.container = container;
		}
		
 
		#endregion
 
		#region String convertion helper methods
 
        /// <summary>
		/// Converts string to double.
		/// </summary>
		/// <param name="stringToParse">String to convert.</param>
		/// <returns>Double result.</returns>
        internal static double ParseDouble(string stringToParse)
        {
            return ParseDouble(stringToParse, false);
        }
        /// <summary>
        /// Converts string to double.
        /// </summary>
        /// <param name="stringToParse">String to convert.</param>
        /// <param name="throwException">if set to <c>true</c> the exception thrown.</param>
        /// <returns>Double result.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Double.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Double@)")]
        internal static double ParseDouble(string stringToParse, bool throwException)
        {
            Double result = 0.0;
 
            if (throwException)
            {
                result = double.Parse(stringToParse, NumberStyles.Any, CultureInfo.InvariantCulture);
            }
            else
            {
                bool parseSucceed = double.TryParse(stringToParse, NumberStyles.Any, CultureInfo.InvariantCulture, out result);
                if (!parseSucceed)
                {
                    double.TryParse(stringToParse, NumberStyles.Any, CultureInfo.CurrentCulture, out result);
                }
            }
            return result;
        }
 
		/// <summary>
		/// Converts string to double.
		/// </summary>
		/// <param name="stringToParse">String to convert.</param>
		/// <returns>Double result.</returns>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Single.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Single@)")]
        internal static float ParseFloat(string stringToParse)
        {
            float result = 0f;
            bool parseSucceed = float.TryParse(stringToParse, NumberStyles.Any, CultureInfo.InvariantCulture, out result);
 
            if (!parseSucceed)
            {
                float.TryParse(stringToParse, NumberStyles.Any, CultureInfo.CurrentCulture, out result);
            }
 
            return result;
        }
 
		#endregion
	}
}