408 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			408 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Design;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Charts.Style
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents the visual style of a Chart Line
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxItem(false), DesignTimeVisible(false)]
 | 
						|
    [TypeConverter(typeof(DefaultStyleConvertor))]
 | 
						|
    public class ConnectorLineVisualStyle : ChartLineVisualStyle
 | 
						|
    {
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        private int _MaxLength = -1;
 | 
						|
        private int _MinLength = -1;
 | 
						|
        private int _LengthStep = -1;
 | 
						|
 | 
						|
        private int _DefaultAngle = -1;
 | 
						|
        private int _AngleStep = -1;
 | 
						|
 | 
						|
        private ConnectorOrigin _Origin = ConnectorOrigin.NotSet;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        #region AngleStep
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the angle step value when rotating conflicting labels.
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(-1), Category("DataLabel")]
 | 
						|
        [Description("Indicates the angle step value when rotating conflicting labels.")]
 | 
						|
        public int AngleStep
 | 
						|
        {
 | 
						|
            get { return (_AngleStep); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _AngleStep)
 | 
						|
                {
 | 
						|
                    _AngleStep = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("AngleStep", Style.VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DefaultAngle
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the default line angle (-1 denotes 'auto').
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(-1), Category("DataLabel")]
 | 
						|
        [Description("Indicates the default line angle (-1 denotes 'auto').")]
 | 
						|
        public int DefaultAngle
 | 
						|
        {
 | 
						|
            get { return (_DefaultAngle); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _DefaultAngle)
 | 
						|
                {
 | 
						|
                    _DefaultAngle = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("DefaultAngle", Style.VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region LengthStep
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the angle step value when rotating conflicting labels.
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(-1), Category("DataLabel")]
 | 
						|
        [Description("Indicates the angle step value when rotating conflicting labels.")]
 | 
						|
        public int LengthStep
 | 
						|
        {
 | 
						|
            get { return (_LengthStep); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _LengthStep)
 | 
						|
                {
 | 
						|
                    _LengthStep = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("LengthStep", Style.VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MaxLength
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the maximum connector line length.
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(-1), Category("DataLabel")]
 | 
						|
        [Description("Indicates the maximum connector line length.")]
 | 
						|
        public int MaxLength
 | 
						|
        {
 | 
						|
            get { return (_MaxLength); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _MaxLength)
 | 
						|
                {
 | 
						|
                    _MaxLength = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("MaxLength", Style.VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MinLength
 | 
						|
 | 
						|
        ///<summary>
 | 
						|
        /// Gets or sets the minimum connector line length.
 | 
						|
        ///</summary>
 | 
						|
        [DefaultValue(-1), Category("DataLabel")]
 | 
						|
        [Description("Indicates the minimum connector line length.")]
 | 
						|
        public int MinLength
 | 
						|
        {
 | 
						|
            get { return (_MinLength); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _MinLength)
 | 
						|
                {
 | 
						|
                    _MinLength = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("MinLength", Style.VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Origin
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the line connector origin.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(ConnectorOrigin.NotSet)]
 | 
						|
        [Description("Indicates the line connector origin")]
 | 
						|
        public ConnectorOrigin Origin
 | 
						|
        {
 | 
						|
            get { return (_Origin); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _Origin)
 | 
						|
                {
 | 
						|
                    _Origin = value;
 | 
						|
 | 
						|
                    OnPropertyChangedEx("Origin", VisualChangeType.Layout);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsEmpty
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether the style is logically Empty.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        [Description("Gets whether the style is logically Empty.")]
 | 
						|
        public override bool IsEmpty
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return ((_AngleStep < 0) &&
 | 
						|
                    (_DefaultAngle < 0) &&
 | 
						|
                    (_Origin == ConnectorOrigin.NotSet) &&
 | 
						|
                    (_LengthStep < 0) && 
 | 
						|
                    (_MaxLength < 0) &&
 | 
						|
                    (_MinLength < 0) &&
 | 
						|
                    (base.IsEmpty == true));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ApplyStyle
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Applies the style to instance of this style.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="style">Style to apply.</param>
 | 
						|
        public void ApplyStyle(ConnectorLineVisualStyle style)
 | 
						|
        {
 | 
						|
            if (style != null)
 | 
						|
            {
 | 
						|
                base.ApplyStyle(style);
 | 
						|
 | 
						|
                if (style.AngleStep >= 0)
 | 
						|
                    _AngleStep = style.AngleStep;
 | 
						|
 | 
						|
                if (style.DefaultAngle >= 0)
 | 
						|
                    _DefaultAngle = style.DefaultAngle;
 | 
						|
 | 
						|
                if (style.LengthStep >= 0)
 | 
						|
                    _LengthStep = style.LengthStep;
 | 
						|
 | 
						|
                if (style.MaxLength >= 0)
 | 
						|
                    _MaxLength = style.MaxLength;
 | 
						|
 | 
						|
                if (style.MinLength >= 0)
 | 
						|
                    _MinLength = style.MinLength;
 | 
						|
 | 
						|
                if (style.Origin != ConnectorOrigin.NotSet)
 | 
						|
                    _Origin = style.Origin;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ApplyDefaults
 | 
						|
 | 
						|
        public override void ApplyDefaults()
 | 
						|
        {
 | 
						|
            if (MinLength > MaxLength)
 | 
						|
                MaxLength = MinLength;
 | 
						|
 | 
						|
            if (MinLength < 0)
 | 
						|
                MinLength = 10;
 | 
						|
 | 
						|
            if (MaxLength < 0)
 | 
						|
                MaxLength = 200;
 | 
						|
 | 
						|
            if (MaxLength <= MinLength)
 | 
						|
                MaxLength = MinLength + 200;
 | 
						|
 | 
						|
            if (AngleStep < 0)
 | 
						|
                AngleStep = 15;
 | 
						|
 | 
						|
            if (LengthStep < 0)
 | 
						|
                LengthStep = 10;
 | 
						|
 | 
						|
            if (LinePattern == LinePattern.NotSet)
 | 
						|
                LinePattern = LinePattern.Solid;
 | 
						|
 | 
						|
            if (LineColor.IsEmpty == true)
 | 
						|
                LineColor = Color.Black;
 | 
						|
 | 
						|
            if (LineWidth < 0)
 | 
						|
                LineWidth = 1;
 | 
						|
 | 
						|
            base.ApplyDefaults();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Copy
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the copy of the style.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>Copy of the style.</returns>
 | 
						|
        public new ConnectorLineVisualStyle Copy()
 | 
						|
        {
 | 
						|
            ConnectorLineVisualStyle style = new ConnectorLineVisualStyle();
 | 
						|
 | 
						|
            CopyTo(style);
 | 
						|
 | 
						|
            return (style);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CopyTo
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the copy of the style.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>Copy of the style.</returns>
 | 
						|
        public void CopyTo(ConnectorLineVisualStyle style)
 | 
						|
        {
 | 
						|
            base.CopyTo(style);
 | 
						|
 | 
						|
            style.AngleStep = _AngleStep;
 | 
						|
            style.DefaultAngle = _DefaultAngle;
 | 
						|
 | 
						|
            style.LengthStep = _LengthStep;
 | 
						|
            style.MaxLength = _MaxLength;
 | 
						|
            style.MinLength = _MinLength;
 | 
						|
 | 
						|
            style.Origin = _Origin;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetSerialData
 | 
						|
 | 
						|
        internal override SerialElementCollection GetSerialData(string serialName)
 | 
						|
        {
 | 
						|
            SerialElementCollection sec = new SerialElementCollection();
 | 
						|
 | 
						|
            if (serialName != null)
 | 
						|
            {
 | 
						|
                if (serialName.Equals("") == true)
 | 
						|
                    serialName = "ConnectorLineVisualStyle";
 | 
						|
 | 
						|
                sec.AddStartElement(serialName);
 | 
						|
            }
 | 
						|
 | 
						|
            sec.AddValue("AngleStep", AngleStep, -1);
 | 
						|
            sec.AddValue("DefaultAngle", DefaultAngle, -1);
 | 
						|
 | 
						|
            sec.AddValue("LengthStep", LengthStep, -1);
 | 
						|
            sec.AddValue("MaxLength", MaxLength, -1);
 | 
						|
            sec.AddValue("MinLength", MinLength, -1);
 | 
						|
 | 
						|
            sec.AddElement(base.GetSerialData(null));
 | 
						|
 | 
						|
            if (serialName != null)
 | 
						|
                sec.AddEndElement(serialName);
 | 
						|
 | 
						|
            return (sec);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PutSerialData
 | 
						|
 | 
						|
        #region ProcessValue
 | 
						|
 | 
						|
        internal override void ProcessValue(SerialElement se)
 | 
						|
        {
 | 
						|
            switch (se.Name)
 | 
						|
            {
 | 
						|
                case "AngleStep":
 | 
						|
                    AngleStep = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "DefaultAngle":
 | 
						|
                    DefaultAngle = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "LengthStep":
 | 
						|
                    LengthStep = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "MaxLength":
 | 
						|
                    MaxLength = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                case "MinLength":
 | 
						|
                    MinLength = int.Parse(se.StringValue);
 | 
						|
                    break;
 | 
						|
 | 
						|
                default:
 | 
						|
                    base.ProcessValue(se);
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IDisposable
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Dispose
 | 
						|
        /// </summary>
 | 
						|
        public override void Dispose()
 | 
						|
        {
 | 
						|
            base.Dispose();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region Enums
 | 
						|
 | 
						|
    #region ConnectorOrigin
 | 
						|
 | 
						|
    public enum ConnectorOrigin
 | 
						|
    {
 | 
						|
        NotSet = -1,
 | 
						|
 | 
						|
        Center,
 | 
						|
 | 
						|
        Edge,
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
}
 |