293 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			293 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Globalization;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Charts.Style
 | 
						|
{
 | 
						|
    ///<summary>
 | 
						|
    /// Padding
 | 
						|
    ///</summary>
 | 
						|
    [TypeConverter(typeof(PaddingTypeConverter))]
 | 
						|
    public class Padding : Thickness
 | 
						|
    {
 | 
						|
        #region Static data
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns Empty instance of Thickness.
 | 
						|
        /// </summary>
 | 
						|
        public new static Padding Empty
 | 
						|
        {
 | 
						|
            get { return (new Padding()); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructors
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the class and initializes it.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="left">Left padding</param>
 | 
						|
        /// <param name="right">Right padding</param>
 | 
						|
        /// <param name="top">Top padding</param>
 | 
						|
        /// <param name="bottom">Bottom padding</param>
 | 
						|
        public Padding(int left, int top, int right, int bottom)
 | 
						|
            : base(left, top, right, bottom)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the Padding class.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="all">Uniform padding.</param>
 | 
						|
        public Padding(int all)
 | 
						|
            : base(all)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the Padding class.
 | 
						|
        /// </summary>
 | 
						|
        public Padding()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Copy
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates an exact copy of the Padding.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>Copy of the Padding.</returns>
 | 
						|
        public new Padding Copy()
 | 
						|
        {
 | 
						|
            Padding copy = new Padding(Left, Top, Right, Bottom);
 | 
						|
 | 
						|
            return (copy);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetSerialData
 | 
						|
 | 
						|
        internal override SerialElementCollection GetSerialData(string name)
 | 
						|
        {
 | 
						|
            SerialElementCollection sec = new SerialElementCollection();
 | 
						|
 | 
						|
            sec.AddStartElement(name);
 | 
						|
 | 
						|
            if (IsUniform == true)
 | 
						|
            {
 | 
						|
                sec.AddValue("All", Left, 0);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                sec.AddValue("Left", Left, 0);
 | 
						|
                sec.AddValue("Top", Top, 0);
 | 
						|
                sec.AddValue("Right", Right, 0);
 | 
						|
                sec.AddValue("Bottom", Bottom, 0);
 | 
						|
            }
 | 
						|
 | 
						|
            sec.AddEndElement(name);
 | 
						|
 | 
						|
            return (sec);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PutSerialData
 | 
						|
 | 
						|
        #region ProcessValue
 | 
						|
 | 
						|
        internal override void ProcessValue(SerialElement se)
 | 
						|
        {
 | 
						|
            switch (se.Name)
 | 
						|
            {
 | 
						|
                case "All":
 | 
						|
                    All = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "Left":
 | 
						|
                    Left = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "Top":
 | 
						|
                    Top = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "Right":
 | 
						|
                    Right = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "Bottom":
 | 
						|
                    Bottom = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                default:
 | 
						|
                    base.ProcessValue(se);
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region PaddingTypeConverter
 | 
						|
 | 
						|
    ///<summary>
 | 
						|
    /// PaddingTypeConverter
 | 
						|
    ///</summary>
 | 
						|
    public class PaddingTypeConverter : ExpandableObjectConverter
 | 
						|
    {
 | 
						|
        #region CanConvertTo
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// CanConvertTo
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context"></param>
 | 
						|
        /// <param name="destinationType"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override bool CanConvertTo(
 | 
						|
            ITypeDescriptorContext context, Type destinationType)
 | 
						|
        {
 | 
						|
            if (destinationType == typeof(string))
 | 
						|
                return (true);
 | 
						|
 | 
						|
            return (base.CanConvertTo(context, destinationType));
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ConvertTo
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// ConvertTo
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context"></param>
 | 
						|
        /// <param name="culture"></param>
 | 
						|
        /// <param name="value"></param>
 | 
						|
        /// <param name="destinationType"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override object ConvertTo(
 | 
						|
            ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
 | 
						|
        {
 | 
						|
            if (destinationType == typeof(string))
 | 
						|
            {
 | 
						|
                Padding p = value as Padding;
 | 
						|
 | 
						|
                if (p != null)
 | 
						|
                {
 | 
						|
                    if (p.IsUniform == true)
 | 
						|
                        return (p.Left.ToString());
 | 
						|
 | 
						|
                    return (String.Format("{0:d}, {1:d}, {2:d}, {3:d}",
 | 
						|
                        p.Bottom, p.Left, p.Right, p.Top));
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (base.ConvertTo(context, culture, value, destinationType));
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CanConvertFrom
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// CanConvertFrom
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context"></param>
 | 
						|
        /// <param name="sourceType"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override bool CanConvertFrom(
 | 
						|
            ITypeDescriptorContext context, Type sourceType)
 | 
						|
        {
 | 
						|
            if (sourceType == typeof(string))
 | 
						|
                return (true);
 | 
						|
 | 
						|
            return (base.CanConvertFrom(context, sourceType));
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ConvertFrom
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// ConvertFrom
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context"></param>
 | 
						|
        /// <param name="culture"></param>
 | 
						|
        /// <param name="value"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override object ConvertFrom(
 | 
						|
            ITypeDescriptorContext context, CultureInfo culture, object value)
 | 
						|
        {
 | 
						|
            if (value is string)
 | 
						|
            {
 | 
						|
                string[] values = ((string)value).Split(',');
 | 
						|
 | 
						|
                if (values.Length != 1 && values.Length != 4)
 | 
						|
                    throw new ArgumentException("Invalid value to convert.");
 | 
						|
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    int[] v = new int[values.Length];
 | 
						|
 | 
						|
                    for (int i = 0; i < values.Length; i++)
 | 
						|
                        v[i] = int.Parse(values[i]);
 | 
						|
 | 
						|
                    Padding p = (values.Length == 1)
 | 
						|
                        ? new Padding(v[0])
 | 
						|
                        : new Padding(v[1], v[3], v[2], v[0]);
 | 
						|
 | 
						|
                    return (p);
 | 
						|
                }
 | 
						|
                catch (Exception)
 | 
						|
                {
 | 
						|
                    throw new ArgumentException("Invalid value to convert.");
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return base.ConvertFrom(context, culture, value);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetCreateInstanceSupported
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// GetCreateInstanceSupported
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
 | 
						|
        {
 | 
						|
            return (true);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CreateInstance
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// CreateInstance
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="context"></param>
 | 
						|
        /// <param name="propertyValues"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public override object CreateInstance(
 | 
						|
            ITypeDescriptorContext context, IDictionary propertyValues)
 | 
						|
        {
 | 
						|
            return (new Padding((int)propertyValues["Left"], (int)propertyValues["Top"],
 | 
						|
                (int)propertyValues["Right"], (int)propertyValues["Bottom"]));
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
}
 |