140 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Text;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
using System.Drawing;
 | 
						|
using DevComponents.AdvTree.Layout;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Controls
 | 
						|
{
 | 
						|
    [ToolboxItem(false)]
 | 
						|
    public class SideNavStrip : ItemControl
 | 
						|
    {
 | 
						|
        #region Constructor
 | 
						|
        private SimpleItemContainer _ItemContainer = null;
 | 
						|
 | 
						|
        public SideNavStrip()
 | 
						|
        {
 | 
						|
            _ItemContainer = new SimpleItemContainer();
 | 
						|
            _ItemContainer.GlobalItem = false;
 | 
						|
            _ItemContainer.ContainerControl = this;
 | 
						|
            _ItemContainer.Stretch = true;
 | 
						|
            _ItemContainer.Displayed = true;
 | 
						|
            _ItemContainer.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
            _ItemContainer.LayoutOrientation = eOrientation.Vertical;
 | 
						|
            //base.AutoSize = true;
 | 
						|
            this.ColorScheme.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
            _ItemContainer.SetOwner(this);
 | 
						|
            this.SetBaseItemContainer(_ItemContainer);
 | 
						|
            this.BackgroundStyle.Class = ElementStyleClassKeys.SideNavStripKey;
 | 
						|
            StyleManager.Register(this);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Implementation
 | 
						|
        /// <summary>
 | 
						|
        /// Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if
 | 
						|
        /// its style is controlled by StyleManager.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="newStyle">New active style.</param>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void StyleManagerStyleChanged(eDotNetBarStyle newStyle)
 | 
						|
        {
 | 
						|
            _ItemContainer.NeedRecalcSize = true;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns collection of items on a bar.
 | 
						|
        /// </summary>
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false)]
 | 
						|
        public SubItemsCollection Items
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _ItemContainer.SubItems;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets currently selected item.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public SideNavItem SelectedItem
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                foreach (BaseItem item in this.Items)
 | 
						|
                {
 | 
						|
                    if (item is SideNavItem && ((SideNavItem)item).Checked)
 | 
						|
                    {
 | 
						|
                        return (SideNavItem)item;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                return null;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != null && value.Panel != null)
 | 
						|
                    value.Checked = true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void PaintControl(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            base.PaintControl(pa);
 | 
						|
            SideNavItem selectedItem = this.SelectedItem;
 | 
						|
            if (selectedItem != null)
 | 
						|
            {
 | 
						|
                Color color = GetBorderColor();
 | 
						|
                if (!color.IsEmpty)
 | 
						|
                {
 | 
						|
                    Graphics g = pa.Graphics;
 | 
						|
                    using (Pen pen = new Pen(color))
 | 
						|
                    {
 | 
						|
                        if (selectedItem.TopInternal > 0)
 | 
						|
                            g.DrawLine(pen, this.Width - 1, 0, this.Width - 1, selectedItem.TopInternal - 1);
 | 
						|
                        if (selectedItem.Bounds.Bottom < this.Height)
 | 
						|
                            g.DrawLine(pen, this.Width - 1, selectedItem.Bounds.Bottom, this.Width - 1, this.Height);
 | 
						|
                    }
 | 
						|
 | 
						|
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private Color GetBorderColor()
 | 
						|
        {
 | 
						|
            SideNavColorTable ct = GetColorTable();
 | 
						|
            if (ct.BorderColors != null && ct.BorderColors.Length > 0)
 | 
						|
                return ct.BorderColors[0];
 | 
						|
            return Color.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        private SideNavColorTable GetColorTable()
 | 
						|
        {
 | 
						|
            return ((Office2007Renderer)GlobalManager.Renderer).ColorTable.SideNav;
 | 
						|
        }
 | 
						|
        internal void SelectFirstItem()
 | 
						|
        {
 | 
						|
            foreach (BaseItem item in this.Items)
 | 
						|
            {
 | 
						|
                if (item.Visible && item.Enabled && item is SideNavItem)
 | 
						|
                {
 | 
						|
                    ((SideNavItem)item).Checked = true;
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnButtonCheckedChanged(ButtonItem item, EventArgs e)
 | 
						|
        {
 | 
						|
            if (this.Parent is SideNav)
 | 
						|
                ((SideNav)this.Parent).UpdateSelectedItemTitle();
 | 
						|
            base.OnButtonCheckedChanged(item, e);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |