576 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			576 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Text;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents simple item container which orders items horizontally and support all ItemAlignment settings.
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxItem(false)]
 | 
						|
    public class SimpleItemContainer : ImageItem, IDesignTimeProvider
 | 
						|
    {
 | 
						|
        #region Constructor
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the SimpleItemContainer class.
 | 
						|
        /// </summary>
 | 
						|
        public SimpleItemContainer()
 | 
						|
        {
 | 
						|
            // We contain other controls
 | 
						|
            m_IsContainer = true;
 | 
						|
            this.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Implementation
 | 
						|
        public override void RecalcSize()
 | 
						|
        {
 | 
						|
            if (_LayoutOrientation == eOrientation.Vertical)
 | 
						|
            {
 | 
						|
                RecalcSizeVertical();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                List<BaseItem> leftItems = new List<BaseItem>();
 | 
						|
                List<BaseItem> centerItems = new List<BaseItem>();
 | 
						|
                List<BaseItem> rightItems = new List<BaseItem>();
 | 
						|
 | 
						|
                int centerWidth = 0;
 | 
						|
                Size minSize = SplitItems(leftItems, centerItems, rightItems, out centerWidth);
 | 
						|
                Point loc = this.Bounds.Location;
 | 
						|
                int bottom = this.Bounds.Bottom;
 | 
						|
                loc.X += _PaddingLeft;
 | 
						|
                if (this.WidthInternal == 0 || this.WidthInternal <= minSize.Width)
 | 
						|
                {
 | 
						|
                    BaseItem[] items = new BaseItem[leftItems.Count + centerItems.Count + rightItems.Count];
 | 
						|
                    leftItems.CopyTo(items);
 | 
						|
                    centerItems.CopyTo(items, leftItems.Count);
 | 
						|
                    rightItems.CopyTo(items, leftItems.Count + centerItems.Count);
 | 
						|
                    BaseItem previousItem = null;
 | 
						|
                    // Just line items up
 | 
						|
                    foreach (BaseItem item in items)
 | 
						|
                    {
 | 
						|
                        if (!item.Visible) continue;
 | 
						|
                        item.Displayed = true;
 | 
						|
                        loc.X -= GetOverlapSpacing(previousItem, item);
 | 
						|
                        item.LeftInternal = loc.X;
 | 
						|
                        if (IsVerticallyCentered(item))
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal)/2;
 | 
						|
                        else
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal);
 | 
						|
                        loc.X += item.WidthInternal + _ItemSpacing;
 | 
						|
                        previousItem = item;
 | 
						|
                    }
 | 
						|
                    m_Rect.Size = minSize;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    int leftItemsRight = 0;
 | 
						|
                    BaseItem previousItem = null;
 | 
						|
                    foreach (BaseItem item in leftItems)
 | 
						|
                    {
 | 
						|
                        item.Displayed = true;
 | 
						|
                        if (item.BeginGroup) loc.X += _BeginGroupSpacing;
 | 
						|
                        loc.X -= GetOverlapSpacing(previousItem, item);
 | 
						|
                        item.LeftInternal = loc.X;
 | 
						|
                        if (IsVerticallyCentered(item))
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal)/2;
 | 
						|
                        else
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal);
 | 
						|
                        loc.X += item.WidthInternal + _ItemSpacing;
 | 
						|
                        previousItem = item;
 | 
						|
                    }
 | 
						|
                    leftItemsRight = loc.X;
 | 
						|
 | 
						|
                    int rightItemsLeft = 0;
 | 
						|
                    loc = new Point(this.Bounds.Right - _PaddingRight, this.Bounds.Y);
 | 
						|
                    previousItem = null;
 | 
						|
                    for (int i = rightItems.Count - 1; i >= 0; i--)
 | 
						|
                    {
 | 
						|
                        BaseItem item = rightItems[i];
 | 
						|
                        loc.X -= item.WidthInternal;
 | 
						|
                        item.Displayed = true;
 | 
						|
                        loc.X += GetOverlapSpacing(previousItem, item);
 | 
						|
                        item.LeftInternal = loc.X;
 | 
						|
                        loc.X -= _ItemSpacing + (item.BeginGroup ? _BeginGroupSpacing : 0);
 | 
						|
                        if (IsVerticallyCentered(item))
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal)/2;
 | 
						|
                        else
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal);
 | 
						|
                        previousItem = item;
 | 
						|
                    }
 | 
						|
                    rightItemsLeft = loc.X;
 | 
						|
 | 
						|
                    loc = new Point((this.WidthInternal - centerWidth)/2, this.Bounds.Y);
 | 
						|
                    if (loc.X < leftItemsRight || loc.X + centerWidth > rightItemsLeft)
 | 
						|
                    {
 | 
						|
                        loc.X = leftItemsRight + ((rightItemsLeft - leftItemsRight) - centerWidth)/2;
 | 
						|
                    }
 | 
						|
                    previousItem = null;
 | 
						|
                    foreach (BaseItem item in centerItems)
 | 
						|
                    {
 | 
						|
                        item.Displayed = true;
 | 
						|
                        if (item.BeginGroup) loc.X += _BeginGroupSpacing;
 | 
						|
                        loc.X -= GetOverlapSpacing(previousItem, item);
 | 
						|
                        item.LeftInternal = loc.X;
 | 
						|
                        if (IsVerticallyCentered(item))
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal)/2;
 | 
						|
                        else
 | 
						|
                            item.TopInternal = loc.Y + (minSize.Height - item.HeightInternal);
 | 
						|
                        loc.X += item.WidthInternal + _ItemSpacing;
 | 
						|
                        previousItem = item;
 | 
						|
                    }
 | 
						|
                    m_Rect.Height = minSize.Height;
 | 
						|
                }
 | 
						|
 | 
						|
                if (m_Rect.Width < _MinimumSize.Width)
 | 
						|
                    m_Rect.Width = _MinimumSize.Width;
 | 
						|
                if (m_Rect.Height < _MinimumSize.Height)
 | 
						|
                    m_Rect.Height = _MinimumSize.Height;
 | 
						|
            }
 | 
						|
 | 
						|
            base.RecalcSize();
 | 
						|
        }
 | 
						|
        protected virtual bool IsVerticallyCentered(BaseItem item)
 | 
						|
        {
 | 
						|
            return !(item is DevComponents.DotNetBar.Metro.MetroTabItem);
 | 
						|
        }
 | 
						|
        private Size SplitItems(List<BaseItem> leftItems, List<BaseItem> centerItems, List<BaseItem> rightItems, out int centerWidth)
 | 
						|
        {
 | 
						|
            Size minSize = new Size();
 | 
						|
            
 | 
						|
            centerWidth = 0;
 | 
						|
            BaseItem previousItem = null;
 | 
						|
            foreach (BaseItem item in this.SubItems)
 | 
						|
            {
 | 
						|
                if (!item.Visible)
 | 
						|
                {
 | 
						|
                    item.Displayed = false;
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
                item.RecalcSize();
 | 
						|
                
 | 
						|
                minSize.Width += item.WidthInternal + _ItemSpacing + (item.BeginGroup ? _BeginGroupSpacing : 0) - GetOverlapSpacing(previousItem, item);
 | 
						|
                minSize.Height = Math.Max(item.HeightInternal, minSize.Height);
 | 
						|
                if (item.ItemAlignment == eItemAlignment.Near)
 | 
						|
                    leftItems.Add(item);
 | 
						|
                else if (item.ItemAlignment == eItemAlignment.Center)
 | 
						|
                {
 | 
						|
                    centerItems.Add(item);
 | 
						|
                    centerWidth += item.WidthInternal + _ItemSpacing;
 | 
						|
                }
 | 
						|
                else if (item.ItemAlignment == eItemAlignment.Far)
 | 
						|
                    rightItems.Add(item);
 | 
						|
                previousItem = item;
 | 
						|
            }
 | 
						|
 | 
						|
            if (minSize.Width > 0) minSize.Width -= _ItemSpacing;
 | 
						|
            if (centerWidth > 0) centerWidth -= _ItemSpacing;
 | 
						|
 | 
						|
            return minSize;
 | 
						|
        }
 | 
						|
 | 
						|
        private int GetOverlapSpacing(BaseItem previousItem, BaseItem item)
 | 
						|
        {
 | 
						|
            if (previousItem == null || _OverlapSpacing <= 0 || _OverlapType == null ||
 | 
						|
                !(_OverlapType.IsInstanceOfType(previousItem) && _OverlapType.IsInstanceOfType(item)))
 | 
						|
                return 0;
 | 
						|
            return _OverlapSpacing;
 | 
						|
        }
 | 
						|
 | 
						|
        private bool IsHorizontallyCentered(BaseItem item)
 | 
						|
        {
 | 
						|
            return !(item is DevComponents.DotNetBar.Metro.MetroTabItem);
 | 
						|
        }
 | 
						|
        private Size SplitItemsVertical(List<BaseItem> topItems, List<BaseItem> centerItems, List<BaseItem> bottomItems, out int centerHeight)
 | 
						|
        {
 | 
						|
            Size minSize = new Size();
 | 
						|
            centerHeight = 0;
 | 
						|
            BaseItem previousItem = null;
 | 
						|
            foreach (BaseItem item in this.SubItems)
 | 
						|
            {
 | 
						|
                if (!item.Visible)
 | 
						|
                {
 | 
						|
                    item.Displayed = false;
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
                item.RecalcSize();
 | 
						|
                minSize.Height += item.HeightInternal + _ItemSpacing + (item.BeginGroup ? _BeginGroupSpacing : 0) - GetOverlapSpacing(previousItem, item);
 | 
						|
                minSize.Width = Math.Max(item.WidthInternal, minSize.Width);
 | 
						|
                if (item.ItemAlignment == eItemAlignment.Near)
 | 
						|
                    topItems.Add(item);
 | 
						|
                else if (item.ItemAlignment == eItemAlignment.Center)
 | 
						|
                {
 | 
						|
                    centerItems.Add(item);
 | 
						|
                    centerHeight += item.HeightInternal + _ItemSpacing;
 | 
						|
                }
 | 
						|
                else if (item.ItemAlignment == eItemAlignment.Far)
 | 
						|
                    bottomItems.Add(item);
 | 
						|
                previousItem = item;
 | 
						|
            }
 | 
						|
 | 
						|
            if (minSize.Height > 0) minSize.Height -= _ItemSpacing;
 | 
						|
            if (centerHeight > 0) centerHeight -= _ItemSpacing;
 | 
						|
 | 
						|
            return minSize;
 | 
						|
        }
 | 
						|
        private void RecalcSizeVertical()
 | 
						|
        {
 | 
						|
            List<BaseItem> leftItems = new List<BaseItem>();
 | 
						|
            List<BaseItem> centerItems = new List<BaseItem>();
 | 
						|
            List<BaseItem> rightItems = new List<BaseItem>();
 | 
						|
 | 
						|
            int centerHeight = 0;
 | 
						|
            Size minSize = SplitItemsVertical(leftItems, centerItems, rightItems, out centerHeight);
 | 
						|
            Point loc = this.Bounds.Location;
 | 
						|
            int bottom = this.Bounds.Bottom;
 | 
						|
 | 
						|
            if (this.HeightInternal == 0 || this.HeightInternal <= minSize.Height)
 | 
						|
            {
 | 
						|
                BaseItem[] items = new BaseItem[leftItems.Count + centerItems.Count + rightItems.Count];
 | 
						|
                leftItems.CopyTo(items);
 | 
						|
                centerItems.CopyTo(items, leftItems.Count);
 | 
						|
                rightItems.CopyTo(items, leftItems.Count + centerItems.Count);
 | 
						|
                // Just line items up
 | 
						|
                foreach (BaseItem item in items)
 | 
						|
                {
 | 
						|
                    if (!item.Visible) continue;
 | 
						|
                    item.Displayed = true;
 | 
						|
                    item.TopInternal = loc.Y;
 | 
						|
                    item.LeftInternal = loc.X;
 | 
						|
                    //if (IsHorizontallyCentered(item))
 | 
						|
                    //    item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal) / 2;
 | 
						|
                    //else
 | 
						|
                    //    item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal);
 | 
						|
                    item.WidthInternal = minSize.Width;
 | 
						|
                    loc.Y += item.HeightInternal + _ItemSpacing;
 | 
						|
                }
 | 
						|
                m_Rect.Size = minSize;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                int leftItemsRight = 0;
 | 
						|
                foreach (BaseItem item in leftItems)
 | 
						|
                {
 | 
						|
                    item.Displayed = true;
 | 
						|
                    if (item.BeginGroup) loc.Y += _BeginGroupSpacing;
 | 
						|
                    item.TopInternal = loc.Y;
 | 
						|
                    item.WidthInternal = minSize.Width;
 | 
						|
                    if (IsHorizontallyCentered(item))
 | 
						|
                        item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal) / 2;
 | 
						|
                    else
 | 
						|
                        item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal);
 | 
						|
                    loc.Y += item.HeightInternal + _ItemSpacing;
 | 
						|
                }
 | 
						|
                leftItemsRight = loc.Y;
 | 
						|
 | 
						|
                int rightItemsLeft = 0;
 | 
						|
                loc = new Point(this.Bounds.X, this.Bounds.Bottom);
 | 
						|
                for (int i = rightItems.Count - 1; i >= 0; i--)
 | 
						|
                {
 | 
						|
                    BaseItem item = rightItems[i];
 | 
						|
                    loc.Y -= item.HeightInternal;
 | 
						|
                    item.Displayed = true;
 | 
						|
                    item.TopInternal = loc.Y;
 | 
						|
                    item.WidthInternal = minSize.Width;
 | 
						|
                    loc.Y -= _ItemSpacing + (item.BeginGroup ? _BeginGroupSpacing : 0);
 | 
						|
                    if (IsHorizontallyCentered(item))
 | 
						|
                        item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal) / 2;
 | 
						|
                    else
 | 
						|
                        item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal);
 | 
						|
                }
 | 
						|
                rightItemsLeft = loc.Y;
 | 
						|
 | 
						|
                loc = new Point(this.Bounds.X, (this.HeightInternal - centerHeight) / 2);
 | 
						|
                if (loc.Y < leftItemsRight || loc.Y + centerHeight > rightItemsLeft)
 | 
						|
                {
 | 
						|
                    loc.Y = leftItemsRight + ((rightItemsLeft - leftItemsRight) - centerHeight) / 2;
 | 
						|
                }
 | 
						|
 | 
						|
                foreach (BaseItem item in centerItems)
 | 
						|
                {
 | 
						|
                    item.Displayed = true;
 | 
						|
                    if (item.BeginGroup) loc.Y += _BeginGroupSpacing;
 | 
						|
                    item.TopInternal = loc.Y;
 | 
						|
                    item.WidthInternal = minSize.Width;
 | 
						|
                    if (IsHorizontallyCentered(item))
 | 
						|
                        item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal) / 2;
 | 
						|
                    else
 | 
						|
                        item.LeftInternal = loc.X + (minSize.Width - item.WidthInternal);
 | 
						|
                    loc.Y += item.HeightInternal + _ItemSpacing;
 | 
						|
                }
 | 
						|
                m_Rect.Width = minSize.Width;
 | 
						|
            }
 | 
						|
 | 
						|
            if (m_Rect.Width < _MinimumSize.Width)
 | 
						|
                m_Rect.Width = _MinimumSize.Width;
 | 
						|
            if (m_Rect.Height < _MinimumSize.Height)
 | 
						|
                m_Rect.Height = _MinimumSize.Height;
 | 
						|
        }
 | 
						|
        public override void Paint(ItemPaintArgs p)
 | 
						|
        {
 | 
						|
            foreach (BaseItem item in this.SubItems)
 | 
						|
            {
 | 
						|
                if (!item.Displayed) continue;
 | 
						|
                if (item.BeginGroup)
 | 
						|
                {
 | 
						|
                    DisplayHelp.DrawLine(p.Graphics, item.LeftInternal -3, this.TopInternal + 4, item.LeftInternal - 3, this.Bounds.Bottom - 8, p.Colors.ItemSeparator, 1);
 | 
						|
                }
 | 
						|
                item.Paint(p);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns copy of the item.
 | 
						|
        /// </summary>
 | 
						|
        public override BaseItem Copy()
 | 
						|
        {
 | 
						|
            SimpleItemContainer objCopy = new SimpleItemContainer();
 | 
						|
            this.CopyToItem(objCopy);
 | 
						|
            return objCopy;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Copies the item specific properties to new instance of the item.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="copy">New instance.</param>
 | 
						|
        internal void InternalCopyToItem(SimpleItemContainer copy)
 | 
						|
        {
 | 
						|
            CopyToItem(copy);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Copies the item specific properties to new instance of the item.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="copy">New instance.</param>
 | 
						|
        protected override void CopyToItem(BaseItem copy)
 | 
						|
        {
 | 
						|
            SimpleItemContainer c = copy as SimpleItemContainer;
 | 
						|
            base.CopyToItem(c);
 | 
						|
        }
 | 
						|
 | 
						|
        internal void SetSystemFocus()
 | 
						|
        {
 | 
						|
            if (m_HotSubItem != null || this.SubItems.Count == 0)
 | 
						|
                return;
 | 
						|
 | 
						|
            BaseItem exp = this.ExpandedItem();
 | 
						|
            if (exp != null)
 | 
						|
            {
 | 
						|
                m_HotSubItem = exp;
 | 
						|
                m_HotSubItem.InternalMouseEnter();
 | 
						|
                m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.LeftInternal + 2, m_HotSubItem.TopInternal + 2, 0));
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            foreach (BaseItem objItem in this.SubItems)
 | 
						|
            {
 | 
						|
                if (!objItem.SystemItem && objItem.Displayed && objItem.Visible)
 | 
						|
                {
 | 
						|
                    m_HotSubItem = objItem;
 | 
						|
                    m_HotSubItem.InternalMouseEnter();
 | 
						|
                    m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.LeftInternal + 2, m_HotSubItem.TopInternal + 2, 0));
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        internal void ReleaseSystemFocus()
 | 
						|
        {
 | 
						|
            CollapseSubItems(this);
 | 
						|
            if (m_HotSubItem != null)
 | 
						|
            {
 | 
						|
                Control c = this.ContainerControl as Control;
 | 
						|
                if (c != null)
 | 
						|
                {
 | 
						|
                    Point p = c.PointToClient(Control.MousePosition);
 | 
						|
                    if (m_HotSubItem.DisplayRectangle.Contains(p))
 | 
						|
                        return;
 | 
						|
                }
 | 
						|
                m_HotSubItem.InternalMouseLeave();
 | 
						|
                m_HotSubItem = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private int _ItemSpacing;
 | 
						|
        private Size _MinimumSize = Size.Empty;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the minimum size of the container. Either Width or Height can be set or both. Default value is 0,0 which means
 | 
						|
        /// that size is automatically calculated.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public Size MinimumSize
 | 
						|
        {
 | 
						|
            get { return _MinimumSize; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _MinimumSize = value;
 | 
						|
                this.NeedRecalcSize = true;
 | 
						|
                this.OnAppearanceChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        //private bool ShouldSerializeMinimumSize()
 | 
						|
        //{
 | 
						|
        //    return !_MinimumSize.IsEmpty;
 | 
						|
        //}
 | 
						|
 | 
						|
        private bool _SystemContainer = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Returns whether instance of the item container is used as system container internally by DotNetBar.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public bool SystemContainer
 | 
						|
        {
 | 
						|
            get { return _SystemContainer; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Sets whether container is used as system container internally by DotNetBar.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="b">true or false to indicate whether container is system container or not.</param>
 | 
						|
        internal void SetSystemContainer(bool b)
 | 
						|
        {
 | 
						|
            _SystemContainer = b;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates the spacing between items.
 | 
						|
        /// </summary>
 | 
						|
        public int ItemSpacing
 | 
						|
        {
 | 
						|
            get { return _ItemSpacing; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _ItemSpacing)
 | 
						|
                {
 | 
						|
                    int oldValue = _ItemSpacing;
 | 
						|
                    _ItemSpacing = value;
 | 
						|
                    OnItemSpacingChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Called when ItemSpacing property has changed.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="oldValue">Old property value</param>
 | 
						|
        /// <param name="newValue">New property value</param>
 | 
						|
        protected virtual void OnItemSpacingChanged(int oldValue, int newValue)
 | 
						|
        {
 | 
						|
            this.NeedRecalcSize = true;
 | 
						|
            this.OnAppearanceChanged();
 | 
						|
            //OnPropertyChanged(new PropertyChangedEventArgs("ItemSpacing"));
 | 
						|
            
 | 
						|
        }
 | 
						|
 | 
						|
        private int _BeginGroupSpacing = 6;
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates additional spacing between item when its BeginGroup property is set.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(6), Category("Appearance"), Description("Indicates additional spacing between item when its BeginGroup property is set.")]
 | 
						|
        public int BeginGroupSpacing
 | 
						|
        {
 | 
						|
            get { return _BeginGroupSpacing; }
 | 
						|
            set { _BeginGroupSpacing = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        private eOrientation _LayoutOrientation = eOrientation.Horizontal;
 | 
						|
        /// <summary>
 | 
						|
        /// Specifies the layout orientation
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eOrientation.Horizontal), Category("Layout"), Description("Specifies the layout orientation")]
 | 
						|
        public eOrientation LayoutOrientation {
 | 
						|
            get { return _LayoutOrientation; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_LayoutOrientation != value)
 | 
						|
                {
 | 
						|
                    _LayoutOrientation = value;
 | 
						|
                    NeedRecalcSize = true;
 | 
						|
                }
 | 
						|
            } 
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _EqualizeButtonSize = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether all items are resized to be of the size equal to largest item in the container
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Layout"), Description("Indicates whether all items are resized to be of the size equal to largest item in the container")]
 | 
						|
        public bool EqualizeButtonSize
 | 
						|
        {
 | 
						|
            get { return _EqualizeButtonSize; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_EqualizeButtonSize != value)
 | 
						|
                {
 | 
						|
                    _EqualizeButtonSize = value;
 | 
						|
                    NeedRecalcSize = true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private int _PaddingLeft = 0;
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates left side padding within container.
 | 
						|
        /// </summary>
 | 
						|
        public int PaddingLeft
 | 
						|
        {
 | 
						|
            get { return _PaddingLeft; }
 | 
						|
            set { _PaddingLeft = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        private int _PaddingRight;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates right side padding within container.
 | 
						|
        /// </summary>
 | 
						|
        public int PaddingRight
 | 
						|
        {
 | 
						|
            get { return _PaddingRight; }
 | 
						|
            set { _PaddingRight = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        private int _OverlapSpacing = 0;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets overlap spacing for specific item types specified by OverlapType in the container.
 | 
						|
        /// </summary>
 | 
						|
        public int OverlapSpacing
 | 
						|
        {
 | 
						|
            get { return _OverlapSpacing; }
 | 
						|
            set { _OverlapSpacing = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        private Type _OverlapType = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the type of the item that will overlap.
 | 
						|
        /// </summary>
 | 
						|
        public Type OverlapType
 | 
						|
        {
 | 
						|
            get { return _OverlapType; }
 | 
						|
            set { _OverlapType = value; }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IDesignTimeProvider
 | 
						|
        public InsertPosition GetInsertPosition(Point pScreen, BaseItem DragItem)
 | 
						|
        {
 | 
						|
            return DesignTimeProviderContainer.GetInsertPosition(this, pScreen, DragItem);
 | 
						|
        }
 | 
						|
        public void DrawReversibleMarker(int iPos, bool Before)
 | 
						|
        {
 | 
						|
            DesignTimeProviderContainer.DrawReversibleMarker(this, iPos, Before);
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        public void InsertItemAt(BaseItem objItem, int iPos, bool Before)
 | 
						|
        {
 | 
						|
            DesignTimeProviderContainer.InsertItemAt(this, objItem, iPos, Before);
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |