162 lines
5.5 KiB
C#
162 lines
5.5 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Represents the controller which allows single BaseItem to be hosted on the control.
|
|
/// </summary>
|
|
internal class BaseItemController : IDisposable
|
|
{
|
|
#region Constructor
|
|
private BaseItem _Item = null;
|
|
private Control _ParentControl = null;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the BaseItemController class.
|
|
/// </summary>
|
|
/// <param name="item"></param>
|
|
/// <param name="parentControl"></param>
|
|
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;
|
|
/// <summary>
|
|
/// Returns the renderer control will be rendered with.
|
|
/// </summary>
|
|
/// <returns>The current renderer.</returns>
|
|
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
|
|
}
|
|
}
|