184 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.Instrumentation
 | |
| {
 | |
|     public class GaugePinLabel : GaugeBaseLabel
 | |
|     {
 | |
|         #region Private variables
 | |
| 
 | |
|         private string _Text;
 | |
| 
 | |
|         private GaugePin _GaugePin;
 | |
|         private LabelPoint _LabelPoint;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         public GaugePinLabel(GaugePin gaugePin)
 | |
|         {
 | |
|             _Text = "";
 | |
| 
 | |
|             _GaugePin = gaugePin;
 | |
| 
 | |
|             Scale = gaugePin.Scale;
 | |
|         }
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         #region Text
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the Label text
 | |
|         /// </summary>
 | |
|         [Browsable(true)]
 | |
|         [Category("Appearance"), DefaultValue("")]
 | |
|         [Description("Indicates the Label text.")]
 | |
|         public string Text
 | |
|         {
 | |
|             get { return (_Text); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (value != null && value.Equals(_Text) == false)
 | |
|                 {
 | |
|                     _Text = value;
 | |
| 
 | |
|                     OnGaugeItemChanged(true);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal properties
 | |
| 
 | |
|         #region GaugePin
 | |
| 
 | |
|         internal GaugePin GaugePin
 | |
|         {
 | |
|             get { return (_GaugePin); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 _GaugePin = value;
 | |
| 
 | |
|                 OnGaugeItemChanged(true);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RecalcLayout
 | |
| 
 | |
|         public override void RecalcLayout()
 | |
|         {
 | |
|             if (NeedRecalcLayout == true)
 | |
|             {
 | |
|                 base.RecalcLayout();
 | |
| 
 | |
|                 _LabelPoint = null;
 | |
| 
 | |
|                 if (String.IsNullOrEmpty(_Text) == false)
 | |
|                 {
 | |
|                     if (Scale is GaugeCircularScale)
 | |
|                         CalcCircularLabelPoint(Scale as GaugeCircularScale);
 | |
| 
 | |
|                     else if (Scale is GaugeLinearScale)
 | |
|                         CalcLinearLabelPoint(Scale as GaugeLinearScale);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #region CalcCircularLabelPoint
 | |
| 
 | |
|         private void CalcCircularLabelPoint(GaugeCircularScale scale)
 | |
|         {
 | |
|             if (Radius > 0)
 | |
|             {
 | |
|                 _LabelPoint = new LabelPoint();
 | |
| 
 | |
|                 _LabelPoint.Angle = _GaugePin.Angle;
 | |
|                 _LabelPoint.Point = scale.GetPoint(Radius, _LabelPoint.Angle);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region CalcLinearLabelPoint
 | |
| 
 | |
|         private void CalcLinearLabelPoint(GaugeLinearScale scale)
 | |
|         {
 | |
|             _LabelPoint = new LabelPoint();
 | |
| 
 | |
|             if (scale.Orientation == Orientation.Horizontal)
 | |
|             {
 | |
|                 _LabelPoint.Point = new Point(
 | |
|                     _GaugePin.Bounds.X + _GaugePin.Bounds.Width / 2,
 | |
|                     scale.ScaleBounds.Y + Offset);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 _LabelPoint.Point = new Point(
 | |
|                    scale.ScaleBounds.X + Offset,
 | |
|                    _GaugePin.Bounds.Y + _GaugePin.Bounds.Height / 2);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnPaint
 | |
| 
 | |
|         public override void OnPaint(PaintEventArgs e)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             RecalcLayout();
 | |
| 
 | |
|             if (_LabelPoint != null && _LabelPoint.Visible == true)
 | |
|             {
 | |
|                 using (Brush br = new SolidBrush(Layout.ForeColor))
 | |
|                     PaintLabel(g, _Text, br, _LabelPoint, AbsFont);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region ICloneable Members
 | |
| 
 | |
|         public override object Clone()
 | |
|         {
 | |
|             GaugePinLabel copy = new GaugePinLabel(_GaugePin);
 | |
| 
 | |
|             CopyToItem(copy);
 | |
| 
 | |
|             return (copy);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region CopyToItem
 | |
| 
 | |
|         public override void CopyToItem(GaugeItem copy)
 | |
|         {
 | |
|             GaugePinLabel c = copy as GaugePinLabel;
 | |
| 
 | |
|             if (c != null)
 | |
|             {
 | |
|                 base.CopyToItem(c);
 | |
| 
 | |
|                 c.Text = _Text;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |