219 lines
7.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using DevComponents.DotNetBar.Controls;
using System.Drawing;
using System.ComponentModel;
namespace DevComponents.DotNetBar
{
/// <summary>
/// Defines base attribute for custom AdvPropertyGrid in-line property value editors.
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public abstract class PropertyValueEditor : Attribute
{
/// <summary>
/// Creates a control that is used as property value in-line editor. Control must implement IPropertyValueEditor interface.
/// </summary>
/// <param name="propertyDescriptor">PropertyDescriptor for the property being edited.</param>
/// <param name="targetObject">Target object that owns the property.</param>
/// <returns>Control that represents in-line editor.</returns>
public abstract IPropertyValueEditor CreateEditor(PropertyDescriptor propertyDescriptor, object targetObject);
}
/// <summary>
/// Defines a attribute which applies an slider in-line editor to a property when used with AdvPropertyGrid control.
/// </summary>
public class PropertySliderEditor : PropertyValueEditor
{
/// <summary>
/// Gets or sets the minimum slider value.
/// </summary>
public int MinValue = 0;
/// <summary>
/// Gets or sets the maximum slider value.
/// </summary>
public int MaxValue = 100;
/// <summary>
/// Gets or sets whether slider text label is visible.
/// </summary>
public bool LabelVisible = true;
/// <summary>
/// Gets or sets the slider label width. Default value is 18.
/// </summary>
public int LabelWidth = 22;
/// <summary>
/// Gets or sets label text color.
/// </summary>
public Color TextColor = Color.Black;
/// <summary>
/// Initializes a new instance of the PropertySliderEditor class.
/// </summary>
/// <param name="minValue">Minimum value for slider.</param>
/// <param name="maxValue">Maximum value for slider.</param>
public PropertySliderEditor(int minValue, int maxValue)
{
MinValue = minValue;
MaxValue = maxValue;
}
/// <summary>
/// Initializes a new instance of the PropertySliderEditor class.
/// </summary>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="textColor"></param>
public PropertySliderEditor(int minValue, int maxValue, Color textColor)
{
MinValue = minValue;
MaxValue = maxValue;
TextColor = textColor;
}
/// <summary>
/// Initializes a new instance of the PropertySliderEditor class.
/// </summary>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="labelVisible"></param>
/// <param name="labelWidth"></param>
/// <param name="textColor"></param>
public PropertySliderEditor(int minValue, int maxValue, bool labelVisible, int labelWidth, Color textColor)
{
MinValue = minValue;
MaxValue = maxValue;
LabelVisible = labelVisible;
LabelWidth = labelWidth;
TextColor = textColor;
}
/// <summary>
/// Initializes a new instance of the PropertySliderEditor class.
/// </summary>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="labelVisible"></param>
public PropertySliderEditor(int minValue, int maxValue, bool labelVisible)
{
MinValue = minValue;
MaxValue = maxValue;
LabelVisible = labelVisible;
}
/// <summary>
/// Initializes a new instance of the PropertySliderEditor class.
/// </summary>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="labelVisible"></param>
/// <param name="labelWidth"></param>
public PropertySliderEditor(int minValue, int maxValue, bool labelVisible, int labelWidth)
{
MinValue = minValue;
MaxValue = maxValue;
LabelVisible = labelVisible;
LabelWidth = labelWidth;
}
/// <summary>
/// Creates a control that is used as property value in-line editor. Control must implement IPropertyValueEditor interface.
/// </summary>
/// <param name="propertyDescriptor">PropertyDescriptor for the property being edited.</param>
/// <param name="targetObject">Target object that owns the property.</param>
/// <returns>Control that represents in-line editor.</returns>
public override IPropertyValueEditor CreateEditor(PropertyDescriptor propertyDescriptor, object targetObject)
{
SliderPropertyEditor editor = new SliderPropertyEditor();
editor.Style = eDotNetBarStyle.StyleManagerControlled;
editor.LabelVisible = LabelVisible;
editor.LabelWidth = LabelWidth;
editor.Minimum = MinValue;
editor.Maximum = MaxValue;
editor.Height = Dpi.Height16;
editor.FocusCuesEnabled = false;
if (!TextColor.IsEmpty)
editor.TextColor = TextColor;
return editor;
}
private class SliderPropertyEditor : Slider, IPropertyValueEditor
{
#region IPropertyValueEditor Members
public System.Drawing.Font EditorFont
{
get
{
return this.Font;
}
set
{
this.Font = value;
}
}
public bool IsEditorFocused
{
get { return this.Focused; }
}
public void FocusEditor()
{
this.Focus();
}
public object EditValue
{
get
{
return this.Value;
}
set
{
if (value is int)
this.Value = (int)value;
else if (value is double)
this.Value = (int)(double)value;
else if (value is float)
this.Value = (int)(float)value;
else if (value is decimal)
this.Value = (int)(decimal)value;
else if (value is byte)
this.Value = (int)(byte)value;
else if (value is long)
this.Value = (int)(long)value;
else if (value is Single)
this.Value = (int)(Single)value;
this.Text = this.Value.ToString();
}
}
//protected override void OnValueChanged()
//{
// this.Text = this.Value.ToString();
// OnEditValueChanged(EventArgs.Empty);
// base.OnValueChanged();
//}
protected override void OnValueChanged(EventArgs e)
{
this.Text = this.Value.ToString();
OnEditValueChanged(e);
base.OnValueChanged(e);
}
private void OnEditValueChanged(EventArgs e)
{
EventHandler ev = EditValueChanged;
if (ev != null) ev(this, e);
}
public event EventHandler EditValueChanged;
#endregion
}
}
}