171 lines
4.8 KiB
C#
171 lines
4.8 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using System.Collections;
|
|
using System.Drawing;
|
|
using System.ComponentModel.Design;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Represents Panel for the Tab Control.
|
|
/// </summary>
|
|
[ToolboxItem(false), Designer("DevComponents.DotNetBar.Design.TabControlPanelDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")]
|
|
public class TabControlPanel:PanelEx
|
|
{
|
|
#region Private Variables
|
|
private const string INFO_TEXT="Drop controls on this panel to associate them with currently selected tab.";
|
|
private TabItem m_Tab=null;
|
|
private bool m_UseCustomStyle=false;
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
/// <summary>
|
|
/// Default constructor.
|
|
/// </summary>
|
|
public TabControlPanel():base()
|
|
{
|
|
DockPadding.All = 1;
|
|
this.BackColor=SystemColors.Control;
|
|
}
|
|
|
|
private Rectangle GetThemedRect(Rectangle r)
|
|
{
|
|
const int offset=6;
|
|
|
|
switch(m_Tab.Parent.TabAlignment)
|
|
{
|
|
case eTabStripAlignment.Top:
|
|
{
|
|
r.Y-=offset;
|
|
r.Height+=offset;
|
|
break;
|
|
}
|
|
case eTabStripAlignment.Left:
|
|
{
|
|
r.X-=offset;
|
|
r.Width+=offset;
|
|
break;
|
|
}
|
|
case eTabStripAlignment.Right:
|
|
{
|
|
r.Width+=offset;
|
|
break;
|
|
}
|
|
case eTabStripAlignment.Bottom:
|
|
{
|
|
r.Height+=offset;
|
|
break;
|
|
}
|
|
|
|
}
|
|
return r;
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
if (this.ClientRectangle.Width == 0 || this.ClientRectangle.Height == 0 || this.Parent is TabControl && ((TabControl)this.Parent).SelectedPanel!=this)
|
|
return;
|
|
bool baseCall=true;
|
|
if(DrawThemedPane && BarFunctions.ThemedOS && m_Tab!=null && m_Tab.Parent!=null)
|
|
{
|
|
Rectangle r=GetThemedRect(this.ClientRectangle);
|
|
|
|
Rectangle rTemp=new Rectangle(0,0,r.Width,r.Height);
|
|
if(m_Tab.Parent.TabAlignment==eTabStripAlignment.Right || m_Tab.Parent.TabAlignment==eTabStripAlignment.Left)
|
|
rTemp=new Rectangle(0,0,rTemp.Height,rTemp.Width);
|
|
if(m_ThemeCachedBitmap==null || m_ThemeCachedBitmap.Size!=rTemp.Size)
|
|
{
|
|
DisposeThemeCachedBitmap();
|
|
Bitmap bmp=new Bitmap(rTemp.Width,rTemp.Height,e.Graphics);
|
|
try
|
|
{
|
|
Graphics gTemp=Graphics.FromImage(bmp);
|
|
try
|
|
{
|
|
using(SolidBrush brush=new SolidBrush(Color.Transparent))
|
|
gTemp.FillRectangle(brush,0,0,bmp.Width,bmp.Height);
|
|
this.ThemeTab.DrawBackground(gTemp,ThemeTabParts.Pane,ThemeTabStates.Normal,rTemp);
|
|
}
|
|
finally
|
|
{
|
|
gTemp.Dispose();
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
if(m_Tab.Parent.TabAlignment==eTabStripAlignment.Left)
|
|
bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
|
|
else if(m_Tab.Parent.TabAlignment==eTabStripAlignment.Right)
|
|
bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
else if(m_Tab.Parent.TabAlignment==eTabStripAlignment.Bottom)
|
|
bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
|
|
e.Graphics.DrawImageUnscaled(bmp,r.X,r.Y);
|
|
m_ThemeCachedBitmap=bmp;
|
|
}
|
|
}
|
|
else
|
|
e.Graphics.DrawImageUnscaled(m_ThemeCachedBitmap,r.X,r.Y);
|
|
|
|
baseCall=false;
|
|
}
|
|
|
|
if(baseCall)
|
|
base.OnPaint(e);
|
|
|
|
if(this.DesignMode && this.Controls.Count==0 && this.Text=="")
|
|
{
|
|
Rectangle r=this.ClientRectangle;
|
|
r.Inflate(-2,-2);
|
|
eTextFormat sf = eTextFormat.Default | eTextFormat.VerticalCenter |
|
|
eTextFormat.HorizontalCenter | eTextFormat.EndEllipsis | eTextFormat.WordBreak;
|
|
Font font=new Font(this.Font,FontStyle.Bold);
|
|
TextDrawing.DrawString(e.Graphics,INFO_TEXT,font,ControlPaint.Dark(this.Style.BackColor1.Color),r,sf);
|
|
font.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets TabItem that this panel is attached to.
|
|
/// </summary>
|
|
[Browsable(false),DefaultValue(null)]
|
|
public TabItem TabItem
|
|
{
|
|
get {return m_Tab;}
|
|
set
|
|
{
|
|
m_Tab=value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Indicates whether style of the panel is managed by tab control automatically.
|
|
/// Set this to true if you would like to control style of the panel.
|
|
/// </summary>
|
|
[Browsable(true),DefaultValue(false),Category("Appearance"),Description("Indicates whether style of the panel is managed by tab control automatically. Set this to true if you would like to control style of the panel.")]
|
|
public bool UseCustomStyle
|
|
{
|
|
get {return m_UseCustomStyle;}
|
|
set {m_UseCustomStyle=value;}
|
|
}
|
|
|
|
protected override void OnResize(EventArgs e)
|
|
{
|
|
DisposeThemeCachedBitmap();
|
|
base.OnResize(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets which edge of the parent container a control is docked to.
|
|
/// </summary>
|
|
[Browsable(false),DefaultValue(DockStyle.None)]
|
|
public override DockStyle Dock
|
|
{
|
|
get {return base.Dock;}
|
|
set {base.Dock=value;}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|