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