1 //-------------------------------------------------------------
2 // <copyright company=�Microsoft Corporation�>
3 //   Copyright � Microsoft Corporation. All Rights Reserved.
4 // </copyright>
5 //-------------------------------------------------------------
6 // @owner=alexgor, deliant
7 //=================================================================
8 //  File:		CustomProperties.cs
9 //
10 //  Namespace:	System.Web.UI.WebControls[Windows.Forms].Charting.Utilities
11 //
12 //	Classes:	CustomPropertyRegistry, CustomPropertyInfo,
13 //              CustomPropertyName
14 //
15 //  Purpose:	CustomPropertyRegistry contains information for all
16 //              chart custom properties. This informatin is used at
17 //              design-time to provide simple editors for the
18 //              CustomProperty property of the Series and DataPoint.
19 //
20 // Custom Properties Overview:
21 // ---------------------------
22 //
23 // Different chart types may have unique settings that only apply to
24 // this chart type. For example, �Exploded� attribute on the data point
25 // only make sense in case of Pie and Doughnut chart types. Instead of
26 // adding properties that only will work with specific chart types
27 // CustomProperties were introduced.
28 //
29 // Custom properties are implemented using the CustomProperties property
30 // of both Series objects and their associated DataPoint objects. Here
31 // is an example of setting data point custom attribute:
32 //
33 //   Chart1.Series["Default"].Points[0][CustomPropertyName.Exploded] = "true";
34 //
35 // Custom attribute names are case-sensitive. You should be mindful of
36 // this fact when formatting custom properties in code-behind. Further,
37 // if the CustomProperty value contains a comma, then each comma must
38 // be preceded by a '\' character to escape the comma. This is useful
39 // when, for example, an RGB color value is set in your application.
40 // In such cases, the setting of custom properties that contain commas
41 // can either be done at runtime, or design-time.
42 //
43 //	Reviewed:	AG - Microsoft 5, 2007
44 //
45 //===================================================================
46 
47 
48 #region Used Namespaces
49 
50 using System;
51 using System.Drawing;
52 using System.Collections;
53 using System.ComponentModel;
54 using System.ComponentModel.Design;
55 
56 #if Microsoft_CONTROL
57 	using System.Windows.Forms.DataVisualization.Charting;
58 	using System.Windows.Forms.DataVisualization.Charting.ChartTypes;
59 #else
60 using System.Web.UI.DataVisualization.Charting;
61 using System.Web.UI.DataVisualization.Charting.ChartTypes;
62 #endif
63 
64 #endregion
65 
66 #if Microsoft_CONTROL
67 	namespace System.Windows.Forms.DataVisualization.Charting.Utilities
68 #else // Microsoft_CONTROL
69 	namespace System.Web.UI.DataVisualization.Charting.Utilities
70 #endif // Microsoft_CONTROL
71 {
72 	#region Enumerations
73 
74 
75 		/// <summary>
76 		/// Circular chart drawing style.
77 		/// </summary>
78 		internal enum PolarDrawingStyles
79 		{
80 			/// <summary>
81 			/// Series are drawn as lines.
82 			/// </summary>
83 			Line,
84 			/// <summary>
85 			/// Series are drawn as markers.
86 			/// </summary>
87 			Marker
88 		}
89 
90 		/// <summary>
91 		/// CircularAreaDrawingStyle
92 		/// </summary>
93 		internal enum CircularAreaDrawingStyles
94 		{
95 			/// <summary>
96 			/// Drawn as polygon
97 			/// </summary>
98 			Polygon,
99 
100 			/// <summary>
101 			/// Drawn as circle
102 			/// </summary>
103 			Circle = 1,
104 		}
105 
106 		/// <summary>
107 		/// Marker Style
108 		/// </summary>
109         internal enum ErrorBarMarkerStyles
110 		{
111 			/// <summary>
112 			/// Marker disabled
113 			/// </summary>
114 			None = 0,
115 
116 			/// <summary>
117 			/// The marker style is Square
118 			/// </summary>
119 			Square = 1,
120 
121 			/// <summary>
122 			/// The marker style is Circle
123 			/// </summary>
124 			Circle = 2,
125 
126 			/// <summary>
127 			/// The marker style is Diamond
128 			/// </summary>
129 			Diamond = 3,
130 
131 			/// <summary>
132 			/// The marker style is Triangle
133 			/// </summary>
134 			Triangle = 4,
135 
136 			/// <summary>
137 			/// The marker style is Cross
138 			/// </summary>
139 			Cross = 5,
140 
141 			/// <summary>
142 			/// The marker style is 4 corner star
143 			/// </summary>
144 			Star4 = 6,
145 
146 			/// <summary>
147 			/// The marker style is 5 corner star
148 			/// </summary>
149 			Star5 = 7,
150 
151 			/// <summary>
152 			/// The marker style is 6 corner star
153 			/// </summary>
154 			Star6 = 8,
155 
156 			/// <summary>
157 			/// The marker style is 10 corner star
158 			/// </summary>
159 			Star10 = 9,
160 
161 			/// <summary>
162 			/// Line marker
163 			/// </summary>
164 			Line = 10
165 
166 		};
167 
168 	/// <summary>
169 	/// AxisName of stock chart markers
170 	/// </summary>
171     internal enum StockShowOpenCloseTypes
172 	{
173 		/// <summary>
174 		/// Open and Close markers are shown.
175 		/// </summary>
176 		Both,
177 
178 		/// <summary>
179 		/// Only Open markers are shown.
180 		/// </summary>
181 		Open,
182 
183 		/// <summary>
184 		/// Only Close markers are shown.
185 		/// </summary>
186 		Close,
187 	}
188 
189 
190 	/// <summary>
191 	/// IsEmpty point value attribute
192 	/// </summary>
193     internal enum EmptyPointTypes
194 	{
195         /// <summary>
196         /// Average of two neighbor points is used.
197         /// </summary>
198 		Average,
199 
200 		/// <summary>
201 		/// Zero value is used
202 		/// </summary>
203 		Zero
204 	}
205 
206 	/// <summary>
207 	/// Stock chart point labels attribute
208 	/// </summary>
209     internal enum StockLabelValueTypes
210 	{
211 		/// <summary>
212 		/// High Y value is used to generate point label.
213 		/// </summary>
214 		High,
215 
216 		/// <summary>
217 		/// Low Y value is used to generate point label.
218 		/// </summary>
219 		Low,
220 
221 		/// <summary>
222 		/// Open Y value is used to generate point label.
223 		/// </summary>
224 		Open,
225 
226 		/// <summary>
227 		/// Close Y value is used to generate point label.
228 		/// </summary>
229 		Close,
230 	}
231 
232 		/// <summary>
233 		/// Data point label alignment.
234 		/// </summary>
235 		[Flags]
236         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")]
237         internal enum LabelAlignments
238 		{
239 			/// <summary>
240 			/// Automatic position.
241 			/// </summary>
242 			Auto = 0,
243 			/// <summary>
244 			/// Label aligned on the top of the marker.
245 			/// </summary>
246 			Top = 1,
247 			/// <summary>
248 			/// Label aligned on the bottom of the marker.
249 			/// </summary>
250 			Bottom = 2,
251 			/// <summary>
252 			/// Label aligned on the right of the marker.
253 			/// </summary>
254 			Right = 4,
255 			/// <summary>
256 			/// Label aligned on the left of the marker.
257 			/// </summary>
258 			Left = 8,
259 			/// <summary>
260 			/// Label aligned on the top-left of the marker.
261 			/// </summary>
262 			TopLeft = 16,
263 			/// <summary>
264 			/// Label aligned on the top-right of the marker.
265 			/// </summary>
266 			TopRight = 32,
267 			/// <summary>
268 			/// Label aligned on the bottom-left of the marker.
269 			/// </summary>
270 			BottomLeft = 64,
271 			/// <summary>
272 			/// Label aligned on the bottom-right of the marker.
273 			/// </summary>
274 			BottomRight = 128,
275 			/// <summary>
276 			/// Label aligned in the center of the marker.
277 			/// </summary>
278 			Center = 256,
279 		}
280 
281 	#endregion //Enumerations
282 
283     /// <summary>
284     /// CustomPropertyName class contains constant strings defining
285     /// names of all custom properties used in the chart.
286     /// </summary>
287     internal static class CustomPropertyName
288     {
289         #region Common Custom Properties Names
290 
291         internal const string DrawSideBySide = "DrawSideBySide";
292         internal const string EmptyPointValue = "EmptyPointValue";
293         internal const string IsXAxisQuantitative = "IsXAxisQuantitative";
294         internal const string BarLabelStyle = "BarLabelStyle";
295         internal const string StackedGroupName = "StackedGroupName";
296         internal const string DrawingStyle = "DrawingStyle";
297         internal const string PointWidth = "PointWidth";
298         internal const string PixelPointWidth = "PixelPointWidth";
299         internal const string MinPixelPointWidth = "MinPixelPointWidth";
300         internal const string MaxPixelPointWidth = "MaxPixelPointWidth";
301         internal const string PriceUpColor = "PriceUpColor";
302         internal const string PriceDownColor = "PriceDownColor";
303         internal const string LabelValueType = "LabelValueType";
304         internal const string OpenCloseStyle = "OpenCloseStyle";
305         internal const string ShowOpenClose = "ShowOpenClose";
306         internal const string BubbleScaleMin = "BubbleScaleMin";
307         internal const string BubbleScaleMax = "BubbleScaleMax";
308         internal const string BubbleMaxSize = "BubbleMaxSize";
309         internal const string BubbleMinSize = "BubbleMinSize";
310         internal const string BubbleUseSizeForLabel = "BubbleUseSizeForLabel";
311         internal const string PieDrawingStyle = "PieDrawingStyle";
312         internal const string CollectedStyle = "CollectedStyle";
313         internal const string CollectedThreshold = "CollectedThreshold";
314         internal const string CollectedThresholdUsePercent = "CollectedThresholdUsePercent";
315         internal const string CollectedSliceExploded = "CollectedSliceExploded";
316         internal const string CollectedLabel = "CollectedLabel";
317         internal const string CollectedLegendText = "CollectedLegendText";
318         internal const string CollectedToolTip = "CollectedToolTip";
319         internal const string CollectedColor = "CollectedColor";
320         internal const string CollectedChartShowLegend = "CollectedChartShowLegend";
321         internal const string CollectedChartShowLabels = "CollectedChartShowLabels";
322         internal const string PieStartAngle = "PieStartAngle";
323         internal const string Exploded = "Exploded";
324         internal const string LabelsRadialLineSize = "LabelsRadialLineSize";
325         internal const string LabelsHorizontalLineSize = "LabelsHorizontalLineSize";
326         internal const string PieLabelStyle = "PieLabelStyle";
327         internal const string MinimumRelativePieSize = "MinimumRelativePieSize";
328         internal const string _3DLabelLineSize = "3DLabelLineSize";
329         internal const string PieLineColor = "PieLineColor";
330         internal const string PieAutoAxisLabels = "AutoAxisLabels";
331         internal const string DoughnutRadius = "DoughnutRadius";
332         internal const string LabelStyle = "LabelStyle";
333         internal const string ShowMarkerLines = "ShowMarkerLines";
334         internal const string LineTension = "LineTension";
335         internal const string PixelPointDepth = "PixelPointDepth";
336         internal const string PixelPointGapDepth = "PixelPointGapDepth";
337         internal const string PermittedPixelError = "PermittedPixelError";
338         internal const string CircularLabelsStyle = "CircularLabelsStyle";
339         internal const string PolarDrawingStyle = "PolarDrawingStyle";
340         internal const string AreaDrawingStyle = "AreaDrawingStyle";
341         internal const string RadarDrawingStyle = "RadarDrawingStyle";
342         internal const string BoxPlotPercentile = "BoxPlotPercentile";
343         internal const string BoxPlotWhiskerPercentile = "BoxPlotWhiskerPercentile";
344         internal const string BoxPlotShowAverage = "BoxPlotShowAverage";
345         internal const string BoxPlotShowMedian = "BoxPlotShowMedian";
346         internal const string BoxPlotShowUnusualValues = "BoxPlotShowUnusualValues";
347         internal const string BoxPlotSeries = "BoxPlotSeries";
348         internal const string ErrorBarStyle = "ErrorBarStyle";
349         internal const string ErrorBarCenterMarkerStyle = "ErrorBarCenterMarkerStyle";
350         internal const string ErrorBarSeries = "ErrorBarSeries";
351         internal const string ErrorBarType = "ErrorBarType";
352         internal const string UsedYValueHigh = "UsedYValueHigh";
353         internal const string UsedYValueLow = "UsedYValueLow";
354         internal const string BoxSize = "BoxSize";
355         internal const string ProportionalSymbols = "ProportionalSymbols";
356         internal const string ReversalAmount = "ReversalAmount";
357         internal const string UsedYValue = "UsedYValue";
358         internal const string NumberOfLinesInBreak = "NumberOfLinesInBreak";
359         internal const string FunnelLabelStyle = "FunnelLabelStyle";
360         internal const string FunnelNeckWidth = "FunnelNeckWidth";
361         internal const string FunnelNeckHeight = "FunnelNeckHeight";
362         internal const string FunnelMinPointHeight = "FunnelMinPointHeight";
363         internal const string Funnel3DRotationAngle = "Funnel3DRotationAngle";
364         internal const string FunnelPointGap = "FunnelPointGap";
365         internal const string Funnel3DDrawingStyle = "Funnel3DDrawingStyle";
366         internal const string FunnelStyle = "FunnelStyle";
367         internal const string FunnelInsideLabelAlignment = "FunnelInsideLabelAlignment";
368         internal const string FunnelOutsideLabelPlacement = "FunnelOutsideLabelPlacement";
369         internal const string CalloutLineColor = "CalloutLineColor";
370         internal const string PyramidLabelStyle = "PyramidLabelStyle";
371         internal const string PyramidMinPointHeight = "PyramidMinPointHeight";
372         internal const string Pyramid3DRotationAngle = "Pyramid3DRotationAngle";
373         internal const string PyramidPointGap = "PyramidPointGap";
374         internal const string Pyramid3DDrawingStyle = "Pyramid3DDrawingStyle";
375         internal const string PyramidInsideLabelAlignment = "PyramidInsideLabelAlignment";
376         internal const string PyramidOutsideLabelPlacement = "PyramidOutsideLabelPlacement";
377         internal const string PyramidValueType = "PyramidValueType";
378 
379         #endregion // Common Custom Properties Names
380     }
381 
382 	/// <summary>
383     /// CustomPropertyRegistry contains information for all chart
384     /// custom properties. This data is exposed through the
385     /// �registeredCustomProperties� field which is an ArrayList
386     /// containing CustomPropertyInfo classes.
387 	/// </summary>
388 	internal class CustomPropertyRegistry : IServiceProvider
389     {
390         #region Fields
391 
392 		// List of registered properties
393 		internal	ArrayList		registeredCustomProperties = new ArrayList();
394 
395         // Defines maximum value which can be set to the attribute which uses pixels
396         internal static int         MaxValueOfPixelAttribute = 10000;
397 
398         internal static System.Collections.Generic.List<SeriesChartType> IsXAxisQuantitativeChartTypes =
399               new System.Collections.Generic.List<SeriesChartType >(
400                   new SeriesChartType[] {
401                                         SeriesChartType.Line,
402                                         SeriesChartType.FastLine,
403                                         SeriesChartType.Spline,
404                                         SeriesChartType.Point,
405                                         SeriesChartType.FastPoint,
406                                         SeriesChartType.Bubble,
407                                         SeriesChartType.RangeColumn,
408                                         SeriesChartType.RangeBar,
409 								    });
410 		#endregion
411 
412 		#region Constructor and Services
413 
414 		/// <summary>
415 		/// Custom properties registry public constructor.
416 		/// </summary>
CustomPropertyRegistry()417 		public CustomPropertyRegistry()
418 		{
419 			// Register properties used in the chart
420 			RegisterProperties();
421 		}
422 
423 		/// <summary>
424 		/// Returns custom properties registry service object.
425 		/// </summary>
426 		/// <param name="serviceType">Service type to get.</param>
427 		/// <returns>Custom properties registry service.</returns>
428 		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
IServiceProvider.GetService(Type serviceType)429 		object IServiceProvider.GetService(Type serviceType)
430 		{
431 			if(serviceType == typeof(CustomPropertyRegistry))
432 			{
433 				return this;
434 			}
435             throw (new ArgumentException(SR.ExceptionCustomAttributesRegistryUnsupportedType( serviceType.ToString()) ));
436 		}
437 
438 		#endregion
439 
440 		#region Properties Regestering methods
441 
442         /// <summary>
443         /// This method registers all standard custom properties used in
444         /// the chart and provides all the additional information like
445         /// description, value validation and scenarios where custom
446         /// attribute can be used.
447         /// </summary>
RegisterProperties()448 		private void RegisterProperties()
449 		{
450 			SeriesChartType[] chartTypes = null;
451 			CustomPropertyInfo attrInfo = null;
452 
453             //***********************************************************************
454 			//** DrawSideBySide properties
455 			//***********************************************************************
456 			chartTypes = new SeriesChartType[] {
457 													SeriesChartType.Bar,
458 													SeriesChartType.Column,
459 
460 													SeriesChartType.RangeColumn,
461 													SeriesChartType.BoxPlot,
462 													SeriesChartType.RangeBar,
463 													SeriesChartType.ErrorBar,
464 
465 											   };
466 			// "DrawSideBySide" attribute
467 			attrInfo = new CustomPropertyInfo(
468 				CustomPropertyName.DrawSideBySide,
469 				typeof(AxisEnabled),
470 				"Auto",
471                 SR.DescriptionCustomAttributeDrawSideBySide,
472 				chartTypes,
473 				true,
474 				false);
475 			registeredCustomProperties.Add( attrInfo );
476 
477             //***********************************************************************
478             //** IsXAxisQuantitative properties
479             //***********************************************************************
480             registeredCustomProperties.Add(new CustomPropertyInfo(
481                 CustomPropertyName.IsXAxisQuantitative,
482                 typeof(bool),
483                 "false",
484                 SR.DescriptionCustomAttributeIsXAxisQuantitive,
485                 IsXAxisQuantitativeChartTypes.ToArray(),
486                 true,
487                 false));
488 
489 			//***********************************************************************
490 			//** EmptyPointValue properties
491 			//***********************************************************************
492 			chartTypes = new SeriesChartType[] {
493 												   SeriesChartType.Point,
494 												   SeriesChartType.Bubble,
495 												   SeriesChartType.Line,
496 												   SeriesChartType.Spline,
497 												   SeriesChartType.StepLine,
498 												   SeriesChartType.Column,
499 												   SeriesChartType.RangeColumn,
500 												   SeriesChartType.RangeBar,
501 												   SeriesChartType.Radar,
502 												   SeriesChartType.Range,
503 												   SeriesChartType.SplineRange,
504 												   SeriesChartType.Polar,
505 												   SeriesChartType.Area,
506 												   SeriesChartType.SplineArea,
507 												   SeriesChartType.Bar,
508 											   };
509 			registeredCustomProperties.Add( new CustomPropertyInfo(
510 				CustomPropertyName.EmptyPointValue,
511 				typeof(EmptyPointTypes),
512 				"Average",
513 				SR.DescriptionCustomAttributeEmptyPointValue,
514 				chartTypes,
515 				true,
516 				false) );
517 
518 
519 			//***********************************************************************
520 			//** Bar label styles properties
521 			//***********************************************************************
522 			chartTypes = new SeriesChartType[] {
523 												   SeriesChartType.StackedBar,
524 												   SeriesChartType.StackedBar100,
525 												   SeriesChartType.RangeBar,
526 											   };
527 			// "BarLabelStyle" attribute
528 			attrInfo = new CustomPropertyInfo(
529 				CustomPropertyName.BarLabelStyle,
530 				typeof(BarValueLabelDrawingStyle),
531 				"Center",
532                 SR.DescriptionCustomAttributeBarLabelStyle,
533 				chartTypes,
534 				true,
535 				true);
536 			registeredCustomProperties.Add( attrInfo );
537 
538 
539 
540 			//***********************************************************************
541 			//** Stacked Column/Bar properties
542 			//***********************************************************************
543             chartTypes = new SeriesChartType[] {
544 												   SeriesChartType.StackedBar,
545 												   SeriesChartType.StackedBar100,
546 												   SeriesChartType.StackedColumn,
547 												   SeriesChartType.StackedColumn100,
548 
549 			};
550 
551             // "StackedGroupName" attribute
552             attrInfo = new CustomPropertyInfo(
553                 CustomPropertyName.StackedGroupName,
554                 typeof(string),
555                 string.Empty,
556                 SR.DescriptionCustomAttributeStackedGroupName,
557                 chartTypes,
558                 true,
559                 false);
560             registeredCustomProperties.Add(attrInfo);
561 
562 
563 
564 			//***********************************************************************
565 			//** Bar label styles properties
566 			//***********************************************************************
567 			chartTypes = new SeriesChartType[] {
568 												   SeriesChartType.Bar,
569 											   };
570 			// "BarLabelStyle" attribute
571 			attrInfo = new CustomPropertyInfo(
572 				CustomPropertyName.BarLabelStyle,
573 				typeof(BarValueLabelDrawingStyle),
574 				"Outside",
575                 SR.DescriptionCustomAttributeBarLabelStyle,
576 				chartTypes,
577 				true,
578 				true);
579 			registeredCustomProperties.Add( attrInfo );
580 
581 			//***********************************************************************
582 			//** Bar and Columnt chart types properties
583 			//***********************************************************************
584 			chartTypes = new SeriesChartType[] {
585 												   SeriesChartType.Bar,
586 												   SeriesChartType.Column,
587 												   SeriesChartType.StackedBar,
588 												   SeriesChartType.StackedBar100,
589 												   SeriesChartType.StackedColumn,
590 												   SeriesChartType.StackedColumn100,
591 												   SeriesChartType.RangeBar,
592 												   SeriesChartType.RangeColumn,
593 
594 											   };
595 			// "DrawingStyle" attribute
596 			attrInfo = new CustomPropertyInfo(
597 				CustomPropertyName.DrawingStyle,
598 				typeof(BarDrawingStyle),
599 				"Default",
600                 SR.DescriptionCustomAttributeDrawingStyle,
601 				chartTypes,
602 				true,
603 				true);
604 			registeredCustomProperties.Add( attrInfo );
605 
606 			//***********************************************************************
607 			//** Chart types point width properties
608 			//***********************************************************************
609 			chartTypes = new SeriesChartType[] {
610 												   SeriesChartType.Bar,
611 												   SeriesChartType.Candlestick,
612 												   SeriesChartType.Column,
613 												   SeriesChartType.StackedBar,
614 												   SeriesChartType.StackedBar100,
615 												   SeriesChartType.StackedColumn,
616 												   SeriesChartType.StackedColumn100,
617 												   SeriesChartType.Stock,
618 												   SeriesChartType.BoxPlot,
619 												   SeriesChartType.ErrorBar,
620 												   SeriesChartType.RangeBar,
621 												   SeriesChartType.RangeColumn,
622 											   };
623 			// "PointWidth" attribute
624 			attrInfo = new CustomPropertyInfo(
625 				CustomPropertyName.PointWidth,
626 				typeof(float),
627 				0.8f,
628                 SR.DescriptionCustomAttributePointWidth,
629 				chartTypes,
630 				true,
631 				false);
632 			attrInfo.MinValue = 0f;
633 			attrInfo.MaxValue = 2f;
634 			registeredCustomProperties.Add( attrInfo );
635 
636 			// "PixelPointWidth" attribute
637 			attrInfo = new CustomPropertyInfo(
638 				CustomPropertyName.PixelPointWidth,
639 				typeof(int),
640 				0,
641                 SR.DescriptionCustomAttributePixelPointWidth,
642 				chartTypes,
643 				true,
644 				false);
645 			attrInfo.MinValue = 0;
646             attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
647 			registeredCustomProperties.Add( attrInfo );
648 
649 			// "MinPixelPointWidth" attribute
650 			attrInfo = new CustomPropertyInfo(
651 				CustomPropertyName.MinPixelPointWidth,
652 				typeof(int),
653 				0,
654                 SR.DescriptionCustomAttributeMinPixelPointWidth,
655 				chartTypes,
656 				true,
657 				false);
658 			attrInfo.MinValue = 0;
659             attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
660 			registeredCustomProperties.Add( attrInfo );
661 
662 			// "MaxPixelPointWidth" attribute
663 			attrInfo = new CustomPropertyInfo(
664 				CustomPropertyName.MaxPixelPointWidth,
665 				typeof(int),
666 				0,
667                 SR.DescriptionCustomAttributeMaxPixelPointWidth,
668 				chartTypes,
669 				true,
670 				false);
671 			attrInfo.MinValue = 0;
672             attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
673 			registeredCustomProperties.Add( attrInfo );
674 
675 
676 
677 			//***********************************************************************
678 			//** CandleStick chart types properties
679 			//***********************************************************************
680 			chartTypes = new SeriesChartType[] { SeriesChartType.Candlestick };
681 
682 			// "PriceUpColor" attribute
683 			attrInfo = new CustomPropertyInfo(
684 				CustomPropertyName.PriceUpColor,
685 				typeof(Color),
686 				"",
687                 SR.DescriptionCustomAttributeCandlePriceUpColor,
688 				chartTypes,
689 				true,
690 				true);
691 			registeredCustomProperties.Add( attrInfo );
692 
693 			// "PriceDownColor" attribute
694 			attrInfo = new CustomPropertyInfo(
695 				CustomPropertyName.PriceDownColor,
696 				typeof(Color),
697 				"",
698                 SR.DescriptionCustomAttributePriceDownColor,
699 				chartTypes,
700 				true,
701 				true);
702 			registeredCustomProperties.Add( attrInfo );
703 
704 
705 			//***********************************************************************
706 			//** Stock and CandleStick chart types properties
707 			//***********************************************************************
708 			chartTypes = new SeriesChartType[] { SeriesChartType.Stock, SeriesChartType.Candlestick };
709 
710 			// "LabelValueType" attribute
711 			attrInfo = new CustomPropertyInfo(
712 				CustomPropertyName.LabelValueType,
713 				typeof(StockLabelValueTypes),
714 				"Close",
715                 SR.DescriptionCustomAttributeLabelValueType,
716 				chartTypes,
717 				true,
718 				true);
719 			registeredCustomProperties.Add( attrInfo );
720 
721 			//***********************************************************************
722 			//** Stock chart types properties
723 			//***********************************************************************
724 			chartTypes = new SeriesChartType[] { SeriesChartType.Stock };
725 
726 			// "OpenCloseStyle" attribute
727 			attrInfo = new CustomPropertyInfo(
728 				CustomPropertyName.OpenCloseStyle,
729 				typeof(StockOpenCloseMarkStyle),
730 				"Line",
731                 SR.DescriptionCustomAttributeOpenCloseStyle,
732 				chartTypes,
733 				true,
734 				true);
735 			registeredCustomProperties.Add( attrInfo );
736 
737 			// "ShowOpenClose" attribute
738 			attrInfo = new CustomPropertyInfo(
739 				CustomPropertyName.ShowOpenClose,
740 				typeof(StockShowOpenCloseTypes),
741 				"Both",
742                 SR.DescriptionCustomAttributeShowOpenClose,
743 				chartTypes,
744 				true,
745 				true);
746 			registeredCustomProperties.Add( attrInfo );
747 
748 
749 			//***********************************************************************
750 			//** Bubble chart types properties
751 			//***********************************************************************
752 			chartTypes = new SeriesChartType[] { SeriesChartType.Bubble };
753 
754 			// "BubbleScaleMin" attribute
755 			attrInfo = new CustomPropertyInfo(
756 				CustomPropertyName.BubbleScaleMin,
757 				typeof(float),
758 				0f,
759                 SR.DescriptionCustomAttributeBubbleScaleMin,
760 				chartTypes,
761 				true,
762 				false);
763 			registeredCustomProperties.Add( attrInfo );
764 
765 			// "BubbleScaleMax" attribute
766 			attrInfo = new CustomPropertyInfo(
767 				CustomPropertyName.BubbleScaleMax,
768 				typeof(float),
769 				0f,
770                 SR.DescriptionCustomAttributeBubbleScaleMax,
771 				chartTypes,
772 				true,
773 				false);
774 			registeredCustomProperties.Add( attrInfo );
775 
776 			// "BubbleMaxSize" attribute
777 			attrInfo = new CustomPropertyInfo(
778 				CustomPropertyName.BubbleMaxSize,
779 				typeof(float),
780 				15f,
781                 SR.DescriptionCustomAttributeBubbleMaxSize,
782 				chartTypes,
783 				true,
784 				false);
785 			attrInfo.MinValue = 0f;
786 			attrInfo.MaxValue = 100f;
787 			registeredCustomProperties.Add( attrInfo );
788 
789 			// "BubbleMinSize" attribute of the Bubble chart
790 			attrInfo = new CustomPropertyInfo(
791 				CustomPropertyName.BubbleMinSize,
792 				typeof(float),
793 				3f,
794                 SR.DescriptionCustomAttributeBubbleMaxSize,
795 				chartTypes,
796 				true,
797 				false);
798 			attrInfo.MinValue = 0f;
799 			attrInfo.MaxValue = 100f;
800 			registeredCustomProperties.Add( attrInfo );
801 
802 			// "BubbleUseSizeForLabel" attribute
803 			attrInfo = new CustomPropertyInfo(
804 				CustomPropertyName.BubbleUseSizeForLabel,
805 				typeof(bool),
806 				false,
807                 SR.DescriptionCustomAttributeBubbleUseSizeForLabel,
808 				chartTypes,
809 				true,
810 				false);
811 			registeredCustomProperties.Add( attrInfo );
812 
813 
814 
815 			//***********************************************************************
816 			//** Pie and Doughnut chart types properties
817 			//***********************************************************************
818 			chartTypes = new SeriesChartType[] {
819 												   SeriesChartType.Pie,
820 												   SeriesChartType.Doughnut
821 											   };
822 
823 
824 			// "PieDrawingStyle" attribute
825 			attrInfo = new CustomPropertyInfo(
826 				CustomPropertyName.PieDrawingStyle,
827 				typeof(PieDrawingStyle),
828 				"Default",
829                 SR.DescriptionCustomAttributePieDrawingStyle,
830 				chartTypes,
831 				true,
832 				false);
833 			attrInfo.AppliesTo3D = false;
834 			registeredCustomProperties.Add( attrInfo );
835 
836 
837             // "CollectedThreshold" attribute of the Pie chart
838 			attrInfo = new CustomPropertyInfo(
839 				CustomPropertyName.CollectedThreshold,
840 				typeof(double),
841 				0.0,
842                 SR.DescriptionCustomAttributeCollectedThreshold,
843 				chartTypes,
844 				true,
845 				false);
846 			attrInfo.MinValue = 0.0;
847 			attrInfo.MaxValue = double.MaxValue;
848 			registeredCustomProperties.Add( attrInfo );
849 
850 			// "CollectedThresholdUsePercent" attribute of the Pie chart
851 			attrInfo = new CustomPropertyInfo(
852 				CustomPropertyName.CollectedThresholdUsePercent,
853 				typeof(bool),
854 				true,
855                 SR.DescriptionCustomAttributeCollectedThresholdUsePercent,
856 				chartTypes,
857 				true,
858 				false);
859 			registeredCustomProperties.Add( attrInfo );
860 
861 			// "CollectedSliceExploded" attribute of the Pie chart
862 			attrInfo = new CustomPropertyInfo(
863 				CustomPropertyName.CollectedSliceExploded,
864 				typeof(bool),
865 				false,
866                 SR.DescriptionCustomAttributeCollectedSliceExploded,
867 				chartTypes,
868 				true,
869 				false);
870 			registeredCustomProperties.Add( attrInfo );
871 
872 			// "CollectedLabel" attribute of the Pie chart
873 			attrInfo = new CustomPropertyInfo(
874 				CustomPropertyName.CollectedLabel,
875 				typeof(string),
876                 string.Empty,
877                 SR.DescriptionCustomAttributeCollectedLabel,
878 				chartTypes,
879 				true,
880 				false);
881 			registeredCustomProperties.Add( attrInfo );
882 
883 			// "CollectedLegendText" attribute of the Pie chart
884 			attrInfo = new CustomPropertyInfo(
885 				CustomPropertyName.CollectedLegendText,
886 				typeof(string),
887 				SR.DescriptionCustomAttributeCollectedLegendDefaultText,
888                 SR.DescriptionCustomAttributeCollectedLegendText,
889 				chartTypes,
890 				true,
891 				false);
892 			registeredCustomProperties.Add( attrInfo );
893 
894 			// "CollectedToolTip" attribute of the Pie chart
895 			attrInfo = new CustomPropertyInfo(
896 				CustomPropertyName.CollectedToolTip,
897 				typeof(string),
898 				string.Empty,
899                 SR.DescriptionCustomAttributeCollectedToolTip,
900 				chartTypes,
901 				true,
902 				false);
903 			registeredCustomProperties.Add( attrInfo );
904 
905 			// "CollectedColor" attribute of the Pie chart
906 			attrInfo = new CustomPropertyInfo(
907 				CustomPropertyName.CollectedColor,
908 				typeof(Color),
909 				"",
910                 SR.DescriptionCustomAttributeCollectedColor,
911 				chartTypes,
912 				true,
913 				false);
914 			registeredCustomProperties.Add( attrInfo );
915 
916 
917 			// "PieStartAngle" attribute of the Pie chart
918 			attrInfo = new CustomPropertyInfo(
919 				CustomPropertyName.PieStartAngle,
920 				typeof(int),
921 				0,
922                 SR.DescriptionCustomAttributePieStartAngle,
923 				chartTypes,
924 				true,
925 				false);
926 			attrInfo.MinValue = 0;
927 			attrInfo.MaxValue = 360;
928 			registeredCustomProperties.Add( attrInfo );
929 
930 
931 
932 
933 			// "Exploded" attribute of the Pie chart
934 			registeredCustomProperties.Add( new CustomPropertyInfo(
935 				CustomPropertyName.Exploded,
936 				typeof(bool),
937 				false,
938 				SR.DescriptionCustomAttributePieDonutExploded,
939 				chartTypes,
940 				false,
941 				true) );
942 
943 			// "LabelsRadialLineSize" attribute of the Pie chart
944 			attrInfo = new CustomPropertyInfo(
945 				CustomPropertyName.LabelsRadialLineSize,
946 				typeof(float),
947 				1f,
948                 SR.DescriptionCustomAttributeLabelsRadialLineSize,
949 				chartTypes,
950 				true,
951 				true);
952 			attrInfo.AppliesTo3D = false;
953 			attrInfo.MinValue = 0f;
954 			attrInfo.MaxValue = 100f;
955 			registeredCustomProperties.Add( attrInfo );
956 
957 			// "LabelsHorizontalLineSize" attribute of the Pie chart
958 			attrInfo = new CustomPropertyInfo(
959 				CustomPropertyName.LabelsHorizontalLineSize,
960 				typeof(float),
961 				1f,
962                 SR.DescriptionCustomAttributeLabelsHorizontalLineSize,
963 				chartTypes,
964 				true,
965 				true);
966 			attrInfo.AppliesTo3D = false;
967 			attrInfo.MinValue = 0f;
968 			attrInfo.MaxValue = 100f;
969 			registeredCustomProperties.Add( attrInfo );
970 
971 
972 			// "PieLabelStyle" attribute of the Pie chart
973 			registeredCustomProperties.Add( new CustomPropertyInfo(
974 				CustomPropertyName.PieLabelStyle,
975 				typeof(PieLabelStyle),
976 				"Inside",
977                 SR.DescriptionCustomAttributePieLabelStyle,
978 				chartTypes,
979 				true,
980 				true) );
981 
982 
983 			// "MinimumRelativePieSize" attribute of the Pie chart
984 			attrInfo = new CustomPropertyInfo(
985 				CustomPropertyName.MinimumRelativePieSize,
986 				typeof(float),
987 				30f,
988                 SR.DescriptionCustomAttributeMinimumRelativePieSize,
989 				chartTypes,
990 				true,
991 				false);
992 			attrInfo.MinValue = 10f;
993 			attrInfo.MaxValue = 70f;
994 			registeredCustomProperties.Add( attrInfo );
995 
996 			// "3DLabelLineSize" attribute of the Pie chart
997 			attrInfo = new CustomPropertyInfo(
998 				CustomPropertyName._3DLabelLineSize,
999 				typeof(float),
1000 				100f,
1001                 SR.DescriptionCustomAttribute_3DLabelLineSize,
1002 				chartTypes,
1003 				true,
1004 				false);
1005 			attrInfo.AppliesTo2D = false;
1006 			attrInfo.MinValue = 30f;
1007 			attrInfo.MaxValue = 200f;
1008 			registeredCustomProperties.Add( attrInfo );
1009 
1010 			// "PieLineColor" attribute of the Pie chart
1011 			attrInfo = new CustomPropertyInfo(
1012 				CustomPropertyName.PieLineColor,
1013 				typeof(Color),
1014 				"",
1015                 SR.DescriptionCustomAttributePieLineColor,
1016 				chartTypes,
1017 				true,
1018 				true);
1019 			registeredCustomProperties.Add( attrInfo );
1020 
1021 			//***********************************************************************
1022 			//** Doughnut chart types properties
1023 			//***********************************************************************
1024 
1025 			// "DoughnutRadius" attribute of the Pie chart
1026 			attrInfo = new CustomPropertyInfo(
1027 				CustomPropertyName.DoughnutRadius,
1028 				typeof(float),
1029 				60f,
1030                 SR.DescriptionCustomAttributeDoughnutRadius,
1031 				new SeriesChartType[] { SeriesChartType.Doughnut },
1032 				true,
1033 				false);
1034 			attrInfo.MinValue = 0f;
1035 			attrInfo.MaxValue = 99f;
1036 			registeredCustomProperties.Add( attrInfo );
1037 
1038 
1039 			//***********************************************************************
1040 			//** Other
1041 			//***********************************************************************
1042 
1043 			// "LabelStyle" attribute
1044 			chartTypes = new SeriesChartType[] {
1045 												   SeriesChartType.Point,
1046 												   SeriesChartType.Column,
1047 												   SeriesChartType.Bubble,
1048 												   SeriesChartType.Line,
1049 												   SeriesChartType.Spline,
1050 												   SeriesChartType.StepLine,
1051 												   SeriesChartType.Area,
1052 												   SeriesChartType.SplineArea,
1053 												   SeriesChartType.Range,
1054 												   SeriesChartType.SplineRange,
1055 												   SeriesChartType.Radar,
1056 												   SeriesChartType.Polar,
1057 
1058 											   };
1059 			registeredCustomProperties.Add( new CustomPropertyInfo(
1060 				CustomPropertyName.LabelStyle,
1061                 typeof(LabelAlignments),
1062 				"Auto",
1063                 SR.DescriptionCustomAttributeLabelStyle,
1064 				chartTypes,
1065 				true,
1066 				true) );
1067 
1068 			// "ShowMarkerLines" attribute
1069 			chartTypes = new SeriesChartType[] {
1070 												   SeriesChartType.Line,
1071 												   SeriesChartType.Spline,
1072 												   SeriesChartType.StepLine,
1073 												   SeriesChartType.Area,
1074 												   SeriesChartType.SplineArea,
1075 												   SeriesChartType.Range,
1076 												   SeriesChartType.SplineRange
1077 											   };
1078 			attrInfo = new CustomPropertyInfo(
1079 				CustomPropertyName.ShowMarkerLines,
1080 				typeof(bool),
1081 				false,
1082                 SR.DescriptionCustomAttributeShowMarkerLines,
1083 				chartTypes,
1084 				true,
1085 				true);
1086 			attrInfo.AppliesTo2D = false;
1087 			registeredCustomProperties.Add( attrInfo );
1088 
1089 			// "LineTension" attribute
1090 			chartTypes = new SeriesChartType[] {
1091 												   SeriesChartType.Spline,
1092 												   SeriesChartType.SplineArea,
1093 												   SeriesChartType.SplineRange
1094 				};
1095 			attrInfo = new CustomPropertyInfo(
1096 				CustomPropertyName.LineTension,
1097 				typeof(float),
1098 				0.5f,
1099                 SR.DescriptionCustomAttributeLineTension,
1100 				chartTypes,
1101 				true,
1102 				false);
1103 			attrInfo.MinValue = 0f;
1104 			attrInfo.MaxValue = 2f;
1105 			registeredCustomProperties.Add( attrInfo );
1106 
1107 			// "PixelPointDepth" attribute
1108 			chartTypes = new SeriesChartType[] {
1109 												   SeriesChartType.Area,
1110 												   SeriesChartType.Bar,
1111 												   SeriesChartType.Bubble,
1112 												   SeriesChartType.Candlestick,
1113 												   SeriesChartType.Column,
1114 												   SeriesChartType.Line,
1115 												   SeriesChartType.Point,
1116 												   SeriesChartType.Spline,
1117 												   SeriesChartType.SplineArea,
1118 												   SeriesChartType.StackedArea,
1119 												   SeriesChartType.StackedArea100,
1120 												   SeriesChartType.StackedBar,
1121 												   SeriesChartType.StackedBar100,
1122 												   SeriesChartType.StackedColumn,
1123 												   SeriesChartType.StackedColumn100,
1124 												   SeriesChartType.StepLine,
1125 												   SeriesChartType.Stock,
1126 
1127 												   SeriesChartType.ThreeLineBreak,
1128 												   SeriesChartType.BoxPlot,
1129 												   SeriesChartType.ErrorBar,
1130 												   SeriesChartType.RangeBar,
1131 												   SeriesChartType.Kagi,
1132 												   SeriesChartType.PointAndFigure,
1133 												   SeriesChartType.Range,
1134 												   SeriesChartType.RangeColumn,
1135 												   SeriesChartType.Renko,
1136 												   SeriesChartType.SplineRange,
1137 												   SeriesChartType.FastLine,
1138 												};
1139 			attrInfo = new CustomPropertyInfo(
1140 				CustomPropertyName.PixelPointDepth,
1141 				typeof(int),
1142 				0,
1143                 SR.DescriptionCustomAttributePixelPointDepth,
1144 				chartTypes,
1145 				true,
1146 				false);
1147 			attrInfo.MinValue = 0;
1148             attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
1149 			attrInfo.AppliesTo2D = false;
1150 			registeredCustomProperties.Add( attrInfo );
1151 
1152 			// "PixelPointGapDepth" attribute
1153 			attrInfo = new CustomPropertyInfo(
1154 				CustomPropertyName.PixelPointGapDepth,
1155 				typeof(int),
1156 				0,
1157                 SR.DescriptionCustomAttributePixelPointGapDepth,
1158 				chartTypes,
1159 				true,
1160 				false);
1161 			attrInfo.MinValue = 0;
1162             attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
1163 			attrInfo.AppliesTo2D = false;
1164 			registeredCustomProperties.Add( attrInfo );
1165 
1166 
1167 
1168 			//***********************************************************************
1169 			//** FastLine chart type properties
1170 			//***********************************************************************
1171 			chartTypes = new SeriesChartType[] {
1172 													SeriesChartType.FastLine,
1173 													SeriesChartType.FastPoint,
1174 											};
1175 
1176 /*  NOTE: This is an internal attribute
1177  *
1178 			// "PermittedPixelError" attribute
1179 			attrInfo = new CustomPropertyInfo(
1180 				CustomPropertyName.PixelPointGapDepth,
1181 				typeof(float),
1182 				1f,
1183 				"Gets or sets the acceptable error in pixels for the data point filtering algorithm.",
1184 				chartTypes,
1185 				true,
1186 				false);
1187 			attrInfo.MinValue = 0f;
1188 			attrInfo.MaxValue = 1f;
1189 			registeredCustomProperties.Add( attrInfo );
1190 */
1191 			//***********************************************************************
1192 			//** Polar chart type properties
1193 			//***********************************************************************
1194 			chartTypes = new SeriesChartType[] {
1195 												   SeriesChartType.Polar
1196 											   };
1197 			// "AreaDrawingStyle" attribute
1198 			attrInfo = new CustomPropertyInfo(
1199                 CustomPropertyName.AreaDrawingStyle,
1200 				typeof(CircularAreaDrawingStyles),
1201 				"Circle",
1202                 SR.DescriptionCustomAttributePolarAreaDrawingStyle,
1203 				chartTypes,
1204 				true,
1205 				false);
1206 			registeredCustomProperties.Add( attrInfo );
1207 
1208 			// "CircularLabelsStyle" attribute
1209 			attrInfo = new CustomPropertyInfo(
1210 				CustomPropertyName.CircularLabelsStyle,
1211 				typeof(CircularAxisLabelsStyle),
1212 				"Auto",
1213                 SR.DescriptionCustomAttributePolarCircularLabelsStyle,
1214 				chartTypes,
1215 				true,
1216 				false);
1217 			registeredCustomProperties.Add( attrInfo );
1218 
1219 			// "PolarDrawingStyle" attribute
1220 			attrInfo = new CustomPropertyInfo(
1221                 CustomPropertyName.PolarDrawingStyle,
1222 				typeof(PolarDrawingStyles),
1223 				"Line",
1224                 SR.DescriptionCustomAttributePolarDrawingStyle,
1225 				chartTypes,
1226 				true,
1227 				false);
1228 			registeredCustomProperties.Add( attrInfo );
1229 
1230 
1231 
1232 			//***********************************************************************
1233 			//** Radar chart type properties
1234 			//***********************************************************************
1235 			chartTypes = new SeriesChartType[] {
1236 												   SeriesChartType.Radar
1237 											   };
1238 			// "AreaDrawingStyle" attribute
1239 			attrInfo = new CustomPropertyInfo(
1240                 CustomPropertyName.AreaDrawingStyle,
1241 				typeof(CircularAreaDrawingStyles),
1242 				"Circle",
1243                 SR.DescriptionCustomAttributeRadarAreaDrawingStyle,
1244 				chartTypes,
1245 				true,
1246 				false);
1247 			registeredCustomProperties.Add( attrInfo );
1248 
1249 			// "CircularLabelsStyle" attribute
1250 			attrInfo = new CustomPropertyInfo(
1251 				CustomPropertyName.CircularLabelsStyle,
1252 				typeof(CircularAxisLabelsStyle),
1253 				"Auto",
1254                 SR.DescriptionCustomAttributeRadarCircularLabelsStyle,
1255 				chartTypes,
1256 				true,
1257 				false);
1258 			registeredCustomProperties.Add( attrInfo );
1259 
1260 			// "RadarDrawingStyle" attribute
1261 			attrInfo = new CustomPropertyInfo(
1262 				CustomPropertyName.RadarDrawingStyle,
1263 				typeof(RadarDrawingStyle),
1264 				"Area",
1265                 SR.DescriptionCustomAttributeRadarDrawingStyle,
1266 				chartTypes,
1267 				true,
1268 				false);
1269 			registeredCustomProperties.Add( attrInfo );
1270 
1271 
1272 			//***********************************************************************
1273 			//** BoxPlot chart type properties
1274 			//***********************************************************************
1275 			chartTypes = new SeriesChartType[] {
1276 												   SeriesChartType.BoxPlot
1277 											   };
1278 			// "BoxPlotPercentile" attribute
1279 			attrInfo = new CustomPropertyInfo(
1280 				CustomPropertyName.BoxPlotPercentile,
1281 				typeof(float),
1282 				25f,
1283                 SR.DescriptionCustomAttributeBoxPlotPercentile,
1284 				chartTypes,
1285 				true,
1286 				false);
1287 			attrInfo.MinValue = 0f;
1288 			attrInfo.MaxValue = 1000f;
1289 			registeredCustomProperties.Add( attrInfo );
1290 
1291 			// "BoxPlotWhiskerPercentile" attribute
1292 			attrInfo = new CustomPropertyInfo(
1293 				CustomPropertyName.BoxPlotWhiskerPercentile,
1294 				typeof(float),
1295 				10f,
1296                 SR.DescriptionCustomAttributeBoxPlotWhiskerPercentile,
1297 				chartTypes,
1298 				true,
1299 				false);
1300 			attrInfo.MinValue = 0f;
1301 			attrInfo.MaxValue = 1000f;
1302 			registeredCustomProperties.Add( attrInfo );
1303 
1304 			// "BoxPlotShowAverage" attribute
1305 			attrInfo = new CustomPropertyInfo(
1306 				CustomPropertyName.BoxPlotShowAverage,
1307 				typeof(bool),
1308 				true,
1309                 SR.DescriptionCustomAttributeBoxPlotShowAverage,
1310 				chartTypes,
1311 				true,
1312 				false);
1313 			registeredCustomProperties.Add( attrInfo );
1314 
1315 			// "BoxPlotShowMedian" attribute
1316 			attrInfo = new CustomPropertyInfo(
1317 				CustomPropertyName.BoxPlotShowMedian,
1318 				typeof(bool),
1319 				true,
1320                 SR.DescriptionCustomAttributeBoxPlotShowMedian,
1321 				chartTypes,
1322 				true,
1323 				false);
1324 			registeredCustomProperties.Add( attrInfo );
1325 
1326 			// "BoxPlotShowUnusualValues" attribute
1327 			attrInfo = new CustomPropertyInfo(
1328 				CustomPropertyName.BoxPlotShowUnusualValues,
1329 				typeof(bool),
1330 				false,
1331                 SR.DescriptionCustomAttributeBoxPlotShowUnusualValues,
1332 				chartTypes,
1333 				true,
1334 				false);
1335 			registeredCustomProperties.Add( attrInfo );
1336 
1337 			// "BoxPlotSeries" attribute
1338 			attrInfo = new CustomPropertyInfo(
1339 				CustomPropertyName.BoxPlotSeries,
1340 				typeof(string),
1341 				"",
1342                 SR.DescriptionCustomAttributeBoxPlotSeries,
1343 				chartTypes,
1344 				true,
1345 				false);
1346 			registeredCustomProperties.Add( attrInfo );
1347 
1348 			//***********************************************************************
1349 			//** ErrorBar chart type properties
1350 			//***********************************************************************
1351 			chartTypes = new SeriesChartType[] {
1352 												   SeriesChartType.ErrorBar
1353 											   };
1354 			// "ErrorBarStyle" attribute
1355 			attrInfo = new CustomPropertyInfo(
1356 				CustomPropertyName.ErrorBarStyle,
1357 				typeof(ErrorBarStyle),
1358 				"Both",
1359                 SR.DescriptionCustomAttributeErrorBarStyle,
1360 				chartTypes,
1361 				true,
1362 				true);
1363 			registeredCustomProperties.Add( attrInfo );
1364 
1365 			// "ErrorBarCenterMarkerStyle" attribute
1366 			attrInfo = new CustomPropertyInfo(
1367 				CustomPropertyName.ErrorBarCenterMarkerStyle,
1368 				typeof(ErrorBarMarkerStyles),
1369 				"Line",
1370                 SR.DescriptionCustomAttributeErrorBarCenterMarkerStyle,
1371 				chartTypes,
1372 				true,
1373 				true);
1374 			registeredCustomProperties.Add( attrInfo );
1375 
1376 			// "ErrorBarSeries" attribute
1377 			attrInfo = new CustomPropertyInfo(
1378 				CustomPropertyName.ErrorBarSeries,
1379 				typeof(string),
1380 				"",
1381                 SR.DescriptionCustomAttributeErrorBarSeries,
1382 				chartTypes,
1383 				true,
1384 				false);
1385 			registeredCustomProperties.Add( attrInfo );
1386 
1387 			// "ErrorBarType" attribute
1388 			attrInfo = new CustomPropertyInfo(
1389 				CustomPropertyName.ErrorBarType,
1390                 typeof(string),
1391                 String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}({1:N0})", ErrorBarType.StandardError, ErrorBarChart.DefaultErrorBarTypeValue(ErrorBarType.StandardError)),
1392                 SR.DescriptionCustomAttributeErrorBarType,
1393 				chartTypes,
1394 				true,
1395 				false);
1396 			registeredCustomProperties.Add( attrInfo );
1397 
1398 
1399 			//***********************************************************************
1400 			//** PointAndFigure chart types properties
1401 			//***********************************************************************
1402 			chartTypes = new SeriesChartType[] { SeriesChartType.PointAndFigure };
1403 
1404 			// "UsedYValueHigh" attribute
1405 			attrInfo = new CustomPropertyInfo(
1406 				CustomPropertyName.UsedYValueHigh,
1407 				typeof(int),
1408 				0,
1409                 SR.DescriptionCustomAttributeUsedYValueHigh,
1410 				chartTypes,
1411 				true,
1412 				false);
1413 			attrInfo.MinValue = 0;
1414 			attrInfo.MaxValue = 20;
1415 			registeredCustomProperties.Add( attrInfo );
1416 
1417 			// "UsedYValueLow" attribute
1418 			attrInfo = new CustomPropertyInfo(
1419 				CustomPropertyName.UsedYValueLow,
1420 				typeof(int),
1421 				1,
1422                 SR.DescriptionCustomAttributeUsedYValueLow,
1423 				chartTypes,
1424 				true,
1425 				false);
1426 			attrInfo.MinValue = 0;
1427 			attrInfo.MaxValue = 20;
1428 			registeredCustomProperties.Add( attrInfo );
1429 
1430 			// "PriceUpColor" attribute
1431 			attrInfo = new CustomPropertyInfo(
1432 				CustomPropertyName.PriceUpColor,
1433 				typeof(Color),
1434 				"",
1435                 SR.DescriptionCustomAttributeBarsPriceUpColor,
1436 				chartTypes,
1437 				true,
1438 				false);
1439 			registeredCustomProperties.Add( attrInfo );
1440 
1441 			// "BoxSize" attribute
1442 			attrInfo = new CustomPropertyInfo(
1443 				CustomPropertyName.BoxSize,
1444 				typeof(string),
1445 				"4%",
1446                 SR.DescriptionCustomAttributePointFigureBoxSize,
1447 				chartTypes,
1448 				true,
1449 				false);
1450 			registeredCustomProperties.Add( attrInfo );
1451 
1452 			// "ProportionalSymbols" attribute
1453 			attrInfo = new CustomPropertyInfo(
1454 				CustomPropertyName.ProportionalSymbols,
1455 				typeof(bool),
1456 				true,
1457                 SR.DescriptionCustomAttributeProportionalSymbols,
1458 				chartTypes,
1459 				true,
1460 				false);
1461 			registeredCustomProperties.Add( attrInfo );
1462 
1463 			// "ReversalAmount" attribute
1464 			attrInfo = new CustomPropertyInfo(
1465 				CustomPropertyName.ReversalAmount,
1466 				typeof(int),
1467 				"3",
1468                 SR.DescriptionCustomAttributeReversalAmount,
1469 				chartTypes,
1470 				true,
1471 				false);
1472 			registeredCustomProperties.Add( attrInfo );
1473 
1474 			//***********************************************************************
1475 			//** Kagi chart types properties
1476 			//***********************************************************************
1477 			chartTypes = new SeriesChartType[] { SeriesChartType.Kagi };
1478 
1479 			// "UsedYValue" attribute
1480 			attrInfo = new CustomPropertyInfo(
1481 				CustomPropertyName.UsedYValue,
1482 				typeof(int),
1483 				0,
1484                 SR.DescriptionCustomAttributeUsedYValue,
1485 				chartTypes,
1486 				true,
1487 				false);
1488 			attrInfo.MinValue = 0;
1489 			attrInfo.MaxValue = 20;
1490 			registeredCustomProperties.Add( attrInfo );
1491 
1492 			// "PriceUpColor" attribute
1493 			attrInfo = new CustomPropertyInfo(
1494 				CustomPropertyName.PriceUpColor,
1495 				typeof(Color),
1496 				"",
1497                 SR.DescriptionCustomAttributeBarsPriceUpColor,
1498 				chartTypes,
1499 				true,
1500 				false);
1501 			registeredCustomProperties.Add( attrInfo );
1502 
1503 			// "ReversalAmount" attribute
1504 			attrInfo = new CustomPropertyInfo(
1505 				CustomPropertyName.ReversalAmount,
1506 				typeof(string),
1507 				"3%",
1508                 SR.DescriptionCustomAttributeKagiReversalAmount,
1509 				chartTypes,
1510 				true,
1511 				false);
1512 			registeredCustomProperties.Add( attrInfo );
1513 
1514 			//***********************************************************************
1515 			//** Renko chart types properties
1516 			//***********************************************************************
1517 			chartTypes = new SeriesChartType[] { SeriesChartType.Renko };
1518 
1519 			// "UsedYValue" attribute
1520 			attrInfo = new CustomPropertyInfo(
1521 				CustomPropertyName.UsedYValue,
1522 				typeof(int),
1523 				0,
1524                 SR.DescriptionCustomAttributeRenkoUsedYValue,
1525 				chartTypes,
1526 				true,
1527 				false);
1528 			attrInfo.MinValue = 0;
1529 			attrInfo.MaxValue = 20;
1530 			registeredCustomProperties.Add( attrInfo );
1531 
1532 			// "PriceUpColor" attribute
1533 			attrInfo = new CustomPropertyInfo(
1534 				CustomPropertyName.PriceUpColor,
1535 				typeof(Color),
1536 				"",
1537                 SR.DescriptionCustomAttributeBarsPriceUpColor,
1538 				chartTypes,
1539 				true,
1540 				false);
1541 			registeredCustomProperties.Add( attrInfo );
1542 
1543 			// "BoxSize" attribute
1544 			attrInfo = new CustomPropertyInfo(
1545 				CustomPropertyName.BoxSize,
1546 				typeof(string),
1547 				"4%",
1548                 SR.DescriptionCustomAttributeBoxSize,
1549 				chartTypes,
1550 				true,
1551 				false);
1552 			registeredCustomProperties.Add( attrInfo );
1553 
1554 			//***********************************************************************
1555 			//** ThreeLineBreak chart types properties
1556 			//***********************************************************************
1557 			chartTypes = new SeriesChartType[] { SeriesChartType.ThreeLineBreak };
1558 
1559 			// "UsedYValue" attribute
1560 			attrInfo = new CustomPropertyInfo(
1561 				CustomPropertyName.UsedYValue,
1562 				typeof(int),
1563 				0,
1564                 SR.DescriptionCustomAttributeThreeLineBreakUsedYValue,
1565 				chartTypes,
1566 				true,
1567 				false);
1568 			attrInfo.MinValue = 0;
1569 			attrInfo.MaxValue = 20;
1570 			registeredCustomProperties.Add( attrInfo );
1571 
1572 			// "PriceUpColor" attribute
1573 			attrInfo = new CustomPropertyInfo(
1574 				CustomPropertyName.PriceUpColor,
1575 				typeof(Color),
1576 				"",
1577                 SR.DescriptionCustomAttributeBarsPriceUpColor,
1578 				chartTypes,
1579 				true,
1580 				false);
1581 			registeredCustomProperties.Add( attrInfo );
1582 
1583 			// "NumberOfLinesInBreak" attribute
1584 			attrInfo = new CustomPropertyInfo(
1585 				CustomPropertyName.NumberOfLinesInBreak,
1586 				typeof(int),
1587 				3,
1588                 SR.DescriptionCustomAttributeNumberOfLinesInBreak,
1589 				chartTypes,
1590 				true,
1591 				false);
1592 			registeredCustomProperties.Add( attrInfo );
1593 
1594 
1595 
1596 			//***********************************************************************
1597 			//** Funnel chart types properties
1598 			//***********************************************************************
1599 			chartTypes = new SeriesChartType[] { SeriesChartType.Funnel };
1600 
1601 
1602 			// "FunnelLabelStyle" attribute
1603 			attrInfo = new CustomPropertyInfo(
1604 				CustomPropertyName.FunnelLabelStyle,
1605 				typeof(FunnelLabelStyle),
1606 				"OutsideInColumn",
1607                 SR.DescriptionCustomAttributeFunnelLabelStyle,
1608 				chartTypes,
1609 				true,
1610 				true);
1611 			registeredCustomProperties.Add( attrInfo );
1612 
1613 
1614 			// "FunnelNeckWidth" attribute
1615 			attrInfo = new CustomPropertyInfo(
1616 				CustomPropertyName.FunnelNeckWidth,
1617 				typeof(float),
1618 				5f,
1619                 SR.DescriptionCustomAttributeFunnelNeckWidth,
1620 				chartTypes,
1621 				true,
1622 				false);
1623 			attrInfo.MinValue = 0f;
1624 			attrInfo.MaxValue = 100f;
1625 			registeredCustomProperties.Add( attrInfo );
1626 
1627 			// "FunnelNeckHeight" attribute
1628 			attrInfo = new CustomPropertyInfo(
1629 				CustomPropertyName.FunnelNeckHeight,
1630 				typeof(float),
1631 				5f,
1632                 SR.DescriptionCustomAttributeFunnelNeckHeight,
1633 				chartTypes,
1634 				true,
1635 				false);
1636 			attrInfo.MinValue = 0f;
1637 			attrInfo.MaxValue = 100f;
1638 			registeredCustomProperties.Add( attrInfo );
1639 
1640 			// "FunnelMinPointHeight" attribute
1641 			attrInfo = new CustomPropertyInfo(
1642 				CustomPropertyName.FunnelMinPointHeight,
1643 				typeof(float),
1644 				0f,
1645                 SR.DescriptionCustomAttributeFunnelMinPointHeight,
1646 				chartTypes,
1647 				true,
1648 				false);
1649 			attrInfo.MinValue = 0f;
1650 			attrInfo.MaxValue = 100f;
1651 			registeredCustomProperties.Add( attrInfo );
1652 
1653 			// "Funnel3DRotationAngle" attribute
1654 			attrInfo = new CustomPropertyInfo(
1655 				CustomPropertyName.Funnel3DRotationAngle,
1656 				typeof(float),
1657 				5f,
1658                 SR.DescriptionCustomAttributeFunnel3DRotationAngle,
1659 				chartTypes,
1660 				true,
1661 				false);
1662 			attrInfo.AppliesTo2D = false;
1663 			attrInfo.MinValue = -10f;
1664 			attrInfo.MaxValue = 10f;
1665 			registeredCustomProperties.Add( attrInfo );
1666 
1667 			// "FunnelPointGap" attribute
1668 			attrInfo = new CustomPropertyInfo(
1669 				CustomPropertyName.FunnelPointGap,
1670 				typeof(float),
1671 				0f,
1672                 SR.DescriptionCustomAttributeFunnelPointGap,
1673 				chartTypes,
1674 				true,
1675 				false);
1676 			attrInfo.MinValue = 0f;
1677 			attrInfo.MaxValue = 100f;
1678 			registeredCustomProperties.Add( attrInfo );
1679 
1680 			// "Funnel3DDrawingStyle" attribute
1681 			attrInfo = new CustomPropertyInfo(
1682 				CustomPropertyName.Funnel3DDrawingStyle,
1683 				typeof(Funnel3DDrawingStyle),
1684 				"CircularBase",
1685                 SR.DescriptionCustomAttributeFunnel3DDrawingStyle,
1686 				chartTypes,
1687 				true,
1688 				false);
1689 			attrInfo.AppliesTo2D = false;
1690 			registeredCustomProperties.Add( attrInfo );
1691 
1692 			// "FunnelStyle" attribute
1693 			attrInfo = new CustomPropertyInfo(
1694 				CustomPropertyName.FunnelStyle,
1695 				typeof(FunnelStyle),
1696 				"YIsHeight",
1697                 SR.DescriptionCustomAttributeFunnelStyle,
1698 				chartTypes,
1699 				true,
1700 				false);
1701 			registeredCustomProperties.Add( attrInfo );
1702 
1703 			// "FunnelInsideLabelAlignment" attribute
1704 			attrInfo = new CustomPropertyInfo(
1705 				CustomPropertyName.FunnelInsideLabelAlignment,
1706 				typeof(FunnelLabelVerticalAlignment),
1707 				"Center",
1708                 SR.DescriptionCustomAttributeFunnelInsideLabelAlignment,
1709 				chartTypes,
1710 				true,
1711 				true);
1712 			registeredCustomProperties.Add( attrInfo );
1713 
1714 			// "FunnelOutsideLabelPlacement" attribute
1715 			attrInfo = new CustomPropertyInfo(
1716 				CustomPropertyName.FunnelOutsideLabelPlacement,
1717 				typeof(FunnelLabelPlacement),
1718 				"Right",
1719                 SR.DescriptionCustomAttributeFunnelOutsideLabelPlacement,
1720 				chartTypes,
1721 				true,
1722 				true);
1723 			registeredCustomProperties.Add( attrInfo );
1724 
1725 			// "CalloutLineColor" attribute
1726 			attrInfo = new CustomPropertyInfo(
1727 				CustomPropertyName.CalloutLineColor,
1728 				typeof(Color),
1729 				"Black",
1730                 SR.DescriptionCustomAttributeCalloutLineColor,
1731 				chartTypes,
1732 				true,
1733 				true);
1734 			registeredCustomProperties.Add( attrInfo );
1735 
1736 			//***********************************************************************
1737 			//** Pyramid chart types properties
1738 			//***********************************************************************
1739 			chartTypes = new SeriesChartType[] { SeriesChartType.Pyramid };
1740 
1741 
1742 			// "PyramidLabelStyle" attribute
1743 			attrInfo = new CustomPropertyInfo(
1744 				CustomPropertyName.PyramidLabelStyle,
1745 				typeof(FunnelLabelStyle),
1746 				"OutsideInColumn",
1747                 SR.DescriptionCustomAttributePyramidLabelStyle,
1748 				chartTypes,
1749 				true,
1750 				true);
1751 			registeredCustomProperties.Add( attrInfo );
1752 
1753 
1754 			// "PyramidMinPointHeight" attribute
1755 			attrInfo = new CustomPropertyInfo(
1756 				CustomPropertyName.PyramidMinPointHeight,
1757 				typeof(float),
1758 				0f,
1759                 SR.DescriptionCustomAttributePyramidMinPointHeight,
1760 				chartTypes,
1761 				true,
1762 				false);
1763 			attrInfo.MinValue = 0f;
1764 			attrInfo.MaxValue = 100f;
1765 			registeredCustomProperties.Add( attrInfo );
1766 
1767 			// "Pyramid3DRotationAngle" attribute
1768 			attrInfo = new CustomPropertyInfo(
1769 				CustomPropertyName.Pyramid3DRotationAngle,
1770 				typeof(float),
1771 				5f,
1772                 SR.DescriptionCustomAttributePyramid3DRotationAngle,
1773 				chartTypes,
1774 				true,
1775 				false);
1776 			attrInfo.AppliesTo2D = false;
1777 			attrInfo.MinValue = -10f;
1778 			attrInfo.MaxValue = 10f;
1779 			registeredCustomProperties.Add( attrInfo );
1780 
1781 			// "PyramidPointGap" attribute
1782 			attrInfo = new CustomPropertyInfo(
1783 				CustomPropertyName.PyramidPointGap,
1784 				typeof(float),
1785 				0f,
1786                 SR.DescriptionCustomAttributePyramidPointGap,
1787 				chartTypes,
1788 				true,
1789 				false);
1790 			attrInfo.MinValue = 0f;
1791 			attrInfo.MaxValue = 100f;
1792 			registeredCustomProperties.Add( attrInfo );
1793 
1794 			// "Pyramid3DDrawingStyle" attribute
1795 			attrInfo = new CustomPropertyInfo(
1796 				CustomPropertyName.Pyramid3DDrawingStyle,
1797 				typeof(Funnel3DDrawingStyle),
1798 				"SquareBase",
1799                 SR.DescriptionCustomAttributePyramid3DDrawingStyle,
1800 				chartTypes,
1801 				true,
1802 				false);
1803 			attrInfo.AppliesTo2D = false;
1804 			registeredCustomProperties.Add( attrInfo );
1805 
1806 			// "PyramidInsideLabelAlignment" attribute
1807 			attrInfo = new CustomPropertyInfo(
1808 				CustomPropertyName.PyramidInsideLabelAlignment,
1809 				typeof(FunnelLabelVerticalAlignment),
1810 				"Center",
1811                 SR.DescriptionCustomAttributePyramidInsideLabelAlignment,
1812 				chartTypes,
1813 				true,
1814 				true);
1815 			registeredCustomProperties.Add( attrInfo );
1816 
1817 			// "PyramidOutsideLabelPlacement" attribute
1818 			attrInfo = new CustomPropertyInfo(
1819 				CustomPropertyName.PyramidOutsideLabelPlacement,
1820 				typeof(FunnelLabelPlacement),
1821 				"Right",
1822                 SR.DescriptionCustomAttributePyramidOutsideLabelPlacement,
1823 				chartTypes,
1824 				true,
1825 				true);
1826 			registeredCustomProperties.Add( attrInfo );
1827 
1828 			// "CalloutLineColor" attribute
1829 			attrInfo = new CustomPropertyInfo(
1830 				CustomPropertyName.CalloutLineColor,
1831 				typeof(Color),
1832 				"Black",
1833                 SR.DescriptionCustomAttributeCalloutLineColor,
1834 				chartTypes,
1835 				true,
1836 				true);
1837 			registeredCustomProperties.Add( attrInfo );
1838 
1839 			// "PyramidValueType" attribute
1840 			attrInfo = new CustomPropertyInfo(
1841 				CustomPropertyName.PyramidValueType,
1842 				typeof(PyramidValueType),
1843 				"Linear",
1844                 SR.DescriptionCustomAttributePyramidValueType,
1845 				chartTypes,
1846 				true,
1847 				false);
1848 			registeredCustomProperties.Add( attrInfo );
1849 
1850 
1851 		}
1852 
1853 		#endregion // Attributes Regestering methods
1854 
1855 		#region Registry methods
1856 
1857 		/// <summary>
1858 		/// Adds custom attribute information into the registry.
1859 		/// </summary>
1860 		/// <param name="customPropertyInfo">Custom attribute information.</param>
Register(CustomPropertyInfo customPropertyInfo)1861 		public void Register(CustomPropertyInfo customPropertyInfo)
1862 		{
1863 			// Add custom attribute information to the hash table
1864 			registeredCustomProperties.Add(customPropertyInfo);
1865 		}
1866 
1867 		#endregion
1868 	}
1869 
1870 	/// <summary>
1871     /// CustomPropertyInfo class stores information about single
1872     /// custom attribute. It includes Name, Description, Default
1873     /// Value, any restrictions and the conditions when it can
1874     /// be used.
1875     ///
1876     /// Most of the custom attribute can only be used when specific
1877     /// chart type is selected. Some of the properties only work
1878     /// in 2D or 3D mode and some can be applied to the whole
1879     /// series or data points only.
1880 	/// </summary>
1881 	internal class CustomPropertyInfo
1882 	{
1883 		#region Public Fields
1884 
1885 		/// <summary>
1886 		/// Attribute name.
1887 		/// </summary>
1888 		public	string				Name = String.Empty;
1889 
1890 		/// <summary>
1891 		/// Attribute value type.
1892 		/// </summary>
1893 		public	Type				ValueType = typeof(int);
1894 
1895 		/// <summary>
1896 		/// Attribute default value.
1897 		/// </summary>
1898 		public	object				DefaultValue = null;
1899 
1900 		/// <summary>
1901 		/// Attribute description.
1902 		/// </summary>
1903 		public	string				Description = String.Empty;
1904 
1905 		/// <summary>
1906 		/// Array of chart type supported by the attribute
1907 		/// </summary>
1908 		public SeriesChartType[]	AppliesToChartType = null;
1909 
1910 		/// <summary>
1911 		/// Indicates that attribute can be applied on series.
1912 		/// </summary>
1913 		public	bool				AppliesToSeries = true;
1914 
1915 		/// <summary>
1916 		/// Indicates that attribute can be applied on data point.
1917 		/// </summary>
1918 		public	bool				AppliesToDataPoint = true;
1919 
1920 		/// <summary>
1921 		/// Indicates that attribute can be applied on 3D chart type.
1922 		/// </summary>
1923 		public	bool				AppliesTo3D = true;
1924 
1925 		/// <summary>
1926 		/// Indicates that attribute can be applied on 2D chart type.
1927 		/// </summary>
1928 		public	bool				AppliesTo2D = true;
1929 
1930 		/// <summary>
1931 		/// Attribute minimum value.
1932 		/// </summary>
1933 		public	object				MinValue = null;
1934 
1935 		/// <summary>
1936 		/// Attribute maximum value.
1937 		/// </summary>
1938 		public	object				MaxValue = null;
1939 
1940 		#endregion // Public Fields
1941 
1942 		#region Constructor
1943 
1944 		/// <summary>
1945 		/// Public constructor.
1946 		/// </summary>
1947 		/// <param name="name">Attribute name</param>
1948 		/// <param name="valueType">Attribute value type.</param>
1949 		/// <param name="defaultValue">Attribute default value.</param>
1950 		/// <param name="description">Attribute description.</param>
1951 		/// <param name="appliesToChartType">Array of chart types where attribute used.</param>
1952 		/// <param name="appliesToSeries">True if properties can be set in series.</param>
1953 		/// <param name="appliesToDataPoint">True if properties can be set in data point.</param>
CustomPropertyInfo( string name, Type valueType, object defaultValue, string description, SeriesChartType[] appliesToChartType, bool appliesToSeries, bool appliesToDataPoint)1954 		public CustomPropertyInfo(
1955 			string name,
1956 			Type valueType,
1957 			object defaultValue,
1958 			string description,
1959 			SeriesChartType[] appliesToChartType,
1960 			bool appliesToSeries,
1961 			bool appliesToDataPoint)
1962 		{
1963 			this.Name = name;
1964 			this.ValueType = valueType;
1965 			this.DefaultValue = defaultValue;
1966 			this.Description = description;
1967 			this.AppliesToChartType = appliesToChartType;
1968 			this.AppliesToSeries = appliesToSeries;
1969 			this.AppliesToDataPoint = appliesToDataPoint;
1970 		}
1971 
1972 		#endregion // Constructor
1973 	}
1974 }
1975