442 lines
8.9 KiB
C#

using System;
using System.Drawing;
using System.Windows.Forms;
namespace DevComponents.Instrumentation
{
public class NumericElement : IDisposable
{
#region Private variables
private Rectangle _Bounds;
private NumericIndicator _NumIndicator;
private char _Value;
private bool _ColonPointsOn;
private bool _DecimalPointOn;
private bool _ShowDimColonPoints;
private bool _ShowDimDecimalPoint;
private bool _ShowDimSegments;
private Color _DigitColor;
private Color _DigitDimColor;
private GradientFillColor _BackColor;
private Brush _BrushOn;
private Brush _BrushOff;
private bool _NeedRecalcLayout;
private bool _InRender;
#endregion
public NumericElement(NumericIndicator numIndicator)
{
_NumIndicator = numIndicator;
_ShowDimColonPoints = true;
_ShowDimDecimalPoint = true;
_ShowDimSegments = true;
}
#region Public properties
#region BackColor
public GradientFillColor BackColor
{
get { return (_BackColor); }
set
{
_BackColor = value;
Refresh();
}
}
#endregion
#region Bounds
public Rectangle Bounds
{
get { return (_Bounds); }
internal set
{
if (_Bounds.Equals(value) == false)
{
_Bounds = value;
_NeedRecalcLayout = true;
}
}
}
#endregion
#region ColonPointsOn
public bool ColonPointsOn
{
get { return (_ColonPointsOn); }
set
{
if (_ColonPointsOn != value)
{
_ColonPointsOn = value;
Refresh();
}
}
}
#endregion
#region DecimalPointOn
public bool DecimalPointOn
{
get { return (_DecimalPointOn); }
set
{
if (_DecimalPointOn != value)
{
_DecimalPointOn = value;
Refresh();
}
}
}
#endregion
#region DigitColor
/// <summary>
/// Gets or sets the Digit Color
/// </summary>
public Color DigitColor
{
get { return (_DigitColor); }
set
{
if (_DigitColor != value)
{
BrushOn = null;
_DigitColor = value;
Refresh();
}
}
}
#endregion
#region DigitDimColor
/// <summary>
/// Gets or sets the default Digit Dim Color (Dim LED color)
/// </summary>
public Color DigitDimColor
{
get { return (_DigitDimColor); }
set
{
if (_DigitDimColor != value)
{
BrushOff = null;
_DigitDimColor = value;
Refresh();
}
}
}
#endregion
#region ShowDimColonPoints
public bool ShowDimColonPoints
{
get { return (_ShowDimColonPoints); }
set
{
if (_ShowDimColonPoints != value)
{
_ShowDimColonPoints = value;
Refresh();
}
}
}
#endregion
#region ShowDimDecimalPoint
public bool ShowDimDecimalPoint
{
get { return (_ShowDimDecimalPoint); }
set
{
if (_ShowDimDecimalPoint != value)
{
_ShowDimDecimalPoint = value;
Refresh();
}
}
}
#endregion
#region ShowDimSegments
/// <summary>
/// Gets or sets the whether dim segments are displayed
/// </summary>
public bool ShowDimSegments
{
get { return (_ShowDimSegments); }
set
{
if (_ShowDimSegments != value)
{
BrushOff = null;
_ShowDimSegments = value;
Refresh();
}
}
}
#endregion
#region Value
public virtual char Value
{
get { return (_Value); }
set
{
if (_Value != value)
{
_Value = value;
Refresh();
}
}
}
#endregion
#endregion
#region Internal properties
#region AbsSegmentWidth
internal int AbsSegmentWidth
{
get { return ((int)(Bounds.Width * _NumIndicator.SegmentWidth)); }
}
#endregion
#region BrushOn
internal Brush BrushOn
{
get
{
if (_BrushOn == null)
{
if (_DigitColor.IsEmpty == false)
_BrushOn = new SolidBrush(_DigitColor);
}
return (_BrushOn);
}
set
{
if (_BrushOn != null)
_BrushOn.Dispose();
_BrushOn = value;
}
}
#endregion
#region BrushOff
internal Brush BrushOff
{
get
{
if (_BrushOff == null)
{
if (DigitDimColor.IsEmpty == false)
_BrushOff = new SolidBrush(_DigitDimColor);
}
return (_BrushOff);
}
set
{
if (_BrushOff != null)
_BrushOff.Dispose();
_BrushOff = value;
}
}
#endregion
#region CanRefresh
internal bool CanRefresh
{
get { return (_InRender == false); }
}
#endregion
#region InPaint
internal bool InRenderCallout
{
get { return (_InRender); }
set { _InRender = value; }
}
#endregion
#region NeedRecalcLayout
internal bool NeedRecalcLayout
{
get { return (_NeedRecalcLayout); }
set { _NeedRecalcLayout = value; }
}
#endregion
#region NumIndicator
/// <summary>
/// Gets or sets the owning NumericIndicator
/// </summary>
internal NumericIndicator NumIndicator
{
get { return (_NumIndicator); }
set { _NumIndicator = value; }
}
#endregion
#endregion
#region RecalcLayout
public virtual void RecalcLayout()
{
if (_NeedRecalcLayout == true)
_NeedRecalcLayout = false;
}
#endregion
#region OnPaint
public virtual void OnPaint(PaintEventArgs e)
{
RecalcLayout();
}
#endregion
#region Refresh
internal void Refresh()
{
if (CanRefresh == true)
NumIndicator.Refresh();
}
#endregion
#region RefreshElements
internal virtual void RefreshElements()
{
}
#endregion
#region GetPaddedRect
internal Rectangle GetPaddedRect(Rectangle r)
{
Padding padding = _NumIndicator.Padding;
r.Y -= padding.Top;
r.Height += (padding.Top + padding.Bottom);
if (_NumIndicator.Digits[0] == this)
{
r.X -= padding.Left;
r.Width += padding.Left;
}
if (_NumIndicator.Digits[_NumIndicator.Digits.Length - 1] == this)
r.Width += padding.Right;
return (r);
}
#endregion
#region IDisposable Members
public virtual void Dispose()
{
BrushOn = null;
BrushOff = null;
}
#endregion
#region CopyToItem
public virtual void CopyToItem(NumericElement copy)
{
copy.BackColor = _BackColor;
copy.Bounds = _Bounds;
copy.DigitDimColor = _DigitDimColor;
copy.ColonPointsOn = _ColonPointsOn;
copy.DigitColor = _DigitColor;
copy.DigitDimColor = _DigitDimColor;
copy.ShowDimColonPoints = _ShowDimColonPoints;
copy.ShowDimDecimalPoint = _ShowDimDecimalPoint;
copy.ShowDimSegments = _ShowDimSegments;
copy.Value = _Value;
}
#endregion
}
}