using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Globalization; namespace DevComponents.Tree { #region Padding Class /// /// Represents class that holds padding information for user interface elements. /// [TypeConverter(typeof(PaddingConvertor))] public class Padding : INotifyPropertyChanged { #region Private variables /// /// Gets or sets padding on left side. Default value is 0 /// private int _Left; /// /// Gets or sets padding on right side. Default value is 0 /// private int _Right; /// /// Gets or sets padding on top side. Default value is 0 /// private int _Top; /// /// Gets or sets padding on bottom side. Default value is 0 /// private int _Bottom; #endregion /// /// Creates new instance of the class and initializes it. /// /// Left padding /// Right padding /// Top padding /// Bottom padding public Padding(int left, int right, int top, int bottom) { _Left = left; _Right = right; _Top = top; _Bottom = bottom; } #region Public properties /// /// Gets amount of Top padding /// [Browsable(true), DefaultValue(0)] [Description("Indicates the amount of Top padding.")] [NotifyParentProperty(true)] public int Top { get { return (_Top); } set { _Top = value; OnPropertyChanged(new PropertyChangedEventArgs("Top")); } } /// /// Gets amount of Left padding /// [Browsable(true), DefaultValue(0)] [Description("Indicates the amount of Left padding.")] [NotifyParentProperty(true)] public int Left { get { return (_Left); } set { _Left = value; OnPropertyChanged(new PropertyChangedEventArgs("Left")); } } /// /// Gets amount of Bottom padding /// [Browsable(true), DefaultValue(0)] [Description("Indicates the amount of Bottom padding.")] [NotifyParentProperty(true)] public int Bottom { get { return (_Bottom); } set { _Bottom = value; OnPropertyChanged(new PropertyChangedEventArgs("Bottom")); } } /// /// Gets amount of Right padding /// [Browsable(true), DefaultValue(0)] [Description("Indicates the amount of Right padding.")] [NotifyParentProperty(true)] public int Right { get { return (_Right); } set { _Right = value; OnPropertyChanged(new PropertyChangedEventArgs("Right")); } } /// /// Gets amount of horizontal padding (Left+Right) /// [Browsable(false)] public int Horizontal { get { return (_Left + _Right); } } /// /// Gets amount of vertical padding (Top+Bottom) /// [Browsable(false)] public int Vertical { get { return (_Top + _Bottom); } } /// /// Gets whether Padding is empty. /// [Browsable(false)] public bool IsEmpty { get { return (_Left == 0 && _Right == 0 && _Top == 0 && _Bottom == 0); } } #endregion #region INotifyPropertyChanged Members /// /// Occurs when property value has changed. /// public event PropertyChangedEventHandler PropertyChanged; /// /// Raises the PropertyChanged event. /// /// Event arguments protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler eh = PropertyChanged; if (eh != null) eh(this, e); } #endregion } #endregion #region PaddingConvertor public class PaddingConvertor : ExpandableObjectConverter { public override bool CanConvertTo( ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) return (true); return (base.CanConvertTo(context, destinationType)); } public override object ConvertTo( ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { Padding pad = value as Padding; if (pad != null) { return (String.Format("{0:D}, {1:D}, {2:D}, {3:D}", pad.Bottom, pad.Left, pad.Right, pad.Top)); } } return (base.ConvertTo(context, culture, value, destinationType)); } public override bool CanConvertFrom( ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return (true); return (base.CanConvertFrom(context, sourceType)); } public override object ConvertFrom( ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { string[] values = ((string)value).Split(','); if (values.Length != 4) throw new ArgumentException("Invalid value to convert."); try { int bottom = int.Parse(values[0]); int left = int.Parse(values[1]); int right = int.Parse(values[2]); int top = int.Parse(values[3]); Padding pad = new Padding(left, right, top, bottom); return (pad); } catch (Exception exp) { throw new ArgumentException("Invalid value to convert."); } } return base.ConvertFrom(context, culture, value); } } #endregion }