using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Drawing.Drawing2D; using System.Windows.Forms; using DevComponents.Charts.TextMarkup; using DevComponents.DotNetBar.Charts.Style; namespace DevComponents.DotNetBar.Charts { /// /// Represents the collection of PieReferenceLines. /// [Editor("DevComponents.Charts.Design.PieReferenceCollectionEditor, DevComponents.Charts.Design, " + "Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(UITypeEditor))] public class PieReferenceLineCollection : CustomNamedCollection { #region GetUniqueName /// /// Gets a unique (unused) reference line Name. /// /// public string GetUniqueName() { return (GetUniqueName("PieRefLine")); } #endregion } /// /// Represents a reference line (a radial line on the chart /// that can be used to signify, or reference, a specific chart value). /// public class PieReferenceLine : ChartVisualElement { #region Private variables private double _Value; private PieReferenceLineVisualStyle _ReferenceLineVisualStyle; private EffectiveStyle _EffectiveStyle; #endregion #region Constructors /// /// PieReferenceLine /// public PieReferenceLine() { _EffectiveStyle = new EffectiveStyle(this); } /// /// PieReferenceLine /// /// public PieReferenceLine(string name) : this() { Name = name; } /// /// PieReferenceLine /// /// /// public PieReferenceLine(string name, double value) : this(name) { Value = value; } #endregion #region Public properties #region EffectiveStyle /// /// Gets a reference to the ReferenceLine's Effective (cached, composite) style. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public PieReferenceLineVisualStyle EffectiveStyle { get { return (_EffectiveStyle.Style); } } #endregion #region ReferenceLineVisualStyle /// /// Gets or sets the visual style for the Reference Line. /// [Category("Style")] [Description("Indicates the visual style for the ReferenceLine.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PieReferenceLineVisualStyle ReferenceLineVisualStyle { get { if (_ReferenceLineVisualStyle == null) { _ReferenceLineVisualStyle = new PieReferenceLineVisualStyle(); StyleVisualChangeHandler(null, _ReferenceLineVisualStyle); } return (_ReferenceLineVisualStyle); } set { if (_ReferenceLineVisualStyle != value) { PieReferenceLineVisualStyle oldValue = _ReferenceLineVisualStyle; _ReferenceLineVisualStyle = value; OnVisualStyleChanged("ReferenceLineVisualStyle", oldValue, value); if (oldValue != null) oldValue.Dispose(); } } } #endregion #region Value /// /// Gets or sets the associated radial grid value of the reference line. /// [DefaultValue(null), Category("Appearance")] [Description("Indicates the associated radial grid value of the reference line.")] //[TypeConverter("DevComponents.Charts.Design.PointValueConverter," + // "DevComponents.Charts.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public double Value { get { return (_Value); } set { if (value != _Value) { _Value = value; OnPropertyChangedEx("Value", VisualChangeType.Render); } } } #endregion #endregion #region Internal properties #endregion #region MeasureOverride protected override void MeasureOverride(ChartLayoutInfo layoutInfo) { } #endregion #region ArrangeOverride protected override void ArrangeOverride(ChartLayoutInfo layoutInfo) { } #endregion #region RenderOverride protected override void RenderOverride(ChartRenderInfo renderInfo) { } #region RenderLine internal void RenderLine(ChartRenderInfo renderInfo) { } #endregion #endregion #region InvalidateRender public override void InvalidateRender() { ChartVisualElement cve = Parent as ChartVisualElement; if (cve != null) cve.InvalidateRender(); else base.InvalidateRender(); } #endregion #region Style handling #region ApplyStyles public override void ApplyStyles(BaseVisualStyle style) { ChartLineVisualStyle rstyle = style as ChartLineVisualStyle; if (rstyle != null) { ApplyParentStyles(rstyle, Parent as ChartContainer); rstyle.ApplyStyle(ReferenceLineVisualStyle); if (rstyle.LineColor.IsEmpty == true) rstyle.LineColor = Color.Red; if (rstyle.LineWidth < 0) rstyle.LineWidth = 1; } } #region ApplyParentStyles private void ApplyParentStyles(ChartLineVisualStyle pstyle, ChartContainer item) { if (item != null) { ApplyParentStyles(pstyle, item.Parent as ChartContainer); ChartPanel chartPanel = item as ChartPanel; if (chartPanel != null) { pstyle.ApplyStyle(chartPanel.DefaultVisualStyles.PieChartVisualStyle.ReferenceLineVisualStyle); } else if (item is PieChart) { PieChart pieChart = (PieChart)item; pstyle.ApplyStyle(pieChart.ChartVisualStyle.ReferenceLineVisualStyle); } } else { pstyle.ApplyStyle(ChartControl.BaseVisualStyles.ReferenceLineVisualStyle); pstyle.ApplyStyle(ChartControl.DefaultVisualStyles.ReferenceLineVisualStyle); } } #endregion #endregion #region InvalidateStyle /// ///Invalidate the cached Style definition /// public void InvalidateStyle() { ClearEffectiveStyles(); } #endregion #region ClearEffectiveStyles protected override void ClearEffectiveStyles() { if (_EffectiveStyle.InvalidateStyle() == true) InvalidateLayout(); } #endregion #endregion #region Copy/CopyTo public override ChartVisualElement Copy() { PieReferenceLine copy = new PieReferenceLine(); CopyTo(copy); return (copy); } public override void CopyTo(ChartVisualElement copy) { PieReferenceLine c = copy as PieReferenceLine; if (c != null) { base.CopyTo(c); c.Value = Value; c.ReferenceLineVisualStyle = (_ReferenceLineVisualStyle != null) ? ReferenceLineVisualStyle.Copy() : null; } } #endregion #region GetSerialData internal override SerialElementCollection GetSerialData(string serialName) { SerialElementCollection sec = new SerialElementCollection(); if (serialName != null) { if (serialName.Equals("") == true) serialName = "PieReferenceLine"; sec.AddStartElement(serialName); } if (_ReferenceLineVisualStyle != null && _ReferenceLineVisualStyle.IsEmpty == false) sec.AddElement(_ReferenceLineVisualStyle.GetSerialData("ReferenceLineVisualStyle")); sec.AddValue("Value", Value, null); 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 "Value": Value = double.Parse(se.StringValue); break; default: base.ProcessValue(se); break; } } #endregion #region ProcessCollection internal override void ProcessCollection(SerialElement se) { SerialElementCollection sec = se.Sec; switch (se.Name) { case "ReferenceLineVisualStyle": sec.PutSerialData(ReferenceLineVisualStyle); break; default: base.ProcessCollection(se); break; } } #endregion #endregion #region IDisposable public override void Dispose() { ReferenceLineVisualStyle = null; base.Dispose(); } #endregion } }