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
}
}