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
 | |
|     }
 | |
| }
 |