using System; using System.ComponentModel; using System.Drawing.Drawing2D; using System.Globalization; namespace DevComponents.DotNetBar.Layout { /// /// Defines Thickness class. /// [TypeConverter(typeof(BlankExpandableObjectConverter))] public class BorderPattern : IEquatable, INotifyPropertyChanged { #region Static data /// /// Returns Empty instance of BorderPattern. /// public static BorderPattern Empty { get { return (new BorderPattern()); } } #endregion #region Private variables private LinePattern _Bottom = LinePattern.NotSet; private LinePattern _Left = LinePattern.NotSet; private LinePattern _Right = LinePattern.NotSet; private LinePattern _Top = LinePattern.NotSet; #endregion #region Constructors /// /// Creates new instance of the object. /// /// Left BorderPatternStyle. /// Top BorderPatternStyle. /// Right BorderPatternStyle. /// Bottom BorderPatternStyle. public BorderPattern(LinePattern left, LinePattern top, LinePattern right, LinePattern bottom) { _Left = left; _Top = top; _Right = right; _Bottom = bottom; PropertyChanged = null; } /// /// Creates new instance of the object. /// /// Specifies uniform Thickness. public BorderPattern(LinePattern all) : this(all, all, all, all) { } /// /// Creates new instance of the object. /// public BorderPattern() { } #endregion #region Public properties #region All /// /// Gets or sets the thickness of all sides. /// //[Browsable(false)] //[EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public LinePattern All { set { _Top = _Left = _Bottom = _Right = value; } } #endregion #region Bottom /// /// Gets or sets the bottom Border Pattern /// [DefaultValue(LinePattern.NotSet)] [Description("Indicates the bottom Border Pattern")] public LinePattern Bottom { get { return (_Bottom); } set { if (_Bottom != value) { _Bottom = value; OnPropertyChanged(new PropertyChangedEventArgs("Bottom")); } } } #endregion #region Left /// /// Gets or sets the left Border Pattern /// [DefaultValue(LinePattern.NotSet)] [Description("Indicates the left Border Pattern")] public LinePattern Left { get { return (_Left); } set { if (_Left != value) { _Left = value; OnPropertyChanged(new PropertyChangedEventArgs("Left")); } } } #endregion #region Right /// /// Gets or sets the Right Border Pattern /// [DefaultValue(LinePattern.NotSet)] [Description("Indicates the Right Border Pattern")] public LinePattern Right { get { return (_Right); } set { if (_Right != value) { _Right = value; OnPropertyChanged(new PropertyChangedEventArgs("Right")); } } } #endregion #region Top /// /// Gets or sets the Top Border Pattern /// [Browsable(true), DefaultValue(LinePattern.NotSet)] [Description("Indicates the Top Border Pattern")] public LinePattern Top { get { return (_Top); } set { if (_Top != value) { _Top = value; OnPropertyChanged(new PropertyChangedEventArgs("Top")); } } } #endregion #region IsEmpty /// /// Gets whether the item is empty /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsEmpty { get { return (_Left == LinePattern.NotSet && _Right == LinePattern.NotSet && _Top == LinePattern.NotSet && _Bottom == LinePattern.NotSet); } } /// /// Gets whether left border is visible. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsLeftVisible { get { return (_Left != LinePattern.NotSet && _Left != LinePattern.None); } } /// /// Gets whether right border is visible. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsRightVisible { get { return (_Right != LinePattern.NotSet && _Right != LinePattern.None); } } /// /// Gets whether top border is visible. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsTopVisible { get { return (_Top != LinePattern.NotSet && _Top != LinePattern.None); } } /// /// Gets whether bottom border is visible. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsBottomVisible { get { return (_Bottom != LinePattern.NotSet && _Bottom != LinePattern.None); } } #endregion #endregion #region Internal properties #region IsUniform internal bool IsUniform { get { return (_Left == _Top && _Left == _Right && _Left == _Bottom); } } #endregion #endregion #region Equals /// /// Gets whether two instances are equal. /// /// Instance to compare to. /// true if equal otherwise false. public override bool Equals(object obj) { if (obj is BorderPattern) return (this == (BorderPattern)obj); return (false); } /// /// Gets whether two instances are equal. /// /// Instance to compare to /// true if equal otherwise false public bool Equals(BorderPattern borderPattern) { return (this == borderPattern); } #endregion #region GetHashCode /// /// Returns hash-code. /// /// hash-code public override int GetHashCode() { return (((_Left.GetHashCode() ^ _Top.GetHashCode()) ^ _Right.GetHashCode()) ^ _Bottom.GetHashCode()); } #endregion #region Operators #region "==" operator /// /// Implements == operator. /// /// Object 1 /// Object 2 /// true if equals public static bool operator ==(BorderPattern t1, BorderPattern t2) { if (ReferenceEquals(t1, t2)) return (true); if (((object)t1 == null) || ((object)t2 == null)) return (false); return (t1._Left == t2._Left && t1._Right == t2._Right && t1._Top == t2._Top && t1._Bottom == t2._Bottom); } #endregion #region "!=" operator /// /// Implements != operator /// /// Object 1 /// Object 2 /// true if different public static bool operator !=(BorderPattern t1, BorderPattern t2) { return ((t1 == t2) == false); } #endregion #endregion #region ApplyPattern /// /// Applies the pattern to instance of this pattern. /// /// Pattern to apply. public void ApplyPattern(BorderPattern pattern) { if (pattern != null) { if (pattern.Top != LinePattern.NotSet) _Top = pattern.Top; if (pattern.Left != LinePattern.NotSet) _Left = pattern.Left; if (pattern.Bottom != LinePattern.NotSet) _Bottom = pattern.Bottom; if (pattern.Right != LinePattern.NotSet) _Right = pattern.Right; } } #endregion #region Copy /// /// Creates an exact copy of the BorderPattern. /// /// Copy of the BorderPattern. public BorderPattern Copy() { BorderPattern copy = new BorderPattern(_Left, _Top, _Right, _Bottom); return (copy); } #endregion #region INotifyPropertyChanged Members /// /// Occurs when property value has changed. /// public event PropertyChangedEventHandler PropertyChanged; /// /// Raises the PropertyChanged event. /// /// Event arguments void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler eh = PropertyChanged; if (eh != null) eh(this, e); } #endregion } #region enums #region LinePattern /// /// LinePattern /// public enum LinePattern { /// /// None /// None = -2, /// /// NotSet /// NotSet = -1, /// /// Solid /// Solid = DashStyle.Solid, /// /// Dash /// Dash = DashStyle.Dash, /// /// Dot /// Dot = DashStyle.Dot, /// /// DashDot /// DashDot = DashStyle.DashDot, /// /// DashDotDot /// DashDotDot = DashStyle.DashDotDot, } #endregion #endregion #region BlankExpandableObjectConverter /// /// BlankExpandableObjectConverter /// public class BlankExpandableObjectConverter : ExpandableObjectConverter { /// /// ConvertTo /// /// /// /// /// /// public override object ConvertTo( ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) return (" "); return (base.ConvertTo(context, culture, value, destinationType)); } } #endregion }