using System; using System.ComponentModel; using System.Drawing; using System.Globalization; namespace DevComponents.DotNetBar.Rendering { /// /// Defines the colors for the SuperTabItem states /// [TypeConverter(typeof(SuperTabItemStateColorTableConvertor))] public class SuperTabItemStateColorTable : ICloneable { #region Events /// /// Event raised when the SuperTabItemStateColorTable is changed /// [Description("Event raised when the SuperTabItemStateColorTable is changed")] public event EventHandler ColorTableChanged; #endregion #region Private variables private Color _Text = Color.Empty; private Color _InnerBorder = Color.Empty; private Color _OuterBorder = Color.Empty; private Color _CloseMarker = Color.Empty; private Color _SelectionMarker = Color.Empty; private SuperTabLinearGradientColorTable _Background; #endregion public SuperTabItemStateColorTable() { _Background = new SuperTabLinearGradientColorTable(); _Background.ColorTableChanged += Background_ColorTableChanged; } #region Public properties #region Background /// /// Gets or sets the background colors. /// [Browsable(true)] [NotifyParentProperty(true)] [Description("Indicates the background colors.")] public SuperTabLinearGradientColorTable Background { get { return (_Background); } set { if (_Background.Equals(value) == false) { if (_Background != null) _Background.ColorTableChanged -= Background_ColorTableChanged; _Background = value; if (_Background != null) _Background.ColorTableChanged += Background_ColorTableChanged; 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 /// /// Gets or sets the outer border color. /// [Browsable(true)] [NotifyParentProperty(true)] [Description("Indicates the outer border color.")] 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 /// /// Gets or sets the inner border color. /// [Browsable(true)] [NotifyParentProperty(true)] [Description("Indicates the inner border color.")] 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 Text /// /// Gets or sets the text color. /// [Browsable(true)] [NotifyParentProperty(true)] [Description("Indicates the Text color.")] public Color Text { get { return (_Text); } set { if (_Text != value) { _Text = value; OnColorTableChanged(); } } } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeText() { return (_Text.IsEmpty == false); } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public void ResetText() { Text = Color.Empty; } #endregion #region CloseMarker /// /// Gets or sets the Close Marker color. /// [Browsable(true)] [NotifyParentProperty(true)] [Description("Indicates the Close Marker color.")] public Color CloseMarker { get { return (_CloseMarker); } set { if (_CloseMarker != value) { _CloseMarker = value; OnColorTableChanged(); } } } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeCloseMarker() { return (_CloseMarker != Color.Empty); } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public void ResetCloseMarker() { CloseMarker = Color.Empty; } #endregion #region SelectionMarker /// /// Gets or sets the Selection Marker color. /// [Browsable(true)] [NotifyParentProperty(true)] [Description("Indicates the Selection Marker color.")] 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 [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 (_Text != Color.Empty) return (false); if (_CloseMarker != Color.Empty) return (false); if (_SelectionMarker != Color.Empty) return (false); return (true); } } #endregion #endregion #region Background_ColorTableChanged void Background_ColorTableChanged(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() { SuperTabItemStateColorTable sct = new SuperTabItemStateColorTable(); sct.Background = (SuperTabLinearGradientColorTable)Background.Clone(); sct.Text = Text; sct.OuterBorder = OuterBorder; sct.InnerBorder = InnerBorder; sct.CloseMarker = CloseMarker; sct.SelectionMarker = SelectionMarker; return (sct); } #endregion } #region SuperTabItemStateColorTableConvertor public class SuperTabItemStateColorTableConvertor : ExpandableObjectConverter { public override object ConvertTo( ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { SuperTabItemStateColorTable sct = value as SuperTabItemStateColorTable; if (sct != null) { ColorConverter cvt = new ColorConverter(); if (sct.Background.Colors != null) return (cvt.ConvertToString(sct.Background.Colors[0])); if (sct.InnerBorder.IsEmpty == false) return (cvt.ConvertToString(sct.InnerBorder)); if (sct.OuterBorder.IsEmpty == false) return (cvt.ConvertToString(sct.OuterBorder)); if (sct.Text.IsEmpty == false) return (cvt.ConvertToString(sct.Text)); return (String.Empty); } } return (base.ConvertTo(context, culture, value, destinationType)); } } #endregion }