442 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
|     }
 | |
| }
 |