using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar.Rendering; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; namespace DevComponents.DotNetBar { /// /// Represents the controller which allows single BaseItem to be hosted on the control. /// internal class BaseItemController : IDisposable { #region Constructor private BaseItem _Item = null; private Control _ParentControl = null; /// /// Initializes a new instance of the BaseItemController class. /// /// /// public BaseItemController(BaseItem item, Control parentControl) { _Item = item; _ParentControl = parentControl; _ParentControl.MouseDown += new MouseEventHandler(ParentControlMouseDown); _ParentControl.MouseEnter += new EventHandler(ParentControlMouseEnter); _ParentControl.MouseMove += new MouseEventHandler(ParentControlMouseMove); _ParentControl.MouseUp += new MouseEventHandler(ParentControlMouseUp); _ParentControl.MouseLeave += new EventHandler(ParentControlMouseLeave); _ParentControl.Paint += new PaintEventHandler(ParentControlPaint); _Item.ContainerControl = _ParentControl; } #endregion #region Implementation public BaseItem Item { get { return _Item; } } void ParentControlPaint(object sender, PaintEventArgs e) { if (_Item.NeedRecalcSize) { _Item.RecalcSize(); } _Item.Displayed = true; Graphics g = e.Graphics; SmoothingMode sm = g.SmoothingMode; TextRenderingHint th = g.TextRenderingHint; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = DisplayHelp.AntiAliasTextRenderingHint; _Item.Paint(GetItemPaintArgs(g)); g.SmoothingMode = sm; g.TextRenderingHint = th; } void ParentControlMouseLeave(object sender, EventArgs e) { if (_MouseOver) { _Item.InternalMouseLeave(); _MouseOver = false; } } void ParentControlMouseUp(object sender, MouseEventArgs e) { _Item.InternalMouseUp(e); } void ParentControlMouseMove(object sender, MouseEventArgs e) { if (_Item.Bounds.Contains(e.Location)) { if (!_MouseOver) { _Item.InternalMouseEnter(); _MouseOver = true; } _Item.InternalMouseMove(e); } else if (_MouseOver) { _Item.InternalMouseLeave(); _MouseOver = false; } } private bool _MouseOver = false; void ParentControlMouseEnter(object sender, EventArgs e) { Point p = _ParentControl.PointToClient(Control.MousePosition); if (_Item.Bounds.Contains(p)) _Item.InternalMouseEnter(); } void ParentControlMouseDown(object sender, MouseEventArgs e) { if (_Item.Bounds.Contains(e.Location)) _Item.InternalMouseDown(e); } private ItemPaintArgs GetItemPaintArgs(Graphics g) { ItemPaintArgs pa = new ItemPaintArgs(null, _ParentControl, g, GetColorScheme()); pa.Renderer = this.GetRenderer(); pa.ButtonStringFormat = pa.ButtonStringFormat & ~(pa.ButtonStringFormat & eTextFormat.SingleLine); pa.ButtonStringFormat |= (eTextFormat.WordBreak | eTextFormat.EndEllipsis); return pa; } private ColorScheme GetColorScheme() { BaseRenderer r = GetRenderer(); if (r is Office2007Renderer) return ((Office2007Renderer)r).ColorTable.LegacyColors; return new ColorScheme(eDotNetBarStyle.StyleManagerControlled); } private Rendering.BaseRenderer m_DefaultRenderer = null; private Rendering.BaseRenderer m_Renderer = null; private eRenderMode m_RenderMode = eRenderMode.Global; /// /// Returns the renderer control will be rendered with. /// /// The current renderer. public virtual Rendering.BaseRenderer GetRenderer() { return Rendering.GlobalManager.Renderer; } #endregion #region IDisposable Members public void Dispose() { if (_ParentControl != null) { _ParentControl.MouseDown -= new MouseEventHandler(ParentControlMouseDown); _ParentControl.MouseEnter -= new EventHandler(ParentControlMouseEnter); _ParentControl.MouseMove -= new MouseEventHandler(ParentControlMouseMove); _ParentControl.MouseUp -= new MouseEventHandler(ParentControlMouseUp); _ParentControl.MouseLeave -= new EventHandler(ParentControlMouseLeave); _ParentControl.Paint -= new PaintEventHandler(ParentControlPaint); _Item.ContainerControl = null; _Item = null; _ParentControl = null; } } #endregion } }