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