643 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			643 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// System item that displays the items that could not fit inside the container on popup menu or toolbar.
 | 
						|
    /// </summary>
 | 
						|
    [System.ComponentModel.ToolboxItem(false),System.ComponentModel.DesignTimeVisible(false)]
 | 
						|
    public class DisplayMoreItem:PopupItem
 | 
						|
    {
 | 
						|
		private bool m_MouseOver;
 | 
						|
		private const int FIXED_SIZE=14;
 | 
						|
		private bool m_PopupSubItemsOnMenu;
 | 
						|
		private eOrientation m_OldOrientation=eOrientation.Horizontal;
 | 
						|
		private bool m_Localized=false;
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Create new instance of DisplayMoreItem object.
 | 
						|
		/// </summary>
 | 
						|
        public DisplayMoreItem()
 | 
						|
        {
 | 
						|
			this.GlobalItem=false;
 | 
						|
			m_MouseOver=false;
 | 
						|
			m_PopupSubItemsOnMenu=false;
 | 
						|
			m_Tooltip="More Buttons";
 | 
						|
			m_SystemItem=true;
 | 
						|
			this.CanCustomize=false;
 | 
						|
			m_ShouldSerialize=false;
 | 
						|
 | 
						|
			// Localization loading will repeat in OnContainerChanged becouse at this time
 | 
						|
			// DotNetBarManager owner is not known and LocalizeString event cannot be invoked
 | 
						|
			using(LocalizationManager lm=new LocalizationManager(null))
 | 
						|
			{
 | 
						|
				m_Tooltip=lm.GetLocalizedString(LocalizationKeys.OverlfowDisplayMoreTooltip);
 | 
						|
			}
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Returns copy of DisplayMoreItem item
 | 
						|
		/// </summary>
 | 
						|
		public override BaseItem Copy()
 | 
						|
		{
 | 
						|
			DisplayMoreItem objCopy=new DisplayMoreItem();
 | 
						|
			this.CopyToItem(objCopy);
 | 
						|
			return objCopy;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Called when item container has changed. If you override this method you must call the base implementation to allow default processing to occur.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="objOldContainer">Previous container of the item.</param>
 | 
						|
		protected internal override void OnContainerChanged(object objOldContainer)
 | 
						|
		{
 | 
						|
			base.OnContainerChanged(objOldContainer);
 | 
						|
			if(!m_Localized)
 | 
						|
			{
 | 
						|
				m_Localized=true;
 | 
						|
				using(LocalizationManager lm=new LocalizationManager(this.GetOwner() as IOwnerLocalize))
 | 
						|
				{
 | 
						|
					m_Tooltip=lm.GetLocalizedString(LocalizationKeys.OverlfowDisplayMoreTooltip);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Returns the fixed size of the item.
 | 
						|
		/// </summary>
 | 
						|
		public static int FixedSize
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return FIXED_SIZE;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Draws the item.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="g">Target Graphics object.</param>
 | 
						|
        public override void Paint(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            if (this.SuspendLayout)
 | 
						|
                return;
 | 
						|
            eDotNetBarStyle effectiveStyle = EffectiveStyle;
 | 
						|
            if (effectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
                PaintOffice(pa);
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (this.IsThemed)
 | 
						|
                {
 | 
						|
                    PaintThemed(pa);
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
                else if (effectiveStyle == eDotNetBarStyle.Office2003 || effectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                {
 | 
						|
                    PaintOffice2003(pa);
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    PaintDotNet(pa);
 | 
						|
            }
 | 
						|
 | 
						|
            System.Drawing.Graphics g = pa.Graphics;
 | 
						|
 | 
						|
            if (m_Orientation == eOrientation.Vertical)
 | 
						|
            {
 | 
						|
                Point[] p = new Point[3];
 | 
						|
                p[0].X = m_Rect.Right - 8;
 | 
						|
                p[0].Y = m_Rect.Top + 4;
 | 
						|
                p[1].X = p[0].X + 2;
 | 
						|
                p[1].Y = p[0].Y + 2;
 | 
						|
                p[2].X = p[0].X + 4;
 | 
						|
                p[2].Y = p[0].Y;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
                p[0].Y += 1;
 | 
						|
                p[1].Y += 1;
 | 
						|
                p[2].Y += 1;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
 | 
						|
                p[0].Y += 3;
 | 
						|
                p[1].Y += 3;
 | 
						|
                p[2].Y += 3;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
                p[0].Y += 1;
 | 
						|
                p[1].Y += 1;
 | 
						|
                p[2].Y += 1;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
 | 
						|
                p[0].X = m_Rect.Left + 7;
 | 
						|
                p[0].Y = m_Rect.Top + 4;
 | 
						|
                p[1].X = p[0].X - 3;
 | 
						|
                p[1].Y = p[0].Y + 3;
 | 
						|
                p[2].X = p[0].X;
 | 
						|
                p[2].Y = p[0].Y + 6;
 | 
						|
                g.FillPolygon(SystemBrushes.ControlText, p);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                Point[] p = new Point[3];
 | 
						|
                p[0].X = m_Rect.Left + (m_Rect.Width - 7) / 2 - 1;
 | 
						|
                p[0].Y = m_Rect.Top + 4;
 | 
						|
                p[1].X = p[0].X + 2;
 | 
						|
                p[1].Y = p[0].Y + 2;
 | 
						|
                p[2].X = p[0].X;
 | 
						|
                p[2].Y = p[0].Y + 4;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
                p[0].X += 1;
 | 
						|
                p[1].X += 1;
 | 
						|
                p[2].X += 1;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
 | 
						|
                p[0].X += 3;
 | 
						|
                p[1].X += 3;
 | 
						|
                p[2].X += 3;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
                p[0].X += 1;
 | 
						|
                p[1].X += 1;
 | 
						|
                p[2].X += 1;
 | 
						|
                g.DrawLines(SystemPens.ControlText, p);
 | 
						|
 | 
						|
                p[0].X = m_Rect.Left + (m_Rect.Width / 2) - 1;
 | 
						|
                p[0].Y = m_Rect.Bottom - 4;
 | 
						|
                p[1].X = p[0].X - 2;
 | 
						|
                p[1].Y = p[0].Y - 3;
 | 
						|
                p[2].X = p[1].X + 5;
 | 
						|
                p[2].Y = p[1].Y;
 | 
						|
                g.FillPolygon(SystemBrushes.ControlText, p);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		private void PaintDotNet(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			Rectangle r;
 | 
						|
			System.Drawing.Graphics g=pa.Graphics;
 | 
						|
			if(m_Expanded)
 | 
						|
			{
 | 
						|
				r=new Rectangle(m_Rect.Left+2,m_Rect.Top+2,m_Rect.Width-2,m_Rect.Height-2);
 | 
						|
				if(!pa.Colors.ItemExpandedShadow.IsEmpty)
 | 
						|
				{
 | 
						|
					using(SolidBrush shadow=new SolidBrush(pa.Colors.ItemExpandedShadow))
 | 
						|
						g.FillRectangle(shadow,r);
 | 
						|
				}
 | 
						|
				r.Offset(-2,-2);
 | 
						|
				r.Height+=2;
 | 
						|
				if(pa.Colors.ItemExpandedBackground2.IsEmpty)
 | 
						|
					g.FillRectangle(new SolidBrush(pa.Colors.ItemExpandedBackground),r);
 | 
						|
				else
 | 
						|
				{
 | 
						|
					System.Drawing.Drawing2D.LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemExpandedBackground,pa.Colors.ItemExpandedBackground2,pa.Colors.ItemExpandedBackgroundGradientAngle);
 | 
						|
					g.FillRectangle(gradient,r);
 | 
						|
					gradient.Dispose();
 | 
						|
				}
 | 
						|
                // TODO: Beta 2 fix --> g.DrawRectangle(new Pen(ColorFunctions.MenuFocusBorderColor(g),1),r);
 | 
						|
				NativeFunctions.DrawRectangle(g,new Pen(pa.Colors.MenuBorder,1),r);
 | 
						|
			}
 | 
						|
			else if(m_MouseOver)
 | 
						|
			{
 | 
						|
				r=new Rectangle(m_Rect.Left,m_Rect.Top,m_Rect.Width-2,m_Rect.Height);
 | 
						|
				if(!pa.Colors.ItemHotBackground2.IsEmpty)
 | 
						|
				{
 | 
						|
					System.Drawing.Drawing2D.LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemHotBackground,pa.Colors.ItemHotBackground2,pa.Colors.ItemHotBackgroundGradientAngle);
 | 
						|
					g.FillRectangle(gradient,r);
 | 
						|
					gradient.Dispose();
 | 
						|
				}
 | 
						|
				else
 | 
						|
					g.FillRectangle(new SolidBrush(pa.Colors.ItemHotBackground),r);
 | 
						|
				// TODO: Beta 2 Fix --> g.DrawRectangle(SystemPens.Highlight,r);
 | 
						|
				NativeFunctions.DrawRectangle(g,new Pen(pa.Colors.ItemHotBorder),r);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintThemed(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			ThemeRebar theme=pa.ThemeRebar;
 | 
						|
			ThemeRebarParts part=ThemeRebarParts.Chevron;
 | 
						|
			ThemeRebarStates state=ThemeRebarStates.ChevronNormal;
 | 
						|
			if(m_Expanded)
 | 
						|
				state=ThemeRebarStates.ChevronPressed;
 | 
						|
			else if(m_MouseOver)
 | 
						|
				state=ThemeRebarStates.ChevronHot;
 | 
						|
 | 
						|
			theme.DrawBackground(pa.Graphics,part,state,m_Rect);
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintOffice(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			System.Drawing.Graphics g=pa.Graphics;
 | 
						|
			if(m_Expanded)
 | 
						|
			{
 | 
						|
				System.Windows.Forms.ControlPaint.DrawBorder3D(g,m_Rect,System.Windows.Forms.Border3DStyle.SunkenOuter);
 | 
						|
			}
 | 
						|
			else if(m_MouseOver)
 | 
						|
			{
 | 
						|
				System.Windows.Forms.ControlPaint.DrawBorder3D(g,m_Rect,System.Windows.Forms.Border3DStyle.RaisedInner);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintOffice2003(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
 | 
						|
			// When on docked toolbar it has a special look...
 | 
						|
			Rectangle r=m_Rect;
 | 
						|
 | 
						|
            System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
 | 
						|
            if (this.Orientation == eOrientation.Vertical)
 | 
						|
            {
 | 
						|
                // When on docked toolbar it has a special look...
 | 
						|
                r.Y += 2;
 | 
						|
                r.Height -= 1;
 | 
						|
                r.X -= 2;
 | 
						|
                r.Width += 2;
 | 
						|
 | 
						|
                path.AddLine(r.X, r.Y, r.X + 2, r.Y + 2);
 | 
						|
                path.AddLine(r.Right - 2, r.Y + 2, r.Right, r.Y);
 | 
						|
                path.AddLine(r.Right, r.Bottom - 2, r.Right - 2, r.Bottom);
 | 
						|
                path.AddLine(r.X + 2, r.Bottom, r.X, r.Bottom - 2);
 | 
						|
                path.CloseAllFigures();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                // When on docked toolbar it has a special look...
 | 
						|
                r.X += 2;
 | 
						|
                r.Width -= 1;
 | 
						|
                r.Y -= 2;
 | 
						|
                r.Height += 3;
 | 
						|
 | 
						|
                path.AddLine(r.X, r.Y, r.X + 2, r.Y + 2);
 | 
						|
                path.AddLine(r.X + 2, r.Bottom - 2, r.X, r.Bottom);
 | 
						|
                path.AddLine(r.Right - 2, r.Bottom, r.Right, r.Bottom - 2);
 | 
						|
                path.AddLine(r.Right, r.Y + 2, r.Right - 2, r.Y);
 | 
						|
                path.CloseAllFigures();
 | 
						|
            }
 | 
						|
 | 
						|
			System.Drawing.Drawing2D.SmoothingMode smooth=g.SmoothingMode;
 | 
						|
			g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 | 
						|
			if(this.Expanded)
 | 
						|
			{
 | 
						|
				System.Drawing.Drawing2D.LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemPressedBackground,pa.Colors.ItemPressedBackground2,pa.Colors.ItemPressedBackgroundGradientAngle);
 | 
						|
				g.FillPath(gradient,path);
 | 
						|
				gradient.Dispose();
 | 
						|
			}
 | 
						|
			else if(m_MouseOver)
 | 
						|
			{
 | 
						|
				System.Drawing.Drawing2D.LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemHotBackground,pa.Colors.ItemHotBackground2,pa.Colors.ItemHotBackgroundGradientAngle);
 | 
						|
				g.FillPath(gradient,path);
 | 
						|
				gradient.Dispose();
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				System.Drawing.Drawing2D.LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.CustomizeBackground,pa.Colors.CustomizeBackground2,pa.Colors.CustomizeBackgroundGradientAngle);
 | 
						|
				g.FillPath(gradient,path);
 | 
						|
				gradient.Dispose();
 | 
						|
			}
 | 
						|
			g.SmoothingMode=smooth;
 | 
						|
 | 
						|
            if (this.Orientation == eOrientation.Vertical)
 | 
						|
            {
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2, r.Bottom - 10 + 1, r.Left + (m_Rect.Width - 4) / 2 + 4, r.Bottom - 10 + 1);
 | 
						|
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 - 1 + 1, r.Top + 6 + 1, r.Left + (m_Rect.Width - 4) / 2 - 1 + 1, r.Top + 8 + 1);
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 + 3 + 1, r.Top + 6 + 1, r.Left + (m_Rect.Width - 4) / 2 + 3 + 1, r.Top + 8 + 1);
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 - 1 + 1, r.Top + 7 + 1, r.Left + (m_Rect.Width - 4) / 2 + 1, r.Top + 7 + 1);
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 + 3 + 1, r.Top + 7 + 1, r.Left + (m_Rect.Width - 4) / 2 + 4 + 1, r.Top + 7 + 1);
 | 
						|
 | 
						|
                // Draw Arrow
 | 
						|
                using (Pen pen = new Pen(pa.Colors.CustomizeText, 1))
 | 
						|
                {
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2, r.Bottom - 10, r.Left + (m_Rect.Width - 4) / 2 + 4, r.Bottom - 10);
 | 
						|
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 - 1, r.Top + 6, r.Left + (m_Rect.Width - 4) / 2 - 1, r.Top + 8);
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 + 3, r.Top + 6, r.Left + (m_Rect.Width - 4) / 2 + 3, r.Top + 8);
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 - 1, r.Top + 7, r.Left + (m_Rect.Width - 4) / 2, r.Top + 7);
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 + 3, r.Top + 7, r.Left + (m_Rect.Width - 4) / 2 + 4, r.Top + 7);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 + 1, r.Bottom - 11 + 1, r.Left + (m_Rect.Width - 4) / 2 + 4 + 1, r.Bottom - 11 + 1);
 | 
						|
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 - 1 + 1, r.Top + 6 + 1, r.Left + (m_Rect.Width - 4) / 2 - 1 + 1, r.Top + 8 + 1);
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 + 3 + 1, r.Top + 6 + 1, r.Left + (m_Rect.Width - 4) / 2 + 3 + 1, r.Top + 8 + 1);
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 - 1 + 1, r.Top + 7 + 1, r.Left + (m_Rect.Width - 4) / 2 + 1, r.Top + 7 + 1);
 | 
						|
                g.DrawLine(SystemPens.HighlightText, r.Left + (m_Rect.Width - 4) / 2 + 3 + 1, r.Top + 7 + 1, r.Left + (m_Rect.Width - 4) / 2 + 4 + 1, r.Top + 7 + 1);
 | 
						|
 | 
						|
                // Draw Arrow Shade
 | 
						|
                Point[] p = new Point[3];
 | 
						|
                p[0].X = r.Left + (m_Rect.Width - 4) / 2 + 2 + 1;
 | 
						|
                p[0].Y = r.Bottom - 5 + 1;
 | 
						|
                p[1].X = p[0].X - 2;
 | 
						|
                p[1].Y = p[0].Y - 3;
 | 
						|
                p[2].X = p[1].X + 5;
 | 
						|
                p[2].Y = p[1].Y;
 | 
						|
                using (SolidBrush brush = new SolidBrush(SystemColors.HighlightText))
 | 
						|
                    g.FillPolygon(brush, p);
 | 
						|
 | 
						|
                // Draw Arrow
 | 
						|
                using (Pen pen = new Pen(pa.Colors.CustomizeText, 1))
 | 
						|
                {
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2, r.Bottom - 11, r.Left + (m_Rect.Width - 4) / 2 + 4, r.Bottom - 11);
 | 
						|
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 - 1, r.Top + 6, r.Left + (m_Rect.Width - 4) / 2 - 1, r.Top + 8);
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 + 3, r.Top + 6, r.Left + (m_Rect.Width - 4) / 2 + 3, r.Top + 8);
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 - 1, r.Top + 7, r.Left + (m_Rect.Width - 4) / 2, r.Top + 7);
 | 
						|
                    g.DrawLine(pen, r.Left + (m_Rect.Width - 4) / 2 + 3, r.Top + 7, r.Left + (m_Rect.Width - 4) / 2 + 4, r.Top + 7);
 | 
						|
                }
 | 
						|
                p = new Point[3];
 | 
						|
                p[0].X = r.Left + (m_Rect.Width - 4) / 2 + 2;
 | 
						|
                p[0].Y = r.Bottom - 5;
 | 
						|
                p[1].X = p[0].X - 2;
 | 
						|
                p[1].Y = p[0].Y - 3;
 | 
						|
                p[2].X = p[1].X + 5;
 | 
						|
                p[2].Y = p[1].Y;
 | 
						|
                using (SolidBrush brush = new SolidBrush(pa.Colors.CustomizeText))
 | 
						|
                    g.FillPolygon(brush, p);
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overriden. Recalculates the size of the item.
 | 
						|
		/// </summary>
 | 
						|
		public override void RecalcSize()
 | 
						|
		{
 | 
						|
			if(this.SuspendLayout)
 | 
						|
				return;
 | 
						|
 | 
						|
			if(m_Orientation==eOrientation.Vertical)
 | 
						|
			{
 | 
						|
				// Take suggested width
 | 
						|
				m_Rect.Height=FIXED_SIZE;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				// Take suggested height
 | 
						|
				m_Rect.Width=FIXED_SIZE;
 | 
						|
			}
 | 
						|
			base.RecalcSize();
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override void InternalMouseEnter()
 | 
						|
		{
 | 
						|
			base.InternalMouseEnter();
 | 
						|
			m_MouseOver=true;
 | 
						|
			this.Refresh();
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override void InternalMouseLeave()
 | 
						|
		{
 | 
						|
			base.InternalMouseLeave();
 | 
						|
			m_MouseOver=false;
 | 
						|
			this.Refresh();
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override void InternalMouseDown(System.Windows.Forms.MouseEventArgs objArg)
 | 
						|
		{
 | 
						|
			base.InternalMouseDown(objArg);
 | 
						|
			if(objArg.Button != System.Windows.Forms.MouseButtons.Left)
 | 
						|
				return;
 | 
						|
			//if(m_Expanded)
 | 
						|
			//	m_Parent.AutoExpand=false;
 | 
						|
			this.Expanded=!m_Expanded;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Displays the sub-items on popup.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="p">Popup location.</param>
 | 
						|
		public override void Popup(Point p)
 | 
						|
		{
 | 
						|
			Popup(p.X,p.Y);
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Displays the sub-items on popup.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="x">Horizontal coordinate in pixels of the upper left corner of a popup.</param>
 | 
						|
		/// <param name="y">Vertical coordinate in pixels of the upper left corner of a popup.</param>
 | 
						|
		public override void Popup(int x, int y)
 | 
						|
		{
 | 
						|
			if(m_PopupSubItemsOnMenu)
 | 
						|
				PopupMenu(x,y);
 | 
						|
			else
 | 
						|
				PopupBar(x,y);
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Displays the sub-items on popup toolbar.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="x">Horizontal coordinate in pixels of the upper left corner of a popup.</param>
 | 
						|
		/// <param name="y">Vertical coordinate in pixels of the upper left corner of a popup.</param>
 | 
						|
		public override void PopupBar(int x, int y)
 | 
						|
		{
 | 
						|
			AddItems();
 | 
						|
			// Reset Need Recalc Size since adding the items will trigger this flag
 | 
						|
			m_NeedRecalcSize=false;
 | 
						|
			base.PopupBar(x,y);
 | 
						|
            m_NeedRecalcSize = false;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Displays the sub-items on popup menu.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="x">Horizontal coordinate in pixels of the upper left corner of a popup.</param>
 | 
						|
		/// <param name="y">Vertical coordinate in pixels of the upper left corner of a popup.</param>
 | 
						|
		public override void PopupMenu(int x, int y)
 | 
						|
		{
 | 
						|
			AddItems();
 | 
						|
			// Reset Need Recalc Size since adding the items will trigger this flag
 | 
						|
			m_NeedRecalcSize=false;
 | 
						|
			base.PopupMenu(x,y);
 | 
						|
            m_NeedRecalcSize = false;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Close the popup window if open.
 | 
						|
		/// </summary>
 | 
						|
		public override void ClosePopup()
 | 
						|
		{
 | 
						|
			base.ClosePopup();
 | 
						|
			this.SubItems.Clear();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Get or sets whether item has been changed in a way that it needs its size recalculated. This is internal
 | 
						|
		/// property and it should not be used by your code.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
		public override bool NeedRecalcSize
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return base.NeedRecalcSize;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_NeedRecalcSize=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Adds the items that are not visible to the overflow popup.
 | 
						|
        /// </summary>
 | 
						|
		protected virtual void AddItems()
 | 
						|
		{
 | 
						|
			if(m_SubItems==null)
 | 
						|
			{
 | 
						|
				m_SubItems=new SubItemsCollection(this);
 | 
						|
			}
 | 
						|
 | 
						|
			m_OldOrientation=this.Orientation;
 | 
						|
			foreach(BaseItem objItem in m_Parent.SubItems)
 | 
						|
			{
 | 
						|
				if(!objItem.Displayed && objItem.Visible)
 | 
						|
				{
 | 
						|
					m_SubItems._Add(objItem);
 | 
						|
					ImageItem objImageItem=objItem as ImageItem;
 | 
						|
					if(objImageItem!=null)
 | 
						|
					{
 | 
						|
						if(objImageItem.ImageSize.Width>this.SubItemsImageSize.Width)
 | 
						|
							this.SubItemsImageSize=new Size(objImageItem.ImageSize.Width,this.SubItemsImageSize.Height);
 | 
						|
						if(objImageItem.ImageSize.Height>this.SubItemsImageSize.Height)
 | 
						|
							this.SubItemsImageSize=new Size(this.SubItemsImageSize.Width,objImageItem.ImageSize.Height);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			
 | 
						|
			foreach(BaseItem objItem in m_SubItems)
 | 
						|
			{
 | 
						|
				object objItemContainer=objItem.ContainerControl;
 | 
						|
				m_Parent.SubItems._Remove(objItem);
 | 
						|
				objItem.SetOrientation(eOrientation.Horizontal);
 | 
						|
				objItem.SetParent(this);
 | 
						|
				objItem.ContainerControl=null;
 | 
						|
				objItem.OnContainerChanged(objItemContainer);
 | 
						|
			}
 | 
						|
			NeedRecalcSize=true;
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the insertion index for the items removed from overflow popup. Assumes that right-most items are removed first by the layout manager.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        protected virtual int GetReInsertIndex()
 | 
						|
        {
 | 
						|
            int insertPos = m_Parent.SubItems.Count;
 | 
						|
            for (int i = insertPos - 1; i >= 0; i--)
 | 
						|
            {
 | 
						|
                if (m_Parent.SubItems[i] is CustomizeItem)
 | 
						|
                {
 | 
						|
                    insertPos = i;
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return insertPos;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Removes the items from the overflow and adds them back to the parent item.
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void RemoveItems()
 | 
						|
        {
 | 
						|
            // Return the items back to the parent...
 | 
						|
            m_HotSubItem = null;
 | 
						|
            // Need to leave customize item at the end of the collection
 | 
						|
            int insertPos = GetReInsertIndex();
 | 
						|
 | 
						|
            foreach (BaseItem objItem in m_SubItems)
 | 
						|
            {
 | 
						|
                object objItemContainer = objItem.ContainerControl;
 | 
						|
                objItem.Orientation = m_OldOrientation;
 | 
						|
                m_Parent.SubItems._Add(objItem, insertPos);
 | 
						|
                insertPos++;
 | 
						|
                objItem.SetParent(m_Parent);
 | 
						|
                objItem.ContainerControl = null;
 | 
						|
            }
 | 
						|
            System.Collections.ArrayList col = new System.Collections.ArrayList(m_SubItems.Count);
 | 
						|
            m_SubItems.CopyTo(col);
 | 
						|
            while (m_SubItems.Count > 0)
 | 
						|
                m_SubItems._Remove(m_SubItems[0]);
 | 
						|
            foreach (BaseItem item in col)
 | 
						|
                item.Displayed = false;
 | 
						|
 | 
						|
            base.OnExpandChange();
 | 
						|
 | 
						|
            if (this.PopupControl is Bar)
 | 
						|
            {
 | 
						|
                Bar bar = (Bar)this.PopupControl;
 | 
						|
                bar.ParentItem = null;
 | 
						|
            }
 | 
						|
 | 
						|
            BaseItem objParent = m_Parent;
 | 
						|
 | 
						|
            System.Windows.Forms.Control objCtrl = null;
 | 
						|
            if (objParent != null)
 | 
						|
                objCtrl = objParent.ContainerControl as System.Windows.Forms.Control;
 | 
						|
            bool recalcSize = true;
 | 
						|
            if (objCtrl != null)
 | 
						|
            {
 | 
						|
                recalcSize= !BarFunctions.InvokeRecalcLayout(objCtrl, false);
 | 
						|
            }
 | 
						|
            if (recalcSize && objParent != null)
 | 
						|
            {
 | 
						|
                objParent.RecalcSize();
 | 
						|
                objParent.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		protected internal override void OnExpandChange()
 | 
						|
		{
 | 
						|
			if(!this.Expanded && m_SubItems!=null && m_Parent!=null)
 | 
						|
			{
 | 
						|
                RemoveItems();
 | 
						|
				return;
 | 
						|
			}
 | 
						|
			base.OnExpandChange();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Forces the repaint the item.
 | 
						|
		/// </summary>
 | 
						|
		public override void Refresh()
 | 
						|
		{
 | 
						|
			if(this.SuspendLayout)
 | 
						|
				return;
 | 
						|
            if ((EffectiveStyle == eDotNetBarStyle.Office2003 || EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(EffectiveStyle)) && !BaseItem.IsOnPopup(this))
 | 
						|
			{
 | 
						|
				if((m_Visible || this.IsOnCustomizeMenu) && m_Displayed)
 | 
						|
				{
 | 
						|
					System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
					if(objCtrl!=null && IsHandleValid(objCtrl) && !(objCtrl is ItemsListBox))
 | 
						|
					{
 | 
						|
						if(m_NeedRecalcSize)
 | 
						|
						{
 | 
						|
							RecalcSize();
 | 
						|
							if(m_Parent!=null)
 | 
						|
								m_Parent.SubItemSizeChanged(this);
 | 
						|
						}
 | 
						|
						Rectangle r=m_Rect;
 | 
						|
						r.Inflate(2,2);
 | 
						|
						objCtrl.Invalidate(r,true);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
				base.Refresh();
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether the mouse is over the item.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public bool IsMouseOver
 | 
						|
        {
 | 
						|
            get { return m_MouseOver; }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |