Updates referencesource to .NET 4.7
[mono-project.git] / mcs / class / referencesource / System.Web.DataVisualization / Common / Utilities / CustomAttributesRegistry.cs
blob67a41ff1bf90fee166dcc6515447e58c07a48c43
1 //-------------------------------------------------------------
2 // <copyright company=’Microsoft Corporation’>
3 // Copyright © Microsoft Corporation. All Rights Reserved.
4 // </copyright>
5 //-------------------------------------------------------------
6 // @owner=alexgor, deliant
7 //=================================================================
8 // File: CustomProperties.cs
9 //
10 // Namespace: System.Web.UI.WebControls[Windows.Forms].Charting.Utilities
12 // Classes: CustomPropertyRegistry, CustomPropertyInfo,
13 // CustomPropertyName
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.
20 // Custom Properties Overview:
21 // ---------------------------
22 //
23 // Different chart types may have unique settings that only apply to
24 // this chart type. For example, ‘Exploded’ attribute on the data point
25 // only make sense in case of Pie and Doughnut chart types. Instead of
26 // adding properties that only will work with specific chart types
27 // CustomProperties were introduced.
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";
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.
43 // Reviewed: AG - Microsoft 5, 2007
45 //===================================================================
48 #region Used Namespaces
50 using System;
51 using System.Drawing;
52 using System.Collections;
53 using System.ComponentModel;
54 using System.ComponentModel.Design;
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
64 #endregion
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
72 #region Enumerations
75 /// <summary>
76 /// Circular chart drawing style.
77 /// </summary>
78 internal enum PolarDrawingStyles
80 /// <summary>
81 /// Series are drawn as lines.
82 /// </summary>
83 Line,
84 /// <summary>
85 /// Series are drawn as markers.
86 /// </summary>
87 Marker
90 /// <summary>
91 /// CircularAreaDrawingStyle
92 /// </summary>
93 internal enum CircularAreaDrawingStyles
95 /// <summary>
96 /// Drawn as polygon
97 /// </summary>
98 Polygon,
100 /// <summary>
101 /// Drawn as circle
102 /// </summary>
103 Circle = 1,
106 /// <summary>
107 /// Marker Style
108 /// </summary>
109 internal enum ErrorBarMarkerStyles
111 /// <summary>
112 /// Marker disabled
113 /// </summary>
114 None = 0,
116 /// <summary>
117 /// The marker style is Square
118 /// </summary>
119 Square = 1,
121 /// <summary>
122 /// The marker style is Circle
123 /// </summary>
124 Circle = 2,
126 /// <summary>
127 /// The marker style is Diamond
128 /// </summary>
129 Diamond = 3,
131 /// <summary>
132 /// The marker style is Triangle
133 /// </summary>
134 Triangle = 4,
136 /// <summary>
137 /// The marker style is Cross
138 /// </summary>
139 Cross = 5,
141 /// <summary>
142 /// The marker style is 4 corner star
143 /// </summary>
144 Star4 = 6,
146 /// <summary>
147 /// The marker style is 5 corner star
148 /// </summary>
149 Star5 = 7,
151 /// <summary>
152 /// The marker style is 6 corner star
153 /// </summary>
154 Star6 = 8,
156 /// <summary>
157 /// The marker style is 10 corner star
158 /// </summary>
159 Star10 = 9,
161 /// <summary>
162 /// Line marker
163 /// </summary>
164 Line = 10
168 /// <summary>
169 /// AxisName of stock chart markers
170 /// </summary>
171 internal enum StockShowOpenCloseTypes
173 /// <summary>
174 /// Open and Close markers are shown.
175 /// </summary>
176 Both,
178 /// <summary>
179 /// Only Open markers are shown.
180 /// </summary>
181 Open,
183 /// <summary>
184 /// Only Close markers are shown.
185 /// </summary>
186 Close,
190 /// <summary>
191 /// IsEmpty point value attribute
192 /// </summary>
193 internal enum EmptyPointTypes
195 /// <summary>
196 /// Average of two neighbor points is used.
197 /// </summary>
198 Average,
200 /// <summary>
201 /// Zero value is used
202 /// </summary>
203 Zero
206 /// <summary>
207 /// Stock chart point labels attribute
208 /// </summary>
209 internal enum StockLabelValueTypes
211 /// <summary>
212 /// High Y value is used to generate point label.
213 /// </summary>
214 High,
216 /// <summary>
217 /// Low Y value is used to generate point label.
218 /// </summary>
219 Low,
221 /// <summary>
222 /// Open Y value is used to generate point label.
223 /// </summary>
224 Open,
226 /// <summary>
227 /// Close Y value is used to generate point label.
228 /// </summary>
229 Close,
232 /// <summary>
233 /// Data point label alignment.
234 /// </summary>
235 [Flags]
236 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")]
237 internal enum LabelAlignments
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,
281 #endregion //Enumerations
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
289 #region Common Custom Properties Names
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";
379 #endregion // Common Custom Properties Names
382 /// <summary>
383 /// CustomPropertyRegistry contains information for all chart
384 /// custom properties. This data is exposed through the
385 /// ‘registeredCustomProperties’ field which is an ArrayList
386 /// containing CustomPropertyInfo classes.
387 /// </summary>
388 internal class CustomPropertyRegistry : IServiceProvider
390 #region Fields
392 // List of registered properties
393 internal ArrayList registeredCustomProperties = new ArrayList();
395 // Defines maximum value which can be set to the attribute which uses pixels
396 internal static int MaxValueOfPixelAttribute = 10000;
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,
410 #endregion
412 #region Constructor and Services
414 /// <summary>
415 /// Custom properties registry public constructor.
416 /// </summary>
417 public CustomPropertyRegistry()
419 // Register properties used in the chart
420 RegisterProperties();
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)
431 if(serviceType == typeof(CustomPropertyRegistry))
433 return this;
435 throw (new ArgumentException(SR.ExceptionCustomAttributesRegistryUnsupportedType( serviceType.ToString()) ));
438 #endregion
440 #region Properties Regestering methods
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()
450 SeriesChartType[] chartTypes = null;
451 CustomPropertyInfo attrInfo = null;
453 //***********************************************************************
454 //** DrawSideBySide properties
455 //***********************************************************************
456 chartTypes = new SeriesChartType[] {
457 SeriesChartType.Bar,
458 SeriesChartType.Column,
460 SeriesChartType.RangeColumn,
461 SeriesChartType.BoxPlot,
462 SeriesChartType.RangeBar,
463 SeriesChartType.ErrorBar,
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 );
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));
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,
509 registeredCustomProperties.Add( new CustomPropertyInfo(
510 CustomPropertyName.EmptyPointValue,
511 typeof(EmptyPointTypes),
512 "Average",
513 SR.DescriptionCustomAttributeEmptyPointValue,
514 chartTypes,
515 true,
516 false) );
519 //***********************************************************************
520 //** Bar label styles properties
521 //***********************************************************************
522 chartTypes = new SeriesChartType[] {
523 SeriesChartType.StackedBar,
524 SeriesChartType.StackedBar100,
525 SeriesChartType.RangeBar,
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 );
540 //***********************************************************************
541 //** Stacked Column/Bar properties
542 //***********************************************************************
543 chartTypes = new SeriesChartType[] {
544 SeriesChartType.StackedBar,
545 SeriesChartType.StackedBar100,
546 SeriesChartType.StackedColumn,
547 SeriesChartType.StackedColumn100,
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);
564 //***********************************************************************
565 //** Bar label styles properties
566 //***********************************************************************
567 chartTypes = new SeriesChartType[] {
568 SeriesChartType.Bar,
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 );
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,
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 );
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,
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 );
636 // "PixelPointWidth" attribute
637 attrInfo = new CustomPropertyInfo(
638 CustomPropertyName.PixelPointWidth,
639 typeof(int),
641 SR.DescriptionCustomAttributePixelPointWidth,
642 chartTypes,
643 true,
644 false);
645 attrInfo.MinValue = 0;
646 attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
647 registeredCustomProperties.Add( attrInfo );
649 // "MinPixelPointWidth" attribute
650 attrInfo = new CustomPropertyInfo(
651 CustomPropertyName.MinPixelPointWidth,
652 typeof(int),
654 SR.DescriptionCustomAttributeMinPixelPointWidth,
655 chartTypes,
656 true,
657 false);
658 attrInfo.MinValue = 0;
659 attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
660 registeredCustomProperties.Add( attrInfo );
662 // "MaxPixelPointWidth" attribute
663 attrInfo = new CustomPropertyInfo(
664 CustomPropertyName.MaxPixelPointWidth,
665 typeof(int),
667 SR.DescriptionCustomAttributeMaxPixelPointWidth,
668 chartTypes,
669 true,
670 false);
671 attrInfo.MinValue = 0;
672 attrInfo.MaxValue = CustomPropertyRegistry.MaxValueOfPixelAttribute;
673 registeredCustomProperties.Add( attrInfo );
677 //***********************************************************************
678 //** CandleStick chart types properties
679 //***********************************************************************
680 chartTypes = new SeriesChartType[] { SeriesChartType.Candlestick };
682 // "PriceUpColor" attribute
683 attrInfo = new CustomPropertyInfo(
684 CustomPropertyName.PriceUpColor,
685 typeof(Color),
687 SR.DescriptionCustomAttributeCandlePriceUpColor,
688 chartTypes,
689 true,
690 true);
691 registeredCustomProperties.Add( attrInfo );
693 // "PriceDownColor" attribute
694 attrInfo = new CustomPropertyInfo(
695 CustomPropertyName.PriceDownColor,
696 typeof(Color),
698 SR.DescriptionCustomAttributePriceDownColor,
699 chartTypes,
700 true,
701 true);
702 registeredCustomProperties.Add( attrInfo );
705 //***********************************************************************
706 //** Stock and CandleStick chart types properties
707 //***********************************************************************
708 chartTypes = new SeriesChartType[] { SeriesChartType.Stock, SeriesChartType.Candlestick };
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 );
721 //***********************************************************************
722 //** Stock chart types properties
723 //***********************************************************************
724 chartTypes = new SeriesChartType[] { SeriesChartType.Stock };
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 );
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 );
749 //***********************************************************************
750 //** Bubble chart types properties
751 //***********************************************************************
752 chartTypes = new SeriesChartType[] { SeriesChartType.Bubble };
754 // "BubbleScaleMin" attribute
755 attrInfo = new CustomPropertyInfo(
756 CustomPropertyName.BubbleScaleMin,
757 typeof(float),
759 SR.DescriptionCustomAttributeBubbleScaleMin,
760 chartTypes,
761 true,
762 false);
763 registeredCustomProperties.Add( attrInfo );
765 // "BubbleScaleMax" attribute
766 attrInfo = new CustomPropertyInfo(
767 CustomPropertyName.BubbleScaleMax,
768 typeof(float),
770 SR.DescriptionCustomAttributeBubbleScaleMax,
771 chartTypes,
772 true,
773 false);
774 registeredCustomProperties.Add( attrInfo );
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 );
789 // "BubbleMinSize" attribute of the Bubble chart
790 attrInfo = new CustomPropertyInfo(
791 CustomPropertyName.BubbleMinSize,
792 typeof(float),
794 SR.DescriptionCustomAttributeBubbleMaxSize,
795 chartTypes,
796 true,
797 false);
798 attrInfo.MinValue = 0f;
799 attrInfo.MaxValue = 100f;
800 registeredCustomProperties.Add( attrInfo );
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 );
815 //***********************************************************************
816 //** Pie and Doughnut chart types properties
817 //***********************************************************************
818 chartTypes = new SeriesChartType[] {
819 SeriesChartType.Pie,
820 SeriesChartType.Doughnut
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 );
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 );
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 );
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 );
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 );
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 );
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 );
905 // "CollectedColor" attribute of the Pie chart
906 attrInfo = new CustomPropertyInfo(
907 CustomPropertyName.CollectedColor,
908 typeof(Color),
910 SR.DescriptionCustomAttributeCollectedColor,
911 chartTypes,
912 true,
913 false);
914 registeredCustomProperties.Add( attrInfo );
917 // "PieStartAngle" attribute of the Pie chart
918 attrInfo = new CustomPropertyInfo(
919 CustomPropertyName.PieStartAngle,
920 typeof(int),
922 SR.DescriptionCustomAttributePieStartAngle,
923 chartTypes,
924 true,
925 false);
926 attrInfo.MinValue = 0;
927 attrInfo.MaxValue = 360;
928 registeredCustomProperties.Add( attrInfo );
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) );
943 // "LabelsRadialLineSize" attribute of the Pie chart
944 attrInfo = new CustomPropertyInfo(
945 CustomPropertyName.LabelsRadialLineSize,
946 typeof(float),
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 );
957 // "LabelsHorizontalLineSize" attribute of the Pie chart
958 attrInfo = new CustomPropertyInfo(
959 CustomPropertyName.LabelsHorizontalLineSize,
960 typeof(float),
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 );
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) );
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 );
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 );
1010 // "PieLineColor" attribute of the Pie chart
1011 attrInfo = new CustomPropertyInfo(
1012 CustomPropertyName.PieLineColor,
1013 typeof(Color),
1015 SR.DescriptionCustomAttributePieLineColor,
1016 chartTypes,
1017 true,
1018 true);
1019 registeredCustomProperties.Add( attrInfo );
1021 //***********************************************************************
1022 //** Doughnut chart types properties
1023 //***********************************************************************
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 );
1039 //***********************************************************************
1040 //** Other
1041 //***********************************************************************
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,
1059 registeredCustomProperties.Add( new CustomPropertyInfo(
1060 CustomPropertyName.LabelStyle,
1061 typeof(LabelAlignments),
1062 "Auto",
1063 SR.DescriptionCustomAttributeLabelStyle,
1064 chartTypes,
1065 true,
1066 true) );
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
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 );
1089 // "LineTension" attribute
1090 chartTypes = new SeriesChartType[] {
1091 SeriesChartType.Spline,
1092 SeriesChartType.SplineArea,
1093 SeriesChartType.SplineRange
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 );
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,
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,
1139 attrInfo = new CustomPropertyInfo(
1140 CustomPropertyName.PixelPointDepth,
1141 typeof(int),
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 );
1152 // "PixelPointGapDepth" attribute
1153 attrInfo = new CustomPropertyInfo(
1154 CustomPropertyName.PixelPointGapDepth,
1155 typeof(int),
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 );
1168 //***********************************************************************
1169 //** FastLine chart type properties
1170 //***********************************************************************
1171 chartTypes = new SeriesChartType[] {
1172 SeriesChartType.FastLine,
1173 SeriesChartType.FastPoint,
1176 /* NOTE: This is an internal attribute
1178 // "PermittedPixelError" attribute
1179 attrInfo = new CustomPropertyInfo(
1180 CustomPropertyName.PixelPointGapDepth,
1181 typeof(float),
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 );
1191 //***********************************************************************
1192 //** Polar chart type properties
1193 //***********************************************************************
1194 chartTypes = new SeriesChartType[] {
1195 SeriesChartType.Polar
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 );
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 );
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 );
1232 //***********************************************************************
1233 //** Radar chart type properties
1234 //***********************************************************************
1235 chartTypes = new SeriesChartType[] {
1236 SeriesChartType.Radar
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 );
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 );
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 );
1272 //***********************************************************************
1273 //** BoxPlot chart type properties
1274 //***********************************************************************
1275 chartTypes = new SeriesChartType[] {
1276 SeriesChartType.BoxPlot
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 );
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 );
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 );
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 );
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 );
1337 // "BoxPlotSeries" attribute
1338 attrInfo = new CustomPropertyInfo(
1339 CustomPropertyName.BoxPlotSeries,
1340 typeof(string),
1342 SR.DescriptionCustomAttributeBoxPlotSeries,
1343 chartTypes,
1344 true,
1345 false);
1346 registeredCustomProperties.Add( attrInfo );
1348 //***********************************************************************
1349 //** ErrorBar chart type properties
1350 //***********************************************************************
1351 chartTypes = new SeriesChartType[] {
1352 SeriesChartType.ErrorBar
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 );
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 );
1376 // "ErrorBarSeries" attribute
1377 attrInfo = new CustomPropertyInfo(
1378 CustomPropertyName.ErrorBarSeries,
1379 typeof(string),
1381 SR.DescriptionCustomAttributeErrorBarSeries,
1382 chartTypes,
1383 true,
1384 false);
1385 registeredCustomProperties.Add( attrInfo );
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 );
1399 //***********************************************************************
1400 //** PointAndFigure chart types properties
1401 //***********************************************************************
1402 chartTypes = new SeriesChartType[] { SeriesChartType.PointAndFigure };
1404 // "UsedYValueHigh" attribute
1405 attrInfo = new CustomPropertyInfo(
1406 CustomPropertyName.UsedYValueHigh,
1407 typeof(int),
1409 SR.DescriptionCustomAttributeUsedYValueHigh,
1410 chartTypes,
1411 true,
1412 false);
1413 attrInfo.MinValue = 0;
1414 attrInfo.MaxValue = 20;
1415 registeredCustomProperties.Add( attrInfo );
1417 // "UsedYValueLow" attribute
1418 attrInfo = new CustomPropertyInfo(
1419 CustomPropertyName.UsedYValueLow,
1420 typeof(int),
1422 SR.DescriptionCustomAttributeUsedYValueLow,
1423 chartTypes,
1424 true,
1425 false);
1426 attrInfo.MinValue = 0;
1427 attrInfo.MaxValue = 20;
1428 registeredCustomProperties.Add( attrInfo );
1430 // "PriceUpColor" attribute
1431 attrInfo = new CustomPropertyInfo(
1432 CustomPropertyName.PriceUpColor,
1433 typeof(Color),
1435 SR.DescriptionCustomAttributeBarsPriceUpColor,
1436 chartTypes,
1437 true,
1438 false);
1439 registeredCustomProperties.Add( attrInfo );
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 );
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 );
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 );
1474 //***********************************************************************
1475 //** Kagi chart types properties
1476 //***********************************************************************
1477 chartTypes = new SeriesChartType[] { SeriesChartType.Kagi };
1479 // "UsedYValue" attribute
1480 attrInfo = new CustomPropertyInfo(
1481 CustomPropertyName.UsedYValue,
1482 typeof(int),
1484 SR.DescriptionCustomAttributeUsedYValue,
1485 chartTypes,
1486 true,
1487 false);
1488 attrInfo.MinValue = 0;
1489 attrInfo.MaxValue = 20;
1490 registeredCustomProperties.Add( attrInfo );
1492 // "PriceUpColor" attribute
1493 attrInfo = new CustomPropertyInfo(
1494 CustomPropertyName.PriceUpColor,
1495 typeof(Color),
1497 SR.DescriptionCustomAttributeBarsPriceUpColor,
1498 chartTypes,
1499 true,
1500 false);
1501 registeredCustomProperties.Add( attrInfo );
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 );
1514 //***********************************************************************
1515 //** Renko chart types properties
1516 //***********************************************************************
1517 chartTypes = new SeriesChartType[] { SeriesChartType.Renko };
1519 // "UsedYValue" attribute
1520 attrInfo = new CustomPropertyInfo(
1521 CustomPropertyName.UsedYValue,
1522 typeof(int),
1524 SR.DescriptionCustomAttributeRenkoUsedYValue,
1525 chartTypes,
1526 true,
1527 false);
1528 attrInfo.MinValue = 0;
1529 attrInfo.MaxValue = 20;
1530 registeredCustomProperties.Add( attrInfo );
1532 // "PriceUpColor" attribute
1533 attrInfo = new CustomPropertyInfo(
1534 CustomPropertyName.PriceUpColor,
1535 typeof(Color),
1537 SR.DescriptionCustomAttributeBarsPriceUpColor,
1538 chartTypes,
1539 true,
1540 false);
1541 registeredCustomProperties.Add( attrInfo );
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 );
1554 //***********************************************************************
1555 //** ThreeLineBreak chart types properties
1556 //***********************************************************************
1557 chartTypes = new SeriesChartType[] { SeriesChartType.ThreeLineBreak };
1559 // "UsedYValue" attribute
1560 attrInfo = new CustomPropertyInfo(
1561 CustomPropertyName.UsedYValue,
1562 typeof(int),
1564 SR.DescriptionCustomAttributeThreeLineBreakUsedYValue,
1565 chartTypes,
1566 true,
1567 false);
1568 attrInfo.MinValue = 0;
1569 attrInfo.MaxValue = 20;
1570 registeredCustomProperties.Add( attrInfo );
1572 // "PriceUpColor" attribute
1573 attrInfo = new CustomPropertyInfo(
1574 CustomPropertyName.PriceUpColor,
1575 typeof(Color),
1577 SR.DescriptionCustomAttributeBarsPriceUpColor,
1578 chartTypes,
1579 true,
1580 false);
1581 registeredCustomProperties.Add( attrInfo );
1583 // "NumberOfLinesInBreak" attribute
1584 attrInfo = new CustomPropertyInfo(
1585 CustomPropertyName.NumberOfLinesInBreak,
1586 typeof(int),
1588 SR.DescriptionCustomAttributeNumberOfLinesInBreak,
1589 chartTypes,
1590 true,
1591 false);
1592 registeredCustomProperties.Add( attrInfo );
1596 //***********************************************************************
1597 //** Funnel chart types properties
1598 //***********************************************************************
1599 chartTypes = new SeriesChartType[] { SeriesChartType.Funnel };
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 );
1614 // "FunnelNeckWidth" attribute
1615 attrInfo = new CustomPropertyInfo(
1616 CustomPropertyName.FunnelNeckWidth,
1617 typeof(float),
1619 SR.DescriptionCustomAttributeFunnelNeckWidth,
1620 chartTypes,
1621 true,
1622 false);
1623 attrInfo.MinValue = 0f;
1624 attrInfo.MaxValue = 100f;
1625 registeredCustomProperties.Add( attrInfo );
1627 // "FunnelNeckHeight" attribute
1628 attrInfo = new CustomPropertyInfo(
1629 CustomPropertyName.FunnelNeckHeight,
1630 typeof(float),
1632 SR.DescriptionCustomAttributeFunnelNeckHeight,
1633 chartTypes,
1634 true,
1635 false);
1636 attrInfo.MinValue = 0f;
1637 attrInfo.MaxValue = 100f;
1638 registeredCustomProperties.Add( attrInfo );
1640 // "FunnelMinPointHeight" attribute
1641 attrInfo = new CustomPropertyInfo(
1642 CustomPropertyName.FunnelMinPointHeight,
1643 typeof(float),
1645 SR.DescriptionCustomAttributeFunnelMinPointHeight,
1646 chartTypes,
1647 true,
1648 false);
1649 attrInfo.MinValue = 0f;
1650 attrInfo.MaxValue = 100f;
1651 registeredCustomProperties.Add( attrInfo );
1653 // "Funnel3DRotationAngle" attribute
1654 attrInfo = new CustomPropertyInfo(
1655 CustomPropertyName.Funnel3DRotationAngle,
1656 typeof(float),
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 );
1667 // "FunnelPointGap" attribute
1668 attrInfo = new CustomPropertyInfo(
1669 CustomPropertyName.FunnelPointGap,
1670 typeof(float),
1672 SR.DescriptionCustomAttributeFunnelPointGap,
1673 chartTypes,
1674 true,
1675 false);
1676 attrInfo.MinValue = 0f;
1677 attrInfo.MaxValue = 100f;
1678 registeredCustomProperties.Add( attrInfo );
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 );
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 );
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 );
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 );
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 );
1736 //***********************************************************************
1737 //** Pyramid chart types properties
1738 //***********************************************************************
1739 chartTypes = new SeriesChartType[] { SeriesChartType.Pyramid };
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 );
1754 // "PyramidMinPointHeight" attribute
1755 attrInfo = new CustomPropertyInfo(
1756 CustomPropertyName.PyramidMinPointHeight,
1757 typeof(float),
1759 SR.DescriptionCustomAttributePyramidMinPointHeight,
1760 chartTypes,
1761 true,
1762 false);
1763 attrInfo.MinValue = 0f;
1764 attrInfo.MaxValue = 100f;
1765 registeredCustomProperties.Add( attrInfo );
1767 // "Pyramid3DRotationAngle" attribute
1768 attrInfo = new CustomPropertyInfo(
1769 CustomPropertyName.Pyramid3DRotationAngle,
1770 typeof(float),
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 );
1781 // "PyramidPointGap" attribute
1782 attrInfo = new CustomPropertyInfo(
1783 CustomPropertyName.PyramidPointGap,
1784 typeof(float),
1786 SR.DescriptionCustomAttributePyramidPointGap,
1787 chartTypes,
1788 true,
1789 false);
1790 attrInfo.MinValue = 0f;
1791 attrInfo.MaxValue = 100f;
1792 registeredCustomProperties.Add( attrInfo );
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 );
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 );
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 );
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 );
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 );
1853 #endregion // Attributes Regestering methods
1855 #region Registry methods
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)
1863 // Add custom attribute information to the hash table
1864 registeredCustomProperties.Add(customPropertyInfo);
1867 #endregion
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
1883 #region Public Fields
1885 /// <summary>
1886 /// Attribute name.
1887 /// </summary>
1888 public string Name = String.Empty;
1890 /// <summary>
1891 /// Attribute value type.
1892 /// </summary>
1893 public Type ValueType = typeof(int);
1895 /// <summary>
1896 /// Attribute default value.
1897 /// </summary>
1898 public object DefaultValue = null;
1900 /// <summary>
1901 /// Attribute description.
1902 /// </summary>
1903 public string Description = String.Empty;
1905 /// <summary>
1906 /// Array of chart type supported by the attribute
1907 /// </summary>
1908 public SeriesChartType[] AppliesToChartType = null;
1910 /// <summary>
1911 /// Indicates that attribute can be applied on series.
1912 /// </summary>
1913 public bool AppliesToSeries = true;
1915 /// <summary>
1916 /// Indicates that attribute can be applied on data point.
1917 /// </summary>
1918 public bool AppliesToDataPoint = true;
1920 /// <summary>
1921 /// Indicates that attribute can be applied on 3D chart type.
1922 /// </summary>
1923 public bool AppliesTo3D = true;
1925 /// <summary>
1926 /// Indicates that attribute can be applied on 2D chart type.
1927 /// </summary>
1928 public bool AppliesTo2D = true;
1930 /// <summary>
1931 /// Attribute minimum value.
1932 /// </summary>
1933 public object MinValue = null;
1935 /// <summary>
1936 /// Attribute maximum value.
1937 /// </summary>
1938 public object MaxValue = null;
1940 #endregion // Public Fields
1942 #region Constructor
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)
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;
1972 #endregion // Constructor