358 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			358 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Drawing.Design;
 | |
| using System.Windows.Forms;
 | |
| using DevComponents.Instrumentation.Primitives;
 | |
| 
 | |
| namespace DevComponents.Instrumentation
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Collection of GaugeLinearScales
 | |
|     /// </summary>
 | |
|     public class GaugeLinearScaleCollection : GenericCollection<GaugeLinearScale>
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     [TypeConverter(typeof(GaugeScaleConvertor))]
 | |
|     public class GaugeLinearScale : GaugeScale
 | |
|     {
 | |
|         #region Private variables
 | |
| 
 | |
|         private SizeF _Size;
 | |
|         private PointF _Location;
 | |
|         private Orientation _Orientation;
 | |
| 
 | |
|         private Rectangle _ScaleBounds;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         public GaugeLinearScale(GaugeControl gaugeControl)
 | |
|             : base(gaugeControl)
 | |
|         {
 | |
|             InitGaugeScale();
 | |
|         }
 | |
| 
 | |
|         public GaugeLinearScale()
 | |
|         {
 | |
|             InitGaugeScale();
 | |
|         }
 | |
| 
 | |
|         #region InitGaugeScale
 | |
| 
 | |
|         private void InitGaugeScale()
 | |
|         {
 | |
|             Style = GaugeScaleStyle.Linear;
 | |
| 
 | |
|             _Location = new PointF(.5f, .5f);
 | |
|             _Size = new SizeF(.8f, .8f);
 | |
| 
 | |
|             _Orientation = Orientation.Horizontal;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         #region Location
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the Scale location, specified as a percentage
 | |
|         /// </summary>
 | |
|         [Browsable(true), Category("Layout")]
 | |
|         [Editor("DevComponents.Instrumentation.Design.LocationEditor, DevComponents.Instrumentation.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=76cb4c6eb576bca5", typeof(UITypeEditor))]
 | |
|         [Description("Indicates the Scale location, specified as a percentage.")]
 | |
|         [TypeConverter(typeof(PointFConverter))]
 | |
|         public PointF Location
 | |
|         {
 | |
|             get { return (_Location); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_Location.Equals(value) == false)
 | |
|                 {
 | |
|                     _Location = value;
 | |
| 
 | |
|                     OnGaugeItemChanged(true);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public bool ShouldSerializePivotPoint()
 | |
|         {
 | |
|             return (_Location.X != .5f || _Location.Y != .5f);
 | |
|         }
 | |
| 
 | |
|         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         public void ResetPivotPoint()
 | |
|         {
 | |
|             _Location = new PointF(.5f, .5f);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Orientation
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the Scale display orientation
 | |
|         /// </summary>
 | |
|         [Browsable(true)]
 | |
|         [Category("Layout"), DefaultValue(Orientation.Horizontal)]
 | |
|         [Description("Indicates the Scale display orientation.")]
 | |
|         public Orientation Orientation
 | |
|         {
 | |
|             get { return (_Orientation); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_Orientation != value)
 | |
|                 {
 | |
|                     _Orientation = value;
 | |
| 
 | |
|                     OnGaugeItemChanged(true);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region ReverseScalingAxis
 | |
| 
 | |
|         private bool _ReverseScalingAxis;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether linear scales are scaled
 | |
|         /// using the default axis or not.
 | |
|         /// </summary>
 | |
|         [Browsable(true)]
 | |
|         [Category("Layout"), DefaultValue(false)]
 | |
|         [Description("Indicates whether linear scales are scaled using the default axis or not.")]
 | |
|         public bool ReverseScalingAxis
 | |
|         {
 | |
|             get { return (_ReverseScalingAxis); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_ReverseScalingAxis != value)
 | |
|                 {
 | |
|                     _ReverseScalingAxis = value;
 | |
| 
 | |
|                     OnGaugeItemChanged(true);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Size
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the bounding size of the Scale, specified as a percentage
 | |
|         /// </summary>
 | |
|         [Browsable(true), Category("Layout")]
 | |
|         [Editor("DevComponents.Instrumentation.Design.SizeEditor, DevComponents.Instrumentation.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=76cb4c6eb576bca5", typeof(UITypeEditor))]
 | |
|         [Description("Determines the bounding size of the Scale, specified as a percentage.")]
 | |
|         public SizeF Size
 | |
|         {
 | |
|             get { return (_Size); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_Size != value)
 | |
|                 {
 | |
|                     _Size = value;
 | |
| 
 | |
|                     OnGaugeItemChanged(true);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         internal bool ShouldSerializeSize()
 | |
|         {
 | |
|             return (_Size.Width != .8f || _Size.Height != .8f);
 | |
|         }
 | |
| 
 | |
|         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | |
|         internal void ResetSize()
 | |
|         {
 | |
|             _Size = new SizeF(.8f, .8f);
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal properties
 | |
| 
 | |
|         #region AbsLength
 | |
| 
 | |
|         internal int AbsLength
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_Orientation == Orientation.Horizontal)
 | |
|                     return (Bounds.Width);
 | |
| 
 | |
|                 return (Bounds.Height);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AbsWidth
 | |
| 
 | |
|         internal int AbsWidth
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_Orientation == Orientation.Horizontal)
 | |
|                     return (_ReverseScalingAxis ? Bounds.Width : Bounds.Height);
 | |
| 
 | |
|                 return (_ReverseScalingAxis ? Bounds.Height : Bounds.Width);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AbsScaleLength
 | |
| 
 | |
|         internal int AbsScaleLength
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_Orientation == Orientation.Horizontal)
 | |
|                     return (_ScaleBounds.Width);
 | |
| 
 | |
|                 return (_ScaleBounds.Height);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AbsScaleWidth
 | |
| 
 | |
|         internal int AbsScaleWidth
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_Orientation == Orientation.Horizontal)
 | |
|                     return (_ScaleBounds.Height);
 | |
| 
 | |
|                 return (_ScaleBounds.Width);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region ScaleBounds
 | |
| 
 | |
|         internal Rectangle ScaleBounds
 | |
|         {
 | |
|             get { return (_ScaleBounds); }
 | |
|             set { _ScaleBounds = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RecalcLayout
 | |
| 
 | |
|         public override void RecalcLayout()
 | |
|         {
 | |
|             if (NeedRecalcLayout == true)
 | |
|             {
 | |
|                 base.RecalcLayout();
 | |
| 
 | |
|                 RecalcMetrics();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #region RecalcMetrics
 | |
| 
 | |
|         private void RecalcMetrics()
 | |
|         {
 | |
|             Center = GaugeControl.GetAbsPoint(_Location, false);
 | |
| 
 | |
|             Rectangle r = new Rectangle();
 | |
| 
 | |
|             r.Size = GaugeControl.GetAbsSize(_Size, false);
 | |
|             r.Location = new Point(Center.X - r.Size.Width / 2, Center.Y - r.Size.Height / 2);
 | |
| 
 | |
|             Bounds = r;
 | |
| 
 | |
|             _ScaleBounds = new Rectangle();
 | |
| 
 | |
|             if (Orientation == Orientation.Horizontal)
 | |
|             {
 | |
|                 if (ReverseScalingAxis == true)
 | |
|                     _ScaleBounds.Size = new Size(r.Width, (int)(r.Width * Width));
 | |
|                 else
 | |
|                     _ScaleBounds.Size = new Size(r.Width, (int)(r.Height * Width));
 | |
| 
 | |
|                 _ScaleBounds.Location = new Point(r.X, Center.Y - _ScaleBounds.Size.Height / 2);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 if (ReverseScalingAxis == true)
 | |
|                     _ScaleBounds.Size = new Size((int)(r.Height * Width), r.Height);
 | |
|                 else
 | |
|                     _ScaleBounds.Size = new Size((int)(r.Width * Width), r.Height);
 | |
| 
 | |
|                 _ScaleBounds.Location = new Point(Center.X - _ScaleBounds.Size.Width / 2, r.Y);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region PaintBorder
 | |
| 
 | |
|         protected override void PaintBorder(PaintEventArgs e)
 | |
|         {
 | |
|             if (BorderWidth > 0)
 | |
|             {
 | |
|                 if (Bounds.Width > 0 && Bounds.Height > 0)
 | |
|                 {
 | |
|                     using (Pen pen = new Pen(BorderColor, BorderWidth))
 | |
|                         e.Graphics.DrawRectangle(pen, _ScaleBounds);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region ICloneable Members
 | |
| 
 | |
|         public override object Clone()
 | |
|         {
 | |
|             GaugeLinearScale copy = new GaugeLinearScale();
 | |
| 
 | |
|             CopyToItem(copy);
 | |
| 
 | |
|             return (copy);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region CopyToItem
 | |
| 
 | |
|         public override void CopyToItem(GaugeItem copy)
 | |
|         {
 | |
|             GaugeLinearScale c = copy as GaugeLinearScale;
 | |
| 
 | |
|             if (c != null)
 | |
|             {
 | |
|                 base.CopyToItem(c);
 | |
| 
 | |
|                 c.Location = _Location;
 | |
|                 c.Orientation = _Orientation;
 | |
|                 c.Size = _Size;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |