149 lines
5.1 KiB
C#
149 lines
5.1 KiB
C#
using DevComponents.DotNetBar.Rendering;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.DotNetBar.Controls
|
|
{
|
|
/// <summary>
|
|
/// Represents a panel which hosts controls for the SideNavItem.
|
|
/// </summary>
|
|
[ToolboxItem(false)]
|
|
public class SideNavPanel : Panel, IScrollBarOverrideSupport
|
|
{
|
|
private ScrollbarSkinner _ScrollSkinner = null;
|
|
public SideNavPanel()
|
|
{
|
|
this.SetStyle(ControlStyles.AllPaintingInWmPaint
|
|
| ControlStyles.ResizeRedraw
|
|
| DisplayHelp.DoubleBufferFlag
|
|
| ControlStyles.UserPaint
|
|
| ControlStyles.Opaque
|
|
, true);
|
|
|
|
_ScrollSkinner = new ScrollbarSkinner(this);
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
_ScrollSkinner.Dispose();
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
Color backColor = GetBackColor();
|
|
if (!backColor.IsEmpty)
|
|
{
|
|
using (SolidBrush brush = new SolidBrush(backColor))
|
|
e.Graphics.FillRectangle(brush, this.ClientRectangle);
|
|
}
|
|
base.OnPaint(e);
|
|
}
|
|
|
|
private Color _BackColor = Color.Empty;
|
|
protected override void OnBackColorChanged(EventArgs e)
|
|
{
|
|
PropertyInfo prop = typeof (Control).GetProperty("RawBackColor",
|
|
BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance);
|
|
if (prop != null)
|
|
{
|
|
_BackColor = (Color)prop.GetValue(this, null);
|
|
}
|
|
base.OnBackColorChanged(e);
|
|
}
|
|
|
|
private Color GetBackColor()
|
|
{
|
|
if(!_BackColor.IsEmpty)
|
|
return _BackColor;
|
|
return GetColorTable().PanelBackColor;
|
|
}
|
|
|
|
private SideNavColorTable GetColorTable()
|
|
{
|
|
return ((Office2007Renderer)GlobalManager.Renderer).ColorTable.SideNav;
|
|
}
|
|
|
|
protected override void WndProc(ref Message m)
|
|
{
|
|
//Console.WriteLine("{0} Message {1}", DateTime.Now, MapMessage(m.Msg));
|
|
if (m.Msg == (int)WinApi.WindowsMessages.WM_VSCROLL || m.Msg == (int)WinApi.WindowsMessages.WM_HSCROLL || m.Msg == (int)WinApi.WindowsMessages.WM_MOUSEWHEEL)
|
|
{
|
|
base.WndProc(ref m);
|
|
OnScrollBarValueChanged(new ScrollValueChangedEventArgs(ScrollbarControl.MapMessageToScrollChange(m.Msg)));
|
|
return;
|
|
}
|
|
else if (m.Msg == (int)WinApi.WindowsMessages.WM_NCCALCSIZE)
|
|
{
|
|
base.WndProc(ref m);
|
|
OnNonClientSizeChanged(EventArgs.Empty);
|
|
return;
|
|
}
|
|
else if (m.Msg == 206 || m.Msg == 8270) // Internal RichTextBox message we use to trigger scroll-bar update
|
|
{
|
|
base.WndProc(ref m);
|
|
OnScrollBarValueChanged(new ScrollValueChangedEventArgs(eScrollBarScrollChange.Horizontal | eScrollBarScrollChange.Vertical));
|
|
return;
|
|
}
|
|
else if (m.Msg == (int)WinApi.WindowsMessages.WM_MOVE) // Internal RichTextBox message we use to trigger scroll-bar update
|
|
{
|
|
base.WndProc(ref m);
|
|
OnControlMoved(EventArgs.Empty);
|
|
return;
|
|
}
|
|
base.WndProc(ref m);
|
|
}
|
|
|
|
#region IScrollBarOverrideSupport Members
|
|
[Browsable(false)]
|
|
public event EventHandler NonClientSizeChanged;
|
|
/// <summary>
|
|
/// Raises NonClientSizeChanged event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
protected virtual void OnNonClientSizeChanged(EventArgs e)
|
|
{
|
|
EventHandler handler = NonClientSizeChanged;
|
|
if (handler != null)
|
|
handler(this, e);
|
|
}
|
|
|
|
public event ScrollValueChangedHandler ScrollBarValueChanged;
|
|
/// <summary>
|
|
/// Raises ScrollBarValueChanged event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
protected virtual void OnScrollBarValueChanged(ScrollValueChangedEventArgs e)
|
|
{
|
|
ScrollValueChangedHandler handler = ScrollBarValueChanged;
|
|
if (handler != null)
|
|
handler(this, e);
|
|
}
|
|
[Browsable(false)]
|
|
public event EventHandler ControlMoved;
|
|
/// <summary>
|
|
/// Raises NonClientSizeChanged event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
protected virtual void OnControlMoved(EventArgs e)
|
|
{
|
|
EventHandler handler = ControlMoved;
|
|
if (handler != null)
|
|
handler(this, e);
|
|
}
|
|
bool IScrollBarOverrideSupport.DesignMode
|
|
{
|
|
get
|
|
{
|
|
return this.DesignMode;
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|