333 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			333 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Design;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.DotNetBarKnobControl.Design;
 | 
						|
 | 
						|
namespace DevComponents.Instrumentation.Design
 | 
						|
{
 | 
						|
    public class GaugeControlActionList : DesignerActionList
 | 
						|
    {
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        private GaugeControl _GaugeControl;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// GaugeControlActionList
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="gaugeControl">Associated GaugeControl</param>
 | 
						|
        public GaugeControlActionList(GaugeControl gaugeControl)
 | 
						|
            : base(gaugeControl)
 | 
						|
        {
 | 
						|
            _GaugeControl = gaugeControl;
 | 
						|
        }
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the FrameStyle
 | 
						|
        /// </summary>
 | 
						|
        public GaugeFrameStyle FrameStyle
 | 
						|
        {
 | 
						|
            get { return (_GaugeControl.Frame.Style); }
 | 
						|
            set { GetFramePropertyByName("Style").SetValue(_GaugeControl.Frame, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the Glass Effect
 | 
						|
        /// </summary>
 | 
						|
        public bool AddGlassEffect
 | 
						|
        {
 | 
						|
            get { return (_GaugeControl.Frame.AddGlassEffect); }
 | 
						|
            set { GetFramePropertyByName("AddGlassEffect").SetValue(_GaugeControl.Frame, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the frame inner bevel size
 | 
						|
        /// </summary>
 | 
						|
        [Editor(typeof(HalfRadiusRangeValueEditor), typeof(UITypeEditor))]
 | 
						|
        public float InnerBevel
 | 
						|
        {
 | 
						|
            get { return (_GaugeControl.Frame.InnerBevel); }
 | 
						|
            set { GetFramePropertyByName("InnerBevel").SetValue(_GaugeControl.Frame, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the frame outer bevel size
 | 
						|
        /// </summary>
 | 
						|
        [Editor(typeof(HalfRadiusRangeValueEditor), typeof(UITypeEditor))]
 | 
						|
        public float OuterBevel
 | 
						|
        {
 | 
						|
            get { return (_GaugeControl.Frame.OuterBevel); }
 | 
						|
            set { GetFramePropertyByName("OuterBevel").SetValue(_GaugeControl.Frame, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the RoundRectangleArc size
 | 
						|
        /// </summary>
 | 
						|
        [Editor(typeof(HalfRadiusRangeValueEditor), typeof(UITypeEditor))]
 | 
						|
        public float RoundRectangleArc
 | 
						|
        {
 | 
						|
            get { return (_GaugeControl.Frame.RoundRectangleArc); }
 | 
						|
            set { GetFramePropertyByName("RoundRectangleArc").SetValue(_GaugeControl.Frame, value); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetPropertyByName
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the property via the given name
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="propName">Property name</param>
 | 
						|
        /// <returns>PropertyDescriptor</returns>
 | 
						|
        private PropertyDescriptor GetPropertyByName(string propName)
 | 
						|
        {
 | 
						|
            PropertyDescriptor prop =
 | 
						|
                TypeDescriptor.GetProperties(_GaugeControl)[propName];
 | 
						|
 | 
						|
            if (prop == null)
 | 
						|
                throw new ArgumentException("Matching property not found.", propName);
 | 
						|
 | 
						|
            return (prop);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetFramePropertyByName
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the Frame property via the given name
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="propName">Property name</param>
 | 
						|
        /// <returns>PropertyDescriptor</returns>
 | 
						|
        private PropertyDescriptor GetFramePropertyByName(string propName)
 | 
						|
        {
 | 
						|
            PropertyDescriptor prop =
 | 
						|
                TypeDescriptor.GetProperties(_GaugeControl.Frame)[propName];
 | 
						|
 | 
						|
            if (prop == null)
 | 
						|
                throw new ArgumentException("Matching property not found.", propName);
 | 
						|
 | 
						|
            return (prop);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetSortedActionItems
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the SortedActionItems
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>DesignerActionItemCollection</returns>
 | 
						|
        public override DesignerActionItemCollection GetSortedActionItems()
 | 
						|
        {
 | 
						|
            DesignerActionItemCollection items = new DesignerActionItemCollection();
 | 
						|
 | 
						|
            items.Add(new DesignerActionMethodItem(this, "AddCircularScale", "Add Circular Scale", "Scale"));
 | 
						|
            items.Add(new DesignerActionMethodItem(this, "AddHLinearScale", "Add Horizontal Linear Scale", "Scale"));
 | 
						|
            items.Add(new DesignerActionMethodItem(this, "AddVLinearScale", "Add Vertical Linear Scale", "Scale"));
 | 
						|
 | 
						|
            items.Add(new DesignerActionHeaderItem("Gauge Frame"));
 | 
						|
 | 
						|
            items.Add(new DesignerActionPropertyItem("FrameStyle", "Style",
 | 
						|
                "Gauge Frame", "Sets the frame Style."));
 | 
						|
 | 
						|
            items.Add(new DesignerActionPropertyItem("InnerBevel", "Inner Bevel",
 | 
						|
                "Gauge Frame", "Sets the frame inner bevel size."));
 | 
						|
 | 
						|
            items.Add(new DesignerActionPropertyItem("OuterBevel", "Outer Bevel",
 | 
						|
                "Gauge Frame", "Sets the frame outer bevel size."));
 | 
						|
 | 
						|
            items.Add(new DesignerActionPropertyItem("RoundRectangleArc", "Round Rectangle Arc",
 | 
						|
                "Gauge Frame", "Sets the rectangle corner arc."));
 | 
						|
 | 
						|
            items.Add(new DesignerActionTextItem(
 | 
						|
                "Frame sizes are measured as a\n" +
 | 
						|
                "percentage of the width/height of the Gauge", "Gauge Frame"));
 | 
						|
 | 
						|
            return (items);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AddCircularScale
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Adds a CircularScale
 | 
						|
        /// </summary>
 | 
						|
        public void AddCircularScale()
 | 
						|
        {
 | 
						|
            GaugeCircularScale scale = NewCircularScale();
 | 
						|
 | 
						|
            _GaugeControl.CircularScales.Add(scale);
 | 
						|
 | 
						|
            GaugePropertyGrid prop = new GaugePropertyGrid();
 | 
						|
 | 
						|
            prop.SelectedObject = scale;
 | 
						|
 | 
						|
            DialogResult result = prop.ShowDialog();
 | 
						|
 | 
						|
            if (result != DialogResult.OK)
 | 
						|
                _GaugeControl.CircularScales.Remove(scale);
 | 
						|
        }
 | 
						|
 | 
						|
        #region NewCircularScale
 | 
						|
 | 
						|
        private GaugeCircularScale NewCircularScale()
 | 
						|
        {
 | 
						|
            GaugeCircularScale scale = new GaugeCircularScale(_GaugeControl);
 | 
						|
 | 
						|
            scale.Name = GetScaleName(scale);
 | 
						|
 | 
						|
            GaugeSection section = new GaugeSection(scale);
 | 
						|
            section.Name = GetSectionName(scale);
 | 
						|
 | 
						|
            section.FillColor = new GradientFillColor(Color.CornflowerBlue);
 | 
						|
 | 
						|
            scale.Sections.Add(section);
 | 
						|
 | 
						|
            return (scale);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AddHLinearScale
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Adds a Horizontal LinearScale
 | 
						|
        /// </summary>
 | 
						|
        public void AddHLinearScale()
 | 
						|
        {
 | 
						|
            GaugeLinearScale scale = NewLinearScale(Orientation.Horizontal);
 | 
						|
 | 
						|
            _GaugeControl.LinearScales.Add(scale);
 | 
						|
 | 
						|
            GaugePropertyGrid prop = new GaugePropertyGrid();
 | 
						|
 | 
						|
            prop.SelectedObject = scale;
 | 
						|
 | 
						|
            DialogResult result = prop.ShowDialog();
 | 
						|
 | 
						|
            if (result != DialogResult.OK)
 | 
						|
                _GaugeControl.LinearScales.Remove(scale);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AddVLinearScale
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Adds a Vertical LinearScale
 | 
						|
        /// </summary>
 | 
						|
        public void AddVLinearScale()
 | 
						|
        {
 | 
						|
            GaugeLinearScale scale = NewLinearScale(Orientation.Vertical);
 | 
						|
 | 
						|
            _GaugeControl.LinearScales.Add(scale);
 | 
						|
 | 
						|
            GaugePropertyGrid prop = new GaugePropertyGrid();
 | 
						|
 | 
						|
            prop.SelectedObject = scale;
 | 
						|
 | 
						|
            DialogResult result = prop.ShowDialog();
 | 
						|
 | 
						|
            if (result != DialogResult.OK)
 | 
						|
                _GaugeControl.LinearScales.Remove(scale);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region NewLinearScale
 | 
						|
 | 
						|
        private GaugeLinearScale NewLinearScale(Orientation orientation)
 | 
						|
        {
 | 
						|
            GaugeLinearScale scale = new GaugeLinearScale(_GaugeControl);
 | 
						|
            scale.Orientation = orientation;
 | 
						|
            scale.Name = GetScaleName(scale);
 | 
						|
 | 
						|
            scale.MinPin.EndOffset = .028f;
 | 
						|
            scale.MaxPin.EndOffset = .028f;
 | 
						|
 | 
						|
            GaugeSection section = new GaugeSection(scale);
 | 
						|
            section.Name = GetSectionName(scale);
 | 
						|
            section.FillColor = new GradientFillColor(Color.CornflowerBlue);
 | 
						|
 | 
						|
            scale.Sections.Add(section);
 | 
						|
 | 
						|
            return (scale);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetScaleName
 | 
						|
 | 
						|
        private string GetScaleName(GaugeCircularScale scale)
 | 
						|
        {
 | 
						|
            for (int i = 1; i < 100; i++)
 | 
						|
            {
 | 
						|
                string s = "Scale" + i.ToString();
 | 
						|
 | 
						|
                if (scale.GaugeControl.CircularScales[s] == null)
 | 
						|
                    return (s);
 | 
						|
            }
 | 
						|
 | 
						|
            return (null);
 | 
						|
        }
 | 
						|
 | 
						|
        private string GetScaleName(GaugeLinearScale scale)
 | 
						|
        {
 | 
						|
            for (int i = 1; i < 100; i++)
 | 
						|
            {
 | 
						|
                string s = "Scale" + i.ToString();
 | 
						|
 | 
						|
                if (scale.GaugeControl.LinearScales[s] == null)
 | 
						|
                    return (s);
 | 
						|
            }
 | 
						|
 | 
						|
            return (null);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetSectionName
 | 
						|
 | 
						|
        private string GetSectionName(GaugeScale scale)
 | 
						|
        {
 | 
						|
            for (int i = 1; i < 100; i++)
 | 
						|
            {
 | 
						|
                string s = "Section" + i.ToString();
 | 
						|
 | 
						|
                if (scale.Sections[s] == null)
 | 
						|
                    return (s);
 | 
						|
            }
 | 
						|
 | 
						|
            return (null);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region GetDefaultOrientation
 | 
						|
 | 
						|
        private Orientation GetDefaultOrientation(GaugeLinearScale scale)
 | 
						|
        {
 | 
						|
            foreach (GaugeLinearScale gls in scale.GaugeControl.LinearScales)
 | 
						|
            {
 | 
						|
                if (gls != scale)
 | 
						|
                    return (gls.Orientation);
 | 
						|
            }
 | 
						|
 | 
						|
            return (scale.GaugeControl.Width > scale.GaugeControl.Height
 | 
						|
                ? Orientation.Horizontal : Orientation.Vertical);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |