DarkUI.Net5/DarkUI/Controls/DarkSectionPanel.cs
2015-09-18 12:08:22 +01:00

146 lines
3.8 KiB
C#

using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace DarkUI
{
public class DarkSectionPanel : Panel
{
#region Field Region
private string _sectionHeader;
#endregion
#region Property Region
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new Padding Padding
{
get { return base.Padding; }
}
[Category("Appearance")]
[Description("The section header text associated with this control.")]
public string SectionHeader
{
get { return _sectionHeader; }
set
{
_sectionHeader = value;
Invalidate();
}
}
#endregion
#region Constructor Region
public DarkSectionPanel()
{
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.UserPaint, true);
base.Padding = new Padding(1, 25, 1, 1);
}
#endregion
#region Event Handler Region
protected override void OnEnter(System.EventArgs e)
{
base.OnEnter(e);
Invalidate();
}
protected override void OnLeave(System.EventArgs e)
{
base.OnLeave(e);
Invalidate();
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (Controls.Count > 0)
Controls[0].Focus();
}
#endregion
#region Paint Region
protected override void OnPaint(PaintEventArgs e)
{
var g = e.Graphics;
var rect = ClientRectangle;
// Fill body
using (var b = new SolidBrush(Colors.GreyBackground))
{
g.FillRectangle(b, rect);
}
// Draw header
var bgColor = ContainsFocus ? Colors.BlueBackground : Colors.HeaderBackground;
var darkColor = ContainsFocus ? Colors.DarkBlueBorder : Colors.DarkBorder;
var lightColor = ContainsFocus ? Colors.LightBlueBorder : Colors.LightBorder;
using (var b = new SolidBrush(bgColor))
{
var bgRect = new Rectangle(0, 0, rect.Width, 25);
g.FillRectangle(b, bgRect);
}
using (var p = new Pen(darkColor))
{
g.DrawLine(p, rect.Left, 0, rect.Right, 0);
g.DrawLine(p, rect.Left, 25 - 1, rect.Right, 25 - 1);
}
using (var p = new Pen(lightColor))
{
g.DrawLine(p, rect.Left, 1, rect.Right, 1);
}
var xOffset = 3;
using (var b = new SolidBrush(Colors.LightText))
{
var textRect = new Rectangle(xOffset, 0, rect.Width - 4 - xOffset, 25);
var format = new StringFormat
{
Alignment = StringAlignment.Near,
LineAlignment = StringAlignment.Center,
FormatFlags = StringFormatFlags.NoWrap,
Trimming = StringTrimming.EllipsisCharacter
};
g.DrawString(SectionHeader, Font, b, textRect, format);
}
// Draw border
using (var p = new Pen(Colors.DarkBorder, 1))
{
var modRect = new Rectangle(rect.Left, rect.Top, rect.Width - 1, rect.Height - 1);
g.DrawRectangle(p, modRect);
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// Absorb event
}
#endregion
}
}