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.DotNetBar.Charts.Style; namespace DevComponents.DotNetBar.Charts { /// /// Represents the collection of ChartIndicators. /// [Editor("DevComponents.Charts.Design.IndicatorCollectionEditor, DevComponents.Charts.Design, " + "Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(UITypeEditor))] public class ChartIndicatorCollection : CustomNamedCollection { } #region RegressionLine /// /// Represents a Regression Line (a least-squares calculated series line). /// public class RegressionLine : ChartIndicator, IEffectiveStyle { #region Private variables private RegressionLineVisualStyle _RegressionLineVisualStyle; private EffectiveStyle _EffectiveStyle; #endregion #region Constructors public RegressionLine(string name) : this() { Name = name; } public RegressionLine() { InitDefaultStates(); _EffectiveStyle = new EffectiveStyle(this); } #endregion #region InitDefaultStates private void InitDefaultStates() { } #endregion #region Public properties #region EffectiveStyle /// /// Gets a reference to the RegressionLine's effective (cached, composite) style. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public RegressionLineVisualStyle EffectiveStyle { get { return (_EffectiveStyle.Style); } } #endregion #region IndicatorType /// /// Gets the RegressionLine's IndicatorType /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override ChartIndicatorType IndicatorType { get { return (ChartIndicatorType.RegressionLine); } } #endregion #region RegressionLineVisualStyle /// /// Gets or sets the visual style for the RegressionLine Indicator. /// [Category("Style")] [Description("Indicates the visual style for the RegressionLine Indicator.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public RegressionLineVisualStyle RegressionLineVisualStyle { get { if (_RegressionLineVisualStyle == null) { _RegressionLineVisualStyle = new RegressionLineVisualStyle(); StyleVisualChangeHandler(null, _RegressionLineVisualStyle); } return (_RegressionLineVisualStyle); } set { if (_RegressionLineVisualStyle != value) { RegressionLineVisualStyle oldValue = _RegressionLineVisualStyle; _RegressionLineVisualStyle = value; OnStyleChanged("RegressionLineVisualStyle", oldValue, value); if (oldValue != null) oldValue.Dispose(); } } } #endregion #endregion #region Style support #region ApplyStyles public override void ApplyStyles(BaseVisualStyle style) { RegressionLineVisualStyle rstyle = style as RegressionLineVisualStyle; if (rstyle != null) { ApplyParentStyles(rstyle, Parent as ChartContainer); rstyle.ApplyStyle(RegressionLineVisualStyle); if (rstyle.LineWidth < 0) rstyle.LineWidth = 1; } } #region ApplyParentStyles private void ApplyParentStyles( RegressionLineVisualStyle pstyle, ChartContainer item) { if (item != null) { ApplyParentStyles(pstyle, item.Parent as ChartContainer); ChartPanel panel = item as ChartPanel; if (panel != null) pstyle.ApplyStyle(panel.DefaultVisualStyles.RegressionLineVisualStyle); } else { pstyle.ApplyStyle(ChartControl.BaseVisualStyles.RegressionLineVisualStyle); pstyle.ApplyStyle(ChartControl.DefaultVisualStyles.RegressionLineVisualStyle); } } #endregion #endregion #region InvalidateStyle /// ///Invalidate the cached Style /// public void InvalidateStyle() { ClearEffectiveStyles(); } #endregion #region ClearEffectiveStyles protected override void ClearEffectiveStyles() { base.ClearEffectiveStyles(); if (LegendItem != null) LegendItem.EffectiveStyles.InvalidateStyles(); } #endregion #region StyleChanged protected override void StyleChanged(object sender, PropertyChangedEventArgs e) { base.StyleChanged(sender, e); if (sender is ChartLegendItemVisualStyles && LegendItem != null) InvalidateRender(LegendItem.Bounds); } #endregion #endregion #region ILegendItem #region GetLegendItemColorEx protected override Color GetLegendItemColorEx() { RegressionLineVisualStyle rstyle = EffectiveStyle; return (rstyle.LineColor); } #endregion #region RenderLegendItemMarkerEx protected override void RenderLegendItemMarkerEx(Graphics g, ChartLegendItem litem, ChartLegendItemVisualStyle style) { RegressionLineVisualStyle rstyle = EffectiveStyle; if (rstyle.LinePattern != LinePattern.None) { Rectangle bounds = litem.MarkerBounds; int n = bounds.Height / 2; int lineWidth = Math.Min(rstyle.LineWidth, bounds.Height); using (Pen pen = new Pen(GetLegendItemColor(), lineWidth)) { if (rstyle.LinePattern != LinePattern.NotSet) pen.DashStyle = (DashStyle)rstyle.LinePattern; g.DrawLine(pen, new Point(bounds.X, bounds.Y + n), new Point(bounds.Right - 1, bounds.Y + n)); } } } #endregion #region GetLegendItemTextEx protected override string GetLegendItemTextEx() { return ("(RegLine)"); } #endregion #endregion #region Copy/CopyTo public override ChartVisualElement Copy() { RegressionLine copy = new RegressionLine(); CopyTo(copy); return (copy); } public override void CopyTo(ChartVisualElement copy) { RegressionLine c = copy as RegressionLine; if (c != null) { base.CopyTo(c); c.RegressionLineVisualStyle = (_RegressionLineVisualStyle != null) ? RegressionLineVisualStyle.Copy() : null; } } #endregion #region GetSerialData internal override SerialElementCollection GetSerialData(string serialName) { SerialElementCollection sec = new SerialElementCollection(); if (serialName != null) { if (serialName.Equals("") == true) serialName = "RegressionLine"; sec.AddStartElement(serialName); } if (_RegressionLineVisualStyle != null && _RegressionLineVisualStyle.IsEmpty == false) sec.AddElement(_RegressionLineVisualStyle.GetSerialData("RegressionLineVisualStyle")); 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) { default: base.ProcessValue(se); break; } } #endregion #region ProcessCollection internal override void ProcessCollection(SerialElement se) { SerialElementCollection sec = se.Sec; switch (se.Name) { case "RegressionLineVisualStyle": sec.PutSerialData(RegressionLineVisualStyle); break; default: base.ProcessCollection(se); break; } } #endregion #endregion #region IDisposable public override void Dispose() { RegressionLineVisualStyle = null; base.Dispose(); } #endregion } #endregion #region TrendLine /// /// Represents a Trend Line (a line connecting any 2 defined SeriesPoints). /// public class TrendLine : ChartIndicator, IEffectiveStyle { #region Private variables private object _ValueX1; private object _ValueX2; private TrendLineVisualStyle _TrendLineVisualStyle; private EffectiveStyle _EffectiveStyle; #endregion #region Constructors /// /// TrendLine /// public TrendLine() { InitDefaultStates(); _EffectiveStyle = new EffectiveStyle(this); } #region Constructors /// /// TrendLine /// /// Name public TrendLine(string name) : this() { Name = name; } /// /// TrendLine /// /// Name /// Starting X-Axis value /// Ending X-Axis value public TrendLine(string name, object valuex1, object valuex2) : this(name) { ValueX1 = valuex1; ValueX2 = valuex2; } #endregion #endregion #region InitDefaultStates private void InitDefaultStates() { } #endregion #region Public properties #region EffectiveStyles /// /// Gets a reference to the TrendLine's effective (cached, composite) style. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public TrendLineVisualStyle EffectiveStyle { get { return (_EffectiveStyle.Style); } } #endregion #region IndicatorType /// /// Gets the TrendLine's IndicatorType /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override ChartIndicatorType IndicatorType { get { return (ChartIndicatorType.TrendLine); } } #endregion #region TrendLineVisualStyle /// /// Gets or sets the visual style for the TrendLine Indicator. /// [Category("Style")] [Description("Indicates the visual style for the TrendLine Indicator.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public TrendLineVisualStyle TrendLineVisualStyle { get { if (_TrendLineVisualStyle == null) { _TrendLineVisualStyle = new TrendLineVisualStyle(); StyleVisualChangeHandler(null, _TrendLineVisualStyle); } return (_TrendLineVisualStyle); } set { if (_TrendLineVisualStyle != value) { TrendLineVisualStyle oldValue = _TrendLineVisualStyle; _TrendLineVisualStyle = value; OnStyleChanged("TrendLineVisualStyle", oldValue, value); if (oldValue != null) oldValue.Dispose(); } } } #endregion #region ValueX1 /// /// Trendline starting X value /// [Category("Data")] [Description("Indicates the Trendline starting X value.")] [TypeConverter("DevComponents.Charts.Design.PointValueConverter," + "DevComponents.Charts.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public object ValueX1 { get { return (_ValueX1); } set { _ValueX1 = value; } } #endregion #region ValueX2 /// /// Trendline ending X value /// [Category("Data")] [Description("Indicates the Trendline ending X value.")] [TypeConverter("DevComponents.Charts.Design.PointValueConverter," + "DevComponents.Charts.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public object ValueX2 { get { return (_ValueX2); } set { _ValueX2 = value; } } #endregion #endregion #region Style support #region ApplyStyles public override void ApplyStyles(BaseVisualStyle style) { TrendLineVisualStyle tstyle = style as TrendLineVisualStyle; if (tstyle != null) { ApplyParentStyles(tstyle, Parent as ChartContainer); tstyle.ApplyStyle(TrendLineVisualStyle); if (tstyle.LineWidth < 0) tstyle.LineWidth = 1; } } #region ApplyParentStyles private void ApplyParentStyles( TrendLineVisualStyle pstyle, ChartContainer item) { if (item != null) { ApplyParentStyles(pstyle, item.Parent as ChartContainer); if (item is ChartPanel) pstyle.ApplyStyle(((ChartPanel)item).DefaultVisualStyles.TrendLineVisualStyle); } else { pstyle.ApplyStyle(ChartControl.BaseVisualStyles.TrendLineVisualStyle); pstyle.ApplyStyle(ChartControl.DefaultVisualStyles.TrendLineVisualStyle); } } #endregion #endregion #region InvalidateStyle /// ///Invalidate the cached Style /// public void InvalidateStyle() { ClearEffectiveStyles(); } #endregion #region ClearEffectiveStyles protected override void ClearEffectiveStyles() { base.ClearEffectiveStyles(); if (LegendItem != null) LegendItem.EffectiveStyles.InvalidateStyles(); } #endregion #region StyleChanged protected override void StyleChanged(object sender, PropertyChangedEventArgs e) { base.StyleChanged(sender, e); if (sender is ChartLegendItemVisualStyles && LegendItem != null) InvalidateRender(LegendItem.Bounds); } #endregion #endregion #region ILegendItem #region GetLegendItemColorEx protected override Color GetLegendItemColorEx() { TrendLineVisualStyle tstyle = EffectiveStyle; return (tstyle.LineColor); } #endregion #region RenderLegendItemMarkerEx protected override void RenderLegendItemMarkerEx(Graphics g, ChartLegendItem litem, ChartLegendItemVisualStyle style) { TrendLineVisualStyle tstyle = EffectiveStyle; if (tstyle.LinePattern != LinePattern.None) { Rectangle bounds = litem.MarkerBounds; int n = bounds.Height / 2; int lineWidth = Math.Min(tstyle.LineWidth, bounds.Height); using (Pen pen = new Pen(GetLegendItemColor(), lineWidth)) { if (tstyle.LinePattern != LinePattern.NotSet) pen.DashStyle = (DashStyle)tstyle.LinePattern; g.DrawLine(pen, new Point(bounds.X, bounds.Y + n), new Point(bounds.Right - 1, bounds.Y + n)); } } } #endregion #region GetLegendItemTextEx protected override string GetLegendItemTextEx() { return ("(TrendLine)"); } #endregion #endregion #region Copy/CopyTo public override ChartVisualElement Copy() { TrendLine copy = new TrendLine(); CopyTo(copy); return (copy); } public override void CopyTo(ChartVisualElement copy) { TrendLine c = copy as TrendLine; if (c != null) { base.CopyTo(c); c.TrendLineVisualStyle = (_TrendLineVisualStyle != null) ? TrendLineVisualStyle.Copy() : null; c.ValueX1 = ValueX1; c.ValueX2 = ValueX2; } } #endregion #region GetSerialData internal override SerialElementCollection GetSerialData(string serialName) { SerialElementCollection sec = new SerialElementCollection(); if (serialName != null) { if (serialName.Equals("") == true) serialName = "TrendLine"; sec.AddStartElement(serialName); } if (_TrendLineVisualStyle != null && _TrendLineVisualStyle.IsEmpty == false) sec.AddElement(_TrendLineVisualStyle.GetSerialData("TrendLineVisualStyle")); sec.AddDataValue("ValueX1", ValueX1, null); sec.AddDataValue("ValueX2", ValueX2, 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 "ValueX1": ValueX1 = se.DataValue; break; case "ValueX2": ValueX2 = se.DataValue; break; default: base.ProcessValue(se); break; } } #endregion #region ProcessCollection internal override void ProcessCollection(SerialElement se) { SerialElementCollection sec = se.Sec; switch (se.Name) { case "TrendLineVisualStyle": sec.PutSerialData(TrendLineVisualStyle); break; default: base.ProcessCollection(se); break; } } #endregion #endregion #region IDisposable public override void Dispose() { TrendLineVisualStyle = null; base.Dispose(); } #endregion } #endregion public abstract class ChartIndicator : ChartVisualElement, ILegendItem { #region Private variables private States _States; private string _LegendText; private ChartLegendItem _LegendItem; private ChartLegendItemVisualStyles _ChartLegendItemVisualStyles; private int _ValueYIndex; #endregion public ChartIndicator() { InitDefaultStates(); } #region InitDefaultStates private void InitDefaultStates() { SetState(States.CheckedInLegend, true); SetState(States.ShowInLegend, true); SetState(States.ShowInParentLegend, true); SetState(States.ShowCheckBoxInLegend, true); SetState(States.ShowMarkerInLegend, true); } #endregion #region Public properties #region DisplayOnTop /// /// Gets or sets whether Indicator is displayed on top of chart data. /// [DefaultValue(false), Category("Appearance")] [Description("Indicates whether Indicator is displayed on top of chart data.")] public bool DisplayOnTop { get { return (TestState(States.DisplayOnTop)); } set { if (value != DisplayOnTop) { SetState(States.DisplayOnTop, value); OnPropertyChangedEx("DisplayOnTop", VisualChangeType.Render); } } } #endregion #region IndicatorType /// /// Indicator type /// public virtual ChartIndicatorType IndicatorType { get { throw new NotImplementedException(); } } #endregion #region Intercept /// /// Gets the Indicator Line's Intercept (ie. the 'b' portion of 'y = mx + b'). /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public double Intercept { get { ChartSeries series = Parent as ChartSeries; if (series == null) throw new Exception("Indicator Line not associated with a ChartSeries."); ChartXy chartXy = series.Parent as ChartXy; if (chartXy == null) throw new Exception("Indicator Line not associated with a ChartXy."); SortedSeriesPoints ssp = series.GetSortedSeriesPoints(chartXy); ssp.SlopeIndex = ValueYIndex; return (ssp.Intercept); } } #endregion #region IsDisplayed /// /// Gets whether the Indicator is displayed. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsDisplayed { get { return ((Visible == true) && (ShowCheckBoxInLegend == false || CheckedInLegend == true)); } } #endregion #region Slope /// /// Gets the Indicator Line's Slope (ie. the 'm' portion of 'y = mx + b'). /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public double Slope { get { ChartSeries series = Parent as ChartSeries; if (series == null) throw new Exception("Indicator Line not associated with a ChartSeries."); ChartXy chartXy = series.Parent as ChartXy; if (chartXy == null) throw new Exception("Indicator Line not associated with a ChartXy."); SortedSeriesPoints ssp = series.GetSortedSeriesPoints(chartXy); ssp.SlopeIndex = ValueYIndex; return (ssp.Slope); } } #endregion #region ValueYIndex /// /// Gets or sets the ValueY index to use for the slope/intercept. /// [DefaultValue(0), Category("Appearance")] [Description("Indicates the ValueY index to use for the slope/intercept.")] public int ValueYIndex { get { return (_ValueYIndex); } set { if (value != _ValueYIndex) { _ValueYIndex = value; OnPropertyChangedEx("ValueYIndex", VisualChangeType.Layout); } } } #endregion #endregion #region ArrangeOverride protected override void ArrangeOverride(ChartLayoutInfo layoutInfo) { } #endregion #region MeasureOverride protected override void MeasureOverride(ChartLayoutInfo layoutInfo) { } #endregion #region RenderOverride protected override void RenderOverride(ChartRenderInfo renderInfo) { } #endregion #region ILegendItem #region ChartLegendItemVisualStyles /// /// Gets or sets the visual styles for the Legend item. /// [Category("Style")] [Description("Indicates the visual styles for the Legend item.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ChartLegendItemVisualStyles ChartLegendItemVisualStyles { get { if (_ChartLegendItemVisualStyles == null) { _ChartLegendItemVisualStyles = new ChartLegendItemVisualStyles(); StyleVisualChangeHandler(null, _ChartLegendItemVisualStyles); } return (_ChartLegendItemVisualStyles); } set { if (_ChartLegendItemVisualStyles != value) { ChartLegendItemVisualStyles oldValue = _ChartLegendItemVisualStyles; _ChartLegendItemVisualStyles = value; OnStyleChanged("ChartLegendItemVisualStyles", oldValue, value); if (oldValue != null) oldValue.Dispose(); } } } #endregion #region CheckedInLegend /// /// Gets or sets whether the Line is checked in the Legend. /// [DefaultValue(true), Category("Appearance")] [Description("Indicates whether the Line is checked in the Legend.")] public bool CheckedInLegend { get { return (TestState(States.CheckedInLegend)); } set { if (value != CheckedInLegend) { SetState(States.CheckedInLegend, value); if (LegendItem != null) LegendItem.UpdateCheckState(); OnPropertyChangedEx("CheckedInLegend", VisualChangeType.Render); } } } #endregion #region ShowCheckBoxInLegend /// /// Gets or sets whether a checkbox for the Line is shown in the Legend. /// [DefaultValue(true), Category("Appearance")] [Description("Indicates whether a checkbox for the Line is shown in the Legend.")] public bool ShowCheckBoxInLegend { get { return (TestState(States.ShowCheckBoxInLegend)); } set { if (value != ShowCheckBoxInLegend) { SetState(States.ShowCheckBoxInLegend, value); OnPropertyChangedEx("ShowCheckBoxInLegend", VisualChangeType.Layout); } } } #endregion #region ShowInLegend /// /// Gets or sets whether the Line is shown in the Legend. /// [DefaultValue(true), Category("Appearance")] [Description("Indicates whether theLine is shown in the Legend.")] public bool ShowInLegend { get { return (TestState(States.ShowInLegend)); } set { if (value != ShowInLegend) { SetState(States.ShowInLegend, value); OnPropertyChangedEx("ShowInLegend", VisualChangeType.Layout); } } } #endregion #region ShowInParentLegend /// /// Gets or sets whether the Line is shown in parent Legend(s). /// [DefaultValue(true), Category("Appearance")] [Description("Indicates whether the Line is shown in parent Legend(s).")] public bool ShowInParentLegend { get { return (TestState(States.ShowInParentLegend)); } set { if (value != ShowInParentLegend) { SetState(States.ShowInParentLegend, value); OnPropertyChangedEx("ShowInParentLegend", VisualChangeType.Layout); } } } #endregion #region ShowMarkerInLegend /// /// Gets or sets whether the Line Marker is shown in the Legend. /// [DefaultValue(true), Category("Appearance")] [Description("Indicates whether the Line Marker is shown in the Legend.")] public bool ShowMarkerInLegend { get { return (TestState(States.ShowMarkerInLegend)); } set { if (value != ShowMarkerInLegend) { SetState(States.ShowMarkerInLegend, value); OnPropertyChangedEx("ShowMarkerInLegend", VisualChangeType.Layout); } } } #endregion #region LegendItem /// /// Gets the item's parent LegendItem. /// [Description("Indicates the item's parent LegendItem.")] [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ChartLegendItem LegendItem { get { return (_LegendItem); } internal set { if (_LegendItem != null) _LegendItem.Dispose(); _LegendItem = value; } } #endregion #region LegendText /// /// Gets or sets the text to display in the legend. /// [DefaultValue(null), Category("DataLabel")] [Description("Indicates the text to display in the legend.")] public string LegendText { get { return (_LegendText); } set { if (value != _LegendText) { _LegendText = value; OnPropertyChangedEx("LegendText", Style.VisualChangeType.Layout); } } } #endregion #region GetLegendItem public ChartLegendItem GetLegendItem() { LegendItem = null; if (ShowInLegend == true) { LegendItem = new ChartLegendItem(); if (CheckedInLegend == true) _LegendItem.CheckState = CheckState.Checked; _LegendItem.Name = Name; _LegendItem.ItemText = LegendText; if (string.IsNullOrEmpty(Name) == true && string.IsNullOrEmpty(_LegendItem.ItemText) == true) { _LegendItem.ItemText = GetLegendItemTextEx(); } _LegendItem.ChartItems.Add(this); } return (_LegendItem); } protected virtual string GetLegendItemTextEx() { return ("(IndLine)"); } #endregion #region GetLegendItems public List GetLegendItems() { List list = new List(1); list.Add(GetLegendItem()); return (list); } #endregion #region GetLegendItemColor public Color GetLegendItemColor() { Color color = GetLegendItemColorEx(); if (color.IsEmpty == true) { ChartSeries series = Parent as ChartSeries; if (series != null) color = series.DefaultPaletteColor; } return (color); } protected virtual Color GetLegendItemColorEx() { return (Color.Empty); } #endregion #region RenderLegendItemMarker public void RenderLegendItemMarker(Graphics g, ChartLegendItem litem, ChartLegendItemVisualStyle style) { RenderLegendItemMarkerEx(g, litem, style); } protected virtual void RenderLegendItemMarkerEx(Graphics g, ChartLegendItem litem, ChartLegendItemVisualStyle style) { } #endregion #endregion #region CopyTo public override void CopyTo(ChartVisualElement copy) { ChartIndicator c = copy as ChartIndicator; if (c != null) { base.CopyTo(c); c.ChartLegendItemVisualStyles = (_ChartLegendItemVisualStyles != null) ? ChartLegendItemVisualStyles.Copy() : null; c.CheckedInLegend = CheckedInLegend; c.LegendText = LegendText; c.ShowCheckBoxInLegend = ShowCheckBoxInLegend; c.ShowInLegend = ShowInLegend; c.ShowInParentLegend = ShowInParentLegend; c.ShowMarkerInLegend = ShowMarkerInLegend; c.DisplayOnTop = DisplayOnTop; c.ValueYIndex = _ValueYIndex; } } #endregion #region GetSerialData internal override SerialElementCollection GetSerialData(string serialName) { SerialElementCollection sec = new SerialElementCollection(); if (serialName != null) { if (serialName.Equals("") == true) serialName = "ChartIndicator"; sec.AddStartElement(serialName); } if (_ChartLegendItemVisualStyles != null) sec.AddElement(_ChartLegendItemVisualStyles.GetSerialData("ChartLegendItemVisualStyles")); sec.AddValue("DisplayOnTop", DisplayOnTop, false); sec.AddValue("CheckedInLegend", CheckedInLegend, true); sec.AddValue("LegendText", LegendText, null); sec.AddValue("ShowCheckBoxInLegend", ShowCheckBoxInLegend, true); sec.AddValue("ShowInLegend", ShowInLegend, true); sec.AddValue("ShowInParentLegend", ShowInParentLegend, true); sec.AddValue("ShowMarkerInLegend", ShowMarkerInLegend, true); sec.AddValue("ValueYIndex", _ValueYIndex, 0); 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 "CheckedInLegend": CheckedInLegend = bool.Parse(se.StringValue); break; case "DisplayOnTop": DisplayOnTop = bool.Parse(se.StringValue); break; case "LegendText": LegendText = se.StringValue; break; case "ShowCheckBoxInLegend": ShowCheckBoxInLegend = bool.Parse(se.StringValue); break; case "ShowInLegend": ShowInLegend = bool.Parse(se.StringValue); break; case "ShowInParentLegend": ShowInParentLegend = bool.Parse(se.StringValue); break; case "ShowMarkerInLegend": ShowMarkerInLegend = bool.Parse(se.StringValue); break; case "ValueYIndex": ValueYIndex = int.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 "ChartLegendItemVisualStyles": sec.PutSerialData(ChartLegendItemVisualStyles); break; default: base.ProcessCollection(se); break; } } #endregion #endregion #region States [Flags] private enum States : uint { CheckedInLegend = (1U << 1), ShowCheckBoxInLegend = (1U << 2), ShowInLegend = (1U << 3), ShowInParentLegend = (1U << 4), ShowMarkerInLegend = (1U << 5), DisplayOnTop = (1U << 6), } #region TestState private bool TestState(States state) { return ((_States & state) == state); } #endregion #region SetState private void SetState(States state, bool value) { if (value == true) _States |= state; else _States &= ~state; } #endregion #endregion } #region enums #region ChartIndicatorType public enum ChartIndicatorType { TrendLine, RegressionLine, } #endregion #endregion }