using System;
using System.ComponentModel;
namespace DevComponents.DotNetBar.SuperGrid.Style
{
    ///
    /// RowVisualStyles
    ///
    public class RowVisualStyles : VisualStyles
    {
    }
    ///
    /// RowVisualStyle
    ///
    public class RowVisualStyle : BaseVisualStyle
    {
        #region Private variables
        private Background _Background;
        private RowHeaderVisualStyle _RowHeaderStyle;
        #endregion
        #region Public properties
        #region Background
        /// 
        /// Gets or sets the style background.
        /// 
        [Description("Indicates the style background")]
        public Background Background
        {
            get
            {
                if (_Background == null)
                {
                    _Background = Background.Empty;
                    UpdateChangeHandler(null, _Background);
                }
                return (_Background);
            }
            set
            {
                if (_Background != value)
                {
                    UpdateChangeHandler(_Background, value);
                    _Background = value;
                    OnPropertyChangedEx("Background", VisualChangeType.Render);
                }
            }
        }
        /// 
        /// Gets whether property should be serialized.
        /// 
        [EditorBrowsable(EditorBrowsableState.Never)]
        private bool ShouldSerializeBackground()
        {
            return (_Background != null && Background.IsEmpty == false);
        }
        /// 
        /// Resets property to its default value.
        /// 
        [EditorBrowsable(EditorBrowsableState.Never)]
        private void ResetBackground()
        {
            Background = null;
        }
        #endregion
        #region RowHeaderStyle
        /// 
        /// Gets or sets the RowHeader Style
        /// 
        [Category("Appearance")]
        [Description("Indicates the RowHeader Style.")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public RowHeaderVisualStyle RowHeaderStyle
        {
            get
            {
                if (_RowHeaderStyle == null)
                {
                    _RowHeaderStyle = RowHeaderVisualStyle.Empty;
                    UpdateChangeHandler(null, _RowHeaderStyle);
                }
                return (_RowHeaderStyle);
            }
            set
            {
                if (_RowHeaderStyle != value)
                {
                    UpdateChangeHandler(_RowHeaderStyle, value);
                    _RowHeaderStyle = value;
                    OnPropertyChangedEx("RowHeaderStyle", VisualChangeType.Render);
                }
            }
        }
        #endregion
        #endregion
        #region ApplyStyle
        /// 
        /// Applies the style to instance of this style.
        /// 
        /// Style to apply.
        public void ApplyStyle(RowVisualStyle style)
        {
            if (style != null)
            {
                base.ApplyStyle(style);
                if (style.Background != null && style.Background.IsEmpty == false)
                    Background = style.Background.Copy();
                if (style._RowHeaderStyle != null)
                    RowHeaderStyle.ApplyStyle(style._RowHeaderStyle);
            }
        }
        #endregion
        #region Copy
        /// 
        /// Returns the copy of the style.
        /// 
        /// Copy of the style.
        public new RowVisualStyle Copy()
        {
            RowVisualStyle style = new RowVisualStyle();
            CopyTo(style);
            return (style);
        }
        #endregion
        #region CopyTo
        /// 
        /// Returns the copy of the style.
        /// 
        /// Copy of the style.
        public void CopyTo(RowVisualStyle copy)
        {
            base.CopyTo(copy);
            if (_Background != null)
                copy.Background = _Background.Copy();
            if (_RowHeaderStyle != null)
                copy.RowHeaderStyle = _RowHeaderStyle.Copy();
        }
        #endregion
        #region IDisposable
        /// 
        /// Dispose
        /// 
        public override void Dispose()
        {
            Background = null;
            RowHeaderStyle = null;
            base.Dispose();
        }
        #endregion
    }
}