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