247 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Text;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
using DevComponents.DotNetBar.Controls;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents the visual separator line that is displayed between items.
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxItem(false)]
 | 
						|
    public class Separator : BaseItem
 | 
						|
    {
 | 
						|
        #region Private Variables
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructors
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of Separator.
 | 
						|
		/// </summary>
 | 
						|
		public Separator():this("") {}
 | 
						|
		/// <summary>
 | 
						|
        /// Creates new instance of Separator and assigns the name to it.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="sItemName">Item name.</param>
 | 
						|
		public Separator(string sItemName):base(sItemName) 
 | 
						|
        {
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        public override void Paint(ItemPaintArgs p)
 | 
						|
        {
 | 
						|
            Rectangle bounds = this.Bounds;
 | 
						|
            if (bounds.Width < 1 || bounds.Height < 1) return;
 | 
						|
 | 
						|
            Color colorLine = p.Colors.ItemSeparator;
 | 
						|
            if (p.ContainerControl is SideNavStrip)
 | 
						|
                colorLine = p.Colors.BarDockedBorder;
 | 
						|
            if (!_SeparatorColor.IsEmpty)
 | 
						|
                colorLine = _SeparatorColor;
 | 
						|
            Color colorShade = p.Colors.ItemSeparatorShade;
 | 
						|
            if (!_ShadeColor.IsEmpty)
 | 
						|
                colorShade = _ShadeColor;
 | 
						|
            Graphics g=p.Graphics;
 | 
						|
            Rectangle r;
 | 
						|
 | 
						|
            Padding padding = Dpi.Size(_Padding);
 | 
						|
            if (this.Orientation == eOrientation.Vertical && _SeparatorOrientation == eDesignMarkerOrientation.NotSet || _SeparatorOrientation== eDesignMarkerOrientation.Vertical)
 | 
						|
            {
 | 
						|
                r = new Rectangle(bounds.X + padding.Left, bounds.Y + padding.Top + (bounds.Height - padding.Vertical) / 2, bounds.Width - padding.Horizontal, 1);
 | 
						|
                if (!colorLine.IsEmpty)
 | 
						|
                    DisplayHelp.DrawLine(g, r.X, r.Y, r.Right -1, r.Y, colorLine, 1);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                r = new Rectangle(bounds.X + padding.Left + (bounds.Width - padding.Horizontal) / 2, 
 | 
						|
                    bounds.Y + padding.Top, 1, bounds.Height - padding.Vertical);
 | 
						|
                if (!colorLine.IsEmpty)
 | 
						|
                    DisplayHelp.DrawLine(g, r.X, r.Y, r.X, r.Bottom - 1, colorLine, 1);
 | 
						|
            }
 | 
						|
 | 
						|
            if (!colorShade.IsEmpty && (_FixedSize.Height>1 && 
 | 
						|
                (_SeparatorOrientation == eDesignMarkerOrientation.Vertical || this.Orientation == eOrientation.Vertical && _SeparatorOrientation == eDesignMarkerOrientation.NotSet) ||
 | 
						|
                _FixedSize.Width>1 && (_SeparatorOrientation == eDesignMarkerOrientation.Horizontal || this.Orientation == eOrientation.Horizontal && _SeparatorOrientation == eDesignMarkerOrientation.NotSet)))
 | 
						|
            {
 | 
						|
                r.Inflate(1, 1);
 | 
						|
                DisplayHelp.DrawRectangle(g, colorShade, r);
 | 
						|
            }
 | 
						|
 | 
						|
            if (this.DesignMode && this.Focused)
 | 
						|
            {
 | 
						|
                r = this.Bounds;
 | 
						|
                r.Inflate(-1, -1);
 | 
						|
                DesignTime.DrawDesignTimeSelection(p.Graphics, r, p.Colors.ItemDesignTimeBorder);
 | 
						|
            }
 | 
						|
 | 
						|
            this.DrawInsertMarker(p.Graphics);
 | 
						|
        }
 | 
						|
 | 
						|
        private Padding _Padding = new Padding(2, 2, 2, 2);
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets separator padding.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance"), Description("Gets or sets separator padding."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public Padding Padding
 | 
						|
        {
 | 
						|
            get { return _Padding; }
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializePadding()
 | 
						|
        {
 | 
						|
            return _Padding.Bottom != 2 || _Padding.Top != 2 || _Padding.Left != 2 || _Padding.Right != 2;
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        private void ResetPadding()
 | 
						|
        {
 | 
						|
            _Padding = new Padding(2, 2, 2, 2);
 | 
						|
        }
 | 
						|
 | 
						|
        private Size _FixedSize = new Size(3, 16);
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the size of separator. Size specified is for separator in Vertical orientation. If orientation changes then the size will be internally switched to respect proper orientation.
 | 
						|
        /// </summary>
 | 
						|
        public Size FixedSize
 | 
						|
        {
 | 
						|
            get { return _FixedSize; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _FixedSize = value;
 | 
						|
                NeedRecalcSize = true;
 | 
						|
                OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public override void RecalcSize()
 | 
						|
        {
 | 
						|
            if (this.Orientation == eOrientation.Horizontal)
 | 
						|
                m_Rect.Size = new Size(Dpi.Width(_FixedSize.Width + _Padding.Horizontal), Dpi.Height(_FixedSize.Height + _Padding.Vertical));
 | 
						|
            else
 | 
						|
                m_Rect.Size = new Size(Dpi.Width(_FixedSize.Height + Padding.Horizontal), Dpi.Height(_FixedSize.Width + _Padding.Vertical));
 | 
						|
            base.RecalcSize();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
		/// Returns copy of the item.
 | 
						|
		/// </summary>
 | 
						|
		public override BaseItem Copy()
 | 
						|
		{
 | 
						|
            Separator objCopy = new Separator(m_Name);
 | 
						|
			this.CopyToItem(objCopy);
 | 
						|
			return objCopy;
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Copies the ButtonItem specific properties to new instance of the item.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="copy">New ButtonItem instance.</param>
 | 
						|
        protected override void CopyToItem(BaseItem copy)
 | 
						|
        {
 | 
						|
            Separator objCopy = copy as Separator;
 | 
						|
            base.CopyToItem(objCopy);
 | 
						|
            objCopy.FixedSize = _FixedSize;
 | 
						|
            objCopy.Padding.Left = _Padding.Left;
 | 
						|
            objCopy.Padding.Right = _Padding.Right;
 | 
						|
            objCopy.Padding.Top = _Padding.Top;
 | 
						|
            objCopy.Padding.Bottom = _Padding.Bottom;
 | 
						|
        }
 | 
						|
 | 
						|
        private eDesignMarkerOrientation _SeparatorOrientation = eDesignMarkerOrientation.NotSet;
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates splitter orientation.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eDesignMarkerOrientation.NotSet), Category("Appearance"), Description("Indicates splitter orientation.")]
 | 
						|
        public eDesignMarkerOrientation SeparatorOrientation
 | 
						|
        {
 | 
						|
            get { return _SeparatorOrientation; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_SeparatorOrientation != value)
 | 
						|
                {
 | 
						|
                    eDesignMarkerOrientation oldValue = _SeparatorOrientation;
 | 
						|
                    _SeparatorOrientation = value;
 | 
						|
                    OnSeparatorOrientationChanged(value, oldValue);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnSeparatorOrientationChanged(eDesignMarkerOrientation newValue, eDesignMarkerOrientation oldValue)
 | 
						|
        {
 | 
						|
            this.OnAppearanceChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _SeparatorColor = Color.Empty;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the separator color.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Appearance"), Description("Indicates separator color.")]
 | 
						|
        public Color SeparatorColor
 | 
						|
        {
 | 
						|
            get { return _SeparatorColor; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _SeparatorColor = value;
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeSeparatorColor()
 | 
						|
        {
 | 
						|
            return !_SeparatorColor.IsEmpty;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Resets property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetSeparatorColor()
 | 
						|
        {
 | 
						|
            this.SeparatorColor = Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _ShadeColor = Color.Empty;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the separator shade color.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Appearance"), Description("Indicates separator shade color.")]
 | 
						|
        public Color ShadeColor
 | 
						|
        {
 | 
						|
            get { return _ShadeColor; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _ShadeColor = value;
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeShadeColor()
 | 
						|
        {
 | 
						|
            return !_ShadeColor.IsEmpty;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Resets property to its default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetShadeColor()
 | 
						|
        {
 | 
						|
            this.ShadeColor = Color.Empty;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
 | 
						|
    }
 | 
						|
}
 |