3671 lines
		
	
	
		
			130 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			3671 lines
		
	
	
		
			130 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.Collections;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
using System.Drawing.Text;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    ///    Summary description for PopupWindow.
 | 
						|
    /// </summary>
 | 
						|
    [System.ComponentModel.ToolboxItem(false),System.ComponentModel.DesignTimeVisible(false)]
 | 
						|
    public class MenuPanel : Control, IDesignTimeProvider, IAccessibilitySupport, IKeyTipsControl, IKeyTipsRenderer
 | 
						|
    {
 | 
						|
		#region Private Variables
 | 
						|
		private struct ExpandButtonData
 | 
						|
		{
 | 
						|
			public ExpandButtonData(bool personalizedallvisible,bool showexpandbutton,Rectangle rExpandButton,bool mouseover)
 | 
						|
			{
 | 
						|
				this.PersonalizedAllVisible=personalizedallvisible;
 | 
						|
				this.ShowExpandButton=showexpandbutton;
 | 
						|
				this.Rect=rExpandButton;
 | 
						|
				this.MouseOver=mouseover;
 | 
						|
			}
 | 
						|
			public bool PersonalizedAllVisible;
 | 
						|
			public bool ShowExpandButton;
 | 
						|
			public Rectangle Rect;
 | 
						|
			public bool MouseOver;
 | 
						|
		}
 | 
						|
 | 
						|
		const int WM_MOUSEACTIVATE = 0x21;
 | 
						|
		const int MA_NOACTIVATE = 3;
 | 
						|
		const int MA_NOACTIVATEANDEAT = 4;
 | 
						|
		private const int DEFAULT_SIDE_WIDTH=16;
 | 
						|
		private const int GROUP_SPACINGDOTNET=3;
 | 
						|
		private const int GROUP_SPACINGOFFICE=9;
 | 
						|
		
 | 
						|
		protected BaseItem m_ParentItem;
 | 
						|
		protected BaseItem m_HotSubItem;
 | 
						|
		protected Point m_ParentItemScreenPos;
 | 
						|
		private bool m_Hover;
 | 
						|
		private bool m_Scroll;
 | 
						|
		private bool m_TopScroll;
 | 
						|
		private bool m_BottomScroll;
 | 
						|
		private int m_ScrollTopPosition;
 | 
						|
		private int m_TopScrollHeight, m_BottomScrollHeight;
 | 
						|
		private Rectangle m_ClientRect;
 | 
						|
		private SideBarImage m_SideBarImage;
 | 
						|
		private Rectangle m_SideRect;
 | 
						|
 | 
						|
		private object m_Owner;
 | 
						|
 | 
						|
		private bool m_IsCustomizeMenu; // This setting is used internaly for menu that is shown as result of clicking on Add or Remove Button to customize the Bar
 | 
						|
		private System.Drawing.Point m_MouseDownPt;
 | 
						|
 | 
						|
		private ePersonalizedMenus m_PersonalizedMenus=ePersonalizedMenus.Disabled;
 | 
						|
		const int DEFAULT_EXPAND_BUTTON_HEIGHT=14;
 | 
						|
		const int OFFICE2003_EXPAND_BUTTON_HEIGHT=18;
 | 
						|
		private int EXPAND_BUTTON_HEIGHT=DEFAULT_EXPAND_BUTTON_HEIGHT;
 | 
						|
 | 
						|
		private ExpandButtonData m_ExpandButton=new ExpandButtonData(false,false,Rectangle.Empty,false);
 | 
						|
 | 
						|
		private System.Windows.Forms.Timer m_ScrollTimer=null;
 | 
						|
		private ePopupAnimation m_PopupAnimation=ePopupAnimation.ManagerControlled;
 | 
						|
 | 
						|
		private PopupShadow m_DropShadow=null;
 | 
						|
		private ColorScheme m_ColorScheme=null;
 | 
						|
 | 
						|
		// Used to eat the mouse move messages when user is using the keyboard to browse through the
 | 
						|
		// top level menus. The problem was that on each repaint the mouse move was fired even though the
 | 
						|
		// mouse did not move at all. So if mouse was over an menu item it was not possible to switch to the
 | 
						|
		// new menu item becouse mouse was "holding" the focus.
 | 
						|
		private bool m_IgnoreDuplicateMouseMove=false;
 | 
						|
		private System.Windows.Forms.MouseEventArgs m_LastMouseMoveEvent=null;
 | 
						|
 | 
						|
		internal bool m_AccessibleObjectCreated=false;
 | 
						|
 | 
						|
		private bool m_PopupMenu=true;
 | 
						|
		private bool m_ShowToolTips=true;
 | 
						|
 | 
						|
		private BaseItem m_DelayedCollapseItem=null;
 | 
						|
		private bool m_LastExpandedOnHover=true; // was false
 | 
						|
		private bool m_AntiAlias=false;
 | 
						|
        private int m_CornerSize = 3;
 | 
						|
        private BaseItem m_DoDefaultActionItem = null;
 | 
						|
        internal bool UseWholeScreenForSizeChecking = false;
 | 
						|
		#endregion
 | 
						|
 | 
						|
        public MenuPanel():base()
 | 
						|
        {
 | 
						|
			m_ParentItem=null;
 | 
						|
			//m_OldContainer=null;
 | 
						|
			m_HotSubItem=null;
 | 
						|
			m_Hover=false;
 | 
						|
			m_Scroll=false;
 | 
						|
			m_TopScroll=false;
 | 
						|
			m_BottomScroll=false;
 | 
						|
			m_ScrollTopPosition=0;
 | 
						|
			m_TopScrollHeight=0;
 | 
						|
			m_BottomScrollHeight=0;
 | 
						|
			m_ClientRect=new Rectangle();
 | 
						|
			m_SideRect=new Rectangle();
 | 
						|
			m_SideBarImage=new SideBarImage();
 | 
						|
			m_IsCustomizeMenu=false;
 | 
						|
			m_Owner=null;
 | 
						|
			this.Font=System.Windows.Forms.SystemInformation.MenuFont;//.Clone() as Font;
 | 
						|
			this.SetStyle(ControlStyles.Selectable,false);
 | 
						|
			this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
 | 
						|
			this.SetStyle(ControlStyles.UserPaint,true);
 | 
						|
			this.SetStyle(ControlStyles.Opaque,true);
 | 
						|
			this.SetStyle(ControlStyles.ResizeRedraw,true);
 | 
						|
			this.SetStyle(DisplayHelp.DoubleBufferFlag,true);
 | 
						|
			this.IsAccessible=true;
 | 
						|
			this.AccessibleRole=AccessibleRole.MenuPopup;
 | 
						|
        }
 | 
						|
		protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
			if(this.Parent!=null && this.Parent is PopupContainer)
 | 
						|
			{
 | 
						|
				Control parent=this.Parent;
 | 
						|
				this.Parent.Controls.Remove(this);
 | 
						|
                parent.Dispose();
 | 
						|
				parent=null;
 | 
						|
			}
 | 
						|
			if(m_AccessibleObjectCreated)
 | 
						|
			{
 | 
						|
				PopupMenuAccessibleObject acc=this.AccessibilityObject as PopupMenuAccessibleObject;
 | 
						|
				if(acc!=null)
 | 
						|
					acc.GenerateEvent(AccessibleEvents.Destroy);
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_DropShadow!=null)
 | 
						|
			{
 | 
						|
				m_DropShadow.Hide();
 | 
						|
				m_DropShadow.Dispose();
 | 
						|
				m_DropShadow=null;
 | 
						|
			}
 | 
						|
		    this.Font = null;
 | 
						|
			RestoreContainer();
 | 
						|
			m_ParentItem=null;
 | 
						|
			base.Dispose(disposing);
 | 
						|
        }
 | 
						|
		
 | 
						|
		protected override void WndProc(ref Message m)
 | 
						|
		{
 | 
						|
			if(m.Msg==WM_MOUSEACTIVATE)
 | 
						|
			{
 | 
						|
				m.Result=new System.IntPtr(MA_NOACTIVATE);
 | 
						|
				return;
 | 
						|
			}
 | 
						|
            else if (m.Msg == NativeFunctions.WM_USER + 107)
 | 
						|
            {
 | 
						|
                if (m_DoDefaultActionItem != null)
 | 
						|
                {
 | 
						|
                    m_DoDefaultActionItem.DoAccesibleDefaultAction();
 | 
						|
                    m_DoDefaultActionItem = null;
 | 
						|
                }
 | 
						|
 | 
						|
            }
 | 
						|
			base.WndProc(ref m);
 | 
						|
        }
 | 
						|
 | 
						|
        private Rendering.BaseRenderer GetRenderer()
 | 
						|
        {
 | 
						|
            Rendering.BaseRenderer r = Rendering.GlobalManager.Renderer;
 | 
						|
 | 
						|
            if (m_ParentItem != null && m_ParentItem.GetContainerControl(false) is IRenderingSupport)
 | 
						|
            {
 | 
						|
                Rendering.BaseRenderer renderer = ((IRenderingSupport)m_ParentItem.GetContainerControl(false)).GetRenderer();
 | 
						|
                if (renderer != null)
 | 
						|
                    r = renderer;
 | 
						|
            }
 | 
						|
 | 
						|
            return r;
 | 
						|
        }
 | 
						|
 | 
						|
        #region KeyTips Support
 | 
						|
        private bool m_ShowKeyTips = false;
 | 
						|
        private string m_KeyTipsKeysStack = "";
 | 
						|
        private Font m_KeyTipsFont = null;
 | 
						|
        private KeyTipsCanvasControl m_KeyTipsCanvas = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether Key Tips (accelerator keys) for items are displayed on top of them.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public virtual bool ShowKeyTips
 | 
						|
        {
 | 
						|
            get { return m_ShowKeyTips; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_ShowKeyTips != value)
 | 
						|
                {
 | 
						|
                    m_ShowKeyTips = value;
 | 
						|
                    this.OnShowKeyTipsChanged();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        string IKeyTipsControl.KeyTipsKeysStack
 | 
						|
        {
 | 
						|
            get { return m_KeyTipsKeysStack; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_KeyTipsKeysStack = value;
 | 
						|
                if (m_KeyTipsCanvas != null)
 | 
						|
                {
 | 
						|
                    this.Refresh();
 | 
						|
                    //m_KeyTipsCanvas.Update();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the font that is used to display Key Tips (accelerator keys) when they are displayed. Default value is null which means
 | 
						|
        /// that control Font is used for Key Tips display.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(null), Category("Appearance"), Description("Indicates font that is used to display Key Tips (accelerator keys) when they are displayed.")]
 | 
						|
        public virtual Font KeyTipsFont
 | 
						|
        {
 | 
						|
            get { return m_KeyTipsFont; }
 | 
						|
            set { m_KeyTipsFont = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnShowKeyTipsChanged()
 | 
						|
        {
 | 
						|
            m_KeyTipsKeysStack = "";
 | 
						|
            if (this.ShowKeyTips)
 | 
						|
                CreateKeyTipCanvas();
 | 
						|
            else
 | 
						|
                DestroyKeyTipCanvas();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void CreateKeyTipCanvas()
 | 
						|
        {
 | 
						|
            if (m_KeyTipsCanvas != null)
 | 
						|
            {
 | 
						|
                m_KeyTipsCanvas.BringToFront();
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            m_KeyTipsCanvas = new KeyTipsCanvasControl(this);
 | 
						|
            m_KeyTipsCanvas.Bounds = new Rectangle(0, 0, this.Width, this.Height);
 | 
						|
            m_KeyTipsCanvas.Visible = true;
 | 
						|
            this.Controls.Add(m_KeyTipsCanvas);
 | 
						|
            m_KeyTipsCanvas.BringToFront();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void DestroyKeyTipCanvas()
 | 
						|
        {
 | 
						|
            if (m_KeyTipsCanvas == null)
 | 
						|
                return;
 | 
						|
            m_KeyTipsCanvas.Visible = false;
 | 
						|
            this.Controls.Remove(m_KeyTipsCanvas);
 | 
						|
            m_KeyTipsCanvas.Dispose();
 | 
						|
            m_KeyTipsCanvas = null;
 | 
						|
        }
 | 
						|
 | 
						|
        void IKeyTipsRenderer.PaintKeyTips(Graphics g)
 | 
						|
        {
 | 
						|
            this.PaintKeyTips(g);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void PaintKeyTips(Graphics g)
 | 
						|
        {
 | 
						|
            if (!m_ShowKeyTips || m_ParentItem == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            KeyTipsRendererEventArgs e = new KeyTipsRendererEventArgs(g, Rectangle.Empty, "", GetKeyTipFont(), null);
 | 
						|
 | 
						|
            Rendering.BaseRenderer renderer = GetRenderer();
 | 
						|
            PaintContainerKeyTips(m_ParentItem, renderer, e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual Font GetKeyTipFont()
 | 
						|
        {
 | 
						|
            Font font = this.Font;
 | 
						|
            if (m_KeyTipsFont != null)
 | 
						|
                font = m_KeyTipsFont;
 | 
						|
            return font;
 | 
						|
        }
 | 
						|
 | 
						|
        internal virtual void PaintContainerKeyTips(BaseItem container, Rendering.BaseRenderer renderer, KeyTipsRendererEventArgs e)
 | 
						|
        {
 | 
						|
            foreach (BaseItem item in container.SubItems)
 | 
						|
            {
 | 
						|
                if (!item.Visible || !item.Displayed)
 | 
						|
                    continue;
 | 
						|
 | 
						|
                if (item.IsContainer)
 | 
						|
                    PaintContainerKeyTips(item, renderer, e);
 | 
						|
 | 
						|
                if (item.AccessKey == Char.MinValue && item.KeyTips == "" || m_KeyTipsKeysStack != "" && !item.KeyTips.StartsWith(m_KeyTipsKeysStack)
 | 
						|
                    || item.KeyTips == "" && m_KeyTipsKeysStack != "")
 | 
						|
                    continue;
 | 
						|
 | 
						|
                if (item.KeyTips != "")
 | 
						|
                    e.KeyTip = item.KeyTips;
 | 
						|
                else
 | 
						|
                    e.KeyTip = item.AccessKey.ToString().ToUpper();
 | 
						|
 | 
						|
                e.Bounds = GetKeyTipRectangle(e.Graphics, item, e.Font, e.KeyTip);
 | 
						|
                e.ReferenceObject = item;
 | 
						|
 | 
						|
                renderer.DrawKeyTips(e);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual Rectangle GetKeyTipRectangle(Graphics g, BaseItem item, Font font, string keyTip)
 | 
						|
        {
 | 
						|
            Size padding = KeyTipsPainter.KeyTipsPadding;
 | 
						|
            Size size = TextDrawing.MeasureString(g, keyTip, font);
 | 
						|
            size.Width += padding.Width;
 | 
						|
            size.Height += padding.Height;
 | 
						|
 | 
						|
            Rectangle ib = item.DisplayRectangle;
 | 
						|
            Rectangle r = new Rectangle(ib.X + 16, ib.Bottom - size.Height, size.Width, size.Height);
 | 
						|
 | 
						|
            return r;
 | 
						|
        }
 | 
						|
 | 
						|
        public virtual bool ProcessMnemonicEx(char charCode)
 | 
						|
        {
 | 
						|
            if (ProcessContainerAccessKey(m_ParentItem, charCode))
 | 
						|
                return true;
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the item default accessibility action will be performed on.
 | 
						|
        /// </summary>
 | 
						|
        BaseItem IAccessibilitySupport.DoDefaultActionItem
 | 
						|
        {
 | 
						|
            get { return m_DoDefaultActionItem; }
 | 
						|
            set { m_DoDefaultActionItem = value; }
 | 
						|
        }
 | 
						|
 | 
						|
		[DefaultValue(true), Browsable(true), DevCoBrowsable(true)]
 | 
						|
		public bool PopupMenu
 | 
						|
		{
 | 
						|
			get {return m_PopupMenu;}
 | 
						|
			set {m_PopupMenu=value;}
 | 
						|
		}
 | 
						|
 | 
						|
        // Closes the popup menu.
 | 
						|
        public void Close()
 | 
						|
        {
 | 
						|
            if (m_AccessibleObjectCreated)
 | 
						|
            {
 | 
						|
                MenuPanel.PopupMenuAccessibleObject acc = this.AccessibilityObject as PopupMenuAccessibleObject;
 | 
						|
                if (acc != null)
 | 
						|
                {
 | 
						|
                    if (m_ParentItem != null && m_ParentItem.IsOnMenuBar)
 | 
						|
                        acc.GenerateEvent(AccessibleEvents.SystemMenuEnd);
 | 
						|
                    acc.GenerateEvent(AccessibleEvents.SystemMenuPopupEnd);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (m_ParentItem != null)
 | 
						|
            {
 | 
						|
                Control c = m_ParentItem.ContainerControl as Control;
 | 
						|
                if (c != null)
 | 
						|
                    c.MouseWheel -= ParentControlMouseWheel;
 | 
						|
            }
 | 
						|
 | 
						|
            SetFocusItem(null);
 | 
						|
            Hide();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override AccessibleObject CreateAccessibilityInstance()
 | 
						|
		{
 | 
						|
			m_AccessibleObjectCreated=true;
 | 
						|
			return new PopupMenuAccessibleObject(this);
 | 
						|
		}
 | 
						|
 | 
						|
		private void SetupAccessibility()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.Text!="")
 | 
						|
				this.AccessibleName=m_ParentItem.Text;
 | 
						|
			else
 | 
						|
				this.AccessibleName="DotNetBar Popup Menu";
 | 
						|
			this.AccessibleDescription=""; //this.AccessibleName+" ("+this.Name+")";
 | 
						|
			this.AccessibleRole=AccessibleRole.MenuPopup;
 | 
						|
		}
 | 
						|
 | 
						|
        internal ItemPaintArgs GetItemPaintArgs(Graphics g)
 | 
						|
        {
 | 
						|
            ItemPaintArgs pa;
 | 
						|
            if (m_ColorScheme == null)
 | 
						|
                pa = new ItemPaintArgs(m_Owner as IOwner, this, g, new ColorScheme(g));
 | 
						|
            else
 | 
						|
                pa = new ItemPaintArgs(m_Owner as IOwner, this, g, m_ColorScheme);
 | 
						|
 | 
						|
            pa.Renderer = GetRenderer();
 | 
						|
 | 
						|
            if (m_ParentItem.DesignMode)
 | 
						|
            {
 | 
						|
                ISite site = this.GetSite();
 | 
						|
                if (site != null && site.DesignMode)
 | 
						|
                    pa.DesignerSelection = true;
 | 
						|
            }
 | 
						|
 | 
						|
            return pa;
 | 
						|
        }
 | 
						|
 | 
						|
		protected override void OnPaint(PaintEventArgs e)
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null)
 | 
						|
			{
 | 
						|
                ItemPaintArgs pa = GetItemPaintArgs(e.Graphics);
 | 
						|
                pa.PaintEventArgs = e;
 | 
						|
                pa.ClipRectangle = e.ClipRectangle;
 | 
						|
                SmoothingMode sm = e.Graphics.SmoothingMode;
 | 
						|
                TextRenderingHint th = e.Graphics.TextRenderingHint;
 | 
						|
 | 
						|
				if(m_AntiAlias)
 | 
						|
				{
 | 
						|
					e.Graphics.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 | 
						|
                    e.Graphics.TextRenderingHint = DisplayHelp.AntiAliasTextRenderingHint;
 | 
						|
				}
 | 
						|
 | 
						|
                if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
					PaintOffice(pa);
 | 
						|
				else
 | 
						|
					PaintDotNet(pa);
 | 
						|
 | 
						|
                if (m_ParentItem is ApplicationButton)
 | 
						|
                {
 | 
						|
                    ((ApplicationButton)m_ParentItem).OnMenuPaint(pa);
 | 
						|
                }
 | 
						|
                else if (m_ParentItem is DevComponents.DotNetBar.Metro.MetroAppButton)
 | 
						|
                {
 | 
						|
                    ((DevComponents.DotNetBar.Metro.MetroAppButton)m_ParentItem).OnMenuPaint(pa);
 | 
						|
                }
 | 
						|
 | 
						|
                e.Graphics.SmoothingMode = sm;
 | 
						|
                e.Graphics.TextRenderingHint = th;
 | 
						|
			}
 | 
						|
        }
 | 
						|
 | 
						|
        #region InternalMenuColors
 | 
						|
        private class InternalMenuColors
 | 
						|
        {
 | 
						|
            public Rendering.LinearGradientColorTable Background = new Rendering.LinearGradientColorTable();
 | 
						|
            public Rendering.LinearGradientColorTable Side = new Rendering.LinearGradientColorTable();
 | 
						|
            public Rendering.LinearGradientColorTable SideUnused = new Rendering.LinearGradientColorTable();
 | 
						|
            public Rendering.LinearGradientColorTable Border = new Rendering.LinearGradientColorTable();
 | 
						|
            public Rendering.LinearGradientColorTable SideBorder = new Rendering.LinearGradientColorTable();
 | 
						|
            public Rendering.LinearGradientColorTable SideBorderLight = new Rendering.LinearGradientColorTable();
 | 
						|
        }
 | 
						|
        
 | 
						|
        private InternalMenuColors GetMenuColors(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            InternalMenuColors colors = new InternalMenuColors();
 | 
						|
            if (m_ParentItem != null && BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle) && pa.Renderer is Rendering.Office2007Renderer)
 | 
						|
            {
 | 
						|
                Rendering.Office2007MenuColorTable ct = ((Rendering.Office2007Renderer)pa.Renderer).ColorTable.Menu;
 | 
						|
                colors.Background = ct.Background;
 | 
						|
                colors.Border = ct.Border;
 | 
						|
                colors.Side = ct.Side;
 | 
						|
                colors.SideBorder = ct.SideBorder;
 | 
						|
                colors.SideBorderLight = ct.SideBorderLight;
 | 
						|
                colors.SideUnused = ct.SideUnused;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                colors.Background.Start = pa.Colors.MenuBackground;
 | 
						|
                colors.Background.End = pa.Colors.MenuBackground2;
 | 
						|
                colors.Background.GradientAngle = pa.Colors.MenuBackgroundGradientAngle;
 | 
						|
                colors.Side.Start = pa.Colors.MenuSide;
 | 
						|
                colors.Side.End = pa.Colors.MenuSide2;
 | 
						|
                colors.Side.GradientAngle = pa.Colors.MenuSideGradientAngle;
 | 
						|
                colors.SideUnused.Start = pa.Colors.MenuUnusedSide;
 | 
						|
                colors.SideUnused.End = pa.Colors.MenuUnusedSide2;
 | 
						|
                colors.SideUnused.GradientAngle = pa.Colors.MenuUnusedSideGradientAngle;
 | 
						|
                colors.Border.Start = pa.Colors.MenuBorder;
 | 
						|
                colors.SideBorder.Start = pa.Colors.ItemSeparator;
 | 
						|
                colors.SideBorderLight.Start = pa.Colors.ItemSeparatorShade;
 | 
						|
            }
 | 
						|
 | 
						|
            return colors;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        private bool IsContainerMenu
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ParentItem != null && m_ParentItem.SubItems.Count == 1 && m_ParentItem.SubItems[0] is ItemContainer)
 | 
						|
                    return true;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected void PaintDotNet(ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
            if (this.DisplayShadow && !this.AlphaShadow)
 | 
						|
                SetupRegion();
 | 
						|
            InternalMenuColors menuColors = this.GetMenuColors(pa);
 | 
						|
 | 
						|
            DisplayHelp.FillRectangle(g, this.ClientRectangle, menuColors.Background);
 | 
						|
 | 
						|
            PaintSideBar(pa);
 | 
						|
 | 
						|
            //Pen p=new Pen(pa.Colors.MenuBorder,1);
 | 
						|
            if (m_ParentItem != null)
 | 
						|
            {
 | 
						|
                Rectangle borderRect = this.ClientRectangle;
 | 
						|
                if (this.DisplayShadow && !this.AlphaShadow)
 | 
						|
                    borderRect = new Rectangle(0, 0, this.ClientSize.Width - 2, this.ClientSize.Height - 2);
 | 
						|
                eDotNetBarStyle effectiveStyle = m_ParentItem.EffectiveStyle;
 | 
						|
                if (BarFunctions.IsOffice2007Style(effectiveStyle) && (!StyleManager.IsMetro(effectiveStyle) || StyleManager.IsVisualStudio2012(StyleManager.Style)))
 | 
						|
                {
 | 
						|
                    if (this.Region != null)
 | 
						|
                    {
 | 
						|
                        DisplayHelp.DrawRoundedRectangle(g, menuColors.Border.Start, borderRect, m_CornerSize);
 | 
						|
                        Rectangle borderInset = borderRect;
 | 
						|
                        borderInset.Inflate(-1, -1);
 | 
						|
                        Color c = ControlPaint.LightLight(menuColors.Background.Start);
 | 
						|
                        if (IsContainerMenu)
 | 
						|
                        {
 | 
						|
                            c = Color.Empty;
 | 
						|
                            GraphicsPath path = DisplayHelp.GetRoundedRectanglePath(borderInset, m_CornerSize);
 | 
						|
                            Region reg = new Region(path);
 | 
						|
                            path.Widen(SystemPens.Control);
 | 
						|
                            reg.Union(path);
 | 
						|
                            path.Dispose();
 | 
						|
                            path = null;
 | 
						|
                            g.Clip = reg;
 | 
						|
                        }
 | 
						|
 | 
						|
                        if (!c.IsEmpty)
 | 
						|
                        {
 | 
						|
                            using (Pen pen = new Pen(c))
 | 
						|
                                DisplayHelp.DrawRoundedRectangle(g, pen, borderInset, m_CornerSize);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        DisplayHelp.DrawRectangle(g, menuColors.Border.Start, borderRect);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    DisplayHelp.DrawGradientRectangle(g, borderRect, menuColors.Border, 1);
 | 
						|
 | 
						|
                // Shadow
 | 
						|
                if (this.DisplayShadow && !this.AlphaShadow && m_ParentItem != null && !BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                {
 | 
						|
                    using (Pen p = new Pen(SystemColors.ControlDark, 2))
 | 
						|
                    {
 | 
						|
                        Point[] pt = new Point[3];
 | 
						|
                        pt[0].X = 2;
 | 
						|
                        pt[0].Y = this.ClientSize.Height - 1;
 | 
						|
                        pt[1].X = this.ClientSize.Width - 1;
 | 
						|
                        pt[1].Y = this.ClientSize.Height - 1;
 | 
						|
                        pt[2].X = this.ClientSize.Width - 1;
 | 
						|
                        pt[2].Y = 2;
 | 
						|
                        g.DrawLines(p, pt);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if ((!StyleManager.IsMetro(effectiveStyle) || StyleManager.IsVisualStudio2012(StyleManager.Style)) && ((!BarFunctions.IsOffice2007Style(effectiveStyle) || effectiveStyle == eDotNetBarStyle.Office2010 || effectiveStyle == eDotNetBarStyle.Metro) && m_ParentItem is ButtonItem && m_ParentItem.Displayed && m_ParentItem.Visible && m_ParentItem.Orientation == eOrientation.Horizontal && !(m_ParentItem.ContainerControl is ContextMenuBar)))
 | 
						|
                {
 | 
						|
                    // Determine where to draw the line based on parent position
 | 
						|
                    if (m_PopupMenu && this.Parent != null && m_ParentItemScreenPos.Y < this.Parent.Location.Y)
 | 
						|
                    {
 | 
						|
                        Point p1 = new Point((m_ParentItemScreenPos.X - this.Parent.Location.X) + 1, 0);
 | 
						|
                        Point p2 = new Point(p1.X + m_ParentItem.WidthInternal - (pa.Colors.ItemExpandedShadow.IsEmpty ? 3 : 5), 0);
 | 
						|
                        using (Pen pen = new Pen(pa.Colors.ItemExpandedBackground, 1))
 | 
						|
                            g.DrawLine(pen, p1, p2);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                // If menu scrolls paint side bars
 | 
						|
                if (m_Scroll)
 | 
						|
                {
 | 
						|
                    BaseItem objItem = m_ParentItem.SubItems[0];
 | 
						|
                    if (m_TopScroll)
 | 
						|
                    {
 | 
						|
                        ImageItem objImageItem = m_ParentItem as ImageItem;
 | 
						|
                        if (objImageItem != null)
 | 
						|
                        {
 | 
						|
                            Rectangle sideRect = new Rectangle(m_ClientRect.Left, m_ClientRect.Top, objImageItem.SubItemsImageSize.Width + 7, m_TopScrollHeight);
 | 
						|
                            DisplayHelp.FillRectangle(g, sideRect, menuColors.Side);
 | 
						|
                            if (BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                                PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            Rectangle sideRect = new Rectangle(m_ClientRect.Left, m_ClientRect.Top, DEFAULT_SIDE_WIDTH + 7, m_TopScrollHeight);
 | 
						|
                            DisplayHelp.FillRectangle(g, sideRect, menuColors.Side);
 | 
						|
                            if (BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                                PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (m_BottomScroll)
 | 
						|
                    {
 | 
						|
                        ImageItem objImageItem = m_ParentItem as ImageItem;
 | 
						|
                        if (objImageItem != null)
 | 
						|
                        {
 | 
						|
                            Rectangle sideRect = new Rectangle(m_ClientRect.Left, m_ClientRect.Bottom - m_BottomScrollHeight - 1, objImageItem.SubItemsImageSize.Width + 7, m_BottomScrollHeight);
 | 
						|
                            DisplayHelp.FillRectangle(g, sideRect, menuColors.Side);
 | 
						|
                            if (BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                                PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            Rectangle sideRect = new Rectangle(m_ClientRect.Left, m_ClientRect.Bottom - m_BottomScrollHeight - 1, DEFAULT_SIDE_WIDTH + 7, m_BottomScrollHeight);
 | 
						|
                            DisplayHelp.FillRectangle(g, sideRect, menuColors.Side);
 | 
						|
                            if (BarFunctions.IsOffice2007Style(effectiveStyle))
 | 
						|
                                PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    objItem = null;
 | 
						|
                }
 | 
						|
                PaintItems(pa, menuColors);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                DisplayHelp.DrawGradientRectangle(g, this.ClientRectangle, menuColors.Border, 1);
 | 
						|
        }
 | 
						|
 | 
						|
		protected void PaintOffice(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			using(SolidBrush brush=new SolidBrush(SystemColors.Control))
 | 
						|
				pa.Graphics.FillRectangle(brush,this.DisplayRectangle);
 | 
						|
			//pa.Graphics.Clear(SystemColors.Control);
 | 
						|
			
 | 
						|
			PaintSideBar(pa);
 | 
						|
 | 
						|
			System.Windows.Forms.ControlPaint.DrawBorder3D(pa.Graphics,0,0,this.ClientSize.Width,this.ClientSize.Height,System.Windows.Forms.Border3DStyle.Raised);
 | 
						|
			if(m_ParentItem!=null)
 | 
						|
				PaintItems(pa, GetMenuColors(pa));
 | 
						|
		}
 | 
						|
 | 
						|
        private bool DoPaintSide(BaseItem item)
 | 
						|
        {
 | 
						|
            if (item is LabelItem || item is ItemContainer)
 | 
						|
                return false;
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        private void PaintItems(ItemPaintArgs pa, InternalMenuColors menuColors)
 | 
						|
		{
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
            bool rightToLeft = (this.RightToLeft == RightToLeft.Yes);
 | 
						|
 | 
						|
			// Draw all contained items
 | 
						|
			if(m_ParentItem!=null && m_ParentItem!=null)
 | 
						|
			{
 | 
						|
				// Special case handling when menus exceed the size of window
 | 
						|
				Point[] p;
 | 
						|
				Rectangle clipRect=new Rectangle((int)g.ClipBounds.X,(int)g.ClipBounds.Y,(int)g.ClipBounds.Width,(int)g.ClipBounds.Height);
 | 
						|
				if(m_Scroll)
 | 
						|
				{
 | 
						|
					if(m_TopScroll)
 | 
						|
					{
 | 
						|
						p=new Point[3];
 | 
						|
						p[0].X=m_ClientRect.Left+(m_ClientRect.Width-8)/2;
 | 
						|
						p[0].Y=m_ClientRect.Top+8;
 | 
						|
						p[1].X=p[0].X+8;
 | 
						|
						p[1].Y=p[0].Y;
 | 
						|
						p[2].X=p[0].X+4;
 | 
						|
						p[2].Y=p[0].Y-5;
 | 
						|
						g.FillPolygon(SystemBrushes.ControlText,p);
 | 
						|
					}
 | 
						|
					BaseItem objTmp;
 | 
						|
					ImageItem objParentImageItem=m_ParentItem as ImageItem;
 | 
						|
					int iSideWidth=DEFAULT_SIDE_WIDTH;
 | 
						|
					if(objParentImageItem!=null)
 | 
						|
						iSideWidth=objParentImageItem.SubItemsImageSize.Width;
 | 
						|
					objParentImageItem=null;
 | 
						|
                    bool previousContainerItem = false;
 | 
						|
					for(int i=m_ScrollTopPosition;i<m_ParentItem.SubItems.Count;i++)
 | 
						|
					{
 | 
						|
						objTmp=m_ParentItem.SubItems[i];
 | 
						|
						if(!clipRect.IntersectsWith(objTmp.DisplayRectangle))
 | 
						|
							continue;
 | 
						|
						if(objTmp.Visible || m_IsCustomizeMenu)
 | 
						|
						{
 | 
						|
							if(objTmp.Displayed)
 | 
						|
							{
 | 
						|
                                SmoothingMode sm = g.SmoothingMode;
 | 
						|
                                g.SmoothingMode = SmoothingMode.Default;
 | 
						|
								if(objTmp.BeginGroup && objTmp.TopInternal>ClientMarginTop)  // Exclude first element
 | 
						|
								{
 | 
						|
                                    if (objTmp.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
									{
 | 
						|
										if(m_IsCustomizeMenu)
 | 
						|
											System.Windows.Forms.ControlPaint.DrawBorder3D(g,objTmp.HeightInternal+Dpi.Height2+objTmp.LeftInternal+Dpi.Width13,objTmp.TopInternal-Dpi.Height5,objTmp.WidthInternal-Dpi.Width26-objTmp.HeightInternal-Dpi.Height2,Dpi.Height2,System.Windows.Forms.Border3DStyle.Etched,System.Windows.Forms.Border3DSide.Top);
 | 
						|
										else
 | 
						|
                                            System.Windows.Forms.ControlPaint.DrawBorder3D(g, objTmp.LeftInternal + Dpi.Width13, objTmp.TopInternal - Dpi.Height5, objTmp.WidthInternal - Dpi.Width26, Dpi.Width2, System.Windows.Forms.Border3DStyle.Etched, System.Windows.Forms.Border3DSide.Top);
 | 
						|
									}
 | 
						|
									else
 | 
						|
									{
 | 
						|
										if(m_IsCustomizeMenu)
 | 
						|
										{
 | 
						|
                                            Rectangle sideRect = new Rectangle(objTmp.LeftInternal, objTmp.TopInternal - Dpi.Height3, objTmp.HeightInternal + Dpi.Height2 + iSideWidth + Dpi.Width7, Dpi.Height3);
 | 
						|
                                            sideRect.Inflate(0, Dpi.Height1);
 | 
						|
                                            DisplayHelp.FillRectangle(g, sideRect, menuColors.Side.Start, menuColors.Side.End, menuColors.Side.GradientAngle);
 | 
						|
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
                                            DisplayHelp.DrawLine(g, objTmp.LeftInternal + iSideWidth + Dpi.Width8 + Dpi.Width7 + objTmp.HeightInternal + Dpi.Width2, objTmp.TopInternal - Dpi.Height2, objTmp.DisplayRectangle.Right - Dpi.Width1, objTmp.TopInternal - Dpi.Height2,
 | 
						|
                                                menuColors.SideBorder.Start, Dpi.Width1);
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                DisplayHelp.DrawLine(g, objTmp.LeftInternal + iSideWidth + Dpi.Width8 + Dpi.Width7 + objTmp.HeightInternal + Dpi.Width2, objTmp.TopInternal - Dpi.Height1, objTmp.DisplayRectangle.Right - Dpi.Width1, objTmp.TopInternal - Dpi.Height1, menuColors.SideBorderLight.Start, Dpi.Width1);
 | 
						|
 | 
						|
										}
 | 
						|
										else
 | 
						|
										{
 | 
						|
                                            bool paintSide = DoPaintSide(objTmp);
 | 
						|
                                            bool itemOnlySeparator = paintSide;
 | 
						|
                                            if(paintSide)
 | 
						|
                                            {
 | 
						|
                                                Rectangle sideRect = new Rectangle(objTmp.LeftInternal, objTmp.TopInternal - Dpi.Width3, iSideWidth + Dpi.Width7, Dpi.Height3);
 | 
						|
                                                sideRect.Inflate(0, Dpi.Height1);
 | 
						|
											    // Paint side bar
 | 
						|
                                                if (objTmp is IPersonalizedMenuItem && ((IPersonalizedMenuItem)objTmp).MenuVisibility == eMenuVisibility.VisibleIfRecentlyUsed && !((IPersonalizedMenuItem)objTmp).RecentlyUsed)
 | 
						|
                                                    DisplayHelp.FillRectangle(g, sideRect, menuColors.SideUnused);
 | 
						|
                                                else
 | 
						|
                                                    DisplayHelp.FillRectangle(g, sideRect, menuColors.Side);
 | 
						|
 | 
						|
                                                if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                    PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
                                            }
 | 
						|
                                            if (itemOnlySeparator && previousContainerItem)
 | 
						|
                                                itemOnlySeparator = false;
 | 
						|
                                            DisplayHelp.DrawLine(g, objTmp.LeftInternal + (itemOnlySeparator ? (iSideWidth + Dpi.Width8 + Dpi.Width7) : 0), objTmp.TopInternal - Dpi.Height2, objTmp.DisplayRectangle.Right - Dpi.Width1, objTmp.TopInternal - Dpi.Height2, menuColors.SideBorder.Start, Dpi.Width1);
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                DisplayHelp.DrawLine(g, objTmp.LeftInternal + (itemOnlySeparator ? (iSideWidth + Dpi.Width8 + Dpi.Width7) : 0), objTmp.TopInternal - Dpi.Height1, objTmp.DisplayRectangle.Right - Dpi.Width1, objTmp.TopInternal - Dpi.Height1, menuColors.SideBorderLight.Start, Dpi.Width1);
 | 
						|
										}
 | 
						|
									}
 | 
						|
								}
 | 
						|
                                g.SmoothingMode = sm;
 | 
						|
								objTmp.Paint(pa);
 | 
						|
                                previousContainerItem = (objTmp.IsContainer);
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
					if(m_BottomScroll)
 | 
						|
					{
 | 
						|
						// Draw down button
 | 
						|
						p=new Point[3];
 | 
						|
						p[0].X=m_ClientRect.Left+(m_ClientRect.Width-8)/2;
 | 
						|
						p[0].Y=m_ClientRect.Bottom-8;
 | 
						|
						p[1].X=p[0].X+8;
 | 
						|
						p[1].Y=p[0].Y;
 | 
						|
						p[2].X=p[0].X+4;
 | 
						|
						p[2].Y=p[0].Y+4;
 | 
						|
						g.FillPolygon(SystemBrushes.ControlText,p);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					// This is very simple...
 | 
						|
					ImageItem objParentImageItem=m_ParentItem as ImageItem;
 | 
						|
					int iSideBarWidth=Dpi.Width(DEFAULT_SIDE_WIDTH);
 | 
						|
					if(objParentImageItem!=null)
 | 
						|
						iSideBarWidth=objParentImageItem.SubItemsImageSize.Width;
 | 
						|
					objParentImageItem=null;
 | 
						|
					bool bFirst=true;
 | 
						|
                    bool previousContainerItem = false;
 | 
						|
					foreach(BaseItem objTmp in m_ParentItem.SubItems)
 | 
						|
					{
 | 
						|
						if(!clipRect.IntersectsWith(objTmp.DisplayRectangle))
 | 
						|
							continue;
 | 
						|
 | 
						|
						if(objTmp.Visible && objTmp.Displayed || m_IsCustomizeMenu)
 | 
						|
						{
 | 
						|
                            SmoothingMode sm = g.SmoothingMode;
 | 
						|
                            g.SmoothingMode = SmoothingMode.Default;
 | 
						|
							if(objTmp.BeginGroup && !bFirst)
 | 
						|
							{
 | 
						|
                                if (objTmp.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
								{
 | 
						|
									if(m_IsCustomizeMenu)
 | 
						|
										System.Windows.Forms.ControlPaint.DrawBorder3D(g,objTmp.HeightInternal+2+objTmp.LeftInternal+13,objTmp.TopInternal-5,objTmp.WidthInternal-26-objTmp.HeightInternal-2,2,System.Windows.Forms.Border3DStyle.Etched,System.Windows.Forms.Border3DSide.Top);
 | 
						|
									else
 | 
						|
										System.Windows.Forms.ControlPaint.DrawBorder3D(g,objTmp.LeftInternal+13,objTmp.TopInternal-5,objTmp.WidthInternal-26,2,System.Windows.Forms.Border3DStyle.Etched,System.Windows.Forms.Border3DSide.Top);
 | 
						|
								}
 | 
						|
								else
 | 
						|
								{
 | 
						|
									if(m_IsCustomizeMenu)
 | 
						|
									{
 | 
						|
                                        Rectangle sideBar = new Rectangle(objTmp.LeftInternal, objTmp.TopInternal - 3, objTmp.HeightInternal + 2 + iSideBarWidth + 7, 3);
 | 
						|
                                        sideBar.Inflate(0, 1);
 | 
						|
                                        if (rightToLeft)
 | 
						|
                                        {
 | 
						|
                                            sideBar.Width = iSideBarWidth + 7;
 | 
						|
                                            sideBar.X = objTmp.DisplayRectangle.Right - sideBar.Width;
 | 
						|
                                        }
 | 
						|
										// Paint side bar
 | 
						|
                                        DisplayHelp.FillRectangle(g, sideBar, menuColors.Side);
 | 
						|
 | 
						|
                                        if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                            PaintMenuItemSide(pa, sideBar, menuColors);
 | 
						|
 | 
						|
                                        if (rightToLeft)
 | 
						|
                                        {
 | 
						|
                                            DisplayHelp.DrawLine(g, objTmp.LeftInternal + 1, objTmp.TopInternal - 2, objTmp.DisplayRectangle.Right - (iSideBarWidth + 8 + 7 + objTmp.HeightInternal + 2 + 1), objTmp.TopInternal - 2, menuColors.SideBorder.Start, 1);
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                DisplayHelp.DrawLine(g, objTmp.LeftInternal + 1, objTmp.TopInternal - 1, objTmp.DisplayRectangle.Right - (iSideBarWidth + 8 + 7 + objTmp.HeightInternal + 2 + 1), objTmp.TopInternal - 1, menuColors.SideBorderLight.Start,1);
 | 
						|
                                        }
 | 
						|
                                        else
 | 
						|
                                        {
 | 
						|
                                            DisplayHelp.DrawLine(g, objTmp.LeftInternal + iSideBarWidth + 8 + 7 + objTmp.HeightInternal + 2, objTmp.TopInternal - 2, objTmp.DisplayRectangle.Right - 1, objTmp.TopInternal - 2, menuColors.SideBorder.Start, 1);
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                DisplayHelp.DrawLine(g, objTmp.LeftInternal + iSideBarWidth + 8 + 7 + objTmp.HeightInternal + 2, objTmp.TopInternal - 1, objTmp.DisplayRectangle.Right - 1, objTmp.TopInternal - 1, menuColors.SideBorderLight.Start, 1);
 | 
						|
                                        }
 | 
						|
									}
 | 
						|
									else
 | 
						|
									{
 | 
						|
                                        Rectangle sideBar = new Rectangle(objTmp.LeftInternal, objTmp.TopInternal - Dpi.Height2, iSideBarWidth + Dpi.Width7, Dpi.Height3);
 | 
						|
                                        sideBar.Inflate(0, Dpi.Height2);
 | 
						|
                                        if (rightToLeft)
 | 
						|
                                            sideBar.X = objTmp.DisplayRectangle.Right - sideBar.Width - Dpi.Width1;
 | 
						|
                                        
 | 
						|
                                        bool paintSide = DoPaintSide(objTmp);
 | 
						|
                                        bool itemOnlySeparator = paintSide;
 | 
						|
                                        if (itemOnlySeparator && previousContainerItem)
 | 
						|
                                        {
 | 
						|
                                            paintSide = false;
 | 
						|
                                            itemOnlySeparator = false;
 | 
						|
                                        }
 | 
						|
                                        if (paintSide)
 | 
						|
                                        {
 | 
						|
                                            // Paint side bar
 | 
						|
                                            if (objTmp is IPersonalizedMenuItem && ((IPersonalizedMenuItem)objTmp).MenuVisibility == eMenuVisibility.VisibleIfRecentlyUsed && !((IPersonalizedMenuItem)objTmp).RecentlyUsed)
 | 
						|
                                            {
 | 
						|
                                                DisplayHelp.FillRectangle(g, sideBar, menuColors.SideUnused);
 | 
						|
                                            }
 | 
						|
                                            else
 | 
						|
                                            {
 | 
						|
                                                DisplayHelp.FillRectangle(g, sideBar, menuColors.Side);
 | 
						|
                                            }
 | 
						|
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                PaintMenuItemSide(pa, sideBar, menuColors);
 | 
						|
                                        }
 | 
						|
                                        
 | 
						|
                                        if (rightToLeft)
 | 
						|
                                        {
 | 
						|
                                            DisplayHelp.DrawLine(g, objTmp.LeftInternal + Dpi.Width1, objTmp.TopInternal - Dpi.Height2, objTmp.DisplayRectangle.Right - (itemOnlySeparator ? (iSideBarWidth + Dpi.Width8 + Dpi.Width7 + Dpi.Width1) : 0), objTmp.TopInternal - Dpi.Height2, menuColors.SideBorder.Start, Dpi.Width1);
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle))
 | 
						|
                                                DisplayHelp.DrawLine(g, objTmp.LeftInternal + Dpi.Width1, objTmp.TopInternal - Dpi.Height1, objTmp.DisplayRectangle.Right - (itemOnlySeparator ? (iSideBarWidth + Dpi.Width8 + Dpi.Width7 + Dpi.Width1) : 0), objTmp.TopInternal - Dpi.Height1, menuColors.SideBorderLight.Start, Dpi.Width1);
 | 
						|
                                        }
 | 
						|
                                        else
 | 
						|
                                        {
 | 
						|
                                            DisplayHelp.DrawLine(g, objTmp.LeftInternal + (itemOnlySeparator ? (iSideBarWidth + Dpi.Width8 + Dpi.Width7) : 0), objTmp.TopInternal - Dpi.Height2, objTmp.DisplayRectangle.Right - Dpi.Width1, objTmp.TopInternal - Dpi.Height2, pa.Colors.ItemSeparator, Dpi.Width1);
 | 
						|
                                            if (BarFunctions.IsOffice2007Style(objTmp.EffectiveStyle) && !pa.Colors.ItemSeparatorShade.IsEmpty)
 | 
						|
                                                DisplayHelp.DrawLine(g, objTmp.LeftInternal + (itemOnlySeparator ? (iSideBarWidth + Dpi.Width8 + Dpi.Width7) : 0), objTmp.TopInternal - Dpi.Height1, objTmp.DisplayRectangle.Right - Dpi.Width1, objTmp.TopInternal - Dpi.Height1, pa.Colors.ItemSeparatorShade, Dpi.Width1);
 | 
						|
                                        }
 | 
						|
									}
 | 
						|
								}
 | 
						|
							}
 | 
						|
                            g.SmoothingMode = sm;
 | 
						|
							bFirst=false;
 | 
						|
							objTmp.Paint(pa);
 | 
						|
							objTmp.Displayed=true;
 | 
						|
                            previousContainerItem = objTmp.IsContainer;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
                PaintExpandButton(pa, menuColors);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        private void PaintMenuItemSide(ItemPaintArgs pa, Rectangle sideRect, InternalMenuColors menuColors)
 | 
						|
        {
 | 
						|
            if (pa.Owner is DotNetBarManager) // Do not paint side lines for DotNetBarManager owned items...
 | 
						|
                return;
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
            if (pa.RightToLeft)
 | 
						|
            {
 | 
						|
                Point p = new Point(sideRect.X, sideRect.Y);
 | 
						|
                DisplayHelp.DrawLine(g, p.X, p.Y, p.X, p.Y + sideRect.Height, menuColors.SideBorderLight.Start, 1);
 | 
						|
                
 | 
						|
                p.X++;
 | 
						|
 | 
						|
                DisplayHelp.DrawLine(g, p.X, p.Y, p.X, p.Y + sideRect.Height, menuColors.SideBorder.Start, 1);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                Point p = new Point(sideRect.Right - 2, sideRect.Y);
 | 
						|
 | 
						|
                DisplayHelp.DrawLine(g, p.X, p.Y, p.X, p.Y + sideRect.Height, menuColors.SideBorder.Start, 1);
 | 
						|
                
 | 
						|
                p.X++;
 | 
						|
 | 
						|
                DisplayHelp.DrawLine(g, p.X, p.Y, p.X, p.Y + sideRect.Height, menuColors.SideBorderLight.Start, 1);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		private void RefreshExpandButton()
 | 
						|
		{
 | 
						|
			Graphics g=this.CreateGraphics();
 | 
						|
            try
 | 
						|
            {
 | 
						|
                ItemPaintArgs pa;
 | 
						|
                if (m_ColorScheme == null)
 | 
						|
                    pa = new ItemPaintArgs(m_Owner as IOwner, this, g, new ColorScheme(g));
 | 
						|
                else
 | 
						|
                    pa = new ItemPaintArgs(m_Owner as IOwner, this, g, m_ColorScheme);
 | 
						|
 | 
						|
                PaintExpandButton(pa, GetMenuColors(pa));
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                g.Dispose();
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
        private bool IsGradientStyle
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ParentItem != null)
 | 
						|
                {
 | 
						|
                    return m_ParentItem.EffectiveStyle == eDotNetBarStyle.OfficeXP || m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2003 || m_ParentItem.EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle);
 | 
						|
                }
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		private void PaintExpandButton(ItemPaintArgs pa, InternalMenuColors menuColors)
 | 
						|
		{
 | 
						|
			if(!m_ExpandButton.ShowExpandButton || m_ParentItem==null)
 | 
						|
				return;
 | 
						|
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
 | 
						|
			ImageItem objParentImageItem=m_ParentItem as ImageItem;
 | 
						|
			int iSideWidth=DEFAULT_SIDE_WIDTH;
 | 
						|
			if(objParentImageItem!=null && objParentImageItem.SubItemsImageSize.Width>iSideWidth)
 | 
						|
				iSideWidth=objParentImageItem.SubItemsImageSize.Width;
 | 
						|
			iSideWidth+=7;
 | 
						|
 | 
						|
			objParentImageItem=null;
 | 
						|
 | 
						|
            if (IsGradientStyle)
 | 
						|
			{
 | 
						|
				if(m_ExpandButton.MouseOver)
 | 
						|
				{
 | 
						|
                    Rectangle r = m_ExpandButton.Rect;
 | 
						|
                    DisplayHelp.FillRectangle(g, r, pa.Colors.MenuBackground, Color.Empty);
 | 
						|
					r.Inflate(-1,0);
 | 
						|
					if(Control.MouseButtons==MouseButtons.Left)
 | 
						|
					{
 | 
						|
                        DisplayHelp.FillRectangle(g, r, pa.Colors.ItemPressedBackground, pa.Colors.ItemPressedBackground2, pa.Colors.ItemPressedBackgroundGradientAngle);
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
                        DisplayHelp.FillRectangle(g, r, pa.Colors.ItemHotBackground, pa.Colors.ItemHotBackground2, pa.Colors.ItemHotBackgroundGradientAngle);
 | 
						|
					}
 | 
						|
					NativeFunctions.DrawRectangle(g,SystemPens.Highlight,r);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
                    Rectangle r=new Rectangle(m_ExpandButton.Rect.Left+iSideWidth,m_ExpandButton.Rect.Top,m_ExpandButton.Rect.Width-iSideWidth,m_ExpandButton.Rect.Height);
 | 
						|
                    DisplayHelp.FillRectangle(g, r, pa.Colors.MenuBackground, Color.Empty);
 | 
						|
 | 
						|
                    Rectangle sideRect = new Rectangle(m_ExpandButton.Rect.Left, m_ExpandButton.Rect.Top, iSideWidth, m_ExpandButton.Rect.Height);
 | 
						|
                    DisplayHelp.FillRectangle(g, sideRect, pa.Colors.MenuSide, pa.Colors.MenuSide2, pa.Colors.MenuSideGradientAngle);
 | 
						|
                    if (m_ParentItem != null && BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle))
 | 
						|
                        PaintMenuItemSide(pa, sideRect, menuColors);
 | 
						|
				}
 | 
						|
 | 
						|
                if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2003 || m_ParentItem.EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle))
 | 
						|
				{
 | 
						|
					System.Drawing.Drawing2D.GraphicsPath path=new System.Drawing.Drawing2D.GraphicsPath();
 | 
						|
					Point pTopLeft=new Point(m_ExpandButton.Rect.X+(m_ExpandButton.Rect.Width-16)/2,m_ExpandButton.Rect.Y+(m_ExpandButton.Rect.Height-16)/2);
 | 
						|
					path.AddEllipse(pTopLeft.X,pTopLeft.Y,16,16);
 | 
						|
					System.Drawing.Drawing2D.PathGradientBrush gb=new System.Drawing.Drawing2D.PathGradientBrush(path);
 | 
						|
					gb.CenterColor=pa.Colors.MenuSide;
 | 
						|
					gb.SurroundColors=new Color[]{pa.Colors.MenuSide2};
 | 
						|
					gb.CenterPoint=new Point(pTopLeft.X+3,pTopLeft.Y+3);
 | 
						|
					System.Drawing.Drawing2D.SmoothingMode sm=g.SmoothingMode;
 | 
						|
					g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 | 
						|
					g.FillEllipse(gb,pTopLeft.X,pTopLeft.Y,16,16);
 | 
						|
					g.SmoothingMode=sm;
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
            else if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
			{
 | 
						|
				if(m_ExpandButton.MouseOver)
 | 
						|
				{	
 | 
						|
					//g.FillRectangle(new SolidBrush(g.GetNearestColor(ControlPaint.Light(SystemColors.Control))),m_ExpandButton.Rect);
 | 
						|
					g.FillRectangle(new SolidBrush(ColorFunctions.RecentlyUsedOfficeBackColor()),m_ExpandButton.Rect);
 | 
						|
					if(Control.MouseButtons==MouseButtons.Left)
 | 
						|
						ControlPaint.DrawBorder(g,m_ExpandButton.Rect,SystemColors.Control,ButtonBorderStyle.Inset);
 | 
						|
					else
 | 
						|
						ControlPaint.DrawBorder3D(g,m_ExpandButton.Rect,Border3DStyle.RaisedInner,(Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom));
 | 
						|
					//NativeFunctions.DrawRectangle(g,SystemPens.Highlight,m_ExpandButton.Rect);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					g.FillRectangle(SystemBrushes.Control,m_ExpandButton.Rect);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			Point[] p=new Point[3];
 | 
						|
			p[0].X=m_ExpandButton.Rect.Left+(m_ExpandButton.Rect.Width-4)/2;
 | 
						|
            if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2003 || m_ParentItem.EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle))
 | 
						|
				p[0].Y=m_ExpandButton.Rect.Top+(m_ExpandButton.Rect.Height-7)/2;
 | 
						|
			else
 | 
						|
				p[0].Y=m_ExpandButton.Rect.Top+3;
 | 
						|
			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);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintSideBar(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
			if(m_SideBarImage.Picture==null)
 | 
						|
				return;
 | 
						|
			
 | 
						|
			if(!m_SideBarImage.GradientColor1.IsEmpty && !m_SideBarImage.GradientColor2.IsEmpty)
 | 
						|
			{
 | 
						|
				PointF[] p=new PointF[2];
 | 
						|
				p[0].X=m_SideRect.Left;
 | 
						|
				p[0].Y=m_SideRect.Top;
 | 
						|
                p[1].X=m_SideRect.Left;
 | 
						|
				p[1].Y=m_SideRect.Bottom;
 | 
						|
 | 
						|
				System.Drawing.Drawing2D.LinearGradientBrush lgb=BarFunctions.CreateLinearGradientBrush(m_SideRect,m_SideBarImage.GradientColor1,m_SideBarImage.GradientColor2,m_SideBarImage.GradientAngle);
 | 
						|
                g.FillRectangle(lgb,m_SideRect);
 | 
						|
			}
 | 
						|
			else if(!m_SideBarImage.BackColor.Equals(Color.Empty))
 | 
						|
				g.FillRectangle(new SolidBrush(m_SideBarImage.BackColor),m_SideRect);
 | 
						|
			
 | 
						|
			if(m_SideBarImage.StretchPicture)
 | 
						|
			{
 | 
						|
				g.DrawImage(m_SideBarImage.Picture,m_SideRect);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(m_SideBarImage.Alignment==eAlignment.Top)
 | 
						|
					g.DrawImage(m_SideBarImage.Picture,m_SideRect.X,m_SideRect.Top,m_SideRect.Width,m_SideBarImage.Picture.Height);
 | 
						|
				else if(m_SideBarImage.Alignment==eAlignment.Bottom)
 | 
						|
					g.DrawImage(m_SideBarImage.Picture,m_SideRect.Left,m_SideRect.Bottom-m_SideBarImage.Picture.Height,m_SideBarImage.Picture.Width,m_SideBarImage.Picture.Height);
 | 
						|
				else
 | 
						|
					g.DrawImage(m_SideBarImage.Picture,m_SideRect.Left,m_SideRect.Top+(m_SideRect.Height-m_SideBarImage.Picture.Height)/2,m_SideBarImage.Picture.Width,m_SideBarImage.Picture.Height);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public BaseItem ParentItem
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ParentItem;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				RestoreContainer();
 | 
						|
				m_ParentItem=value;
 | 
						|
				if(m_ParentItem==null || m_ParentItem.SubItems.Count==0)
 | 
						|
					return;
 | 
						|
 | 
						|
                if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2003 || m_ParentItem.EffectiveStyle == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle))
 | 
						|
					EXPAND_BUTTON_HEIGHT=OFFICE2003_EXPAND_BUTTON_HEIGHT;
 | 
						|
				else
 | 
						|
					EXPAND_BUTTON_HEIGHT=DEFAULT_EXPAND_BUTTON_HEIGHT;
 | 
						|
 | 
						|
				// Force ContainerChanged event so the items like MdiWindowListItem do not modify collection when we loop through it
 | 
						|
				if(m_ParentItem.SubItems.Count>0)
 | 
						|
					m_ParentItem.SubItems[0].ContainerControl=this;
 | 
						|
				for(int i=1;i<m_ParentItem.SubItems.Count;i++)
 | 
						|
					m_ParentItem.SubItems[i].ContainerControl=this;
 | 
						|
				
 | 
						|
				// Get the parent's screen position
 | 
						|
				System.Windows.Forms.Control objCtrl=m_ParentItem.ContainerControl as System.Windows.Forms.Control;
 | 
						|
                if (objCtrl != null)
 | 
						|
                    objCtrl.MouseWheel += ParentControlMouseWheel;
 | 
						|
				if(m_ParentItem.Displayed)
 | 
						|
				{
 | 
						|
					if(BaseItem.IsHandleValid(objCtrl))
 | 
						|
					{
 | 
						|
						m_ParentItemScreenPos=objCtrl.PointToScreen(new Point(m_ParentItem.LeftInternal,m_ParentItem.TopInternal));
 | 
						|
						objCtrl=null;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if(objCtrl is ItemControl)
 | 
						|
					m_AntiAlias=((ItemControl)objCtrl).AntiAlias;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        void ParentControlMouseWheel(object sender, MouseEventArgs e)
 | 
						|
        {
 | 
						|
            if (m_Scroll)
 | 
						|
            {
 | 
						|
                if (e.Delta > 0)
 | 
						|
                {
 | 
						|
                    if (m_TopScroll)
 | 
						|
                        ScrollItemsUp();
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if (m_BottomScroll)
 | 
						|
                        ScrollItemsDown();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		private void SetupRegion()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null)
 | 
						|
			{
 | 
						|
				Rectangle r=new Rectangle(0,0,this.Width,this.Height);
 | 
						|
				System.Drawing.Region rgn=new System.Drawing.Region(r);
 | 
						|
				r.X=this.Width-2;
 | 
						|
				r.Y=0;
 | 
						|
				r.Width=2;
 | 
						|
				r.Height=2;
 | 
						|
				rgn.Xor(r);
 | 
						|
				//rgn.Exclude(r);
 | 
						|
				r.X=0;
 | 
						|
				r.Y=this.Height-2;
 | 
						|
				r.Width=2;
 | 
						|
				r.Height=2;
 | 
						|
				rgn.Xor(r);
 | 
						|
				this.Region=rgn;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        public void RecalcLayout()
 | 
						|
        {
 | 
						|
            this.RecalcSize();
 | 
						|
            this.Invalidate(true);
 | 
						|
        }
 | 
						|
 | 
						|
		public void RecalcSize()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null)
 | 
						|
			{
 | 
						|
                m_ParentItem.IsRightToLeft = (this.RightToLeft == RightToLeft.Yes);
 | 
						|
                if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
					RecalcSizeOffice();
 | 
						|
				else
 | 
						|
					RecalcSizeDotNet();
 | 
						|
				if(this.Visible && m_PopupMenu && this.Parent!=null && this.Parent is PopupContainer)
 | 
						|
				{
 | 
						|
					ScreenInformation objScreen=BarFunctions.ScreenFromControl(this.Parent);
 | 
						|
					if(objScreen!=null)
 | 
						|
					{
 | 
						|
                        Rectangle screenArea = objScreen.WorkingArea;
 | 
						|
                        if (UseWholeScreenForSizeChecking)
 | 
						|
                            screenArea = objScreen.Bounds;
 | 
						|
						if(this.Parent.Location.Y+this.Size.Height>screenArea.Bottom)
 | 
						|
						{
 | 
						|
							// Reduce the size
 | 
						|
							m_ClientRect.Height=m_ClientRect.Height-(this.Parent.Location.Y+this.Size.Height-screenArea.Bottom);
 | 
						|
                            this.Height = this.Height - (this.Parent.Location.Y + this.Size.Height - screenArea.Bottom);
 | 
						|
                            if (!m_Scroll)
 | 
						|
                            {
 | 
						|
                                m_Scroll = true;
 | 
						|
                                m_ScrollTopPosition = 0;
 | 
						|
                            }
 | 
						|
							RepositionItems();
 | 
						|
						}
 | 
						|
						else
 | 
						|
							m_Scroll=false;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
            if (this.Visible)
 | 
						|
            {
 | 
						|
                if (m_ParentItem != null && BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle) && IsRoundRegion)
 | 
						|
                {
 | 
						|
                    if(this.Parent!=null)
 | 
						|
                        SetRoundRegion(this.Parent);
 | 
						|
                    SetRoundRegion(this);
 | 
						|
                }
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnResize(EventArgs e)
 | 
						|
		{
 | 
						|
			if(this.Parent is PopupContainer)
 | 
						|
			{
 | 
						|
				this.Parent.Size=this.Size;
 | 
						|
			}
 | 
						|
			base.OnResize(e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void RecalcSizeDotNet()
 | 
						|
		{
 | 
						|
			m_ExpandButton.ShowExpandButton=false;
 | 
						|
 | 
						|
			if(m_ParentItem==null || m_ParentItem.SubItems.Count==0)
 | 
						|
			{
 | 
						|
				this.Height=24;
 | 
						|
				this.Width=m_ParentItem.WidthInternal+16;
 | 
						|
				//SetupRegion(); Very bad from AnimateWindow on W2K when control is not shown
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			int iMaxWidth=0, iTop=ClientMarginTop, iLeft=ClientMarginLeft;
 | 
						|
			int iMaxHeight=0;
 | 
						|
			bool bAdjustHeight=false;
 | 
						|
			bool rightToLeft = (this.RightToLeft == RightToLeft.Yes);
 | 
						|
			// Take in account the side bar picture
 | 
						|
			if(m_SideBarImage.Picture!=null)
 | 
						|
				iLeft+=m_SideBarImage.Picture.Width;
 | 
						|
 | 
						|
			foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
			{
 | 
						|
				objItem.RecalcSize();
 | 
						|
				if(objItem.Visible || m_IsCustomizeMenu)
 | 
						|
				{
 | 
						|
					if(!m_ParentItem.DesignMode && m_PersonalizedMenus!=ePersonalizedMenus.Disabled && !m_ExpandButton.PersonalizedAllVisible && !m_IsCustomizeMenu)
 | 
						|
					{
 | 
						|
						IPersonalizedMenuItem ipm=objItem as IPersonalizedMenuItem;
 | 
						|
						if(ipm!=null && ipm.MenuVisibility==eMenuVisibility.VisibleIfRecentlyUsed && !ipm.RecentlyUsed)
 | 
						|
						{
 | 
						|
                            objItem.Displayed=false;
 | 
						|
							m_ExpandButton.ShowExpandButton=true;
 | 
						|
							continue;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					if(objItem.HeightInternal!=iMaxHeight && objItem is ImageItem)
 | 
						|
					{
 | 
						|
						if(iMaxHeight>0)
 | 
						|
							bAdjustHeight=true;
 | 
						|
						if(objItem.HeightInternal>iMaxHeight)
 | 
						|
							iMaxHeight=objItem.HeightInternal;
 | 
						|
					}
 | 
						|
					if(objItem.BeginGroup && iTop>ClientMarginTop)
 | 
						|
						iTop+=Dpi.Height(GROUP_SPACINGDOTNET);
 | 
						|
					objItem.TopInternal=iTop;
 | 
						|
					objItem.LeftInternal=iLeft;
 | 
						|
					iTop+=objItem.HeightInternal;
 | 
						|
					if(objItem.WidthInternal>iMaxWidth)
 | 
						|
						iMaxWidth=objItem.WidthInternal;
 | 
						|
					objItem.Displayed=true;
 | 
						|
				}
 | 
						|
				else
 | 
						|
					objItem.Displayed=false;
 | 
						|
			}
 | 
						|
 | 
						|
			if(iMaxWidth==0)
 | 
						|
				iMaxWidth=120;
 | 
						|
 | 
						|
			if(bAdjustHeight)
 | 
						|
			{
 | 
						|
				iTop=ClientMarginTop;
 | 
						|
				foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
				{
 | 
						|
					objItem.WidthInternal=iMaxWidth;
 | 
						|
					
 | 
						|
					if(objItem.Displayed)
 | 
						|
					{
 | 
						|
						if(objItem.BeginGroup && iTop>ClientMarginTop)
 | 
						|
							iTop+=Dpi.Height(GROUP_SPACINGDOTNET);
 | 
						|
						objItem.TopInternal=iTop;
 | 
						|
						iTop+=objItem.HeightInternal;
 | 
						|
					}
 | 
						|
                    //if (objItem.IsContainer && rightToLeft)
 | 
						|
                    //    objItem.RecalcSize();
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				// Set each item width to max width
 | 
						|
                foreach (BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
                {
 | 
						|
                    objItem.WidthInternal = iMaxWidth;
 | 
						|
                    //if (objItem.IsContainer && rightToLeft)
 | 
						|
                    //    objItem.RecalcSize();
 | 
						|
                }
 | 
						|
			}
 | 
						|
			
 | 
						|
			if(m_ExpandButton.ShowExpandButton)
 | 
						|
			{
 | 
						|
				m_ExpandButton.Rect=new Rectangle(iLeft,iTop,iMaxWidth,EXPAND_BUTTON_HEIGHT);
 | 
						|
				iTop+=EXPAND_BUTTON_HEIGHT;
 | 
						|
			}
 | 
						|
 | 
						|
			m_ClientRect=new Rectangle(iLeft,ClientMarginTop,iMaxWidth,iTop-ClientMarginTop);
 | 
						|
			if(m_SideBarImage.Picture!=null)
 | 
						|
				m_SideRect=new Rectangle(iLeft-m_SideBarImage.Picture.Width,ClientMarginTop,m_SideBarImage.Picture.Width,iTop-ClientMarginTop);
 | 
						|
			this.Size=new Size(iLeft+iMaxWidth+ClientMarginRight,iTop+ClientMarginBottom);
 | 
						|
			if(this.Height==92)
 | 
						|
				this.Height=92;
 | 
						|
			//SetupRegion(); Very bad for AnimateWindow on W2K when control is not shown
 | 
						|
		}
 | 
						|
 | 
						|
		private void RecalcSizeOffice()
 | 
						|
		{
 | 
						|
			m_ExpandButton.ShowExpandButton=false;
 | 
						|
 | 
						|
			if(m_ParentItem==null || m_ParentItem.SubItems.Count==0)
 | 
						|
			{
 | 
						|
				this.Height=24;
 | 
						|
				this.Width=m_ParentItem.WidthInternal+16;
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			int iMaxWidth=0, iTop=ClientMarginTop, iLeft=ClientMarginLeft;
 | 
						|
			int iMaxHeight=0;
 | 
						|
			bool bAdjustHeight=false;
 | 
						|
			
 | 
						|
			// Take in account the side bar picture
 | 
						|
			if(m_SideBarImage.Picture!=null)
 | 
						|
				iLeft+=m_SideBarImage.Picture.Width;
 | 
						|
 | 
						|
			foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
			{
 | 
						|
				objItem.RecalcSize();
 | 
						|
				if(objItem.Visible || m_IsCustomizeMenu)
 | 
						|
				{
 | 
						|
					if(!m_ParentItem.DesignMode && m_PersonalizedMenus!=ePersonalizedMenus.Disabled && !m_ExpandButton.PersonalizedAllVisible && !m_IsCustomizeMenu)
 | 
						|
					{
 | 
						|
						IPersonalizedMenuItem ipm=objItem as IPersonalizedMenuItem;
 | 
						|
						if(ipm!=null && ipm.MenuVisibility==eMenuVisibility.VisibleIfRecentlyUsed && !ipm.RecentlyUsed)
 | 
						|
						{
 | 
						|
							objItem.Displayed=false;
 | 
						|
							m_ExpandButton.ShowExpandButton=true;
 | 
						|
							continue;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					if(objItem.HeightInternal!=iMaxHeight && objItem is ImageItem)
 | 
						|
					{
 | 
						|
						if(iMaxHeight>0)
 | 
						|
							bAdjustHeight=true;
 | 
						|
						if(objItem.HeightInternal>iMaxHeight)
 | 
						|
							iMaxHeight=objItem.HeightInternal;
 | 
						|
					}
 | 
						|
					if(objItem.BeginGroup && iTop>ClientMarginTop)
 | 
						|
						iTop+=GROUP_SPACINGOFFICE;
 | 
						|
					objItem.TopInternal=iTop;
 | 
						|
					objItem.LeftInternal=iLeft;
 | 
						|
					iTop+=objItem.HeightInternal;
 | 
						|
					if(objItem.WidthInternal>iMaxWidth)
 | 
						|
						iMaxWidth=objItem.WidthInternal;
 | 
						|
					objItem.Displayed=true;
 | 
						|
				}
 | 
						|
				else
 | 
						|
					objItem.Displayed=false;
 | 
						|
			}
 | 
						|
 | 
						|
			if(iMaxWidth==0)
 | 
						|
				iMaxWidth=120;
 | 
						|
 | 
						|
			if(bAdjustHeight)
 | 
						|
			{
 | 
						|
				iTop=3;
 | 
						|
				foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
				{
 | 
						|
                    //if (objItem is ImageItem)
 | 
						|
                    //    objItem.HeightInternal = iMaxHeight;
 | 
						|
					objItem.WidthInternal=iMaxWidth;
 | 
						|
 | 
						|
					if(objItem.Displayed)
 | 
						|
					{
 | 
						|
						if(objItem.BeginGroup && iTop>ClientMarginTop)
 | 
						|
							iTop+=GROUP_SPACINGOFFICE;
 | 
						|
						objItem.TopInternal=iTop;
 | 
						|
						//iTop+=iMaxHeight;
 | 
						|
						iTop+=objItem.HeightInternal;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				// Set each item width to max width
 | 
						|
				foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
					objItem.WidthInternal=iMaxWidth;
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_ExpandButton.ShowExpandButton)
 | 
						|
			{
 | 
						|
				m_ExpandButton.Rect=new Rectangle(iLeft,iTop,iMaxWidth,EXPAND_BUTTON_HEIGHT);
 | 
						|
				iTop+=EXPAND_BUTTON_HEIGHT;
 | 
						|
			}
 | 
						|
			
 | 
						|
			m_ClientRect=new Rectangle(iLeft,ClientMarginTop,iMaxWidth,iTop-ClientMarginTop);
 | 
						|
 | 
						|
			if(m_SideBarImage.Picture!=null)
 | 
						|
				m_SideRect=new Rectangle(iLeft-m_SideBarImage.Picture.Width,ClientMarginTop,m_SideBarImage.Picture.Width,iTop);
 | 
						|
			this.Size=new Size(iLeft+iMaxWidth+ClientMarginRight,iTop+ClientMarginBottom);
 | 
						|
		}
 | 
						|
 | 
						|
		private void RestoreContainer()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.SubItems.Count!=0)
 | 
						|
			{
 | 
						|
				foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
				{
 | 
						|
					objItem.ContainerControl=null;
 | 
						|
				}
 | 
						|
				int iLastIndex=0;
 | 
						|
				while(m_ParentItem!=null && iLastIndex<m_ParentItem.SubItems.Count)
 | 
						|
				{
 | 
						|
					m_ParentItem.SubItems[iLastIndex].Expanded=false;
 | 
						|
					iLastIndex++;
 | 
						|
				}
 | 
						|
				iLastIndex=0;
 | 
						|
				while(m_ParentItem!=null && iLastIndex<m_ParentItem.SubItems.Count)
 | 
						|
				{
 | 
						|
					m_ParentItem.SubItems[iLastIndex].Displayed=false;
 | 
						|
					iLastIndex++;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private BaseItem ExpandedItem()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.SubItems.Count>0)
 | 
						|
			{
 | 
						|
				foreach(BaseItem objSub in m_ParentItem.SubItems)
 | 
						|
				{
 | 
						|
                    if (objSub.Expanded && objSub is PopupItem)
 | 
						|
						return objSub;
 | 
						|
                    if (objSub.IsContainer)
 | 
						|
                    {
 | 
						|
                        BaseItem exp = objSub.ExpandedItem();
 | 
						|
                        if (exp is PopupItem)
 | 
						|
                            return exp;
 | 
						|
                    }
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
 | 
						|
		protected internal BaseItem FocusedItem()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.SubItems.Count>0)
 | 
						|
			{
 | 
						|
                foreach (BaseItem objSub in m_ParentItem.SubItems)
 | 
						|
                {
 | 
						|
                    if (objSub.Focused)
 | 
						|
                    {
 | 
						|
                        return objSub;
 | 
						|
                    }
 | 
						|
                    else if (objSub.IsContainer)
 | 
						|
                    {
 | 
						|
                        BaseItem focused = objSub.FocusedItem();
 | 
						|
                        if (focused != null)
 | 
						|
                            return focused;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
			}
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
 | 
						|
		internal void SetFocusItem(BaseItem objFocus)
 | 
						|
		{
 | 
						|
			if(m_ParentItem==null || m_ParentItem.Parent!=null)
 | 
						|
				return;
 | 
						|
			BaseItem objItem=FocusedItem();
 | 
						|
            if(objItem==objFocus)
 | 
						|
				return;
 | 
						|
			
 | 
						|
			if(objItem!=null)
 | 
						|
				objItem.OnLostFocus();
 | 
						|
 | 
						|
			if(objFocus!=null)
 | 
						|
				objFocus.OnGotFocus();
 | 
						|
		}
 | 
						|
 | 
						|
		internal void InternalMouseMove(MouseEventArgs e)
 | 
						|
		{
 | 
						|
			this.OnMouseMove(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnMouseMove(MouseEventArgs e)
 | 
						|
		{
 | 
						|
			base.OnMouseMove(e);
 | 
						|
 | 
						|
			if(m_IgnoreDuplicateMouseMove)
 | 
						|
			{
 | 
						|
				if(m_LastMouseMoveEvent==null)
 | 
						|
				{
 | 
						|
					m_LastMouseMoveEvent=new System.Windows.Forms.MouseEventArgs(e.Button,e.Clicks,e.X,e.Y,e.Delta);
 | 
						|
					return;
 | 
						|
				}
 | 
						|
				if(m_LastMouseMoveEvent.X!=e.X || m_LastMouseMoveEvent.Y!=e.Y ||
 | 
						|
					m_LastMouseMoveEvent.Button!=e.Button)
 | 
						|
				{
 | 
						|
					m_IgnoreDuplicateMouseMove=false;
 | 
						|
					m_LastMouseMoveEvent=null;
 | 
						|
				}
 | 
						|
				else
 | 
						|
					return;
 | 
						|
			}
 | 
						|
 | 
						|
			// Don't forward event if some other item has focus. This is the case for example for
 | 
						|
			// Text box items or any other item that can receive focus...
 | 
						|
			//if(!m_ParentItem.DesignMode && m_Owner!=null && m_Owner.GetFocusItem()!=null && m_ParentItem.ContainerControl!=null || this.FocusedItem()!=null && !m_ParentItem.DesignMode)
 | 
						|
			//	return;
 | 
						|
 | 
						|
            if (m_ParentItem != null && m_ParentItem.DesignMode && e.Button == System.Windows.Forms.MouseButtons.Left && (Math.Abs(e.X - m_MouseDownPt.X) >= 2 || Math.Abs(e.Y - m_MouseDownPt.Y) >= 2 || m_DragDropInProgress))
 | 
						|
			{
 | 
						|
				BaseItem objFocus=this.FocusedItem();
 | 
						|
				IOwner owner=m_Owner as IOwner;
 | 
						|
                ISite site = this.GetSite();
 | 
						|
                if (site != null && objFocus!=null)
 | 
						|
                {
 | 
						|
                    DesignTimeMouseMove(e);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if (objFocus != null && owner != null && objFocus.CanCustomize)
 | 
						|
                        owner.StartItemDrag(objFocus);
 | 
						|
                }
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_ParentItem==null || m_ParentItem.SubItems.Count==0 || m_ParentItem.DesignMode)
 | 
						|
				return;
 | 
						|
 | 
						|
            //if (e.Button != MouseButtons.None && m_HotSubItem != null)
 | 
						|
            //{
 | 
						|
            //    m_HotSubItem.InternalMouseMove(e);
 | 
						|
            //    return;
 | 
						|
            //}
 | 
						|
 | 
						|
			BaseItem objNew=ItemAtLocation(e.X,e.Y);
 | 
						|
 | 
						|
			BaseItem objExpanded=ExpandedItem();
 | 
						|
 | 
						|
			if(objExpanded!=null && objExpanded is PopupItem)
 | 
						|
			{
 | 
						|
				Control ctrlExpanded=((PopupItem)objExpanded).PopupControl;
 | 
						|
				if(ctrlExpanded!=null)
 | 
						|
				{
 | 
						|
					Point pClient=ctrlExpanded.PointToClient(this.PointToScreen(new Point(e.X,e.Y)));
 | 
						|
					if(ctrlExpanded.ClientRectangle.Contains(pClient))
 | 
						|
					{
 | 
						|
						if(ctrlExpanded is MenuPanel)
 | 
						|
						{
 | 
						|
							((MenuPanel)ctrlExpanded).InternalMouseMove(new MouseEventArgs(e.Button,e.Clicks,pClient.X,pClient.Y,e.Delta));
 | 
						|
							return;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
            if (objExpanded != null && objNew != objExpanded)
 | 
						|
            {
 | 
						|
                if (objExpanded is PopupItem && ((PopupItem)objExpanded).PopupType != ePopupType.Menu ||
 | 
						|
                    objExpanded != null && m_ParentItem != null && m_ParentItem.SubItems.Count > 0 && m_ParentItem.SubItems[0] is ItemContainer && !(m_ParentItem is ApplicationButton || m_ParentItem is DevComponents.DotNetBar.Metro.MetroAppButton))
 | 
						|
                {
 | 
						|
                    objExpanded.Expanded = false;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    CollapseItemDelayed(objExpanded);
 | 
						|
            }
 | 
						|
 | 
						|
			if(m_ExpandButton.ShowExpandButton)
 | 
						|
			{
 | 
						|
				if(objNew==null && m_ExpandButton.Rect.Contains(e.X,e.Y) && !m_ExpandButton.MouseOver)
 | 
						|
				{
 | 
						|
					m_ExpandButton.MouseOver=true;
 | 
						|
					RefreshExpandButton();
 | 
						|
				}
 | 
						|
				else if(objNew!=null && m_ExpandButton.MouseOver)
 | 
						|
				{
 | 
						|
					m_ExpandButton.MouseOver=false;
 | 
						|
					RefreshExpandButton();
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
            if (objNew == null && m_HotSubItem is GalleryContainer)
 | 
						|
            {
 | 
						|
                GalleryContainer gc = m_HotSubItem as GalleryContainer;
 | 
						|
                if (!gc.SystemGallery && gc.PopupUsesStandardScrollbars && gc.ScrollBarControl != null && gc.ScrollBarControl.IsMouseDown && e.Button == MouseButtons.Left)
 | 
						|
                    objNew = m_HotSubItem;
 | 
						|
            }
 | 
						|
 | 
						|
			if(objNew!=m_HotSubItem)
 | 
						|
			{
 | 
						|
				if(m_HotSubItem!=null)
 | 
						|
				{
 | 
						|
					// Don't leave the hot item if it is exanded and mouse is inside the side bar picture, if we have side bar picture
 | 
						|
					//if(m_HotSubItem.Expanded && !m_SideRect.IsEmpty && m_SideRect.Contains(e.X,e.Y))
 | 
						|
					//	return;
 | 
						|
					m_HotSubItem.InternalMouseLeave();
 | 
						|
					// We need to reset hover thing since it is fired only first time mouse hovers inside the window and we need it for each of our items
 | 
						|
					if(m_Hover)
 | 
						|
					{
 | 
						|
						ResetHover();
 | 
						|
						m_Hover=false;
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
                if (objNew != null)
 | 
						|
                {
 | 
						|
                    objNew.InternalMouseEnter();
 | 
						|
                    objNew.InternalMouseMove(e);
 | 
						|
                    m_HotSubItem = objNew;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    m_HotSubItem = null;
 | 
						|
                }
 | 
						|
			}
 | 
						|
			else if(m_HotSubItem!=null)
 | 
						|
			{
 | 
						|
				m_HotSubItem.InternalMouseMove(e);
 | 
						|
			}
 | 
						|
 | 
						|
            // Gallery scrollbar support
 | 
						|
            if (this.Capture && !this.DisplayRectangle.Contains(e.X, e.Y) && m_ParentItem!=null &&
 | 
						|
                m_ParentItem.SubItems.Count>0 && m_ParentItem.SubItems[0] is GalleryContainer)
 | 
						|
            {
 | 
						|
                if (m_ParentItem.SubItems[0].Visible && m_ParentItem.SubItems[0].Displayed)
 | 
						|
                    m_ParentItem.SubItems[0].InternalMouseMove(e);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region Design Time Drag & Drop
 | 
						|
        private bool m_DragDropInProgress = false;
 | 
						|
        private int m_InsertPosition=-1;
 | 
						|
        private bool m_InsertBefore=false;
 | 
						|
        private IDesignTimeProvider m_DesignTimeProvider=null;
 | 
						|
        private BaseItem m_DragItem = null;
 | 
						|
        private IDesignTimeProvider m_DragDropDesignTimeProvider = null;
 | 
						|
 | 
						|
        private ISite GetSite()
 | 
						|
        {
 | 
						|
            ISite site = null;
 | 
						|
            IOwner owner = this.Owner as IOwner;
 | 
						|
            Control c = null;
 | 
						|
            if (owner is Control)
 | 
						|
            {
 | 
						|
                c = owner as Control;
 | 
						|
            }
 | 
						|
            else if (m_ParentItem != null && m_ParentItem.ContainerControl is Control)
 | 
						|
            {
 | 
						|
                c = m_ParentItem.ContainerControl as Control;
 | 
						|
            }
 | 
						|
 | 
						|
            if (c != null)
 | 
						|
            {
 | 
						|
                while (site == null && c != null)
 | 
						|
                {
 | 
						|
                    if (c.Site != null && c.Site.DesignMode)
 | 
						|
                        site = c.Site;
 | 
						|
                    else
 | 
						|
                        c = c.Parent;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (site == null && m_ParentItem != null)
 | 
						|
            {
 | 
						|
                BaseItem item = m_ParentItem;
 | 
						|
                while (site == null && item != null)
 | 
						|
                {
 | 
						|
                    if (item.Site != null && item.Site.DesignMode)
 | 
						|
                        site = item.Site;
 | 
						|
                    else
 | 
						|
                        item = item.Parent;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return site;
 | 
						|
        }
 | 
						|
 | 
						|
        private void DesignTimeMouseMove(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            if (m_DragDropInProgress)
 | 
						|
            {
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    if (m_DesignTimeProvider != null)
 | 
						|
                    {
 | 
						|
                        m_DesignTimeProvider.DrawReversibleMarker(m_InsertPosition, m_InsertBefore);
 | 
						|
                        m_DesignTimeProvider = null;
 | 
						|
                    }
 | 
						|
                    InsertPosition pos = m_DragDropDesignTimeProvider.GetInsertPosition(Control.MousePosition, m_DragItem);
 | 
						|
                    
 | 
						|
                    if (pos != null)
 | 
						|
                    {
 | 
						|
                        if (pos.TargetProvider == null)
 | 
						|
                        {
 | 
						|
                            // Cursor is over drag item
 | 
						|
                            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.No;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            pos.TargetProvider.DrawReversibleMarker(pos.Position, pos.Before);
 | 
						|
                            m_InsertPosition = pos.Position;
 | 
						|
                            m_InsertBefore = pos.Before;
 | 
						|
                            m_DesignTimeProvider = pos.TargetProvider;
 | 
						|
                            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Hand;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.No;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                catch
 | 
						|
                {
 | 
						|
                    m_DesignTimeProvider = null;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                // Get top level design-time provider
 | 
						|
                BaseItem item = m_ParentItem;
 | 
						|
                while (item.Parent is IDesignTimeProvider)
 | 
						|
                    item = item.Parent;
 | 
						|
 | 
						|
                ISite site = GetSite();
 | 
						|
                if (site != null && item.ContainerControl!=null)
 | 
						|
                {
 | 
						|
                    IDesignerHost dh = site.GetService(typeof(IDesignerHost)) as IDesignerHost;
 | 
						|
                    if (dh != null)
 | 
						|
                    {
 | 
						|
                        Control c = item.ContainerControl as Control;
 | 
						|
                        if (c is RibbonStrip && c.Site == null && c.Parent is RibbonControl)
 | 
						|
                            c = c.Parent;
 | 
						|
                        IBarItemDesigner designer = dh.GetDesigner(c) as IBarItemDesigner;
 | 
						|
                        if (designer != null)
 | 
						|
                        {
 | 
						|
                            designer.StartExternalDrag(this.FocusedItem());
 | 
						|
                            return;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                
 | 
						|
                m_DragDropDesignTimeProvider = (IDesignTimeProvider)item;
 | 
						|
                m_DragItem = this.FocusedItem();
 | 
						|
                m_DragDropInProgress = true;
 | 
						|
                this.Capture = true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void DesignTimeMouseUp(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            ISite site = GetSite();
 | 
						|
            if (site == null)
 | 
						|
                return;
 | 
						|
            IComponentChangeService cc = site.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | 
						|
 | 
						|
            if (m_DesignTimeProvider != null)
 | 
						|
            {
 | 
						|
                m_DesignTimeProvider.DrawReversibleMarker(m_InsertPosition, m_InsertBefore);
 | 
						|
                BaseItem objParent = m_DragItem.Parent;
 | 
						|
                if (objParent != null)
 | 
						|
                {
 | 
						|
                    if (objParent == (BaseItem)m_DesignTimeProvider && m_InsertPosition > 0)
 | 
						|
                    {
 | 
						|
                        if (objParent.SubItems.IndexOf(m_DragItem) < m_InsertPosition)
 | 
						|
                            m_InsertPosition--;
 | 
						|
                    }
 | 
						|
                    if (cc != null)
 | 
						|
                        cc.OnComponentChanging(objParent, TypeDescriptor.GetProperties(objParent)["SubItems"]);
 | 
						|
                    
 | 
						|
                    objParent.SubItems.Remove(m_DragItem);
 | 
						|
                    
 | 
						|
                    if (cc != null)
 | 
						|
                        cc.OnComponentChanged(objParent, TypeDescriptor.GetProperties(objParent)["SubItems"], null, null);
 | 
						|
 | 
						|
                    Control ctrl = objParent.ContainerControl as Control;
 | 
						|
                    if (ctrl is Bar)
 | 
						|
                        ((Bar)ctrl).RecalcLayout();
 | 
						|
                    else if (ctrl is MenuPanel)
 | 
						|
                        ((MenuPanel)ctrl).RecalcSize();
 | 
						|
                }
 | 
						|
                
 | 
						|
                m_DesignTimeProvider.InsertItemAt(m_DragItem, m_InsertPosition, m_InsertBefore);
 | 
						|
                
 | 
						|
                m_DesignTimeProvider = null;
 | 
						|
                
 | 
						|
            }
 | 
						|
            m_DragDropDesignTimeProvider = null;
 | 
						|
            m_DragItem = null;
 | 
						|
            m_DragDropInProgress = false;
 | 
						|
            this.Capture = false;
 | 
						|
        }
 | 
						|
 | 
						|
        private void DesignTimeMouseDown(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            IOwner owner = this.Owner as IOwner;
 | 
						|
            BaseItem objNew = ItemAtLocation(e.X, e.Y);
 | 
						|
            
 | 
						|
            // If parent of the item is GalleryContainer ensure that mouse is not over gallery scroll buttons
 | 
						|
            if (objNew != null && objNew.Parent is GalleryContainer)
 | 
						|
            {
 | 
						|
                GalleryContainer gc = objNew.Parent as GalleryContainer;
 | 
						|
                if (gc.ScrollHitTest(e.X, e.Y))
 | 
						|
                    objNew = gc;
 | 
						|
            }
 | 
						|
 | 
						|
            // Ignore system items
 | 
						|
            if (objNew != null && objNew.SystemItem)
 | 
						|
                objNew = null;
 | 
						|
 | 
						|
            if (objNew == null)
 | 
						|
            {
 | 
						|
                if(e.Button == MouseButtons.Right)
 | 
						|
                {
 | 
						|
                    ISite site = GetSite();
 | 
						|
                    if (site != null)
 | 
						|
                    {
 | 
						|
                        ISelectionService selection = (ISelectionService)site.GetService(typeof(ISelectionService));
 | 
						|
                        if (selection.PrimarySelection == m_ParentItem)
 | 
						|
                        {
 | 
						|
                            // Show context menu for parent item...
 | 
						|
                            IMenuCommandService service1 = (IMenuCommandService)site.GetService(typeof(IMenuCommandService));
 | 
						|
                            if (service1 != null)
 | 
						|
                            {
 | 
						|
                                service1.ShowContextMenu(new CommandID(new Guid("{74D21312-2AEE-11d1-8BFB-00A0C90F26F7}"), 0x500)/*System.Windows.Forms.Design.MenuCommands.SelectionMenu*/, Control.MousePosition.X, Control.MousePosition.Y);
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            BaseItem objExpanded = ExpandedItem();
 | 
						|
            if (objExpanded != null && m_HotSubItem != objExpanded)
 | 
						|
                objExpanded.Expanded = false;
 | 
						|
 | 
						|
            if (owner != null)
 | 
						|
            {
 | 
						|
                owner.SetFocusItem(objNew);
 | 
						|
                ISite site = GetSite();
 | 
						|
                if (site != null)
 | 
						|
                {
 | 
						|
                    ISelectionService selection = (ISelectionService)site.GetService(typeof(ISelectionService));
 | 
						|
                    if (selection != null)
 | 
						|
                    {
 | 
						|
                        ArrayList arr = new ArrayList(1);
 | 
						|
                        arr.Add(objNew);
 | 
						|
#if FRAMEWORK20
 | 
						|
                        selection.SetSelectedComponents(arr, SelectionTypes.Primary);
 | 
						|
#else
 | 
						|
                            selection.SetSelectedComponents(arr,SelectionTypes.MouseDown);
 | 
						|
#endif
 | 
						|
                    }
 | 
						|
                    if (e.Button == MouseButtons.Right)
 | 
						|
                    {
 | 
						|
                        IMenuCommandService service1 = (IMenuCommandService)site.GetService(typeof(IMenuCommandService));
 | 
						|
                        if (service1 != null)
 | 
						|
                        {
 | 
						|
                            service1.ShowContextMenu(new CommandID(new Guid("{74D21312-2AEE-11d1-8BFB-00A0C90F26F7}"), 0x500)/*System.Windows.Forms.Design.MenuCommands.SelectionMenu*/, Control.MousePosition.X, Control.MousePosition.Y);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            owner = null;
 | 
						|
            if (objNew != null)
 | 
						|
                objNew.InternalMouseDown(e);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        internal void SelectFirstItem()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null)
 | 
						|
			{
 | 
						|
				BaseItem disp=null;
 | 
						|
				foreach(BaseItem item in m_ParentItem.SubItems)
 | 
						|
				{
 | 
						|
                    if (item.Displayed && item.GetEnabled())
 | 
						|
					{
 | 
						|
                        if (item is ItemContainer)
 | 
						|
                        {
 | 
						|
                            if (!((ItemContainer)item).SelectFirstItem())
 | 
						|
                                continue;
 | 
						|
                        }
 | 
						|
						disp=item;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if(disp!=null && m_HotSubItem!=disp)
 | 
						|
				{
 | 
						|
					if(m_HotSubItem!=null)
 | 
						|
					{
 | 
						|
						// Don't leave the hot item if it is exanded and mouse is inside the side bar picture, if we have side bar picture
 | 
						|
						//if(m_HotSubItem.Expanded && !m_SideRect.IsEmpty && m_SideRect.Contains(e.X,e.Y))
 | 
						|
						//	return;
 | 
						|
						m_HotSubItem.InternalMouseLeave();
 | 
						|
						// We need to reset hover thing since it is fired only first time mouse hovers inside the window and we need it for each of our items
 | 
						|
						if(m_Hover)
 | 
						|
						{
 | 
						|
							ResetHover();
 | 
						|
							m_Hover=false;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				
 | 
						|
					if(disp!=null)
 | 
						|
					{
 | 
						|
                        if (!(disp is ItemContainer))
 | 
						|
                        {
 | 
						|
                            disp.InternalMouseEnter();
 | 
						|
                            disp.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, disp.LeftInternal + 1, disp.TopInternal + 1, 0));
 | 
						|
                        }
 | 
						|
						m_HotSubItem=disp;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		private void CollapseItemDelayed(BaseItem item)
 | 
						|
		{
 | 
						|
			ResetHover();
 | 
						|
			
 | 
						|
			if(m_DelayedCollapseItem!=null && m_DelayedCollapseItem!=item)
 | 
						|
			{
 | 
						|
				m_DelayedCollapseItem.Expanded=false;
 | 
						|
			}
 | 
						|
 | 
						|
			if(!m_LastExpandedOnHover)
 | 
						|
			{
 | 
						|
				item.Expanded=false;
 | 
						|
				m_DelayedCollapseItem=null;
 | 
						|
				m_LastExpandedOnHover=true; // was false
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				m_DelayedCollapseItem=item;
 | 
						|
				m_DelayedCollapseItem.InternalMouseLeave();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		internal void InternalMouseHover()
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.DesignMode || m_ParentItem==null)
 | 
						|
				return;
 | 
						|
			
 | 
						|
			// Hover delayed collapse of last expanded item
 | 
						|
			if(m_DelayedCollapseItem!=null)
 | 
						|
			{
 | 
						|
				m_DelayedCollapseItem.Expanded=false;
 | 
						|
				m_DelayedCollapseItem=null;
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_HotSubItem!=null)
 | 
						|
			{
 | 
						|
				bool bWasExpanded=false;
 | 
						|
				bWasExpanded=m_HotSubItem.Expanded;
 | 
						|
				m_HotSubItem.InternalMouseHover();
 | 
						|
				m_Hover=true;
 | 
						|
				if(!bWasExpanded && m_HotSubItem!=null && m_HotSubItem.Expanded)
 | 
						|
					m_LastExpandedOnHover=true;
 | 
						|
				else
 | 
						|
					m_LastExpandedOnHover=true; // was false
 | 
						|
			}
 | 
						|
			else if(m_ExpandButton.ShowExpandButton && m_ExpandButton.MouseOver)
 | 
						|
			{
 | 
						|
				if(m_PersonalizedMenus!=ePersonalizedMenus.DisplayOnClick)
 | 
						|
				{
 | 
						|
					m_ExpandButton.PersonalizedAllVisible=true;
 | 
						|
					IOwnerMenuSupport ownersupport=m_Owner as IOwnerMenuSupport;
 | 
						|
					if(ownersupport!=null)
 | 
						|
						ownersupport.PersonalizedAllVisible=true;
 | 
						|
					RecalcSize();
 | 
						|
					ResetHover();
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else if(m_Scroll)
 | 
						|
			{
 | 
						|
				if(m_ScrollTimer==null)
 | 
						|
				{
 | 
						|
					CheckScrolling();
 | 
						|
					ResetHover();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnMouseHover(EventArgs e)
 | 
						|
		{
 | 
						|
			base.OnMouseHover(e);
 | 
						|
			InternalMouseHover();
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnMouseLeave(EventArgs e)
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.DesignMode || m_ParentItem==null)
 | 
						|
				return;
 | 
						|
			// If we had hot sub item pass the mouse leave message to it...
 | 
						|
			if(m_HotSubItem!=null) // && !m_HotSubItem.Expanded)
 | 
						|
			{
 | 
						|
				// Handle the case when child control of the item gets the mouse
 | 
						|
				Point mp=this.PointToClient(Control.MousePosition);
 | 
						|
                if (!m_HotSubItem.DisplayRectangle.Contains(mp))
 | 
						|
				{
 | 
						|
                    if (!(m_HotSubItem is PopupItem && m_HotSubItem.Expanded))
 | 
						|
                    {
 | 
						|
                        m_HotSubItem.InternalMouseLeave();
 | 
						|
                        m_HotSubItem = null;
 | 
						|
                    }
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else if(m_ExpandButton.ShowExpandButton && m_ExpandButton.MouseOver)
 | 
						|
			{
 | 
						|
				m_ExpandButton.MouseOver=false;
 | 
						|
				RefreshExpandButton();
 | 
						|
			}
 | 
						|
 | 
						|
            if (m_HotSubItem == null)
 | 
						|
            {
 | 
						|
                BaseItem exp = ExpandedItem();
 | 
						|
                if (exp != null && exp is PopupItem)
 | 
						|
                {
 | 
						|
                    m_HotSubItem = exp;
 | 
						|
                    m_HotSubItem.InternalMouseEnter();
 | 
						|
                    m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.DisplayRectangle.X+4, m_HotSubItem.DisplayRectangle.Y+4, 0));
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
			base.OnMouseLeave(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnMouseDown(MouseEventArgs e)
 | 
						|
		{
 | 
						|
			if(m_ParentItem==null)
 | 
						|
				return;
 | 
						|
            this.ShowKeyTips = false;
 | 
						|
 | 
						|
			IOwner owner=this.Owner as IOwner;
 | 
						|
			m_MouseDownPt=new System.Drawing.Point(e.X,e.Y);
 | 
						|
			if(m_ParentItem.DesignMode)
 | 
						|
			{
 | 
						|
                DesignTimeMouseDown(e);
 | 
						|
			}
 | 
						|
 | 
						|
			if(!this.DesignMode && owner!=null && owner.GetFocusItem()!=null)
 | 
						|
			{
 | 
						|
				BaseItem objNew=ItemAtLocation(e.X,e.Y);
 | 
						|
				if(objNew!=owner.GetFocusItem())
 | 
						|
					owner.GetFocusItem().ReleaseFocus();
 | 
						|
					
 | 
						|
			}
 | 
						|
 | 
						|
            if (e.Button == MouseButtons.Right && m_HotSubItem != null && !this.IsCustomizeMenu && owner is IRibbonCustomize && m_ParentItem!=null && m_ParentItem.Name!="syscustomizepopupmenu")
 | 
						|
                ((IRibbonCustomize)owner).ItemRightClick(m_HotSubItem);
 | 
						|
 | 
						|
			if(m_HotSubItem!=null)
 | 
						|
				m_HotSubItem.InternalMouseDown(e);
 | 
						|
			else if(m_ExpandButton.ShowExpandButton && m_ExpandButton.MouseOver)
 | 
						|
			{
 | 
						|
				RefreshExpandButton();
 | 
						|
			}
 | 
						|
 | 
						|
			base.OnMouseDown(e);
 | 
						|
		}
 | 
						|
 | 
						|
		internal void InternalMouseUp(MouseEventArgs e)
 | 
						|
		{
 | 
						|
			this.OnMouseUp(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnMouseUp(MouseEventArgs e)
 | 
						|
		{
 | 
						|
            if (m_DragDropInProgress)
 | 
						|
            {
 | 
						|
                DesignTimeMouseUp(e);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (m_HotSubItem != null)
 | 
						|
                {
 | 
						|
                    m_HotSubItem.InternalMouseUp(e);
 | 
						|
                }
 | 
						|
                else if (m_ExpandButton.ShowExpandButton && m_ExpandButton.MouseOver)
 | 
						|
                {
 | 
						|
                    if (m_PersonalizedMenus != ePersonalizedMenus.DisplayOnHover && m_ExpandButton.Rect.Contains(e.X, e.Y))
 | 
						|
                    {
 | 
						|
                        ExpandRecentlyUsed();
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                        RefreshExpandButton();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
			base.OnMouseUp(e);
 | 
						|
		}
 | 
						|
 | 
						|
		internal void ExpandRecentlyUsed()
 | 
						|
		{
 | 
						|
			if(m_PersonalizedMenus!=ePersonalizedMenus.DisplayOnHover)
 | 
						|
			{
 | 
						|
				m_ExpandButton.PersonalizedAllVisible=true;
 | 
						|
				IOwnerMenuSupport ownermenu=this.Owner as IOwnerMenuSupport;
 | 
						|
				if(ownermenu!=null)
 | 
						|
					ownermenu.PersonalizedAllVisible=true;
 | 
						|
				RecalcSize();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnClick(EventArgs e)
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.DesignMode || m_ParentItem==null)
 | 
						|
				return;
 | 
						|
 | 
						|
			if(m_HotSubItem!=null)
 | 
						|
			{
 | 
						|
				m_HotSubItem.InternalClick(Control.MouseButtons,Control.MousePosition);
 | 
						|
			}
 | 
						|
			else if(m_Scroll)
 | 
						|
			{
 | 
						|
				CheckScrolling();
 | 
						|
			}
 | 
						|
			base.OnClick(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnDoubleClick(EventArgs e)
 | 
						|
		{
 | 
						|
            ISite site = this.GetSite();
 | 
						|
			if(site!=null && site.DesignMode)
 | 
						|
			{
 | 
						|
				ISelectionService selection = (ISelectionService) site.GetService(typeof(ISelectionService));
 | 
						|
				if(selection!=null)
 | 
						|
				{
 | 
						|
					IDesignerHost host=(IDesignerHost) site.GetService(typeof(IDesignerHost));
 | 
						|
					if(host!=null)
 | 
						|
					{
 | 
						|
						IDesigner designer=host.GetDesigner(selection.PrimarySelection as IComponent);
 | 
						|
						if(designer!=null)
 | 
						|
						{
 | 
						|
							designer.DoDefaultAction();
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.DesignMode || m_ParentItem==null)
 | 
						|
				return;
 | 
						|
 | 
						|
			if(m_HotSubItem!=null)
 | 
						|
			{
 | 
						|
				m_HotSubItem.InternalDoubleClick(Control.MouseButtons,Control.MousePosition);
 | 
						|
			}
 | 
						|
			base.OnDoubleClick(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnKeyDown(KeyEventArgs e)
 | 
						|
		{
 | 
						|
			if(m_ParentItem==null || m_ParentItem.SubItems.Count==0)
 | 
						|
			{
 | 
						|
				base.OnKeyDown(e);
 | 
						|
				return;
 | 
						|
			}
 | 
						|
			this.ExKeyDown(e);
 | 
						|
			base.OnKeyDown(e);
 | 
						|
		}
 | 
						|
 | 
						|
        private bool CanGetMouseFocus(BaseItem item)
 | 
						|
        {
 | 
						|
            if (item is LabelItem)
 | 
						|
                return false;
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
		internal void ExKeyDown(KeyEventArgs e)
 | 
						|
		{
 | 
						|
			if(m_ParentItem==null || m_ParentItem.SubItems.Count==0 || m_ParentItem.DesignMode)
 | 
						|
				return;
 | 
						|
 | 
						|
			if(m_HotSubItem==null || m_HotSubItem!=null && !m_HotSubItem.Expanded)
 | 
						|
			{
 | 
						|
				if(e.KeyCode==Keys.Down)
 | 
						|
				{
 | 
						|
                    if (m_ParentItem is ItemContainer)
 | 
						|
                    {
 | 
						|
                        m_ParentItem.InternalKeyDown(e);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (m_HotSubItem is ItemContainer)
 | 
						|
                            m_HotSubItem.InternalKeyDown(e);
 | 
						|
 | 
						|
                        if (!e.Handled)
 | 
						|
                        {
 | 
						|
                            int i = 0;
 | 
						|
                            if (m_HotSubItem != null)
 | 
						|
                            {
 | 
						|
                                m_HotSubItem.InternalMouseLeave();
 | 
						|
                                i = m_ParentItem.SubItems.IndexOf(m_HotSubItem) + 1;
 | 
						|
                                if (i == m_ParentItem.SubItems.Count && m_ExpandButton.ShowExpandButton)
 | 
						|
                                {
 | 
						|
                                    m_ExpandButton.MouseOver = true;
 | 
						|
                                    RefreshExpandButton();
 | 
						|
                                }
 | 
						|
                                else if (i < 0 || i == m_ParentItem.SubItems.Count)
 | 
						|
                                {
 | 
						|
                                    i = 0;
 | 
						|
                                }
 | 
						|
                                m_HotSubItem = null;
 | 
						|
                            }
 | 
						|
                            else if (m_ExpandButton.MouseOver)
 | 
						|
                            {
 | 
						|
                                m_ExpandButton.MouseOver = false;
 | 
						|
                                RefreshExpandButton();
 | 
						|
                                i = 0;
 | 
						|
                            }
 | 
						|
                            BaseItem objTmp;
 | 
						|
                            for (int f = i; f < m_ParentItem.SubItems.Count; f++)
 | 
						|
                            {
 | 
						|
                                objTmp = m_ParentItem.SubItems[f];
 | 
						|
                                if (objTmp.Displayed && objTmp.Visible && CanGetMouseFocus(objTmp))
 | 
						|
                                {
 | 
						|
                                    m_HotSubItem = objTmp;
 | 
						|
                                    m_HotSubItem.InternalMouseEnter();
 | 
						|
                                    m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.LeftInternal + 2, m_HotSubItem.TopInternal + 2, 0));
 | 
						|
                                    if (m_HotSubItem.IsContainer)
 | 
						|
                                        m_HotSubItem.InternalKeyDown(e);
 | 
						|
                                    break;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            if (m_HotSubItem == null && m_ExpandButton.ShowExpandButton && !m_ExpandButton.MouseOver)
 | 
						|
                            {
 | 
						|
                                m_ExpandButton.MouseOver = true;
 | 
						|
                                RefreshExpandButton();
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
					e.Handled=true;
 | 
						|
					m_IgnoreDuplicateMouseMove=true;
 | 
						|
				}
 | 
						|
				else if(e.KeyCode==Keys.Up)
 | 
						|
				{
 | 
						|
                    if (m_ParentItem is ItemContainer)
 | 
						|
                    {
 | 
						|
                        m_ParentItem.InternalKeyDown(e);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (m_HotSubItem is ItemContainer)
 | 
						|
                            m_HotSubItem.InternalKeyDown(e);
 | 
						|
                        if (!e.Handled)
 | 
						|
                        {
 | 
						|
                            int i = 0;
 | 
						|
                            if (m_HotSubItem != null)
 | 
						|
                            {
 | 
						|
                                m_HotSubItem.InternalMouseLeave();
 | 
						|
                                i = m_ParentItem.SubItems.IndexOf(m_HotSubItem) - 1;
 | 
						|
                                if (i < 0 && m_ExpandButton.ShowExpandButton)
 | 
						|
                                {
 | 
						|
                                    m_ExpandButton.MouseOver = true;
 | 
						|
                                    RefreshExpandButton();
 | 
						|
                                }
 | 
						|
                                else if (i < 0)
 | 
						|
                                    i = m_ParentItem.SubItems.Count - 1;
 | 
						|
                                m_HotSubItem = null;
 | 
						|
                            }
 | 
						|
                            else if (m_ExpandButton.MouseOver)
 | 
						|
                            {
 | 
						|
                                m_ExpandButton.MouseOver = false;
 | 
						|
                                RefreshExpandButton();
 | 
						|
                                i = m_ParentItem.SubItems.Count - 1;
 | 
						|
                            }
 | 
						|
                            else if (m_ExpandButton.ShowExpandButton)
 | 
						|
                            {
 | 
						|
                                m_ExpandButton.MouseOver = true;
 | 
						|
                                RefreshExpandButton();
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                                i = m_ParentItem.SubItems.Count - 1;
 | 
						|
                            BaseItem objTmp;
 | 
						|
                            for (int f = i; f >= 0; f--)
 | 
						|
                            {
 | 
						|
                                objTmp = m_ParentItem.SubItems[f];
 | 
						|
                                if (objTmp.Displayed && objTmp.Visible && CanGetMouseFocus(objTmp))
 | 
						|
                                {
 | 
						|
                                    m_HotSubItem = objTmp;
 | 
						|
                                    m_HotSubItem.InternalMouseEnter();
 | 
						|
                                    m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.LeftInternal + 2, m_HotSubItem.TopInternal + 2, 0));
 | 
						|
                                    if (m_HotSubItem.IsContainer)
 | 
						|
                                        m_HotSubItem.InternalKeyDown(e);
 | 
						|
                                    break;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            if (m_HotSubItem == null && m_ExpandButton.ShowExpandButton && !m_ExpandButton.MouseOver)
 | 
						|
                            {
 | 
						|
                                m_ExpandButton.MouseOver = true;
 | 
						|
                                RefreshExpandButton();
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
					e.Handled=true;
 | 
						|
					m_IgnoreDuplicateMouseMove=true;
 | 
						|
				}
 | 
						|
				else if(e.KeyCode==Keys.Right)
 | 
						|
				{
 | 
						|
					m_IgnoreDuplicateMouseMove=true;
 | 
						|
                    if (m_HotSubItem != null && m_HotSubItem.GetEnabled())
 | 
						|
                    {
 | 
						|
                        ButtonItem objBtn = m_HotSubItem as ButtonItem;
 | 
						|
                        if (objBtn != null)
 | 
						|
                        {
 | 
						|
                            if (objBtn.SubItems.Count > 0 && objBtn.ShowSubItems && !objBtn.Expanded)
 | 
						|
                            {
 | 
						|
                                objBtn.Expanded = true;
 | 
						|
                                if (objBtn.PopupControl is MenuPanel)
 | 
						|
                                    ((MenuPanel)objBtn.PopupControl).SelectFirstItem();
 | 
						|
 | 
						|
                                e.Handled = true;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (m_HotSubItem != null && m_HotSubItem is ItemContainer)
 | 
						|
                        m_HotSubItem.InternalKeyDown(e);
 | 
						|
 | 
						|
                    if (!e.Handled && m_ParentItem!=null)
 | 
						|
                    {
 | 
						|
                        foreach (BaseItem item in m_ParentItem.SubItems)
 | 
						|
                        {
 | 
						|
                            if (item is ItemContainer)
 | 
						|
                            {
 | 
						|
                                item.InternalKeyDown(e);
 | 
						|
                                if (e.Handled)
 | 
						|
                                    break;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
				}
 | 
						|
				else if(e.KeyCode==Keys.Left)
 | 
						|
				{
 | 
						|
                    if (m_HotSubItem != null && m_HotSubItem is ItemContainer)
 | 
						|
                        m_HotSubItem.InternalKeyDown(e);
 | 
						|
                    if (!e.Handled)
 | 
						|
                    {
 | 
						|
                        m_IgnoreDuplicateMouseMove = true;
 | 
						|
                        // Close this popup
 | 
						|
                        if (BaseItem.IsOnPopup(m_ParentItem))
 | 
						|
                        {
 | 
						|
                            m_ParentItem.Expanded = false;
 | 
						|
                            e.Handled = true;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
				}
 | 
						|
				else if(e.KeyCode==Keys.Escape)
 | 
						|
				{
 | 
						|
                    BaseItem parent = m_ParentItem;
 | 
						|
                    parent.Expanded = false;
 | 
						|
                    if (parent.Parent != null && parent.Parent is GenericItemContainer && parent.Parent.AutoExpand)
 | 
						|
                        parent.Parent.AutoExpand = false;
 | 
						|
                    e.Handled = true;
 | 
						|
				}
 | 
						|
                else if (e.KeyCode == Keys.Enter && m_HotSubItem != null && m_HotSubItem.IsContainer)
 | 
						|
                {
 | 
						|
                    m_HotSubItem.InternalKeyDown(e);
 | 
						|
                }
 | 
						|
                else if (e.KeyCode == Keys.Enter && m_HotSubItem != null && m_HotSubItem.SubItems.Count > 0 && m_HotSubItem.ShowSubItems && !m_HotSubItem.Expanded && m_HotSubItem.GetEnabled())
 | 
						|
                {
 | 
						|
                    m_HotSubItem.Expanded = true;
 | 
						|
                    if (m_HotSubItem is PopupItem && ((PopupItem)m_HotSubItem).PopupControl is MenuPanel)
 | 
						|
                        ((MenuPanel)((PopupItem)m_HotSubItem).PopupControl).SelectFirstItem();
 | 
						|
 | 
						|
                    e.Handled = true;
 | 
						|
                }
 | 
						|
                else if ((e.KeyCode == Keys.Enter || e.KeyCode == Keys.Space) && m_ExpandButton.ShowExpandButton && m_ExpandButton.MouseOver)
 | 
						|
                {
 | 
						|
                    ExpandRecentlyUsed();
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    int key = 0;
 | 
						|
                    if (e.Shift)
 | 
						|
                    {
 | 
						|
                        try
 | 
						|
                        {
 | 
						|
                            byte[] keyState = new byte[256];
 | 
						|
                            if (NativeFunctions.GetKeyboardState(keyState))
 | 
						|
                            {
 | 
						|
                                byte[] chars = new byte[2];
 | 
						|
                                if (NativeFunctions.ToAscii((uint)e.KeyValue, 0, keyState, chars, 0) != 0)
 | 
						|
                                {
 | 
						|
                                    key = chars[0];
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        catch (Exception)
 | 
						|
                        {
 | 
						|
                            key = 0;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (key == 0 && !BarFunctions.IsSystemKey(e.KeyCode))
 | 
						|
                    {
 | 
						|
                        key = (int)NativeFunctions.MapVirtualKey((uint)e.KeyValue, 2);
 | 
						|
                        if (key == 0)
 | 
						|
                            key = e.KeyValue;
 | 
						|
                    }
 | 
						|
                    if(e is KeyEventArgsEx && ((KeyEventArgsEx)e).KeyChar!=0)
 | 
						|
                    {
 | 
						|
                        if (ProcessContainerAccessKey(m_ParentItem, ((KeyEventArgsEx)e).KeyChar))
 | 
						|
                            e.Handled = true;
 | 
						|
                    }
 | 
						|
                    if (!e.Handled && key > 0)
 | 
						|
                    {
 | 
						|
                        char[] ch = new char[1];
 | 
						|
                        byte[] by = new byte[1];
 | 
						|
                        by[0] = System.Convert.ToByte(key);
 | 
						|
                        System.Text.Encoding.Default.GetDecoder().GetChars(by, 0, 1, ch, 0);
 | 
						|
                        string s = ch[0].ToString();
 | 
						|
                        ch[0] = (s.ToLower())[0];
 | 
						|
                        if ((Control.ModifierKeys & Keys.Control) == Keys.None && ProcessContainerAccessKey(m_ParentItem, ch[0]))
 | 
						|
                            e.Handled = true;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
			}
 | 
						|
 | 
						|
			if(!e.Handled && m_HotSubItem!=null)
 | 
						|
			{
 | 
						|
                bool raiseKeyDown=true;
 | 
						|
                if (this.Controls.Count > 0)
 | 
						|
                {
 | 
						|
                    foreach (Control childControl in this.Controls)
 | 
						|
                    {
 | 
						|
                        if (childControl.Focused)
 | 
						|
                        {
 | 
						|
                            raiseKeyDown = false;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if(raiseKeyDown)
 | 
						|
    				m_HotSubItem.InternalKeyDown(e);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
 | 
						|
        {
 | 
						|
            if (keyData == Keys.Escape || keyData == Keys.Enter)
 | 
						|
            {
 | 
						|
                KeyEventArgs args = new KeyEventArgs(keyData);
 | 
						|
                ExKeyDown(args);
 | 
						|
                if (args.Handled) return true;
 | 
						|
            }
 | 
						|
            return base.ProcessCmdKey(ref msg, keyData);
 | 
						|
        }
 | 
						|
 | 
						|
        private bool ProcessContainerAccessKey(BaseItem container, char key)
 | 
						|
        {
 | 
						|
            List<BaseItem> itemsForMnemonic = GetItemsForMnemonic(container, key);
 | 
						|
            if (itemsForMnemonic.Count > 1)
 | 
						|
            {
 | 
						|
                // Special processing for case when more than one item uses same mnemonic key
 | 
						|
                BaseItem newHotSubitem = null;
 | 
						|
                if (m_HotSubItem == null)
 | 
						|
                    newHotSubitem = itemsForMnemonic[0];
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    int hotItemIndex = itemsForMnemonic.IndexOf(m_HotSubItem);
 | 
						|
                    if (hotItemIndex == -1)
 | 
						|
                        newHotSubitem = itemsForMnemonic[0];
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (hotItemIndex == itemsForMnemonic.Count - 1)
 | 
						|
                            hotItemIndex = 0;
 | 
						|
                        else
 | 
						|
                            hotItemIndex++;
 | 
						|
                        newHotSubitem = itemsForMnemonic[hotItemIndex];
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (newHotSubitem != null)
 | 
						|
                {
 | 
						|
                    if (m_HotSubItem != null)
 | 
						|
                        m_HotSubItem.InternalMouseLeave();
 | 
						|
                    m_HotSubItem = newHotSubitem;
 | 
						|
                    m_HotSubItem.InternalMouseEnter();
 | 
						|
                    m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.LeftInternal + 2, m_HotSubItem.TopInternal + 2, 0));
 | 
						|
                }
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
 | 
						|
            BaseItem item = GetItemForMnemonic(container, key, true);
 | 
						|
            if (item!=null && item.GetEnabled() && item.Visible)
 | 
						|
            {
 | 
						|
                if (item is ItemContainer)
 | 
						|
                {
 | 
						|
                    this.ShowKeyTips = false;
 | 
						|
                    this.HotSubItem = item;
 | 
						|
                }
 | 
						|
                else if (item.SubItems.Count > 0 && item.ShowSubItems && !item.Expanded)
 | 
						|
                {
 | 
						|
                    if (m_HotSubItem != item)
 | 
						|
                    {
 | 
						|
                        if (m_HotSubItem != null)
 | 
						|
                            m_HotSubItem.InternalMouseLeave();
 | 
						|
                        m_HotSubItem = item;
 | 
						|
                        m_HotSubItem.InternalMouseEnter();
 | 
						|
                        m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None, 0, m_HotSubItem.LeftInternal + 2, m_HotSubItem.TopInternal + 2, 0));
 | 
						|
                    }
 | 
						|
                    item.Expanded = true;
 | 
						|
                    if (item is PopupItem && ((PopupItem)item).PopupControl is MenuPanel)
 | 
						|
                    {
 | 
						|
                        ((MenuPanel)((PopupItem)item).PopupControl).SelectFirstItem();
 | 
						|
                    }
 | 
						|
                    m_IgnoreDuplicateMouseMove = true;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    this.ShowKeyTips = false;
 | 
						|
                    if (item is ComboBoxItem)
 | 
						|
                    {
 | 
						|
                        ((ComboBoxItem)item).ComboBoxEx.Focus();
 | 
						|
                        ((ComboBoxItem)item).ComboBoxEx.DroppedDown = true;
 | 
						|
                    }
 | 
						|
                    else if (item is TextBoxItem)
 | 
						|
                    {
 | 
						|
                        ((TextBoxItem)item).TextBox.Focus();
 | 
						|
                    }
 | 
						|
                    else if (item is ControlContainerItem && ((ControlContainerItem)item).Control != null)
 | 
						|
                        ((ControlContainerItem)item).Control.Focus();
 | 
						|
                    else
 | 
						|
                        item.RaiseClick();
 | 
						|
                }
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        private List<BaseItem> GetItemsForMnemonic(BaseItem container, char charCode)
 | 
						|
        {
 | 
						|
            List<BaseItem> items = new List<BaseItem>();
 | 
						|
            foreach (BaseItem item in container.SubItems)
 | 
						|
            {
 | 
						|
                if (IsMnemonic(charCode, item.Text))
 | 
						|
                {
 | 
						|
                    if (item.Visible && item.GetEnabled())
 | 
						|
                    {
 | 
						|
                        items.Add(item);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return items;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual BaseItem GetItemForMnemonic(BaseItem container, char charCode, bool deepScan)
 | 
						|
        {
 | 
						|
            string keyTipsString = m_KeyTipsKeysStack + charCode.ToString();
 | 
						|
            keyTipsString = keyTipsString.ToUpper();
 | 
						|
            bool partialMatch = false;
 | 
						|
 | 
						|
            foreach (BaseItem item in container.SubItems)
 | 
						|
            {
 | 
						|
                if (item.KeyTips != "" || m_KeyTipsKeysStack != "")
 | 
						|
                {
 | 
						|
                    if (item.KeyTips != "")
 | 
						|
                    {
 | 
						|
                        if (item.KeyTips == keyTipsString)
 | 
						|
                        {
 | 
						|
                            if (item.Visible && item.GetEnabled())
 | 
						|
                            {
 | 
						|
                                return item;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        else if (item.KeyTips.StartsWith(keyTipsString))
 | 
						|
                        {
 | 
						|
                            partialMatch = true;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else if (IsMnemonic(charCode, item.Text))
 | 
						|
                {
 | 
						|
                    if (item.Visible && item.GetEnabled())
 | 
						|
                    {
 | 
						|
                        return item;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if (deepScan && item.IsContainer)
 | 
						|
                {
 | 
						|
                    BaseItem mItem = GetItemForMnemonic(item, charCode, deepScan);
 | 
						|
                    if (mItem != null)
 | 
						|
                        return mItem;
 | 
						|
                }
 | 
						|
                else if (deepScan && item is ControlContainerItem && ((ControlContainerItem)item).Control is RibbonBar)
 | 
						|
                {
 | 
						|
                    RibbonBar rb = ((ControlContainerItem)item).Control as RibbonBar;
 | 
						|
                    BaseItem mItem = GetItemForMnemonic(rb.GetBaseItemContainer(), charCode, deepScan);
 | 
						|
                    if (mItem != null)
 | 
						|
                        return mItem;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (partialMatch)
 | 
						|
            {
 | 
						|
                m_KeyTipsKeysStack += charCode.ToString().ToUpper();
 | 
						|
            }
 | 
						|
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Return Sub Item at specified location
 | 
						|
		/// </summary>
 | 
						|
		protected BaseItem ItemAtLocation(int x, int y)
 | 
						|
		{
 | 
						|
			if(m_ParentItem!=null && m_ParentItem.SubItems.Count!=0)
 | 
						|
			{
 | 
						|
				foreach(BaseItem objSub in m_ParentItem.SubItems)
 | 
						|
				{
 | 
						|
					if((objSub.Visible || m_IsCustomizeMenu) && objSub.Displayed && x>=objSub.LeftInternal && x<=(objSub.LeftInternal+objSub.WidthInternal) && y>=objSub.TopInternal && y<=(objSub.TopInternal+objSub.HeightInternal))
 | 
						|
					{
 | 
						|
                        if (objSub.IsContainer)
 | 
						|
                        {
 | 
						|
                            BaseItem item = objSub.ItemAtLocation(x, y);
 | 
						|
                            if (item != null)
 | 
						|
                                return item;
 | 
						|
                        }
 | 
						|
						return objSub;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnHandleDestroyed(EventArgs e)
 | 
						|
		{
 | 
						|
			ClearHotSubItem();
 | 
						|
			base.OnHandleDestroyed(e);
 | 
						|
		}
 | 
						|
 | 
						|
		internal void ClearHotSubItem()
 | 
						|
		{
 | 
						|
			if(m_HotSubItem!=null)
 | 
						|
			{	
 | 
						|
				//if(m_ParentItem!=null && m_ParentItem.DesignMode && this.Owner!=null)
 | 
						|
				//	this.Owner.SetFocusItem(null);
 | 
						|
				//else
 | 
						|
					m_HotSubItem.InternalMouseLeave();
 | 
						|
 | 
						|
				m_HotSubItem=null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void ResetHover()
 | 
						|
		{
 | 
						|
			// We need to reset hover thing since it is fired only first time mouse hovers inside the window and we need it for each of our items
 | 
						|
			NativeFunctions.TRACKMOUSEEVENT tme=new NativeFunctions.TRACKMOUSEEVENT();
 | 
						|
			tme.dwFlags=NativeFunctions.TME_QUERY;
 | 
						|
			tme.hwndTrack=this.Handle;
 | 
						|
			tme.cbSize=System.Runtime.InteropServices.Marshal.SizeOf(tme);
 | 
						|
			NativeFunctions.TrackMouseEvent(ref tme);
 | 
						|
			tme.dwFlags=tme.dwFlags | NativeFunctions.TME_HOVER;
 | 
						|
			NativeFunctions.TrackMouseEvent(ref tme);
 | 
						|
		}
 | 
						|
 | 
						|
		private void SetupScrollTimer()
 | 
						|
		{
 | 
						|
			m_ScrollTimer=new Timer();
 | 
						|
			m_ScrollTimer.Interval=100;
 | 
						|
			m_ScrollTimer.Tick+=new EventHandler(this.ScrollTimerTick);
 | 
						|
			m_ScrollTimer.Start();
 | 
						|
		}
 | 
						|
 | 
						|
		private void ScrollTimerTick(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			CheckScrolling();
 | 
						|
		}
 | 
						|
 | 
						|
        private void ScrollItemsUp()
 | 
						|
        {
 | 
						|
            if (m_ScrollTopPosition > 0)
 | 
						|
            {
 | 
						|
                m_ScrollTopPosition--;
 | 
						|
                //BaseItem o=m_ParentItem.SubItems[m_ScrollTopPosition] as BaseItem;
 | 
						|
                //if(o is SeparatorItem && m_ScrollTopPosition>0)
 | 
						|
                //	m_ScrollTopPosition--;
 | 
						|
 | 
						|
            }
 | 
						|
            RepositionItems();
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
        private void ScrollItemsDown()
 | 
						|
        {
 | 
						|
            m_ScrollTopPosition++;
 | 
						|
            //BaseItem o=m_ParentItem.SubItems[m_ScrollTopPosition] as BaseItem;
 | 
						|
            //if(o is SeparatorItem && m_ScrollTopPosition<m_ParentItem.SubItemsCount)
 | 
						|
            //	m_ScrollTopPosition++;
 | 
						|
            RepositionItems();
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
        private bool CheckScrolling()
 | 
						|
		{
 | 
						|
			if(!m_Scroll)
 | 
						|
				return false;
 | 
						|
			Point p=this.PointToClient(Control.MousePosition);
 | 
						|
			if(m_TopScroll && p.Y<=m_TopScrollHeight+m_ClientRect.Top)
 | 
						|
			{
 | 
						|
                ScrollItemsUp();
 | 
						|
				if(m_ScrollTimer==null)
 | 
						|
					SetupScrollTimer();
 | 
						|
				return true;
 | 
						|
			}
 | 
						|
			else if(m_BottomScroll && p.Y>=this.Height-m_BottomScrollHeight)
 | 
						|
			{
 | 
						|
                ScrollItemsDown();
 | 
						|
				if(m_ScrollTimer==null)
 | 
						|
					SetupScrollTimer();
 | 
						|
				return true;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(m_ScrollTimer!=null)
 | 
						|
				{
 | 
						|
					m_ScrollTimer.Stop();
 | 
						|
					m_ScrollTimer.Dispose();
 | 
						|
					m_ScrollTimer=null;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		// Reposition items when scrolling changes
 | 
						|
		// This function will change only Y coordinate of the items
 | 
						|
		// It will also set the Displayed property properly
 | 
						|
		private void RepositionItems()
 | 
						|
		{
 | 
						|
			m_TopScroll=false;
 | 
						|
			m_BottomScroll=false;
 | 
						|
            if(!m_Scroll || m_ParentItem==null || m_ParentItem.SubItems.Count==0)
 | 
						|
				return;
 | 
						|
			int iTop=m_ClientRect.Top;
 | 
						|
			int iItemHeight=0;
 | 
						|
			if(m_ScrollTopPosition>0)
 | 
						|
			{
 | 
						|
				// There is a top scroll triangle, with inital height of 16
 | 
						|
                m_TopScrollHeight=16;
 | 
						|
				iTop+=m_TopScrollHeight;
 | 
						|
				m_TopScroll=true;
 | 
						|
			}
 | 
						|
			BaseItem objItem;
 | 
						|
			bool bOverrun=false;
 | 
						|
			for(int i=0;i<m_ParentItem.SubItems.Count;i++)
 | 
						|
			{
 | 
						|
                objItem=m_ParentItem.SubItems[i];
 | 
						|
				if(bOverrun || i<m_ScrollTopPosition || !objItem.Visible && !m_IsCustomizeMenu)
 | 
						|
				{
 | 
						|
					objItem.Displayed=false;
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
 | 
						|
				iItemHeight=objItem.HeightInternal;
 | 
						|
				if(objItem.BeginGroup)
 | 
						|
				{
 | 
						|
                    if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
						iItemHeight+=Dpi.Height(GROUP_SPACINGOFFICE);
 | 
						|
					else
 | 
						|
						iItemHeight+=Dpi.Height(GROUP_SPACINGDOTNET);
 | 
						|
				}
 | 
						|
 | 
						|
                if(iItemHeight+iTop>m_ClientRect.Bottom || m_ClientRect.Bottom-(iItemHeight+iTop)<15 && i+1<m_ParentItem.SubItems.Count)
 | 
						|
				{
 | 
						|
					// Overflows, this item is out
 | 
						|
					objItem.Displayed=false;
 | 
						|
					bOverrun=true;
 | 
						|
					
 | 
						|
					// We will need bottom scrolling triangle
 | 
						|
					m_BottomScroll=true;
 | 
						|
					m_BottomScrollHeight=m_ClientRect.Bottom-iTop;
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
 | 
						|
				// If this item is last item we need to change positions so last item
 | 
						|
				// Is at the bottom of the window
 | 
						|
				if(i==m_ParentItem.SubItems.Count-1)
 | 
						|
				{
 | 
						|
					// This is a last item, now we have to do more work to make this look better
 | 
						|
					// Get the previous item so we know what our top position will be
 | 
						|
					objItem.Displayed=true;
 | 
						|
					iTop=m_ClientRect.Bottom;
 | 
						|
                    for(int i1=i;i1>=m_ScrollTopPosition;i1--)
 | 
						|
					{
 | 
						|
						objItem=m_ParentItem.SubItems[i1];
 | 
						|
						if(!objItem.Visible && !m_IsCustomizeMenu)
 | 
						|
							continue;
 | 
						|
						iTop-=objItem.HeightInternal;
 | 
						|
						objItem.TopInternal=iTop;
 | 
						|
						if(objItem.BeginGroup)
 | 
						|
						{
 | 
						|
                            if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
								iTop-=Dpi.Height(GROUP_SPACINGOFFICE);
 | 
						|
							else
 | 
						|
								iTop-=Dpi.Height(GROUP_SPACINGDOTNET);
 | 
						|
						}
 | 
						|
					}
 | 
						|
					// See can we fit more items on top
 | 
						|
					if(m_ScrollTopPosition>0)
 | 
						|
					{
 | 
						|
						objItem=m_ParentItem.SubItems[m_ScrollTopPosition-1];
 | 
						|
						if(iTop-objItem.HeightInternal-15>m_ClientRect.Top)
 | 
						|
						{
 | 
						|
							// Great we can fit some more
 | 
						|
							for(int i1=m_ScrollTopPosition-1;i1>=0;i1--)
 | 
						|
							{
 | 
						|
						        objItem=m_ParentItem.SubItems[i1];
 | 
						|
								if(!objItem.Visible && !m_IsCustomizeMenu)
 | 
						|
									continue;
 | 
						|
								if(iTop-objItem.HeightInternal-15>m_ClientRect.Top)
 | 
						|
								{
 | 
						|
									iTop-=objItem.HeightInternal;
 | 
						|
									objItem.TopInternal=iTop;
 | 
						|
									objItem.Displayed=true;
 | 
						|
									if(objItem.BeginGroup)
 | 
						|
									{
 | 
						|
                                        if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
											iTop-=Dpi.Height(GROUP_SPACINGOFFICE);
 | 
						|
										else
 | 
						|
											iTop-=Dpi.Height(GROUP_SPACINGDOTNET);
 | 
						|
									}
 | 
						|
									m_ScrollTopPosition=i1;
 | 
						|
								}
 | 
						|
								else
 | 
						|
									break;
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
 | 
						|
					// Set the top scroll triangle height
 | 
						|
					m_TopScrollHeight=iTop-m_ClientRect.Top;
 | 
						|
					m_BottomScroll=false;
 | 
						|
					break;
 | 
						|
				}
 | 
						|
 | 
						|
				if(objItem.BeginGroup)
 | 
						|
				{
 | 
						|
                    if (m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
						iTop+=Dpi.Height(GROUP_SPACINGOFFICE);
 | 
						|
					else
 | 
						|
						iTop+=Dpi.Height(GROUP_SPACINGDOTNET);
 | 
						|
				}
 | 
						|
 | 
						|
				objItem.TopInternal=iTop;
 | 
						|
				objItem.Displayed=true;
 | 
						|
				iTop+=objItem.HeightInternal;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        private bool IsRoundRegion
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ParentItem != null)
 | 
						|
                {
 | 
						|
                    if (m_ParentItem is ApplicationButton && m_ParentItem.EffectiveStyle == eDotNetBarStyle.Windows7 || StyleManager.IsMetro(m_ParentItem.EffectiveStyle)) return false;
 | 
						|
 | 
						|
                    BaseItem p = m_ParentItem;
 | 
						|
                    while(p.Parent!=null)
 | 
						|
                        p=p.Parent;
 | 
						|
                    Control c = p.ContainerControl as Control;
 | 
						|
                    if (c is RibbonStrip || c is RibbonBar || c is ContextMenuBar && BarFunctions.IsOffice2007Style(((ContextMenuBar)c).Style))
 | 
						|
                        return true;
 | 
						|
                }
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void SetRoundRegion(Control c)
 | 
						|
        {
 | 
						|
            Rectangle rectPath = c.ClientRectangle;
 | 
						|
            rectPath.Width--;
 | 
						|
            rectPath.Height--;
 | 
						|
            GraphicsPath path = DisplayHelp.GetRoundedRectanglePath(rectPath, m_CornerSize);
 | 
						|
            Region r = new Region();
 | 
						|
            r.MakeEmpty();
 | 
						|
            r.Union(path);
 | 
						|
            // Widen path for the border...
 | 
						|
            path.Widen(SystemPens.ControlText);
 | 
						|
            r.Union(path);
 | 
						|
            c.Region = r;
 | 
						|
        }
 | 
						|
 | 
						|
        public new void Hide()
 | 
						|
        {
 | 
						|
            base.Hide();
 | 
						|
 | 
						|
            if (m_DesignerParent && this.Parent!=null)
 | 
						|
            {
 | 
						|
                this.Parent.Controls.Remove(this);
 | 
						|
                m_DesignerParent = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool m_DesignerParent = false;
 | 
						|
        private bool AddtoDesignTimeContainer()
 | 
						|
        {
 | 
						|
            ISite site = GetSite();
 | 
						|
            if (site == null)
 | 
						|
                return false;
 | 
						|
 | 
						|
            IDesignerHost dh = site.GetService(typeof(IDesignerHost)) as IDesignerHost;
 | 
						|
            if (dh == null) return false;
 | 
						|
 | 
						|
            Control parent = dh.RootComponent as Control;
 | 
						|
            while (parent != null)
 | 
						|
            {
 | 
						|
                parent = parent.Parent;
 | 
						|
                if (parent!=null && parent.GetType().Name.IndexOf("DesignerFrame")>=0)
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
            if (parent == null || parent.Parent==null) return false;
 | 
						|
            //parent = parent.Parent;
 | 
						|
            Point p = parent.PointToClient(this.Location);
 | 
						|
            parent.Controls.Add(this);
 | 
						|
            this.Location = p;
 | 
						|
            base.Visible = true;
 | 
						|
            this.Update();
 | 
						|
            this.BringToFront();
 | 
						|
            m_DesignerParent = true;
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
		public new void Show()
 | 
						|
		{
 | 
						|
			if(!m_PopupMenu)
 | 
						|
			{
 | 
						|
				base.Visible=true;
 | 
						|
				this.Update();
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
            // Design mode add
 | 
						|
            if (m_ParentItem != null && (m_ParentItem.Site != null && m_ParentItem.Site.DesignMode || m_ParentItem.DesignMode ||
 | 
						|
                m_ParentItem.Parent != null && m_ParentItem.Parent.Site != null && m_ParentItem.Parent.Site.DesignMode))
 | 
						|
            {
 | 
						|
                if (AddtoDesignTimeContainer())
 | 
						|
                    return;
 | 
						|
            }
 | 
						|
 | 
						|
			PopupContainer popup=new PopupContainer();
 | 
						|
			popup.ShowDropShadow=(this.DisplayShadow && this.AlphaShadow);
 | 
						|
			
 | 
						|
			//NativeFunctions.sndPlaySound("MenuPopup",NativeFunctions.SND_ASYNC | NativeFunctions.SND_NODEFAULT);
 | 
						|
			// This window cannot be outside the screen
 | 
						|
			// If height of the window is outside the screen, reduce the
 | 
						|
			// window size and set the flag so we know we have to scroll the window
 | 
						|
			ScreenInformation objScreen=BarFunctions.ScreenFromControl(this);
 | 
						|
 | 
						|
			if(objScreen!=null)
 | 
						|
			{
 | 
						|
				Rectangle workingArea=objScreen.WorkingArea;
 | 
						|
                if (IsContextMenu || UseWholeScreenForSizeChecking)
 | 
						|
					workingArea=objScreen.Bounds;
 | 
						|
				if(this.Location.Y+this.Size.Height>workingArea.Bottom)
 | 
						|
				{
 | 
						|
					// Reduce the size
 | 
						|
					m_ClientRect.Height=m_ClientRect.Height-(this.Location.Y+this.Size.Height-workingArea.Bottom);
 | 
						|
					this.Height=this.Height-(this.Location.Y+this.Size.Height-workingArea.Bottom);
 | 
						|
					m_Scroll=true;
 | 
						|
					m_ScrollTopPosition=0;
 | 
						|
					RepositionItems();
 | 
						|
				}
 | 
						|
			}
 | 
						|
            
 | 
						|
			popup.Location=this.Location;
 | 
						|
			popup.Controls.Add(this);
 | 
						|
			popup.Size=this.Size;
 | 
						|
			this.Location=new Point(0,0);
 | 
						|
			popup.CreateControl();
 | 
						|
 | 
						|
            if (BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle) && IsRoundRegion)
 | 
						|
            {
 | 
						|
                SetRoundRegion(this);
 | 
						|
                SetRoundRegion(popup);
 | 
						|
            }
 | 
						|
 | 
						|
			ePopupAnimation animation=m_PopupAnimation;
 | 
						|
			if(!BarFunctions.SupportsAnimation)
 | 
						|
				animation=ePopupAnimation.None;
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(animation==ePopupAnimation.ManagerControlled)
 | 
						|
				{
 | 
						|
					IOwnerMenuSupport ownermenu=m_Owner as IOwnerMenuSupport;
 | 
						|
					if(ownermenu!=null)
 | 
						|
						animation=ownermenu.PopupAnimation;
 | 
						|
					if(animation==ePopupAnimation.ManagerControlled)
 | 
						|
						animation=ePopupAnimation.SystemDefault;
 | 
						|
				}
 | 
						|
 | 
						|
				if(animation==ePopupAnimation.SystemDefault)
 | 
						|
					animation=NativeFunctions.SystemMenuAnimation;
 | 
						|
				else if(animation==ePopupAnimation.Random)
 | 
						|
				{
 | 
						|
					Random r=new System.Random();
 | 
						|
					int i=r.Next(2);
 | 
						|
					animation=ePopupAnimation.Fade;
 | 
						|
					if(i==1)
 | 
						|
						animation=ePopupAnimation.Slide;
 | 
						|
					else if(i==2)
 | 
						|
						animation=ePopupAnimation.Unfold;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			// No animation if menu is hosting controls... Animation caused strange errors on some machines
 | 
						|
			if(this.Controls.Count>0)
 | 
						|
				animation=ePopupAnimation.None;
 | 
						|
 | 
						|
			if(animation==ePopupAnimation.Fade && Environment.OSVersion.Version.Major>=5)
 | 
						|
			{
 | 
						|
				NativeFunctions.AnimateWindow(popup.Handle,BarFunctions.ANIMATION_INTERVAL,NativeFunctions.AW_BLEND);
 | 
						|
                popup.Visible = true;
 | 
						|
			}
 | 
						|
			else if(animation==ePopupAnimation.Slide)
 | 
						|
			{
 | 
						|
				NativeFunctions.AnimateWindow(popup.Handle,BarFunctions.ANIMATION_INTERVAL,(NativeFunctions.AW_SLIDE | NativeFunctions.AW_HOR_POSITIVE | NativeFunctions.AW_VER_POSITIVE));
 | 
						|
                popup.Visible = true;
 | 
						|
			}
 | 
						|
            else if (animation == ePopupAnimation.Unfold)
 | 
						|
            {
 | 
						|
                NativeFunctions.AnimateWindow(popup.Handle, BarFunctions.ANIMATION_INTERVAL, (NativeFunctions.AW_HOR_POSITIVE | NativeFunctions.AW_VER_POSITIVE));
 | 
						|
                popup.Visible = true;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                base.Visible = true;
 | 
						|
                popup.Visible = true;
 | 
						|
            }
 | 
						|
			popup.ShowShadow();
 | 
						|
 | 
						|
			if(animation!=ePopupAnimation.None && this.Controls.Count>0)
 | 
						|
				this.Refresh();
 | 
						|
 | 
						|
			Rectangle rectDisplay=new Rectangle(popup.Location,popup.Size);
 | 
						|
			if(rectDisplay.Contains(Control.MousePosition))
 | 
						|
			{
 | 
						|
				m_IgnoreDuplicateMouseMove=true;
 | 
						|
			}
 | 
						|
 | 
						|
			// This makes the menu paint BEFORE it returns out of this function
 | 
						|
			this.Update();
 | 
						|
 | 
						|
			MenuPanel.PopupMenuAccessibleObject acc=this.AccessibilityObject as PopupMenuAccessibleObject;
 | 
						|
			if(acc!=null)
 | 
						|
			{
 | 
						|
				if(m_ParentItem!=null && m_ParentItem.IsOnMenuBar)
 | 
						|
					acc.GenerateEvent(AccessibleEvents.SystemMenuStart);
 | 
						|
				acc.GenerateEvent(AccessibleEvents.SystemMenuPopupStart);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private bool IsContextMenu
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(m_ParentItem==null)
 | 
						|
					return false;
 | 
						|
				if(m_ParentItem.Parent==null || m_ParentItem.ContainerControl is ContextMenuBar)
 | 
						|
					return true;
 | 
						|
				BaseItem topParent=m_ParentItem.Parent;
 | 
						|
				while(topParent.Parent!=null)
 | 
						|
					topParent=topParent.Parent;
 | 
						|
				if(topParent is PopupItem)
 | 
						|
					return true;
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnVisibleChanged(EventArgs e)
 | 
						|
		{
 | 
						|
			base.OnVisibleChanged(e);
 | 
						|
			if(!this.Visible && m_DropShadow!=null)
 | 
						|
			{
 | 
						|
				m_DropShadow.Hide();
 | 
						|
				m_DropShadow.Dispose();
 | 
						|
				m_DropShadow=null;
 | 
						|
			}
 | 
						|
			if(!this.Visible && this.Parent!=null && this.Parent is PopupContainer)
 | 
						|
			{
 | 
						|
				this.Parent.Visible=false;
 | 
						|
			}
 | 
						|
 | 
						|
			if(!this.Visible && m_ScrollTimer!=null)
 | 
						|
			{
 | 
						|
				m_ScrollTimer.Stop();
 | 
						|
				m_ScrollTimer.Dispose();
 | 
						|
				m_ScrollTimer=null;
 | 
						|
			}
 | 
						|
 | 
						|
			if(m_AccessibleObjectCreated)
 | 
						|
			{
 | 
						|
				MenuPanel.PopupMenuAccessibleObject acc=this.AccessibilityObject as PopupMenuAccessibleObject;
 | 
						|
				if(acc!=null)
 | 
						|
				{
 | 
						|
					if(m_ParentItem!=null)
 | 
						|
					{
 | 
						|
						foreach(BaseItem item in m_ParentItem.SubItems)
 | 
						|
							acc.GenerateEvent(item,AccessibleEvents.Destroy);
 | 
						|
					}
 | 
						|
					if(!this.Visible)
 | 
						|
					{
 | 
						|
						acc.GenerateEvent(AccessibleEvents.SystemMenuPopupEnd);
 | 
						|
						acc.GenerateEvent(AccessibleEvents.StateChange);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private int ClientMarginLeft
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				int iMargin=0;
 | 
						|
 | 
						|
                if (m_ParentItem != null && IsGradientStyle)
 | 
						|
                {
 | 
						|
                    iMargin = 1;
 | 
						|
                    if (BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle))
 | 
						|
                        iMargin++;
 | 
						|
                    if (IsContainerMenu)
 | 
						|
                        iMargin--;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    iMargin = 3;
 | 
						|
 | 
						|
				return iMargin;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private int ClientMarginTop
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				int iMargin=0;
 | 
						|
				if(m_ParentItem!=null && IsGradientStyle)
 | 
						|
					iMargin=2;
 | 
						|
				else
 | 
						|
					iMargin=3;
 | 
						|
                
 | 
						|
                if (IsContainerMenu)
 | 
						|
                    iMargin--;
 | 
						|
 | 
						|
				return iMargin;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private int ClientMarginRight
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				bool bShowShadow=true;
 | 
						|
				int iMargin=0;
 | 
						|
				IOwnerMenuSupport ownermenu=m_Owner as IOwnerMenuSupport;
 | 
						|
				if(ownermenu!=null && !ownermenu.ShowPopupShadow)
 | 
						|
					bShowShadow=false;
 | 
						|
				if(m_ParentItem!=null && IsGradientStyle)
 | 
						|
				{
 | 
						|
					if(this.AlphaShadow || !bShowShadow)
 | 
						|
						iMargin=1;
 | 
						|
					else
 | 
						|
						iMargin=3;
 | 
						|
                    if (BarFunctions.IsOffice2007Style(m_ParentItem.EffectiveStyle))
 | 
						|
                        iMargin++;
 | 
						|
 | 
						|
                    if (IsContainerMenu)
 | 
						|
                        iMargin--;
 | 
						|
				}
 | 
						|
				else
 | 
						|
					iMargin=3;
 | 
						|
 | 
						|
				return iMargin;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private int ClientMarginBottom
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				IOwnerMenuSupport ownermenu=m_Owner as IOwnerMenuSupport;
 | 
						|
				bool bShowShadow=true;
 | 
						|
				int iMargin=0;
 | 
						|
				if(ownermenu!=null && !ownermenu.ShowPopupShadow)
 | 
						|
					bShowShadow=false;
 | 
						|
				if(m_ParentItem!=null && IsGradientStyle)
 | 
						|
				{
 | 
						|
					if(this.AlphaShadow || !bShowShadow)
 | 
						|
						iMargin=2;
 | 
						|
					else
 | 
						|
						iMargin=4;
 | 
						|
                    if (IsContainerMenu)
 | 
						|
                        iMargin--;
 | 
						|
				}
 | 
						|
				else
 | 
						|
					iMargin=3;
 | 
						|
 | 
						|
				return iMargin;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		internal bool DisplayShadow
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(!m_PopupMenu || m_ParentItem!=null && m_ParentItem.Site!=null && m_ParentItem.Site.DesignMode)
 | 
						|
					return false;
 | 
						|
				IOwnerMenuSupport ownermenu=m_Owner as IOwnerMenuSupport;
 | 
						|
				if(ownermenu!=null)
 | 
						|
				{
 | 
						|
                    if (m_ParentItem != null && m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
					{
 | 
						|
						if(ownermenu.MenuDropShadow==eMenuDropShadow.Show)
 | 
						|
							return true;
 | 
						|
						else
 | 
						|
							return false;
 | 
						|
					}
 | 
						|
					return ownermenu.ShowPopupShadow;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
                    if (m_ParentItem != null && m_ParentItem.EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
						return false;
 | 
						|
				}
 | 
						|
 | 
						|
				return true;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether anti-alias smoothing is used while painting. Default value is false.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Browsable(true), Category("Appearance"), Description("Gets or sets whether anti-aliasing is used while painting.")]
 | 
						|
        public bool AntiAlias
 | 
						|
        {
 | 
						|
            get { return m_AntiAlias; }
 | 
						|
            set {m_AntiAlias = value; }
 | 
						|
        }
 | 
						|
 | 
						|
		internal bool AlphaShadow
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(Environment.OSVersion.Version.Major<5)
 | 
						|
					return false;
 | 
						|
				IOwnerMenuSupport ownermenu=m_Owner as IOwnerMenuSupport;
 | 
						|
				if(ownermenu!=null && !ownermenu.AlphaBlendShadow)
 | 
						|
					return false;
 | 
						|
				return true; //NativeFunctions.CursorShadow;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Indicates whether Tooltips are shown on Bars and menus.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),DefaultValue(true),System.ComponentModel.Category("Run-time Behavior"),System.ComponentModel.Description("Indicates whether Tooltips are shown on Bar and it's sub-items.")]
 | 
						|
		public bool ShowToolTips
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ShowToolTips;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_ShowToolTips=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Sets,Gets the side bar image structure.
 | 
						|
		/// </summary>
 | 
						|
		public SideBarImage SideBar
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_SideBarImage;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_SideBarImage=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public object Owner
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Owner;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_Owner=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		internal bool IsCustomizeMenu
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_IsCustomizeMenu;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_IsCustomizeMenu=value;
 | 
						|
				if(m_ParentItem!=null)
 | 
						|
				{
 | 
						|
					foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
						objItem.SetIsOnCustomizeMenu(m_IsCustomizeMenu);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true.")]
 | 
						|
		public ePersonalizedMenus PersonalizedMenus
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_PersonalizedMenus;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_PersonalizedMenus=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public bool PersonalizedAllVisible
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ExpandButton.PersonalizedAllVisible;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_ExpandButton.PersonalizedAllVisible=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public ePopupAnimation PopupAnimation
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_PopupAnimation;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_PopupAnimation=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public DevComponents.DotNetBar.ColorScheme ColorScheme
 | 
						|
		{
 | 
						|
			get {return m_ColorScheme;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				m_ColorScheme=value;
 | 
						|
				if(this.Visible)
 | 
						|
					this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the HotSubItem on the menu. This method is used internally by DotNetBar and should not be used in your application.
 | 
						|
		/// </summary>
 | 
						|
		public BaseItem HotSubItem
 | 
						|
		{
 | 
						|
			get {return m_HotSubItem;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_HotSubItem!=null)
 | 
						|
					m_HotSubItem.InternalMouseLeave();
 | 
						|
				m_HotSubItem=null;
 | 
						|
				if(this.ParentItem.SubItems.Contains(value) || IsChildItem(value))
 | 
						|
				{
 | 
						|
					m_HotSubItem=value;
 | 
						|
					if(m_HotSubItem!=null)
 | 
						|
					{
 | 
						|
						m_HotSubItem.InternalMouseEnter();
 | 
						|
						m_HotSubItem.InternalMouseMove(new MouseEventArgs(MouseButtons.None,0,m_HotSubItem.LeftInternal+1,m_HotSubItem.TopInternal+1,0));
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        private bool IsChildItem(BaseItem item)
 | 
						|
        {
 | 
						|
            if (item == null) return false;
 | 
						|
            while (item != null)
 | 
						|
            {
 | 
						|
                if (this.ParentItem == item) return true;
 | 
						|
                item = item.Parent;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
		//***********************************************
 | 
						|
		// IDesignTimeProvider Implementation
 | 
						|
		//***********************************************
 | 
						|
		public InsertPosition GetInsertPosition(Point pScreen, BaseItem DragItem)
 | 
						|
		{
 | 
						|
			if(m_ParentItem==null)
 | 
						|
				return null;
 | 
						|
 | 
						|
            return DesignTimeProviderContainer.GetInsertPosition(m_ParentItem, pScreen, DragItem);
 | 
						|
 | 
						|
            //InsertPosition objInsertPos=null;
 | 
						|
            //Point pClient=this.PointToClient(pScreen);
 | 
						|
            //Rectangle r;
 | 
						|
            //if(this.ClientRectangle.Contains(pClient))
 | 
						|
            //{
 | 
						|
            //    for(int i=0;i<m_ParentItem.SubItems.Count;i++)
 | 
						|
            //    {
 | 
						|
            //        BaseItem objItem=m_ParentItem.SubItems[i];
 | 
						|
            //        r=objItem.DisplayRectangle;
 | 
						|
            //        r.Inflate(2,2);
 | 
						|
            //        if(objItem.Visible && r.Contains(pClient))
 | 
						|
            //        {
 | 
						|
            //            if(objItem.SystemItem)
 | 
						|
            //                return null;
 | 
						|
            //            if(objItem==DragItem)
 | 
						|
            //                return new InsertPosition();
 | 
						|
 | 
						|
            //            if (objItem.IsContainer && objItem is IDesignTimeProvider)
 | 
						|
            //            {
 | 
						|
            //                Rectangle inner = r;
 | 
						|
            //                inner.Inflate(-5, -5);
 | 
						|
            //                if (inner.Contains(pClient))
 | 
						|
            //                    return ((IDesignTimeProvider)objItem).GetInsertPosition(pScreen, DragItem);
 | 
						|
            //            }
 | 
						|
 | 
						|
            //            objInsertPos=new InsertPosition();
 | 
						|
            //            objInsertPos.TargetProvider=(IDesignTimeProvider)m_ParentItem;
 | 
						|
            //            objInsertPos.Position=i;
 | 
						|
            //            //if(objItem.Orientation==eOrientation.Horizontal)
 | 
						|
            //            //{
 | 
						|
            //            //	if(pClient.X<=objItem.Left+objItem.Width/2)
 | 
						|
            //            //		objInsertPos.Before=true;
 | 
						|
            //            //}
 | 
						|
            //            //else
 | 
						|
            //            //{
 | 
						|
            //                if(pClient.Y<=objItem.TopInternal+objItem.HeightInternal/2)
 | 
						|
            //                    objInsertPos.Before=true;
 | 
						|
            //            //}
 | 
						|
            //            if(objItem is PopupItem && objItem.SubItems.Count>0)
 | 
						|
            //            {
 | 
						|
            //                if(!objItem.Expanded)
 | 
						|
            //                    objItem.Expanded=true;
 | 
						|
            //            }
 | 
						|
            //            else
 | 
						|
            //                BaseItem.CollapseSubItems(m_ParentItem);
 | 
						|
 | 
						|
            //            break;
 | 
						|
            //        }
 | 
						|
            //    }
 | 
						|
            //    if(objInsertPos==null)
 | 
						|
            //    {
 | 
						|
            //        // Container is empty but it can contain the items
 | 
						|
            //        //objInsertPos=new InsertPosition(m_ParentItem.SubItemsCount-1,false,this);
 | 
						|
            //        if(m_ParentItem.SubItems.Count>1 && m_ParentItem.SubItems[m_ParentItem.SubItems.Count-1].SystemItem)
 | 
						|
            //            objInsertPos=new InsertPosition(m_ParentItem.SubItems.Count-2,true,(IDesignTimeProvider)m_ParentItem);
 | 
						|
            //        else
 | 
						|
            //            objInsertPos=new InsertPosition(m_ParentItem.SubItems.Count-1,false,(IDesignTimeProvider)m_ParentItem);
 | 
						|
            //    }
 | 
						|
            //}
 | 
						|
            //else
 | 
						|
            //{
 | 
						|
            //    foreach(BaseItem objItem in m_ParentItem.SubItems)
 | 
						|
            //    {
 | 
						|
            //        if(objItem==DragItem)
 | 
						|
            //            continue;
 | 
						|
            //        IDesignTimeProvider provider=objItem as IDesignTimeProvider;
 | 
						|
            //        if(provider!=null)
 | 
						|
            //        {
 | 
						|
            //            objInsertPos=provider.GetInsertPosition(pScreen, DragItem);
 | 
						|
            //            if(objInsertPos!=null)
 | 
						|
            //                break;
 | 
						|
            //        }
 | 
						|
            //    }
 | 
						|
            //}
 | 
						|
            //return objInsertPos;
 | 
						|
		}
 | 
						|
 | 
						|
		public void DrawReversibleMarker(int iPos, bool Before)
 | 
						|
		{
 | 
						|
			Rectangle r, rl,rr;
 | 
						|
 | 
						|
			if(iPos>=0)
 | 
						|
			{
 | 
						|
				BaseItem objItem=m_ParentItem.SubItems[iPos];
 | 
						|
				if(objItem.DesignInsertMarker!=eDesignInsertPosition.None)
 | 
						|
					objItem.DesignInsertMarker=eDesignInsertPosition.None;
 | 
						|
				else if(Before)
 | 
						|
					objItem.DesignInsertMarker=eDesignInsertPosition.Before;
 | 
						|
				else
 | 
						|
					objItem.DesignInsertMarker=eDesignInsertPosition.After;
 | 
						|
				return;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				r=new Rectangle(this.ClientRectangle.Left+2,this.ClientRectangle.Top+2,this.ClientRectangle.Width-4,1);
 | 
						|
				rl=new Rectangle(this.ClientRectangle.Left+1,this.ClientRectangle.Top,1,5);
 | 
						|
				rr=new Rectangle(this.ClientRectangle.Right-2,this.ClientRectangle.Top,1,5);
 | 
						|
			}
 | 
						|
 | 
						|
            //r.Location=this.PointToScreen(r.Location);
 | 
						|
            //rl.Location=this.PointToScreen(rl.Location);
 | 
						|
            //rr.Location=this.PointToScreen(rr.Location);
 | 
						|
            //ControlPaint.DrawReversibleFrame(r,SystemColors.Control,FrameStyle.Thick);
 | 
						|
            //ControlPaint.DrawReversibleFrame(rl,SystemColors.Control,FrameStyle.Thick);
 | 
						|
            //ControlPaint.DrawReversibleFrame(rr,SystemColors.Control,FrameStyle.Thick);
 | 
						|
		}
 | 
						|
		public void InsertItemAt(BaseItem objItem, int iPos, bool Before)
 | 
						|
		{
 | 
						|
			if(!Before)
 | 
						|
			{
 | 
						|
				//objItem.BeginGroup=true; //!objItem.BeginGroup;
 | 
						|
				if(iPos+1>=m_ParentItem.SubItems.Count)
 | 
						|
					m_ParentItem.SubItems.Add(objItem);
 | 
						|
				else
 | 
						|
					m_ParentItem.SubItems.Add(objItem,iPos+1);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				//objItem.BeginGroup=false;
 | 
						|
				if(iPos>=m_ParentItem.SubItems.Count)
 | 
						|
					m_ParentItem.SubItems.Add(objItem);
 | 
						|
				else
 | 
						|
					m_ParentItem.SubItems.Add(objItem,iPos);
 | 
						|
			}
 | 
						|
			objItem.ContainerControl=this;
 | 
						|
			ClearHotSubItem();
 | 
						|
			this.RecalcSize();
 | 
						|
 | 
						|
            ISite site = GetSite();
 | 
						|
            if (site != null && m_ParentItem != null)
 | 
						|
            {
 | 
						|
                IComponentChangeService cc = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | 
						|
                if (cc != null)
 | 
						|
                    cc.OnComponentChanged(m_ParentItem, TypeDescriptor.GetProperties(m_ParentItem)["SubItems"], null, null);
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
		public class PopupMenuAccessibleObject : Control.ControlAccessibleObject
 | 
						|
		{
 | 
						|
			MenuPanel m_Owner = null;
 | 
						|
			public PopupMenuAccessibleObject(MenuPanel owner):base(owner)
 | 
						|
			{
 | 
						|
				m_Owner = owner;
 | 
						|
			}
 | 
						|
 | 
						|
			internal void GenerateEvent(BaseItem sender, System.Windows.Forms.AccessibleEvents e)
 | 
						|
			{
 | 
						|
				if(m_Owner==null)
 | 
						|
					return;
 | 
						|
				if(m_Owner!=null && m_Owner.m_ParentItem!=null)
 | 
						|
				{
 | 
						|
					int	iChild = m_Owner.m_ParentItem.SubItems.IndexOf(sender);
 | 
						|
					if(iChild>=0)
 | 
						|
					{
 | 
						|
						m_Owner.AccessibilityNotifyClients(e,iChild);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			internal void GenerateEvent(System.Windows.Forms.AccessibleEvents e)
 | 
						|
			{
 | 
						|
				if(m_Owner==null)
 | 
						|
					return;
 | 
						|
				m_Owner.AccessibilityNotifyClients(e,-1);
 | 
						|
            }
 | 
						|
 | 
						|
            //public override string Name 
 | 
						|
            //{
 | 
						|
            //    get
 | 
						|
            //    {
 | 
						|
            //        if(m_Owner==null)
 | 
						|
            //            return "";
 | 
						|
            //        return m_Owner.AccessibleName;
 | 
						|
            //    }
 | 
						|
            //    set
 | 
						|
            //    {
 | 
						|
            //        if(m_Owner==null)
 | 
						|
            //            return;
 | 
						|
            //        m_Owner.AccessibleName = value;
 | 
						|
            //    }
 | 
						|
            //}
 | 
						|
 | 
						|
            //public override string Description
 | 
						|
            //{
 | 
						|
            //    get
 | 
						|
            //    {
 | 
						|
            //        if(m_Owner==null)
 | 
						|
            //            return "";
 | 
						|
            //        return m_Owner.AccessibleDescription;
 | 
						|
            //    }
 | 
						|
            //}
 | 
						|
 | 
						|
			public override AccessibleRole Role
 | 
						|
			{
 | 
						|
				get
 | 
						|
				{
 | 
						|
					if(m_Owner==null)
 | 
						|
						return AccessibleRole.None;
 | 
						|
					return m_Owner.AccessibleRole;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			public override AccessibleObject Parent 
 | 
						|
			{
 | 
						|
				get
 | 
						|
				{
 | 
						|
                    if (m_Owner == null || m_Owner.ParentItem == null)
 | 
						|
                        return null;
 | 
						|
					return m_Owner.ParentItem.AccessibleObject;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			public override Rectangle Bounds 
 | 
						|
			{
 | 
						|
				get
 | 
						|
				{
 | 
						|
					if(m_Owner==null)
 | 
						|
						return Rectangle.Empty;
 | 
						|
					return this.m_Owner.DisplayRectangle;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			public override int GetChildCount()
 | 
						|
			{
 | 
						|
				if(m_Owner!=null && m_Owner.m_ParentItem!=null)
 | 
						|
					return this.m_Owner.m_ParentItem.SubItems.Count;
 | 
						|
				return 0;
 | 
						|
			}
 | 
						|
 | 
						|
			public override System.Windows.Forms.AccessibleObject GetChild(int iIndex)
 | 
						|
			{
 | 
						|
				if(m_Owner!=null && m_Owner.m_ParentItem!=null)
 | 
						|
					return this.m_Owner.m_ParentItem.SubItems[iIndex].AccessibleObject;
 | 
						|
				return null;
 | 
						|
			}
 | 
						|
 | 
						|
			public override AccessibleStates State
 | 
						|
			{
 | 
						|
				get
 | 
						|
				{
 | 
						|
					if(m_Owner==null || m_Owner.IsDisposed)
 | 
						|
						return AccessibleStates.Unavailable;
 | 
						|
 | 
						|
					return AccessibleStates.Floating;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			public override void Select(AccessibleSelection flags){}
 | 
						|
			public override void DoDefaultAction() {}
 | 
						|
 | 
						|
			//			public virtual string DefaultAction {get;}
 | 
						|
			//			public virtual AccessibleStates State {get;}
 | 
						|
			//			public virtual void DoDefaultAction();
 | 
						|
			//			public virtual bool Equals(object obj);
 | 
						|
			//			public static bool Equals(object objA,object objB);
 | 
						|
			//			public virtual AccessibleObject GetFocused();
 | 
						|
			//			public virtual AccessibleObject GetSelected();
 | 
						|
			//			public virtual AccessibleObject HitTest(int xScreen,int yScreen);
 | 
						|
			//			public virtual AccessibleObject Navigate(AccessibleNavigation navdir);
 | 
						|
		}
 | 
						|
    }
 | 
						|
}
 |