using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
namespace DevComponents.DotNetBar.Controls
{
///
/// Data storage class for clock visual styles.
///
[Description("Clock Style"),
TypeConverterAttribute(typeof(ExpandableObjectConverter))]
public class ClockStyleData : IDisposable, INotifyPropertyChanged
{
private eClockStyles _Style;
///
/// Gets or sets the PredefinedStyles value for this style.
///
[Browsable(false)]
public eClockStyles Style
{
get { return _Style; }
set
{
if (value != _Style)
{
_Style = value;
OnPropertyChanged(new PropertyChangedEventArgs("Style"));
}
}
}
private eClockShapes _ClockShape;
///
/// Gets or sets the clock shape value for this style.
///
[DefaultValue(eClockShapes.Round),
Category("Appearance"),
Description("The clock shape for this style.")]
public eClockShapes ClockShape
{
get { return _ClockShape; }
set
{
if (value != _ClockShape)
{
_ClockShape = value;
OnPropertyChanged(new PropertyChangedEventArgs("ClockShape"));
}
}
}
private void ColorPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (_Parent != null) _Parent.Invalidate();
}
private ColorData _BezelColor;
///
/// Gets or sets the bezel color data for this style.
///
[Category("Appearance"),
Description("The bezel color data for this style.")]
public ColorData BezelColor
{
get { return _BezelColor; }
set
{
if (value != _BezelColor)
{
if (_BezelColor != null) _BezelColor.PropertyChanged -= ColorPropertyChanged;
_BezelColor = value;
if (_BezelColor != null) _BezelColor.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("BezelColor"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetBezelColor()
{
BezelColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(255, 255, 255), Color.FromArgb(152, 152, 152), Color.FromArgb(120, 120, 120), 1.0f, 45.0f);
}
private float _BezelWidth;
///
/// Gets or sets the width of clock bezel as a percentage value ranging from 0.0 to 1.0.
///
[DefaultValue(0.03f),
Category("Appearance"),
Description("The width of clock bezel as a percentage value ranging from 0.0 to 1.0.")]
public float BezelWidth
{
get { return _BezelWidth; }
set
{
if (value != _BezelWidth)
{
_BezelWidth = value;
OnPropertyChanged(new PropertyChangedEventArgs("BezelWidth"));
}
}
}
private ColorData _FaceColor;
///
/// Gets or sets the face color data for this style.
///
[Category("Appearance"),
Description("The face color data for this style.")]
public ColorData FaceColor
{
get { return _FaceColor; }
set
{
if (value != _FaceColor)
{
if (_FaceColor != null) _FaceColor.PropertyChanged -= ColorPropertyChanged;
_FaceColor = value;
if (_FaceColor != null) _FaceColor.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("FaceColor"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetFaceColor()
{
FaceColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(191, 204, 213), Color.FromArgb(255, 255, 255), Color.FromArgb(135, 145, 161), 1.0f, 45.0f);
}
private Image _FaceBackgroundImage;
///
/// Gets or sets the face background image for this style.
///
[DefaultValue(null),
Category("Appearance"),
Description("The face background image for this style.")]
public Image FaceBackgroundImage
{
get { return _FaceBackgroundImage; }
set
{
if (value != _FaceBackgroundImage)
{
_FaceBackgroundImage = value;
OnPropertyChanged(new PropertyChangedEventArgs("FaceBackgroundImage"));
}
}
}
private ClockHandStyleData _HourHandStyle;
///
/// Gets or sets the hour hand style for this style.
///
[Category("Appearance"),
Description("The hour hand style for this style.")]
public ClockHandStyleData HourHandStyle
{
get { return _HourHandStyle; }
set
{
if (value != _HourHandStyle)
{
if (_HourHandStyle != null) _HourHandStyle.PropertyChanged -= ColorPropertyChanged;
_HourHandStyle = value;
if (_HourHandStyle != null) _HourHandStyle.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("HourHandStyle"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetHourHandStyle()
{
HourHandStyle = new ClockHandStyleData(eHandStyles.Style1, 0.55f, 0.01f);
}
private ClockHandStyleData _MinuteHandStyle;
///
/// Gets or sets the minute hand style for this style.
///
[Category("Appearance"),
Description("The minute hand style for this style.")]
public ClockHandStyleData MinuteHandStyle
{
get { return _MinuteHandStyle; }
set
{
if (value != _MinuteHandStyle)
{
if (_MinuteHandStyle != null) _MinuteHandStyle.PropertyChanged -= ColorPropertyChanged;
_MinuteHandStyle = value;
if (_MinuteHandStyle != null) _MinuteHandStyle.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("MinuteHandStyle"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetMinuteHandStyle()
{
MinuteHandStyle = new ClockHandStyleData(eHandStyles.Style1, 0.8f, 0.01f);
}
private ClockHandStyleData _SecondHandStyle;
///
/// Gets or sets the second hand style for this style.
///
[Category("Appearance"),
Description("The second hand style for this style.")]
public ClockHandStyleData SecondHandStyle
{
get { return _SecondHandStyle; }
set
{
if (value != _SecondHandStyle)
{
if (_SecondHandStyle != null) _SecondHandStyle.PropertyChanged -= ColorPropertyChanged;
_SecondHandStyle = value;
if (_SecondHandStyle != null) _SecondHandStyle.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("SecondHandStyle"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetSecondHandStyle()
{
SecondHandStyle = new ClockHandStyleData(eHandStyles.Style2, 0.8f, 0.005f);
}
private ColorData _CapColor;
///
/// Gets or sets the center cap color data for this style.
///
[Category("Appearance"),
Description("The center cap color data for this style.")]
public ColorData CapColor
{
get { return _CapColor; }
set
{
if (value != _CapColor)
{
if (_CapColor != null) _CapColor.PropertyChanged -= ColorPropertyChanged;
_CapColor = value;
if (_CapColor != null) _CapColor.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("CapColor"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetCapColor()
{
CapColor = new ColorData(eBrushTypes.Solid, Color.FromArgb(109, 127, 138), Color.FromArgb(109, 127, 138), Color.FromArgb(128, 109, 127, 138), 0.01f);
}
private float _CapSize;
///
/// Gets or sets the center cap diameter as a percentage value ranging from 0.0 to 1.0.
///
[DefaultValue(0.03f),
Category("Appearance"),
Description("The center cap diameter as a percentage value ranging from 0.0 to 1.0.")]
public float CapSize
{
get { return _CapSize; }
set
{
if (value != _CapSize)
{
_CapSize = value;
OnPropertyChanged(new PropertyChangedEventArgs("CapSize"));
}
}
}
private Color _NumberColor;
///
/// Gets or sets the face number color for this style.
///
[DefaultValue(typeof(Color), "139, 158, 168"),
Category("Appearance"),
Description("The face number color for this style.")]
public Color NumberColor
{
get { return _NumberColor; }
set
{
if (value != _NumberColor)
{
_NumberColor = value;
OnPropertyChanged(new PropertyChangedEventArgs("NumberColor"));
}
}
}
private Font _NumberFont;
///
/// Gets or sets the center cap color data for this style.
///
[Category("Appearance"),
Description("The face number font for this style.")]
public Font NumberFont
{
get { return _NumberFont; }
set
{
if (value != _NumberFont)
{
_NumberFont = value;
OnPropertyChanged(new PropertyChangedEventArgs("NumberFont"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetNumberFont()
{
_NumberFont = new Font("Microsoft Sans Serif", 8, FontStyle.Regular, GraphicsUnit.Pixel);
}
private ColorData _LargeTickColor;
///
/// Gets or sets the large tick color data for this style.
///
[Category("Appearance"),
Description("The large tick color data for this style.")]
public ColorData LargeTickColor
{
get { return _LargeTickColor; }
set
{
if (value != _LargeTickColor)
{
if (_LargeTickColor != null) _LargeTickColor.PropertyChanged -= ColorPropertyChanged;
_LargeTickColor = value;
if (_LargeTickColor != null) _LargeTickColor.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("LargeTickColor"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetLargeTickColor()
{
LargeTickColor = new ColorData(eBrushTypes.Centered, Color.FromArgb(122, 142, 154), Color.FromArgb(122, 142, 154), Color.FromArgb(255, 255, 255), 1.0f);
}
private float _LargeTickLength;
///
/// Gets or sets the large tick length as a percentage value ranging from 0.0 to 1.0.
///
[DefaultValue(0.06f),
Category("Appearance"),
Description("The large tick length as a percentage value ranging from 0.0 to 1.0.")]
public float LargeTickLength
{
get { return _LargeTickLength; }
set
{
if (value != _LargeTickLength)
{
_LargeTickLength = value;
OnPropertyChanged(new PropertyChangedEventArgs("LargeTickLength"));
}
}
}
private float _LargeTickWidth;
///
/// Gets or sets the large tick width as a percentage value ranging from 0.0 to 1.0.
///
[DefaultValue(0.02f),
Category("Appearance"),
Description("The large tick width as a percentage value ranging from 0.0 to 1.0.")]
public float LargeTickWidth
{
get { return _LargeTickWidth; }
set
{
if (value != _LargeTickWidth)
{
_LargeTickWidth = value;
OnPropertyChanged(new PropertyChangedEventArgs("LargeTickWidth"));
}
}
}
private ColorData _SmallTickColor;
///
/// Gets or sets the small tick color data for this style.
///
[Category("Appearance"),
Description("The small tick color data for this style.")]
public ColorData SmallTickColor
{
get { return _SmallTickColor; }
set
{
if (value != _SmallTickColor)
{
if (_SmallTickColor != null) _SmallTickColor.PropertyChanged -= ColorPropertyChanged;
_SmallTickColor = value;
if (_SmallTickColor != null) _SmallTickColor.PropertyChanged += ColorPropertyChanged;
OnPropertyChanged(new PropertyChangedEventArgs("SmallTickColor"));
}
}
}
///
/// Resets the property to default value.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetSmallTickColor()
{
SmallTickColor = new ColorData(eBrushTypes.Centered, Color.FromArgb(122, 142, 154), Color.FromArgb(122, 142, 154), Color.FromArgb(255, 255, 255), 1.0f);
}
private float _SmallTickLength;
///
/// Gets or sets the small tick length as a percentage value ranging from 0.0 to 1.0.
///
[DefaultValue(0.02f),
Category("Appearance"),
Description("The small tick length as a percentage value ranging from 0.0 to 1.0.")]
public float SmallTickLength
{
get { return _SmallTickLength; }
set
{
if (value != _SmallTickLength)
{
_SmallTickLength = value;
OnPropertyChanged(new PropertyChangedEventArgs("SmallTickLength"));
}
}
}
private float _SmallTickWidth;
///
/// Gets or sets the small tick width as a percentage value ranging from 0.0 to 1.0.
///
[DefaultValue(0.02f),
Category("Appearance"),
Description("The small tick width as a percentage value ranging from 0.0 to 1.0.")]
public float SmallTickWidth
{
get { return _SmallTickWidth; }
set
{
if (value != _SmallTickWidth)
{
_SmallTickWidth = value;
OnPropertyChanged(new PropertyChangedEventArgs("SmallTickWidth"));
}
}
}
private int _GlassAngle;
///
/// Gets or sets the overlay glass angle, in degrees for this style.
///
[DefaultValue(20),
Category("Appearance"),
Description("The overlay angle, in degrees for this style.")]
public int GlassAngle
{
get { return _GlassAngle; }
set
{
if (value != _GlassAngle)
{
_GlassAngle = value;
OnPropertyChanged(new PropertyChangedEventArgs("_GlassAngle"));
}
}
}
///
/// Occurs when property value has changed.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Initializes a new instance of the ClockStyle class.
///
public ClockStyleData()
{
LoadStyle(eClockStyles.Style1);
}
private AnalogClockControl _Parent = null;
///
/// Gets the parent of the style.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public AnalogClockControl Parent
{
get { return _Parent; }
internal set { _Parent = value; }
}
///
/// Initializes a new instance of the ClockStyle class.
///
/// Predefined style from the PredefinedStyles enum.
public ClockStyleData(eClockStyles style)
{
LoadStyle(style);
}
///
/// Initializes a new instance of the ClockStyle class.
///
/// Predefined style from the PredefinedStyles enum.
public ClockStyleData(eClockStyles style, AnalogClockControl parent)
{
LoadStyle(style);
_Parent = parent;
}
///
/// Releases all resources used by the class.
///
public void Dispose()
{
if (_FaceBackgroundImage != null)
_FaceBackgroundImage.Dispose();
if (_NumberFont != null)
_NumberFont.Dispose();
}
///
/// Loads a predefined style
///
/// The predefined style to load.
private void LoadStyle(eClockStyles style)
{
_Style = style;
switch (style)
{
case eClockStyles.Style1:
case eClockStyles.Custom:
_ClockShape = eClockShapes.Round;
BezelColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(255, 255, 255), Color.FromArgb(152, 152, 152), Color.FromArgb(120, 120, 120), 0.01f);
_BezelWidth = 0.03f;
FaceColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(191, 204, 213), Color.FromArgb(255, 255, 255), Color.FromArgb(135, 145, 161), 0.01f, 45.0f);
_FaceBackgroundImage = null;
HourHandStyle = new ClockHandStyleData(eHandStyles.Style1, 0.55f, 0.015f);
MinuteHandStyle = new ClockHandStyleData(eHandStyles.Style1, 0.8f, 0.01f);
SecondHandStyle = new ClockHandStyleData(eHandStyles.Style2, 0.8f, 0.005f);
CapColor = new ColorData(eBrushTypes.Solid, Color.FromArgb(109, 127, 138), Color.FromArgb(109, 127, 138), Color.FromArgb(128, 109, 127, 138), 0.01f);
_CapSize = 0.03f;
_NumberColor = Color.FromArgb(139, 158, 168);
_NumberFont = new Font("Microsoft Sans Serif", 12, FontStyle.Regular, GraphicsUnit.Pixel);
LargeTickColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(122, 142, 154), Color.FromArgb(122, 142, 154), Color.FromArgb(128, 255, 255, 255), 0.01f);
_LargeTickLength = 0.06f;
_LargeTickWidth = 0.02f;
SmallTickColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(122, 142, 154), Color.FromArgb(122, 142, 154), Color.FromArgb(128, 255, 255, 255), 0.01f);
_SmallTickLength = 0.02f;
_SmallTickWidth = 0.02f;
_GlassAngle = -20;
break;
case eClockStyles.Style2:
_ClockShape = eClockShapes.Round;
BezelColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(80, 80, 80), Color.FromArgb(0, 0, 0), Color.FromArgb(0, 0, 0), 0.0f, 90.0f);
_BezelWidth = 0.03f;
FaceColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(225, 225, 225), Color.FromArgb(240, 240, 240), Color.FromArgb(0, 0, 0), 0.0f, 90.0f);
_FaceBackgroundImage = null;
HourHandStyle = new ClockHandStyleData(eHandStyles.Style3, 0.45f, 0.175f);
HourHandStyle.HandColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(0, 0, 0), Color.FromArgb(80, 80, 80), Color.FromArgb(64, 0, 0, 0), 0.01f, 90.0f);
MinuteHandStyle = new ClockHandStyleData(eHandStyles.Style3, 0.75f, 0.175f);
MinuteHandStyle.HandColor = new ColorData(eBrushTypes.Linear, Color.FromArgb(0, 0, 0), Color.FromArgb(80, 80, 80), Color.FromArgb(64, 0, 0, 0), 0.01f, 90.0f);
SecondHandStyle = new ClockHandStyleData(eHandStyles.Style4, 0.9f, 0.01f);
SecondHandStyle.HandColor = new ColorData(eBrushTypes.Solid, Color.FromArgb(255, 0, 0), Color.FromArgb(255, 0, 0), Color.FromArgb(128, 192, 0, 0), 0.01f);
_SecondHandStyle.DrawOverCap = true;
CapColor = new ColorData(eBrushTypes.Solid, Color.FromArgb(255, 255, 255), Color.FromArgb(255, 255, 255), Color.FromArgb(223, 0, 0, 0), 0.01f);
_CapSize = 0.1f;
_NumberColor = Color.FromArgb(0, 0, 0);
_NumberFont = new Font("Trebuchet MS", 12, FontStyle.Regular, GraphicsUnit.Pixel);
LargeTickColor = new ColorData(eBrushTypes.Solid, Color.FromArgb(0, 0, 0), Color.FromArgb(0, 0, 0), Color.FromArgb(64, 0, 0, 0), 0.01f);
_LargeTickLength = 0.06f;
_LargeTickWidth = 0.01f;
SmallTickColor = new ColorData(eBrushTypes.Solid, Color.FromArgb(0, 0, 0), Color.FromArgb(0, 0, 0), Color.FromArgb(64, 0, 0, 0), 0.01f);
_SmallTickLength = 0.01f;
_SmallTickWidth = 0.01f;
_GlassAngle = 0;
break;
}
}
///
/// Raises the PropertyChanged event.
///
/// Event arguments
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
if (_Parent != null) _Parent.Invalidate();
}
}
///
/// Enumeration containing the predefined clock styles.
///
public enum eClockStyles
{
///
/// Style 1. Default style,
///
Style1,
///
/// Style 2.
///
Style2,
///
/// No predefined style.
///
Custom
}
///
/// Enumeration containing the predefined clock shapes.
///
public enum eClockShapes
{
///
/// Round clock shape.
///
Round
}
}