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
 | 
						|
    }
 | 
						|
}
 |