Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Web.DataVisualization / Common / Utilities / CustomAttributesRegistry.cs
1 //-------------------------------------------------------------
2 // <copyright company=\92Microsoft Corporation\92>
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, \91Exploded\92 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     /// \91registeredCustomProperties\92 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>
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)]
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>
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>
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>
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 }