226 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Globalization;
 | 
						|
 | 
						|
namespace DevComponents.Tree
 | 
						|
{
 | 
						|
    #region Padding Class
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Represents class that holds padding information for user interface elements.
 | 
						|
    /// </summary>
 | 
						|
    [TypeConverter(typeof(PaddingConvertor))]
 | 
						|
    public class Padding : INotifyPropertyChanged
 | 
						|
    {
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets padding on left side. Default value is 0
 | 
						|
        /// </summary>
 | 
						|
        private int _Left;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets padding on right side. Default value is 0
 | 
						|
        /// </summary>
 | 
						|
        private int _Right;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets padding on top side. Default value is 0
 | 
						|
        /// </summary>
 | 
						|
        private int _Top;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets padding on bottom side. Default value is 0
 | 
						|
        /// </summary>
 | 
						|
        private int _Bottom;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the class and initializes it.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="left">Left padding</param>
 | 
						|
        /// <param name="right">Right padding</param>
 | 
						|
        /// <param name="top">Top padding</param>
 | 
						|
        /// <param name="bottom">Bottom padding</param>
 | 
						|
        public Padding(int left, int right, int top, int bottom)
 | 
						|
        {
 | 
						|
            _Left = left;
 | 
						|
            _Right = right;
 | 
						|
            _Top = top;
 | 
						|
            _Bottom = bottom;
 | 
						|
        }
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets amount of Top padding
 | 
						|
        /// </summary>
 | 
						|
        [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")); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets amount of Left padding
 | 
						|
        /// </summary>
 | 
						|
        [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")); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets amount of Bottom padding
 | 
						|
        /// </summary>
 | 
						|
        [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")); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets amount of Right padding
 | 
						|
        /// </summary>
 | 
						|
        [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")); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets amount of horizontal padding (Left+Right)
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public int Horizontal
 | 
						|
        {
 | 
						|
            get { return (_Left + _Right); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets amount of vertical padding (Top+Bottom)
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public int Vertical
 | 
						|
        {
 | 
						|
            get { return (_Top + _Bottom); }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether Padding is empty.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public bool IsEmpty
 | 
						|
        {
 | 
						|
            get { return (_Left == 0 && _Right == 0 && _Top == 0 && _Bottom == 0); }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region INotifyPropertyChanged Members
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when property value has changed.
 | 
						|
        /// </summary>
 | 
						|
        public event PropertyChangedEventHandler PropertyChanged;
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the PropertyChanged event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Event arguments</param>
 | 
						|
        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
 | 
						|
}
 |