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