764 lines
23 KiB
C#

using System.ComponentModel;
namespace DevComponents.DotNetBar.Charts.Style
{
/// <summary>
/// Represents HiLoBarSegment visual style.
/// </summary>
[ToolboxItem(false), DesignTimeVisible(false)]
[TypeConverter(typeof(VisualStylesConverter))]
public class HiLoBarSegmentStyle : BaseVisualStyle
{
#region Static data
/// <summary>
/// Returns Empty instance of HiLoBarSegmentStyle.
/// </summary>
public static HiLoBarSegmentStyle Empty
{
get { return (new HiLoBarSegmentStyle()); }
}
#endregion
#region Private variables
private ChartLineVisualStyle _Default;
private ChartLineVisualStyle _OpenWhisker;
private ChartLineVisualStyle _CloseWhisker;
private ChartLineVisualStyle _CenterLine;
private ChartLineVisualStyle _MedianLine;
private ChartLineVisualStyle _HighWhisker;
private ChartLineVisualStyle _LowWhisker;
private ChartLineVisualStyle _HighWhiskerCap;
private ChartLineVisualStyle _LowWhiskerCap;
private Background _BoxBackground;
private ChartLineVisualStyle _BoxBorder;
#endregion
#region Public properties
#region BoxBackground
/// <summary>
/// Gets or sets the visual style for the Box Background (Box, Candle only).
/// </summary>
[Description("Indicates the the visual style for Box Background (Box, Candle only).")]
public Background BoxBackground
{
get
{
if (_BoxBackground == null)
{
_BoxBackground = Background.Empty;
UpdateChangeHandler(null, _BoxBackground);
}
return (_BoxBackground);
}
set
{
if (_BoxBackground != value)
{
Background oldValue = _BoxBackground;
_BoxBackground = value;
OnStyleChanged("BoxBackground", oldValue, value);
}
}
}
/// <summary>
/// Gets whether property should be serialized.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
private bool ShouldSerializeBoxBackground()
{
return (_BoxBackground != null && _BoxBackground.IsEmpty == false);
}
/// <summary>
/// Resets property to its default value.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
private void ResetBoxBackground()
{
BoxBackground = null;
}
#endregion
#region BoxBorder
/// <summary>
/// Gets or sets the visual style for the Box Border (Box, Candle only).
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Box Border (Box, Candle only).")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle BoxBorder
{
get
{
if (_BoxBorder == null)
{
_BoxBorder = new ChartLineVisualStyle();
UpdateChangeHandler(null, _BoxBorder);
}
return (_BoxBorder);
}
set
{
if (_BoxBorder != value)
{
ChartLineVisualStyle oldValue = _BoxBorder;
_BoxBorder = value;
OnStyleChanged("BoxBorder", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region CenterLine
/// <summary>
/// Gets or sets the visual style for the Center Line segment. This is the
/// style used for the center Hilo segment and the Box/Candle segment when
/// no Open or Close values are specified.
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Center Line segment. This is the style used for the center Hilo segment and the Box/Candle segment when no Open or Close values are specified.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle CenterLine
{
get
{
if (_CenterLine == null)
{
_CenterLine = new ChartLineVisualStyle();
UpdateChangeHandler(null, _CenterLine);
}
return (_CenterLine);
}
set
{
if (_CenterLine != value)
{
ChartLineVisualStyle oldValue = _CenterLine;
_CenterLine = value;
OnStyleChanged("CenterLine", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region CloseWhisker
/// <summary>
/// Gets or sets the visual style for the Close Whisker (Hilo only).
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Close Whisker (Hilo only).")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle CloseWhisker
{
get
{
if (_CloseWhisker == null)
{
_CloseWhisker = new ChartLineVisualStyle();
UpdateChangeHandler(null, _CloseWhisker);
}
return (_CloseWhisker);
}
set
{
if (_CloseWhisker != value)
{
ChartLineVisualStyle oldValue = _CloseWhisker;
_CloseWhisker = value;
OnStyleChanged("CloseWhisker", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region Default
/// <summary>
/// Gets or sets the visual style used as the Default when
/// a segment style is not specified (ie BoxBorder, HighWhisker, etc).
/// </summary>
[Category("Style")]
[Description("Indicates the visual style used as the Default when a segment style is not specified (ie BoxBorder, HighWhisker, etc).")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle Default
{
get
{
if (_Default == null)
{
_Default = new ChartLineVisualStyle();
UpdateChangeHandler(null, _Default);
}
return (_Default);
}
set
{
if (_Default != value)
{
ChartLineVisualStyle oldValue = _Default;
_Default = value;
OnStyleChanged("Default", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region HighWhisker
/// <summary>
/// Gets or sets the visual style for the High Whisker.
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the High Whisker.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle HighWhisker
{
get
{
if (_HighWhisker == null)
{
_HighWhisker = new ChartLineVisualStyle();
UpdateChangeHandler(null, _HighWhisker);
}
return (_HighWhisker);
}
set
{
if (_HighWhisker != value)
{
ChartLineVisualStyle oldValue = _HighWhisker;
_HighWhisker = value;
OnStyleChanged("HighWhisker", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region HighWhiskerCap
/// <summary>
/// Gets or sets the visual style for the High Whisker Cap.
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the High Whisker Cap.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle HighWhiskerCap
{
get
{
if (_HighWhiskerCap == null)
{
_HighWhiskerCap = new ChartLineVisualStyle();
UpdateChangeHandler(null, _HighWhiskerCap);
}
return (_HighWhiskerCap);
}
set
{
if (_HighWhiskerCap != value)
{
ChartLineVisualStyle oldValue = _HighWhiskerCap;
_HighWhiskerCap = value;
OnStyleChanged("HighWhiskerCap", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region LowWhisker
/// <summary>
/// Gets or sets the visual style for the Low Whisker.
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Low Whisker.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle LowWhisker
{
get
{
if (_LowWhisker == null)
{
_LowWhisker = new ChartLineVisualStyle();
UpdateChangeHandler(null, _LowWhisker);
}
return (_LowWhisker);
}
set
{
if (_LowWhisker != value)
{
ChartLineVisualStyle oldValue = _LowWhisker;
_LowWhisker = value;
OnStyleChanged("LowWhisker", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region LowWhiskerCap
/// <summary>
/// Gets or sets the visual style for the Low Whisker Cap.
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Low Whisker Cap.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle LowWhiskerCap
{
get
{
if (_LowWhiskerCap == null)
{
_LowWhiskerCap = new ChartLineVisualStyle();
UpdateChangeHandler(null, _LowWhiskerCap);
}
return (_LowWhiskerCap);
}
set
{
if (_LowWhiskerCap != value)
{
ChartLineVisualStyle oldValue = _LowWhiskerCap;
_LowWhiskerCap = value;
OnStyleChanged("LowWhiskerCap", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region MedianLine
/// <summary>
/// Gets or sets the visual style for the Median Line.
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Median Line.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle MedianLine
{
get
{
if (_MedianLine == null)
{
_MedianLine = new ChartLineVisualStyle();
UpdateChangeHandler(null, _MedianLine);
}
return (_MedianLine);
}
set
{
if (_MedianLine != value)
{
ChartLineVisualStyle oldValue = _MedianLine;
_MedianLine = value;
OnStyleChanged("MedianLine", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region OpenWhisker
/// <summary>
/// Gets or sets the visual style for the Open Whisker (Hilo only).
/// </summary>
[Category("Style")]
[Description("Indicates the visual style for the Open Whisker (Hilo only).")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ChartLineVisualStyle OpenWhisker
{
get
{
if (_OpenWhisker == null)
{
_OpenWhisker = new ChartLineVisualStyle();
UpdateChangeHandler(null, _OpenWhisker);
}
return (_OpenWhisker);
}
set
{
if (_OpenWhisker != value)
{
ChartLineVisualStyle oldValue = _OpenWhisker;
_OpenWhisker = value;
OnStyleChanged("OpenWhisker", oldValue, value);
if (oldValue != null)
oldValue.Dispose();
}
}
}
#endregion
#region IsEmpty
/// <summary>
/// Gets whether both colors assigned are empty.
/// </summary>
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override bool IsEmpty
{
get
{
return ((_BoxBackground == null || _BoxBackground.IsEmpty) &&
(_BoxBorder == null || _BoxBorder.IsEmpty) &&
(_CenterLine == null || _CenterLine.IsEmpty) &&
(_CloseWhisker == null || _CloseWhisker.IsEmpty) &&
(_Default == null || _Default.IsEmpty) &&
(_HighWhisker == null || _HighWhisker.IsEmpty) &&
(_HighWhiskerCap == null || _HighWhiskerCap.IsEmpty) &&
(_LowWhisker == null || _LowWhisker.IsEmpty) &&
(_LowWhiskerCap == null || _LowWhiskerCap.IsEmpty) &&
(_OpenWhisker == null || _OpenWhisker.IsEmpty) &&
(_MedianLine == null || _MedianLine.IsEmpty) &&
(base.IsEmpty == true));
}
}
#endregion
#endregion
#region ApplyStyle
/// <summary>
/// Applies the style to instance of this style.
/// </summary>
/// <param name="style">Style to apply.</param>
public void ApplyStyle(HiLoBarSegmentStyle style)
{
if (style != null)
{
base.ApplyStyle(style);
if (style._BoxBackground != null && style._BoxBackground.IsEmpty == false)
BoxBackground = style._BoxBackground.Copy();
if (style._BoxBorder != null && style._BoxBorder.IsEmpty == false)
BoxBorder.ApplyStyle(style._BoxBorder);
if (style._CenterLine != null && style._CenterLine.IsEmpty == false)
CenterLine.ApplyStyle(style._CenterLine);
if (style._CloseWhisker != null && style._CloseWhisker.IsEmpty == false)
CloseWhisker.ApplyStyle(style._CloseWhisker);
if (style._Default != null && style._Default.IsEmpty == false)
Default.ApplyStyle(style._Default);
if (style._HighWhisker != null && style._HighWhisker.IsEmpty == false)
HighWhisker.ApplyStyle(style._HighWhisker);
if (style._HighWhiskerCap != null && style._HighWhiskerCap.IsEmpty == false)
HighWhiskerCap.ApplyStyle(style._HighWhiskerCap);
if (style._LowWhisker != null && style._LowWhisker.IsEmpty == false)
LowWhisker.ApplyStyle(style._LowWhisker);
if (style._LowWhiskerCap != null && style._LowWhiskerCap.IsEmpty == false)
LowWhiskerCap.ApplyStyle(style._LowWhiskerCap);
if (style._MedianLine != null && style._MedianLine.IsEmpty == false)
MedianLine.ApplyStyle(style._MedianLine);
if (style._OpenWhisker != null && style._OpenWhisker.IsEmpty == false)
OpenWhisker.ApplyStyle(style._OpenWhisker);
}
}
#endregion
#region Copy
/// <summary>
/// Creates an exact copy of the OhlcBarSegmentStyle.
/// </summary>
/// <returns>Copy of the OhlcBarSegmentStyle.</returns>
public new HiLoBarSegmentStyle Copy()
{
HiLoBarSegmentStyle style = new HiLoBarSegmentStyle();
CopyTo(style);
return (style);
}
#endregion
#region CopyTo
/// <summary>
/// Returns the copy of the style.
/// </summary>
/// <returns>Copy of the style.</returns>
public void CopyTo(HiLoBarSegmentStyle style)
{
style.BoxBackground = (_BoxBackground != null) ? _BoxBackground.Copy() : null;
style.BoxBorder = (_BoxBorder != null) ? _BoxBorder.Copy() : null;
style.CenterLine = (_CenterLine != null) ? _CenterLine.Copy() : null;
style.CloseWhisker = (_CloseWhisker != null) ? _CloseWhisker.Copy() : null;
style.Default = (_Default != null) ? _Default.Copy() : null;
style.HighWhisker = (_HighWhisker != null) ? _HighWhisker.Copy() : null;
style.HighWhiskerCap = (_HighWhiskerCap != null) ? _HighWhiskerCap.Copy() : null;
style.LowWhisker = (_LowWhisker != null) ? _LowWhisker.Copy() : null;
style.LowWhiskerCap = (_LowWhiskerCap != null) ? _LowWhiskerCap.Copy() : null;
style.MedianLine = (_MedianLine != null) ? _MedianLine.Copy() : null;
style.OpenWhisker = (_OpenWhisker != null) ? _OpenWhisker.Copy() : null;
}
#endregion
#region GetSerialData
internal override SerialElementCollection GetSerialData(string serialName)
{
SerialElementCollection sec = new SerialElementCollection();
if (serialName != null)
{
if (serialName.Equals("") == true)
serialName = "HiLoBarSegmentStyle";
sec.AddStartElement(serialName);
}
if (_BoxBackground != null && _BoxBackground.IsEmpty == false)
sec.AddElement(_BoxBackground.GetSerialData("BoxBackground"));
if (_BoxBorder != null && _BoxBorder.IsEmpty == false)
sec.AddElement(_BoxBorder.GetSerialData("BoxBorder"));
if (_CenterLine != null && _CenterLine.IsEmpty == false)
sec.AddElement(_CenterLine.GetSerialData("CenterLine"));
if (_CloseWhisker != null && _CloseWhisker.IsEmpty == false)
sec.AddElement(_CloseWhisker.GetSerialData("CloseWhisker"));
if (_Default != null && _Default.IsEmpty == false)
sec.AddElement(_Default.GetSerialData("Default"));
if (_HighWhisker != null && _HighWhisker.IsEmpty == false)
sec.AddElement(_HighWhisker.GetSerialData("HighWhisker"));
if (_HighWhiskerCap != null && _HighWhiskerCap.IsEmpty == false)
sec.AddElement(_HighWhiskerCap.GetSerialData("HighWhiskerCap"));
if (_LowWhisker != null && _LowWhisker.IsEmpty == false)
sec.AddElement(_LowWhisker.GetSerialData("LowWhisker"));
if (_LowWhiskerCap != null && _LowWhiskerCap.IsEmpty == false)
sec.AddElement(_LowWhiskerCap.GetSerialData("LowWhiskerCap"));
if (_MedianLine != null && _MedianLine.IsEmpty == false)
sec.AddElement(_MedianLine.GetSerialData("MedianLine"));
if (_OpenWhisker != null && _OpenWhisker.IsEmpty == false)
sec.AddElement(_OpenWhisker.GetSerialData("OpenWhisker"));
sec.AddElement(base.GetSerialData(null));
if (serialName != null)
sec.AddEndElement(serialName);
return (sec);
}
#endregion
#region PutSerialData
#region ProcessCollection
internal override void ProcessCollection(SerialElement se)
{
SerialElementCollection sec = se.Sec;
switch (se.Name)
{
case "BoxBackground":
sec.PutSerialData(BoxBackground);
break;
case "BoxBorder":
sec.PutSerialData(BoxBorder);
break;
case "CenterLine":
sec.PutSerialData(CenterLine);
break;
case "CloseWhisker":
sec.PutSerialData(CloseWhisker);
break;
case "Default":
sec.PutSerialData(Default);
break;
case "HighWhisker":
sec.PutSerialData(HighWhisker);
break;
case "HighWhiskerCap":
sec.PutSerialData(HighWhiskerCap);
break;
case "LowWhisker":
sec.PutSerialData(LowWhisker);
break;
case "LowWhiskerCap":
sec.PutSerialData(LowWhiskerCap);
break;
case "MedianLine":
sec.PutSerialData(MedianLine);
break;
case "OpenWhisker":
sec.PutSerialData(OpenWhisker);
break;
default:
base.ProcessCollection(se);
break;
}
}
#endregion
#endregion
#region IDisposable
public override void Dispose()
{
BoxBorder = null;
CenterLine = null;
CloseWhisker = null;
Default = null;
HighWhisker = null;
HighWhiskerCap = null;
LowWhisker = null;
LowWhiskerCap = null;
MedianLine = null;
OpenWhisker = null;
base.Dispose();
}
#endregion
}
}