507 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			507 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Globalization;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Rendering
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Defines the color table for SuperTab states
 | 
						|
    /// </summary>
 | 
						|
    [TypeConverter(typeof(SuperTabColorTableConvertor))]
 | 
						|
    public class SuperTabColorTable : ICloneable, IDisposable
 | 
						|
    {
 | 
						|
        #region Events
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Event raised when the SuperTabColorTable is changed
 | 
						|
        /// </summary>
 | 
						|
        [Description("Event raised when the SuperTabColorTable is changed")]
 | 
						|
        public event EventHandler<EventArgs> ColorTableChanged;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        private Color _OuterBorder = Color.Empty;
 | 
						|
        private Color _InnerBorder = Color.Empty;
 | 
						|
        private SuperTabLinearGradientColorTable _Background;
 | 
						|
 | 
						|
        private SuperTabControlBoxStateColorTable _ControlBoxDefault;
 | 
						|
        private SuperTabControlBoxStateColorTable _ControlBoxMouseOver;
 | 
						|
        private SuperTabControlBoxStateColorTable _ControlBoxPressed;
 | 
						|
 | 
						|
        private Color _InsertMarker = Color.Empty;
 | 
						|
        private Color _SelectionMarker = Color.Empty;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        public SuperTabColorTable()
 | 
						|
        {
 | 
						|
            _Background = new SuperTabLinearGradientColorTable();
 | 
						|
            _Background.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
            _ControlBoxDefault = new SuperTabControlBoxStateColorTable();
 | 
						|
            _ControlBoxDefault.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
            _ControlBoxMouseOver = new SuperTabControlBoxStateColorTable();
 | 
						|
            _ControlBoxMouseOver.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
            _ControlBoxPressed = new SuperTabControlBoxStateColorTable();
 | 
						|
            _ControlBoxPressed.ColorTableChanged += SctColorTableChanged;
 | 
						|
        }
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        #region Background
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the Background color
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the Background color.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public SuperTabLinearGradientColorTable Background
 | 
						|
        {
 | 
						|
            get { return (_Background); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_Background.Equals(value) == false)
 | 
						|
                {
 | 
						|
                    if (_Background != null)
 | 
						|
                        _Background.ColorTableChanged -= SctColorTableChanged;
 | 
						|
 | 
						|
                    _Background = value;
 | 
						|
 | 
						|
                    if (_Background != null)
 | 
						|
                        _Background.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeBackground()
 | 
						|
        {
 | 
						|
            return (_Background.IsEmpty == false);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetBackground()
 | 
						|
        {
 | 
						|
            Background = new SuperTabLinearGradientColorTable();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OuterBorder
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the colors for the outer border.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the colors for the outer border.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public Color OuterBorder
 | 
						|
        {
 | 
						|
            get { return (_OuterBorder); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_OuterBorder != value)
 | 
						|
                {
 | 
						|
                    _OuterBorder = value;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeOuterBorder()
 | 
						|
        {
 | 
						|
            return (_OuterBorder != Color.Empty);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetOuterBorder()
 | 
						|
        {
 | 
						|
            _OuterBorder = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InnerBorder
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the colors for the inner border.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the colors for the inner border.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public Color InnerBorder
 | 
						|
        {
 | 
						|
            get { return (_InnerBorder); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_InnerBorder != value)
 | 
						|
                {
 | 
						|
                    _InnerBorder = value;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeInnerBorder()
 | 
						|
        {
 | 
						|
            return (_InnerBorder != Color.Empty);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetInnerBorder()
 | 
						|
        {
 | 
						|
            _InnerBorder = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ControlBoxDefault
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the ControlBoxDefault colors
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the ControlBoxDefault colors.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public SuperTabControlBoxStateColorTable ControlBoxDefault
 | 
						|
        {
 | 
						|
            get { return (_ControlBoxDefault); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_ControlBoxDefault.Equals(value) == false)
 | 
						|
                {
 | 
						|
                    if (_ControlBoxDefault != null)
 | 
						|
                        _ControlBoxDefault.ColorTableChanged -= SctColorTableChanged;
 | 
						|
 | 
						|
                    _ControlBoxDefault = value;
 | 
						|
 | 
						|
                    if (_ControlBoxDefault != null)
 | 
						|
                        _ControlBoxDefault.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeControlBoxDefault()
 | 
						|
        {
 | 
						|
            return (_ControlBoxDefault.IsEmpty == false);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetControlBoxDefault()
 | 
						|
        {
 | 
						|
            ControlBoxDefault = new SuperTabControlBoxStateColorTable();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ControlBoxDefault
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the ControlBoxMouseOver colors
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the ControlBoxMouseOver colors.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public SuperTabControlBoxStateColorTable ControlBoxMouseOver
 | 
						|
        {
 | 
						|
            get { return (_ControlBoxMouseOver); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_ControlBoxMouseOver.Equals(value) == false)
 | 
						|
                {
 | 
						|
                    if (_ControlBoxMouseOver != null)
 | 
						|
                        _ControlBoxMouseOver.ColorTableChanged -= SctColorTableChanged;
 | 
						|
 | 
						|
                    _ControlBoxMouseOver = value;
 | 
						|
 | 
						|
                    if (_ControlBoxMouseOver != null)
 | 
						|
                        _ControlBoxMouseOver.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeControlBoxMouseOver()
 | 
						|
        {
 | 
						|
            return (_ControlBoxMouseOver.IsEmpty == false);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetControlBoxMouseOver()
 | 
						|
        {
 | 
						|
            ControlBoxMouseOver = new SuperTabControlBoxStateColorTable();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ControlBoxPressed
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the ControlBoxPressed colors
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the ControlBoxPressed colors.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public SuperTabControlBoxStateColorTable ControlBoxPressed
 | 
						|
        {
 | 
						|
            get { return (_ControlBoxPressed); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_ControlBoxPressed.Equals(value) == false)
 | 
						|
                {
 | 
						|
                    if (_ControlBoxPressed != null)
 | 
						|
                        _ControlBoxPressed.ColorTableChanged -= SctColorTableChanged;
 | 
						|
 | 
						|
                    _ControlBoxPressed = value;
 | 
						|
 | 
						|
                    if (_ControlBoxPressed != null)
 | 
						|
                        _ControlBoxPressed.ColorTableChanged += SctColorTableChanged;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeControlBoxPressed()
 | 
						|
        {
 | 
						|
            return (_ControlBoxPressed.IsEmpty == false);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetControlBoxPressed()
 | 
						|
        {
 | 
						|
            ControlBoxPressed = new SuperTabControlBoxStateColorTable();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InsertMarker
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the colors for the InsertMarker.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the color for the InsertMarker.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public Color InsertMarker
 | 
						|
        {
 | 
						|
            get { return (_InsertMarker); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_InsertMarker != value)
 | 
						|
                {
 | 
						|
                    _InsertMarker = value;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeInsertMarker()
 | 
						|
        {
 | 
						|
            return (_InsertMarker != Color.Empty);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetInsertMarker()
 | 
						|
        {
 | 
						|
            _InsertMarker = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SelectionMarker
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the color for the SelectionMarker.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance")]
 | 
						|
        [Description("Indicates the color for the SelectionMarker.")]
 | 
						|
        [NotifyParentProperty(true)]
 | 
						|
        public Color SelectionMarker
 | 
						|
        {
 | 
						|
            get { return (_SelectionMarker); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_SelectionMarker != value)
 | 
						|
                {
 | 
						|
                    _SelectionMarker = value;
 | 
						|
 | 
						|
                    OnColorTableChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeSelectionMarker()
 | 
						|
        {
 | 
						|
            return (_SelectionMarker != Color.Empty);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetSelectionMarker()
 | 
						|
        {
 | 
						|
            _SelectionMarker = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IsEmpty
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether the ColorTable is empty.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public bool IsEmpty
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (_Background.IsEmpty == false)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_OuterBorder != Color.Empty)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_InnerBorder != Color.Empty)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_ControlBoxDefault.IsEmpty == false)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_ControlBoxMouseOver.IsEmpty == false)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_ControlBoxPressed.IsEmpty == false)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_InsertMarker != Color.Empty)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                if (_SelectionMarker != Color.Empty)
 | 
						|
                    return (false);
 | 
						|
 | 
						|
                return (true);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SctColorTableChanged
 | 
						|
 | 
						|
        void SctColorTableChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            OnColorTableChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnColorTableChanged
 | 
						|
 | 
						|
        private void OnColorTableChanged()
 | 
						|
        {
 | 
						|
            if (ColorTableChanged != null)
 | 
						|
                ColorTableChanged(this, EventArgs.Empty);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ICloneable Members
 | 
						|
 | 
						|
        public object Clone()
 | 
						|
        {
 | 
						|
            SuperTabColorTable sct = new SuperTabColorTable();
 | 
						|
 | 
						|
            sct.Background = (SuperTabLinearGradientColorTable)Background.Clone();
 | 
						|
            sct.OuterBorder = OuterBorder;
 | 
						|
            sct.InnerBorder = InnerBorder;
 | 
						|
 | 
						|
            sct.ControlBoxDefault = (SuperTabControlBoxStateColorTable)ControlBoxDefault.Clone();
 | 
						|
            sct.ControlBoxMouseOver = (SuperTabControlBoxStateColorTable)ControlBoxMouseOver.Clone();
 | 
						|
            sct.ControlBoxPressed = (SuperTabControlBoxStateColorTable)ControlBoxPressed.Clone();
 | 
						|
 | 
						|
            sct.InsertMarker = InsertMarker;
 | 
						|
            sct.SelectionMarker = SelectionMarker;
 | 
						|
 | 
						|
            return (sct);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IDisposable Members
 | 
						|
 | 
						|
        public void Dispose()
 | 
						|
        {
 | 
						|
            Background = null;
 | 
						|
            ControlBoxDefault = null;
 | 
						|
            ControlBoxMouseOver = null;
 | 
						|
            ControlBoxPressed = null;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region SuperTabColorTableConvertor
 | 
						|
 | 
						|
    public class SuperTabColorTableConvertor : ExpandableObjectConverter
 | 
						|
    {
 | 
						|
        public override object ConvertTo(
 | 
						|
            ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
 | 
						|
        {
 | 
						|
            if (destinationType == typeof(string))
 | 
						|
            {
 | 
						|
                SuperTabColorTable sct = value as SuperTabColorTable;
 | 
						|
 | 
						|
                if (sct != null)
 | 
						|
                {
 | 
						|
                    ColorConverter cvt = new ColorConverter();
 | 
						|
 | 
						|
                    if (sct.Background.Colors != null)
 | 
						|
                        return (cvt.ConvertToString(sct.Background.Colors));
 | 
						|
 | 
						|
                    if (sct.InnerBorder.IsEmpty == false)
 | 
						|
                        return (cvt.ConvertToString(sct.InnerBorder));
 | 
						|
 | 
						|
                    if (sct.OuterBorder.IsEmpty == false)
 | 
						|
                        return (cvt.ConvertToString(sct.OuterBorder));
 | 
						|
 | 
						|
                    return (String.Empty);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return (base.ConvertTo(context, culture, value, destinationType));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
}
 |