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