#if FRAMEWORK20
using System.Drawing;
using System.Drawing.Drawing2D;
using DevComponents.DotNetBar.Rendering;
using DevComponents.UI.ContentManager;
namespace DevComponents.DotNetBar
{
internal class OfficeMobile2014SuperTabStrip : SuperTabStripBaseDisplay
{
#region Constants
private int HTabSpacing
{
get { return Dpi.Width4; }
}
private int HTabOverLap
{
get { return Dpi.Width25; }
}
private int VTabSpacing {
get { return Dpi.Width4; }
}
private int VTabOverLap {
get { return Dpi.Width14; }
}
#endregion
///
/// OfficeMobile2014 SuperTabStripBaseDisplay
///
/// Associated TabStripItem
public OfficeMobile2014SuperTabStrip(SuperTabStripItem tabStripItem)
: base(tabStripItem)
{
}
#region Internal properties
#region MinTabSize
///
/// Returns the Minimum tab size for this style
///
internal override Size MinTabSize
{
get
{
if (TabStripItem.IsVertical == false || TabStripItem.HorizontalText == true)
return Dpi.Size(new Size(52, 20));
return Dpi.Size(new Size(36, 20));
}
}
#endregion
#region TabLayoutOffset
///
/// Tab layout offsets
///
internal override Size TabLayoutOffset
{
get { return Dpi.Size(new Size(5, 3)); }
}
#endregion
#region TabOverlap
///
/// Tab Overlap
///
internal override int TabOverlap
{
get { return (TabStripItem.IsVertical ? VTabOverLap : HTabOverLap); }
}
#endregion
#region TabSpacing
///
/// Tab Spacing
///
internal override int TabSpacing
{
get
{
switch (TabStripItem.TabAlignment)
{
case eTabStripAlignment.Top:
case eTabStripAlignment.Bottom:
return HTabSpacing;
case eTabStripAlignment.Right:
return TabStripItem.HorizontalText == false ? HTabSpacing : VTabSpacing;
default:
return VTabSpacing;
}
}
}
#endregion
#endregion
#region NextBlockPosition
///
/// Gets the next layout block position
///
/// LayoutManagerPositionEventArgs
protected override void NextBlockPosition(LayoutManagerPositionEventArgs e)
{
int n = Tabs.IndexOf((BaseItem)e.Block);
if (n >= 0 && n + 1 < Tabs.Count)
{
SuperTabItem tab1 = Tabs[n] as SuperTabItem;
if (tab1 != null)
{
SuperTabItem tab2 = Tabs[n + 1] as SuperTabItem;
if (tab2 != null)
{
e.NextPosition = e.CurrentPosition;
if (TabStripItem.IsVertical == true)
e.NextPosition.Y += (e.Block.Bounds.Height - VTabOverLap);
else
e.NextPosition.X += (e.Block.Bounds.Width - HTabOverLap);
e.Cancel = true;
}
}
}
}
#endregion
#region NextBlockPosition
///
/// Gets the next block position when attempting
/// to make a specific tab visible
///
/// Potential item to replace
/// View item being placed
/// Block Rectangle
internal override Rectangle NextBlockPosition(BaseItem item, BaseItem vItem)
{
Rectangle r = base.NextBlockPosition(item, vItem);
if (item is SuperTabItem && vItem is SuperTabItem)
{
if (TabStripItem.IsVertical == true)
r.Y -= VTabOverLap;
else
r.X -= HTabOverLap;
}
return (r);
}
#endregion
#region AddDefaultPadding
internal override void AddDefaultPadding(ref Size size)
{
base.AddDefaultPadding(ref size);
if (TabStripItem.IsVertical == false || TabStripItem.HorizontalText == false)
size.Height += Dpi.Height7;
}
#endregion
#region DrawStripBorder
protected override void DrawStripBorder(ItemPaintArgs p, Rendering.SuperTabColorTable ct)
{
Graphics g = p.Graphics;
Rectangle t = TabStripItem.SelectedTab != null ?
TabStripItem.SelectedTab.DisplayRectangle : Rectangle.Empty;
Rectangle r = GetStripeRect();
eTabState ts = GetTabState();
SuperTabItemStateColorTable tct = TabStripItem.SelectedTab.GetTabColorTable(ts);
if (tct.Background.Colors != null)
{
using (Brush br = new SolidBrush(tct.Background.Colors[tct.Background.Colors.Length - 1]))
{
SmoothingMode mode = g.SmoothingMode;
g.SmoothingMode = SmoothingMode.None;
g.FillRectangle(br, r);
g.SmoothingMode = mode;
}
}
if (ct.InnerBorder.IsEmpty == false)
RenderInnerBorder(g, ct, r, t);
if (ct.OuterBorder.IsEmpty == false)
RenderOuterBorder(g, ct, r, t);
}
#region RenderInnerBorder
private void RenderInnerBorder(Graphics g,
Rendering.SuperTabColorTable ct, Rectangle r, Rectangle t)
{
using (Pen pen = new Pen(ct.InnerBorder))
{
switch (TabStripItem.TabAlignment)
{
case eTabStripAlignment.Top:
if (t.X > r.X)
g.DrawLine(pen, r.X, r.Y + Dpi.Height1, t.X + Dpi.Width4, r.Y + Dpi.Height1);
if (t.Right < r.Right)
g.DrawLine(pen, t.Right - Dpi.Width4, r.Y + Dpi.Height1, r.Right - Dpi.Width1, r.Y + Dpi.Height1);
g.DrawLine(pen, r.X + Dpi.Width1, r.Y + Dpi.Height1, r.X + Dpi.Width1, r.Y + Dpi.Height7);
g.DrawLine(pen, r.Right - Dpi.Width2, r.Y + Dpi.Height1, r.Right - Dpi.Width2, r.Y + Dpi.Height7);
break;
case eTabStripAlignment.Bottom:
if (t.X > r.X)
g.DrawLine(pen, r.X, r.Bottom - 1, t.X + 3, r.Bottom - 1);
if (t.Right < r.Right)
g.DrawLine(pen, t.Right - 3, r.Bottom - 1, r.Right - 1, r.Bottom - 1);
g.DrawLine(pen, r.X + 1, r.Bottom - 2, r.X + 1, r.Bottom - 7);
g.DrawLine(pen, r.Right - 2, r.Bottom - 2, r.Right - 2, r.Bottom - 7);
break;
case eTabStripAlignment.Left:
if (t.Y > 0)
g.DrawLine(pen, r.X + 1, r.Y, r.X + 1, t.Y + 3);
if (t.Bottom < r.Bottom)
g.DrawLine(pen, r.X + 1, t.Bottom + 3, r.X + 1, r.Bottom - 3);
g.DrawLine(pen, r.X, r.Y + 1, r.X + 7, r.Y + 1);
g.DrawLine(pen, r.X, r.Bottom - 2, r.X + 7, r.Bottom - 2);
break;
case eTabStripAlignment.Right:
if (t.Y > 0)
g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, t.Y + 3);
if (t.Bottom < r.Bottom)
g.DrawLine(pen, r.Right - 1, t.Bottom + 2, r.Right - 1, r.Bottom - 1);
g.DrawLine(pen, r.X, r.Y + 1, r.Right, r.Y + 1);
g.DrawLine(pen, r.X, r.Bottom - 2, r.Right, r.Bottom - 2);
break;
}
}
}
#endregion
#region RenderOuterBorder
private void RenderOuterBorder(Graphics g, SuperTabColorTable ct, Rectangle r, Rectangle t)
{
using (Pen pen = new Pen(ct.OuterBorder))
{
switch (TabStripItem.TabAlignment)
{
case eTabStripAlignment.Top:
if (t.X > r.X)
g.DrawLine(pen, r.X, r.Y, t.X + 4, r.Y);
if (t.Right < r.Right)
g.DrawLine(pen, t.Right - 4, r.Y, r.Right - 2, r.Y);
g.DrawLine(pen, r.X, r.Y, r.X, r.Y + 7);
g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Y + 7);
break;
case eTabStripAlignment.Bottom:
if (t.X > r.X)
g.DrawLine(pen, r.X, r.Bottom, t.X, r.Bottom);
if (t.Right < r.Right)
g.DrawLine(pen, t.Right, r.Bottom, r.Right - 2, r.Bottom);
g.DrawLine(pen, r.X, r.Bottom, r.X, r.Bottom - 7);
g.DrawLine(pen, r.Right - 1, r.Bottom, r.Right - 1, r.Bottom - 7);
break;
case eTabStripAlignment.Left:
if (t.Y > 0)
g.DrawLine(pen, r.X, r.Y, r.X, t.Y + 3);
if (t.Bottom < r.Bottom)
g.DrawLine(pen, r.X, t.Bottom + 2, r.X, r.Bottom - 3);
g.DrawLine(pen, r.X, r.Y, r.X + 7, r.Y);
g.DrawLine(pen, r.X, r.Bottom - 1, r.X + 7, r.Bottom - 1);
break;
case eTabStripAlignment.Right:
if (t.Y > 0)
g.DrawLine(pen, r.Right, r.Y, r.Right, t.Y);
if (t.Bottom < r.Bottom)
g.DrawLine(pen, r.Right, t.Bottom + 3, r.Right, r.Bottom - 1);
g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
break;
}
}
}
#endregion
#region GetStripeRect
private Rectangle GetStripeRect()
{
Rectangle r = TabStripItem.Bounds;
switch (TabStripItem.TabAlignment)
{
case eTabStripAlignment.Top:
r.Y = r.Bottom - Dpi.Height7 - Dpi.Height1;
break;
case eTabStripAlignment.Bottom:
r.Y -= Dpi.Height1;
r.Height = Dpi.Height7 + Dpi.Height1;
break;
case eTabStripAlignment.Left:
r.X = r.Right - Dpi.Width7 - Dpi.Width1;
break;
default:
r.X -= Dpi.Width1;
r.Width = Dpi.Width7 + Dpi.Width1;
break;
}
return (r);
}
#endregion
#region GetTabState
private eTabState GetTabState()
{
SuperTabItem tab = TabStripItem.SelectedTab;
if (tab.Enabled == false)
return (eTabState.Disabled);
return (tab.IsSelected ? eTabState.Selected : eTabState.Default);
}
#endregion
#endregion
}
}
#endif