using System.ComponentModel;
using System.Drawing;
namespace DevComponents.DotNetBar.Rendering
{
    /// 
    /// Represents the color table of linear gradient.
    /// 
    public class LinearGradientColorTable
    {
        public static readonly LinearGradientColorTable Empty = new LinearGradientColorTable();
        #region Private variables
        private Color _Start = Color.Empty;
        private Color _End = Color.Empty;
        private int _GradientAngle = 90;
        #endregion
        #region Constructors
        /// 
        /// Creates new instance of the object.
        /// 
        public LinearGradientColorTable() { }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color.
        public LinearGradientColorTable(Color start)
        {
            this.Start = start;
        }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color.
        /// End color.
        public LinearGradientColorTable(Color start, Color end)
        {
            this.Start = start;
            this.End = end;
        }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color in hexadecimal representation like FFFFFF.
        /// End color in hexadecimal representation like FFFFFF.
        public LinearGradientColorTable(string start, string end)
        {
            this.Start = ColorScheme.GetColor(start);
            this.End = ColorScheme.GetColor(end);
        }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color in 32-bit RGB representation.
        public LinearGradientColorTable(int start)
        {
            this.Start = ColorScheme.GetColor(start);
        }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color in 32-bit RGB representation.
        /// End color in 32-bit RGB representation.
        public LinearGradientColorTable(int start, int end)
        {
            this.Start = ColorScheme.GetColor(start);
            this.End = ColorScheme.GetColor(end);
        }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color in 32-bit RGB representation.
        /// End color in 32-bit RGB representation.
        /// Gradient angle.
        public LinearGradientColorTable(int start, int end, int gradientAngle)
        {
            this.Start = ColorScheme.GetColor(start);
            this.End = ColorScheme.GetColor(end);
            this.GradientAngle = gradientAngle;
        }
        /// 
        /// Creates new instance of the object.
        /// 
        /// Start color.
        /// End color.
        /// Gradient angle.
        public LinearGradientColorTable(Color start, Color end, int gradientAngle)
        {
            this.Start = start;
            this.End = end;
            this.GradientAngle = gradientAngle;
        }
        #endregion
        #region Public properties
        #region Start
        /// 
        /// Gets or sets the start color.
        /// 
        public Color Start
        {
            get { return (_Start); }
            set { _Start = value; }
        }
        #endregion
        #region End
        /// 
        /// Gets or sets the end color.
        /// 
        public Color End
        {
            get { return (_End); }
            set { _End = value; } 
        }
        #endregion
        #region GradientAngle
        /// 
        /// Gets or sets the gradient angle. Default value is 90.
        /// 
        public int GradientAngle
        {
            get { return (_GradientAngle); }
            set { _GradientAngle = value; } 
        }
        #endregion
        #region IsEmpty
        /// 
        /// Gets whether both colors assigned are empty.
        /// 
        [Browsable(false)]
        public virtual bool IsEmpty
        {
            get { return (Start.IsEmpty && End.IsEmpty && GradientAngle == 90); }
        }
        #endregion
        #endregion
    }
}