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 { /// /// Represents a base chart. /// [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 _DataPropertyNamesY; private ChartBaseSeriesCollection _BaseSeries; private object _BoundSource; private List _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 /// /// Gets or sets whether series definitions are automatically generated. /// from the associated bound data. /// [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 /// /// Gets or sets the custom palette for the chart. /// [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 /// /// Gets or sets the name of the list or table /// in the data source that the Chart is bound to. /// [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 /// /// Gets or sets the data source that the Chart is bound to /// [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 /// /// Gets or sets the default name of the data field to which the Series Name is bound. /// [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 /// /// Gets or sets the default name of the data field to which the X-Axis data is bound. /// [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 /// /// Gets or sets the default names of the data fields to which the Y-Axis data is bound. /// [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 DataPropertyNamesY { get { if (_DataPropertyNamesY == null) { _DataPropertyNamesY = new CustomCollection(); _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 /// /// Gets or sets whether discrete bound item suport is enabled. /// This property permits each List bound item to be a separate object type. /// [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 /// /// Gets or sets the palette color group to use (Light/Medium/Dark/Color1/MonoBlue/etc). /// [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 /// /// Gets or sets whether default palette colors are utilized in reverse order. /// [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 /// /// Gets or sets the order in which the charts series are displayed. /// [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 /// /// Signals to the chart that an underlying chart series data has changed. /// [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 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 /// /// Gets the series default Palette color. /// /// public Color GetPaletteColor(int index) { return (GetPaletteColor(index, PaletteGroup)); } /// /// Gets the series default Palette color from the /// specified PaletteGroup. /// /// /// /// 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 GetLegendData() { LegendData = new List(); ChartBaseSeriesCollection baseSeries = BaseSeries; foreach (BaseSeries series in baseSeries) { if (series.Visible == true) { List 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(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 { /// /// NotSet. /// NotSet = -1, /// /// Colorful 'Color1' toned pallete /// Color1, /// /// Colorful 'Color2' toned pallete /// Color2, /// /// Colorful 'Color3' toned pallete /// Color3, /// /// Colorful 'Color4' toned pallete /// Color4, /// /// Monochromatic 'Blue' toned pallete /// MonoBlue, /// /// Monochromatic 'Red' toned pallete /// MonoRed, /// /// Monochromatic 'Green' toned pallete /// MonoGreen, /// /// Monochromatic 'Purple' toned pallete /// MonoPurple, /// /// Monochromatic 'Teal' toned pallete /// MonoTeal, /// /// Monochromatic 'Orange' toned pallete /// MonoOrange, /// /// Monochromatic 'Gray' toned pallete /// MonoGray, /// /// Colorful 'Light' toned pallete /// Light, /// /// Colorful 'Medium' toned pallete /// Medium, /// /// Colorful 'Dark' toned pallete /// Dark, /// /// Custom pallete (CustomPalette property) /// Custom } #endregion #endregion }