1237 lines
35 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms;
using DevComponents.DotNetBar.Charts.Primitives;
using DevComponents.DotNetBar.Charts.Style;
namespace DevComponents.DotNetBar.Charts
{
/// <summary>
/// Represents a base chart.
/// </summary>
[TypeConverter(typeof(BlankExpandableObjectConverter))]
public class BaseChart : ChartContainer
{
#region Static variables
// DNB base color palettes
static public Color[] PaletteLight = new Color[] {
ColorFactory.GetColor(136, 189, 230), ColorFactory.GetColor(251, 178, 88),
ColorFactory.GetColor(144, 205, 151), ColorFactory.GetColor(246, 170, 201),
ColorFactory.GetColor(191, 165, 84), ColorFactory.GetColor(188, 153, 199),
ColorFactory.GetColor(237, 221, 70), ColorFactory.GetColor(240, 126, 110),
ColorFactory.GetColor(140, 140, 140), };
static public Color[] PaletteMedium = new Color[] {
ColorFactory.GetColor(93, 165, 218), ColorFactory.GetColor(250, 164, 58),
ColorFactory.GetColor(96, 189, 104), ColorFactory.GetColor(241, 124, 176),
ColorFactory.GetColor(178, 145, 47), ColorFactory.GetColor(178, 118, 178),
ColorFactory.GetColor(222, 207, 63), ColorFactory.GetColor(241, 88, 84),
ColorFactory.GetColor(77, 77, 77), };
static public Color[] PaletteDark = new Color[] {
ColorFactory.GetColor(38, 93, 171), ColorFactory.GetColor(223, 92, 36),
ColorFactory.GetColor(5, 151, 72), ColorFactory.GetColor(229, 18, 111),
ColorFactory.GetColor(157, 114, 42), ColorFactory.GetColor(123, 58, 150),
ColorFactory.GetColor(199, 180, 46), ColorFactory.GetColor(203, 32, 39),
ColorFactory.GetColor(0, 0, 0), };
// Excel 2016 colors palettes
static public Color[] PaletteColor1 = new Color[] {
ColorFactory.GetColor(79, 129, 189), // Medium Blue
ColorFactory.GetColor(192, 80, 77), // Red
ColorFactory.GetColor(155, 187, 89), // Green
ColorFactory.GetColor(128, 100, 162), // Purple
ColorFactory.GetColor(75, 172, 198), // Light Blue
ColorFactory.GetColor(247, 150, 70), }; // Orange
static public Color[] PaletteColor2 = new Color[] {
ColorFactory.GetColor(79, 129, 180), // Medium Blue
ColorFactory.GetColor(155, 187, 89), // Green
ColorFactory.GetColor(75, 172, 198), // Light Blue
ColorFactory.GetColor(44, 76, 116), // Dark Blue
ColorFactory.GetColor(95, 117, 48), // Dark Green
ColorFactory.GetColor(39, 106, 124), }; // Dark Cyan
static public Color[] PaletteColor3 = new Color[] {
ColorFactory.GetColor(192, 80, 77), // Red
ColorFactory.GetColor(128, 100, 162), // Purple
ColorFactory.GetColor(247, 150, 70), // Orange
ColorFactory.GetColor(119, 44, 42), // Dark Red
ColorFactory.GetColor(77, 59, 98), // Dark Purple
ColorFactory.GetColor(182, 87, 8), }; // Dark Orange
static public Color[] PaletteColor4 = new Color[] {
ColorFactory.GetColor(247, 150, 70), // Orange
ColorFactory.GetColor(75, 172, 198), // Light Blue
ColorFactory.GetColor(128, 100, 162), // Purple
ColorFactory.GetColor(182, 87, 8), // Dark Orange
ColorFactory.GetColor(39, 106, 124), // Dark Cyan
ColorFactory.GetColor(77, 59, 98), }; // Dark Purple
// Monochrome
static public Color[] PaletteMonoBlue = new Color[] {
ColorFactory.GetColor(56, 93, 138), ColorFactory.GetColor(66, 109, 161),
ColorFactory.GetColor(75, 123, 180), ColorFactory.GetColor(115, 148, 197),
ColorFactory.GetColor(161, 180, 212), ColorFactory.GetColor(194, 205, 225), };
static public Color[] PaletteMonoRed = new Color[] {
ColorFactory.GetColor(140, 56, 54), ColorFactory.GetColor(164, 67, 64),
ColorFactory.GetColor(183, 76, 73), ColorFactory.GetColor(200, 161, 160),
ColorFactory.GetColor(214, 180, 212), ColorFactory.GetColor(226, 194, 194), };
static public Color[] PaletteMonoGreen = new Color[] {
ColorFactory.GetColor(113, 137, 63), ColorFactory.GetColor(132, 159, 75),
ColorFactory.GetColor(148, 178, 85), ColorFactory.GetColor(169, 195, 121),
ColorFactory.GetColor(192, 210, 164), ColorFactory.GetColor(213, 224, 196), };
static public Color[] PaletteMonoPurple = new Color[] {
ColorFactory.GetColor(92, 71, 118), ColorFactory.GetColor(108, 84, 138),
ColorFactory.GetColor(122, 95, 154), ColorFactory.GetColor(148, 128, 174),
ColorFactory.GetColor(179, 168, 196), ColorFactory.GetColor(205, 198, 215), };
static public Color[] PaletteMonoTeal = new Color[] {
ColorFactory.GetColor(53, 125, 145), ColorFactory.GetColor(63, 146, 169),
ColorFactory.GetColor(71, 164, 189), ColorFactory.GetColor(112, 183, 205),
ColorFactory.GetColor(160, 202, 217), ColorFactory.GetColor(193, 219, 229), };
static public Color[] PaletteMonoOrange = new Color[] {
ColorFactory.GetColor(182, 109, 49), ColorFactory.GetColor(211, 127, 58),
ColorFactory.GetColor(236, 143, 66), ColorFactory.GetColor(248, 165, 110),
ColorFactory.GetColor(249, 190, 158), ColorFactory.GetColor(251, 211, 193), };
static public Color[] PaletteMonoGray = new Color[] {
ColorFactory.GetColor(95, 95, 95), ColorFactory.GetColor(179, 179, 179),
ColorFactory.GetColor(137, 137, 137), ColorFactory.GetColor(33, 33, 33),
ColorFactory.GetColor(218, 218, 218), ColorFactory.GetColor(170, 170, 170), };
// Palette groups
static public Color[][] PaletteGroups = new Color[][] {
PaletteColor1, PaletteColor2, PaletteColor3, PaletteColor4,
PaletteMonoBlue, PaletteMonoRed, PaletteMonoGreen,
PaletteMonoPurple, PaletteMonoTeal, PaletteMonoOrange, PaletteMonoGray,
PaletteLight, PaletteMedium, PaletteDark, };
#endregion
#region Private variables
private States _States;
private object _DataSource;
private string _DataMember;
private DataBinder _DataBinder;
private string _DataPropertyNameSeries;
private string _DataPropertyNameX;
private CustomCollection<string> _DataPropertyNamesY;
private ChartBaseSeriesCollection _BaseSeries;
private object _BoundSource;
private List<ChartLegendItem> _LegendData;
private PaletteGroup _PaletteGroup = PaletteGroup.Color1;
private Color[] _CustomPalette;
private int _SeriesPointCount;
private int _SeriesLayoutCount;
private SeriesDisplayOrder _SeriesDisplayOrder = SeriesDisplayOrder.NotSet;
#endregion
public BaseChart()
{
InitDefaultStates();
VScrollBar.Inverted = true;
}
#region InitDefaultStates
private void InitDefaultStates()
{
SetState(States.SeriesRangeChanged, true);
}
#endregion
#region Public properties
#region AutoGenSeriesCollection
///<summary>
/// Gets or sets whether series definitions are automatically generated.
/// from the associated bound data.
///</summary>
[DefaultValue(false), Category("Data")]
[Description("Indicates whether series definitions are automatically generated from the associated bound data.")]
public bool AutoGenSeriesCollection
{
get { return (TestState(States.AutoGenSeriesCollection)); }
set
{
if (value != AutoGenSeriesCollection)
{
SetState(States.AutoGenSeriesCollection, value);
OnPropertyChangedEx("AutoGenSeriesCollection", VisualChangeType.Layout);
}
}
}
#endregion
#region BaseSeries
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ChartBaseSeriesCollection BaseSeries
{
get
{
if (_BaseSeries == null)
_BaseSeries = GetBaseSeries();
return (_BaseSeries);
}
set { _BaseSeries = value; }
}
#endregion
#region GetBaseSeries
internal virtual ChartBaseSeriesCollection GetBaseSeries()
{
throw new NotImplementedException();
}
#endregion
#region CustomPalette
///<summary>
/// Gets or sets the custom palette for the chart.
///</summary>
[DefaultValue(null), Category("Appearance")]
[Description("Indicates the custom palette for the chart.")]
public virtual Color[] CustomPalette
{
get { return (_CustomPalette); }
set
{
_CustomPalette = value;
OnPropertyChangedEx("CustomPalette", VisualChangeType.Layout);
}
}
#endregion
#region DataMember
///<summary>
/// Gets or sets the name of the list or table
/// in the data source that the Chart is bound to.
///</summary>
[DefaultValue(null), Category("Data")]
[Description("Indicates the name of the list or table in the data source that the Chart is bound to.")]
public string DataMember
{
get { return (_DataMember); }
set
{
if (_DataBinder != null)
_DataBinder.Clear();
_DataMember = value;
NeedToUpdateBindings = true;
OnPropertyChangedEx("DataMember", VisualChangeType.Layout);
}
}
#endregion
#region DataSource
///<summary>
/// Gets or sets the data source that the Chart is bound to
///</summary>
[DefaultValue(null), AttributeProvider(typeof(IListSource)), Category("Data")]
[Description("Indicates the data source that the Chart is bound to.")]
public object DataSource
{
get { return (_DataSource); }
set
{
if (_DataBinder != null)
_DataBinder.Clear();
_DataSource = value;
NeedToUpdateBindings = true;
OnPropertyChangedEx("DataSource", VisualChangeType.Layout);
}
}
#endregion
#region DataPropertyNameSeries
///<summary>
/// Gets or sets the default name of the data field to which the Series Name is bound.
///</summary>
[DefaultValue(null), Category("Data")]
[Description("Indicates the default name of the data field to which the Series Name is bound.")]
public string DataPropertyNameSeries
{
get { return (_DataPropertyNameSeries); }
set
{
if (value != _DataPropertyNameSeries)
{
_DataPropertyNameSeries = value;
NeedToUpdateBindings = true;
InvalidateLayout();
OnPropertyChangedEx("DataPropertyNameSeries", VisualChangeType.Layout);
}
}
}
#endregion
#region DataPropertyNameX
///<summary>
/// Gets or sets the default name of the data field to which the X-Axis data is bound.
///</summary>
[DefaultValue(null), Category("Data")]
[Description("Indicates the default name of the data field to which the X-Axis data is bound.")]
public string DataPropertyNameX
{
get { return (_DataPropertyNameX); }
set
{
if (value != _DataPropertyNameX)
{
_DataPropertyNameX = value;
NeedToUpdateBindings = true;
InvalidateLayout();
OnPropertyChangedEx("DataPropertyNameX", VisualChangeType.Layout);
}
}
}
#endregion
#region DataPropertyNamesY
///<summary>
/// Gets or sets the default names of the data fields to which the Y-Axis data is bound.
///</summary>
[DefaultValue(null), Category("Data")]
[Description("Indicates the default names of the data fields to which the Y-Axis data is bound.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version= 2.0.0.0, Culture=neutral," +
"PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public CustomCollection<string> DataPropertyNamesY
{
get
{
if (_DataPropertyNamesY == null)
{
_DataPropertyNamesY = new CustomCollection<string>();
_DataPropertyNamesY.CollectionChanged += DataPropertyNamesY_CollectionChanged;
}
return (_DataPropertyNamesY);
}
set
{
if (value != _DataPropertyNamesY)
{
if (_DataPropertyNamesY != null)
{
_DataPropertyNamesY.Clear();
_DataPropertyNamesY.CollectionChanged -= DataPropertyNamesY_CollectionChanged;
}
_DataPropertyNamesY = value;
if (_DataPropertyNamesY != null)
_DataPropertyNamesY.CollectionChanged += DataPropertyNamesY_CollectionChanged;
OnPropertyChangedEx("DataPropertyNamesY", Style.VisualChangeType.Layout);
}
}
}
void DataPropertyNamesY_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
NeedToUpdateBindings = true;
InvalidateLayout();
}
#endregion
#region EnableDiscreteBoundItems
/// <summary>
/// Gets or sets whether discrete bound item suport is enabled.
/// This property permits each List bound item to be a separate object type.
/// </summary>
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool EnableDiscreteBoundItems
{
get { return (TestState(States.EnableDiscreteBoundItems)); }
set
{
if (value != EnableDiscreteBoundItems)
{
SetState(States.EnableDiscreteBoundItems, value);
OnPropertyChangedEx("EnableDiscreteBoundItems", VisualChangeType.Layout);
}
}
}
#endregion
#region PaletteGroup
/// <summary>
/// Gets or sets the palette color group to use (Light/Medium/Dark/Color1/MonoBlue/etc).
/// </summary>
[DefaultValue(PaletteGroup.Color1), Category("Appearance")]
[Description("Indicates the palette color group to use (Light/Medium/Dark/Color1/MonoBlue/etc.).")]
public virtual PaletteGroup PaletteGroup
{
get { return (_PaletteGroup); }
set
{
if (value != _PaletteGroup)
{
_PaletteGroup = value;
OnPropertyChangedEx("PaletteGroup", VisualChangeType.Layout);
}
}
}
#endregion
#region ReversePaletteColors
///<summary>
/// Gets or sets whether default palette colors are utilized in reverse order.
///</summary>
[DefaultValue(false), Category("Behavior")]
[Description("Indicates whether default palette colors are utilized in reverse order.")]
public virtual bool ReversePaletteColors
{
get { return (TestState(States.ReversePaletteColors)); }
set
{
if (value != ReversePaletteColors)
{
SetState(States.ReversePaletteColors, value);
OnPropertyChangedEx("ReversePaletteColors", VisualChangeType.Layout);
}
}
}
#endregion
#region SeriesDisplayOrder
/// <summary>
/// Gets or sets the order in which the charts series are displayed.
/// </summary>
[DefaultValue(SeriesDisplayOrder.NotSet), Category("Display")]
[Description("Indicates the order in which the charts series are displayed.")]
public SeriesDisplayOrder SeriesDisplayOrder
{
get { return (_SeriesDisplayOrder); }
set
{
if (value != _SeriesDisplayOrder)
{
_SeriesDisplayOrder = value;
OnPropertyChangedEx("SeriesDisplayOrder", VisualChangeType.Layout);
}
}
}
#endregion
#region SeriesRangeChanged
/// <summary>
/// Signals to the chart that an underlying chart series data has changed.
/// </summary>
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool SeriesRangeChanged
{
get { return (TestState(States.SeriesRangeChanged)); }
set { SetState(States.SeriesRangeChanged, value); }
}
#endregion
#endregion
#region Internal properties
#region DataBinder
internal DataBinder DataBinder
{
get
{
if (_DataBinder == null)
_DataBinder = new DataBinder(this);
return (_DataBinder);
}
set
{
if (_DataBinder != null)
_DataBinder.Clear();
_DataBinder = value;
}
}
#endregion
#region LegendData
internal List<ChartLegendItem> LegendData
{
get { return (_LegendData); }
set { _LegendData = value; }
}
#endregion
#region NeedToUpdateBindings
internal bool NeedToUpdateBindings
{
get { return (TestState(States.NeedToUpdateBindings)); }
set { SetState(States.NeedToUpdateBindings, value); }
}
#endregion
#region SeriesLayoutCount
internal int SeriesLayoutCount
{
get { return (_SeriesLayoutCount); }
set { _SeriesLayoutCount = value; }
}
#endregion
#region SeriesPointCount
internal int SeriesPointCount
{
get { return (_SeriesPointCount); }
set { _SeriesPointCount = value; }
}
#endregion
#region VisibleSeriesCount
internal int VisibleSeriesCount
{
get
{
int count = 0;
ChartBaseSeriesCollection baseSeries = BaseSeries;
foreach (BaseSeries series in baseSeries)
{
if (series.Visible == true)
count++;
}
return (count);
}
}
#endregion
#region DisplayedSeriesCount
internal int DisplayedSeriesCount
{
get
{
int count = 0;
ChartBaseSeriesCollection baseSeries = BaseSeries;
foreach (BaseSeries series in baseSeries)
{
if (series.Visible == true)
{
if (Legend.Visible == false ||
(series.ShowCheckBoxInLegend == false || series.CheckedInLegend == true))
{
count++;
}
}
}
return (count);
}
}
#endregion
#endregion
#region RenderFrameBackground
protected virtual void RenderFrameBackground(
Graphics g, Rectangle bounds, ContainerVisualStyle cstyle)
{
ChartControl chartControl = ChartControl;
if (chartControl.DoPreRenderFrameBackgroundEvent(g, this, bounds) == false)
{
cstyle.RenderBackground(g, bounds);
chartControl.DoPostRenderFrameBackgroundEvent(g, this, bounds);
}
}
#endregion
#region UpdateDataBindings
protected void UpdateDataBindings()
{
if (NeedToUpdateBindings == true)
{
NeedToUpdateBindings = false;
DataBinder.Clear();
object boundSource = null;
if (DataSource != null)
_BoundSource = DataBinder.DataConnect(DataSource, DataMember);
if (boundSource != null)
ChartControl.DoChartDataBindingCompleteEvent(this, boundSource);
}
}
#endregion
#region FinalizeDataBindings
protected void FinalizeDataBindings()
{
if (_BoundSource != null)
{
ChartControl.DoChartDataBindingCompleteEvent(this, _BoundSource);
_BoundSource = null;
}
}
#endregion
#region DataCompare
internal int DataCompare(object value1, object value2)
{
if (value1 == value2)
return (0);
if (value1 == null)
return (-1);
if (value2 == null)
return (1);
if (value1.GetType() == value2.GetType())
{
IComparable icompa = value1 as IComparable;
if (icompa == null)
throw new Exception("Values must support IComparable");
return (icompa.CompareTo(value2));
}
double v1 = Convert.ToDouble(value1);
double v2 = Convert.ToDouble(value2);
return (v1.CompareTo(v2));
}
#endregion
#region GetAutoGenSeriesType
internal virtual SeriesType GetAutoGenSeriesType()
{
throw new NotImplementedException();
}
#endregion
#region GetAutoGenSeriesNameCount
internal virtual int GetAutoGenSeriesNameCount()
{
throw new NotImplementedException();
}
#endregion
#region GetNewSeries
internal virtual BaseSeries GetNewSeries()
{
throw new NotImplementedException();
}
#endregion
#region AddChartSeries
internal virtual void AddChartSeries(BaseSeries series)
{
throw new NotImplementedException();
}
#endregion
#region GetPaletteColor
/// <summary>
/// Gets the series default Palette color.
/// </summary>
/// <returns></returns>
public Color GetPaletteColor(int index)
{
return (GetPaletteColor(index, PaletteGroup));
}
/// <summary>
/// Gets the series default Palette color from the
/// specified PaletteGroup.
/// </summary>
/// <param name="index"></param>
/// <param name="group"></param>
/// <returns></returns>
public Color GetPaletteColor(int index, PaletteGroup group)
{
if (group == PaletteGroup.NotSet)
group = PaletteGroup.Color1;
Color[] palette = (group == PaletteGroup.Custom)
? CustomPalette : PaletteGroups[(int)group];
return (GetPaletteColor(index, palette, ReversePaletteColors));
}
internal Color GetPaletteColor(
int index, Color[] palette, bool reversePaletteColors)
{
if (palette == null || palette.Length == 0)
palette = PaletteColor1;
int n = index % palette.Length;
if (reversePaletteColors == true)
n = (palette.Length - n - 1);
index = index % (palette.Length * 3);
Color color = palette[n];
if (color.IsEmpty == false)
{
n = index / palette.Length;
if (n > 0)
{
int z = (int)(Math.Ceiling(n * .75d));
float fn = (float)(z) * .05f;
if ((n % 2) == 0)
color = ControlPaint.Light(color, fn);
else
color = ControlPaint.Dark(color, fn);
}
}
return (color);
}
#endregion
#region GetShadowBounds
internal Rectangle GetShadowBounds(Rectangle bounds)
{
bounds.Width -= 3;
bounds.Height -= 3;
return (bounds);
}
#endregion
#region Style handling
#region ApplyStyles
public override void ApplyStyles(BaseVisualStyle style)
{
base.ApplyStyles(style);
}
#endregion
#region ClearEffectiveStyles
protected override void ClearEffectiveStyles()
{
base.ClearEffectiveStyles();
ChartBaseSeriesCollection baseSeries = BaseSeries;
foreach (BaseSeries series in baseSeries)
series.InvalidateStyle();
}
#endregion
#endregion
#region ILegendData
#region GetLegendData
public override List<ChartLegendItem> GetLegendData()
{
LegendData = new List<ChartLegendItem>();
ChartBaseSeriesCollection baseSeries = BaseSeries;
foreach (BaseSeries series in baseSeries)
{
if (series.Visible == true)
{
List<ChartLegendItem> items = series.GetLegendItems();
if (items != null && items.Count > 0)
_LegendData.AddRange(items);
}
}
return (_LegendData);
}
#endregion
#endregion
#region OnSeriesCheckStateChanged
internal virtual void OnSeriesCheckStateChanged(string property)
{
}
#endregion
#region Copy/CopyTo
public override ChartVisualElement Copy()
{
BaseChart copy = new BaseChart();
CopyTo(copy);
return (copy);
}
public override void CopyTo(ChartVisualElement copy)
{
BaseChart c = copy as BaseChart;
if (c != null)
{
base.CopyTo(c);
c.AutoGenSeriesCollection = AutoGenSeriesCollection;
if (_CustomPalette != null)
{
c.CustomPalette = new Color[CustomPalette.Length];
CustomPalette.CopyTo(c.CustomPalette, 0);
}
c.DataMember = DataMember;
c.DataSource = DataSource;
c.DataPropertyNameSeries = DataPropertyNameSeries;
c.DataPropertyNameX = DataPropertyNameX;
c.DataPropertyNamesY = DataPropertyNamesY;
c.EnableDiscreteBoundItems = EnableDiscreteBoundItems;
c.PaletteGroup = PaletteGroup;
c.ReversePaletteColors = ReversePaletteColors;
}
}
#endregion
#region GetSerialData
internal override SerialElementCollection GetSerialData(string serialName)
{
SerialElementCollection sec = new SerialElementCollection();
if (serialName != null)
{
if (serialName.Equals("") == true)
serialName = "BaseChart";
sec.AddStartElement(serialName);
}
sec.AddValue("AutoGenSeriesCollection", AutoGenSeriesCollection, false);
if (_CustomPalette != null && _CustomPalette.Length > 0)
{
sec.AddStartElement("CustomPalette count=\"" + _CustomPalette.Length + "\"");
foreach (Color color in _CustomPalette)
sec.AddValue("PaletteColor", color);
sec.AddEndElement("CustomPalette");
}
sec.AddDataValue("DataSource", DataSource, null);
sec.AddValue("DataMember", DataMember, null);
sec.AddValue("DataPropertyNameSeries", DataPropertyNameSeries, null);
sec.AddValue("DataPropertyNameX", DataPropertyNameX, null);
if (_DataPropertyNamesY != null && _DataPropertyNamesY.Count > 0)
{
sec.AddStartElement("DataPropertyNamesYs count=\"" + _DataPropertyNamesY.Count + "\"");
foreach (string s in _DataPropertyNamesY)
sec.AddValue("DataPropertyNamesY", s);
sec.AddEndElement("DataPropertyNamesYs");
}
sec.AddValue("EnableDiscreteBoundItems", EnableDiscreteBoundItems, false);
sec.AddValue("PaletteGroup", PaletteGroup, PaletteGroup.Color1);
sec.AddValue("ReversePaletteColors", ReversePaletteColors, false);
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 "AutoGenSeriesCollection":
AutoGenSeriesCollection = bool.Parse(se.StringValue);
break;
case "DataMember":
DataMember = se.StringValue;
break;
case "DataSource":
DataSource = se.DataValue;
break;
case "DataPropertyNameSeries":
DataPropertyNameSeries = se.StringValue;
break;
case "DataPropertyNameX":
DataPropertyNameX = se.StringValue;
break;
case "DataPropertyNamesY":
DataPropertyNamesY.Add(se.StringValue);
break;
case "EnableDiscreteBoundItems":
EnableDiscreteBoundItems = bool.Parse(se.StringValue);
break;
case "PaletteColor":
CustomPalette[se.ValueIndex] = se.GetValueColor();
break;
case "PaletteGroup":
PaletteGroup = (PaletteGroup)se.GetValueEnum(typeof(PaletteGroup));
break;
case "ReversePaletteColors":
ReversePaletteColors = bool.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 "ChartContainers":
sec.PutSerialData(this);
break;
case "CustomPalette":
if (se.ArrayCount > 0)
{
CustomPalette = new Color[se.ArrayCount];
sec.PutSerialData(this);
}
break;
case "DataPropertyNamesYs":
if (se.ArrayCount > 0)
{
DataPropertyNamesY = new CustomCollection<string>(se.ArrayCount);
sec.PutSerialData(this);
}
break;
default:
base.ProcessCollection(se);
break;
}
}
#endregion
#endregion
#region States
[Flags]
private enum States : uint
{
AutoGenSeriesCollection = (1U << 0),
EnableDiscreteBoundItems = (1U << 1),
ReversePaletteColors = (1U << 2),
//------------
SeriesRangeChanged = (1U << 3),
NeedToUpdateBindings = (1U << 4),
IsSelected = (1U << 5),
}
#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 IDisposable
public override void Dispose()
{
base.Dispose();
}
#endregion
}
#region enums
#region PaletteGroup
public enum PaletteGroup
{
/// <summary>
/// NotSet.
/// </summary>
NotSet = -1,
/// <summary>
/// Colorful 'Color1' toned pallete
/// </summary>
Color1,
/// <summary>
/// Colorful 'Color2' toned pallete
/// </summary>
Color2,
/// <summary>
/// Colorful 'Color3' toned pallete
/// </summary>
Color3,
/// <summary>
/// Colorful 'Color4' toned pallete
/// </summary>
Color4,
/// <summary>
/// Monochromatic 'Blue' toned pallete
/// </summary>
MonoBlue,
/// <summary>
/// Monochromatic 'Red' toned pallete
/// </summary>
MonoRed,
/// <summary>
/// Monochromatic 'Green' toned pallete
/// </summary>
MonoGreen,
/// <summary>
/// Monochromatic 'Purple' toned pallete
/// </summary>
MonoPurple,
/// <summary>
/// Monochromatic 'Teal' toned pallete
/// </summary>
MonoTeal,
/// <summary>
/// Monochromatic 'Orange' toned pallete
/// </summary>
MonoOrange,
/// <summary>
/// Monochromatic 'Gray' toned pallete
/// </summary>
MonoGray,
/// <summary>
/// Colorful 'Light' toned pallete
/// </summary>
Light,
/// <summary>
/// Colorful 'Medium' toned pallete
/// </summary>
Medium,
/// <summary>
/// Colorful 'Dark' toned pallete
/// </summary>
Dark,
/// <summary>
/// Custom pallete (CustomPalette property)
/// </summary>
Custom
}
#endregion
#endregion
}