747 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			747 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for ControlContainerItem.
 | 
						|
	/// </summary>
 | 
						|
    [System.ComponentModel.ToolboxItem(false), System.ComponentModel.DesignTimeVisible(false), Designer("DevComponents.DotNetBar.Design.SimpleBaseItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | 
						|
	public class ControlContainerItem:ImageItem,IPersonalizedMenuItem
 | 
						|
	{
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when container control needs to be assigned to the item.
 | 
						|
		/// </summary>
 | 
						|
		public event EventHandler ContainerLoadControl;
 | 
						|
		public delegate void ControlContainerSerializationEventHandler(object sender, ControlContainerSerializationEventArgs e);
 | 
						|
		public event ControlContainerSerializationEventHandler ContainerControlSerialize;
 | 
						|
		public event ControlContainerSerializationEventHandler ContainerControlDeserialize;
 | 
						|
 | 
						|
		// IPersonalizedMenuItem Implementation
 | 
						|
		private eMenuVisibility m_MenuVisibility=eMenuVisibility.VisibleAlways;
 | 
						|
		private bool m_RecentlyUsed=false;
 | 
						|
		private System.Windows.Forms.Control m_Control=null;
 | 
						|
		private bool m_MouseOver=false;
 | 
						|
		private bool m_AllowItemResize=true;
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of ControlContainerItem and assigns item name.
 | 
						|
		/// </summary>
 | 
						|
		public ControlContainerItem():this("","") {}
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of ControlContainerItem and assigns item name.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="sName">Item name.</param>
 | 
						|
		public ControlContainerItem(string sName):this(sName,""){}
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of ControlContainerItem and assigns item name and item text.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="sName">Item name.</param>
 | 
						|
		/// <param name="ItemText">Item text.</param>
 | 
						|
		public ControlContainerItem(string sName, string ItemText):base(sName,ItemText)
 | 
						|
		{
 | 
						|
			m_SupportedOrientation=eSupportedOrientation.Horizontal;
 | 
						|
		}
 | 
						|
 | 
						|
		internal void InitControl()
 | 
						|
		{
 | 
						|
			EventArgs e=new EventArgs();
 | 
						|
			if(ContainerLoadControl!=null)
 | 
						|
				ContainerLoadControl(this,e);
 | 
						|
			IOwnerItemEvents owner=this.GetIOwnerItemEvents();
 | 
						|
			if(owner!=null)
 | 
						|
				owner.InvokeContainerLoadControl(this,e);
 | 
						|
			CustomizeChanged();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Returns the copy of the ControlContainerItem.
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>Copy of the ControlContainerItem.</returns>
 | 
						|
		public override BaseItem Copy()
 | 
						|
		{
 | 
						|
			ControlContainerItem objCopy=new ControlContainerItem(this.Name);
 | 
						|
            objCopy.AllowItemResize = this.AllowItemResize;
 | 
						|
			this.CopyToItem(objCopy);
 | 
						|
			return objCopy;
 | 
						|
		}
 | 
						|
		protected override void CopyToItem(BaseItem copy)
 | 
						|
		{
 | 
						|
			ControlContainerItem objCopy=copy as ControlContainerItem;
 | 
						|
			base.CopyToItem(objCopy);
 | 
						|
			objCopy.ContainerLoadControl=this.ContainerLoadControl;
 | 
						|
			objCopy.InitControl();
 | 
						|
		}
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
		{
 | 
						|
			if(m_Control!=null)
 | 
						|
			{
 | 
						|
                m_Control.Enter -= new EventHandler(HostedControlEnter);
 | 
						|
                m_Control.GotFocus -= new EventHandler(HostedControlGotFocus);
 | 
						|
                m_Control.Resize -= new EventHandler(HostedControlResized);
 | 
						|
//				if(m_Control.Parent!=null && (!m_Control.Parent.Disposing && !(m_Control.Parent is Bar && ((Bar)m_Control.Parent).IsDisposing)))
 | 
						|
//				{
 | 
						|
//					m_Control.Parent.Controls.Remove(m_Control);
 | 
						|
//				}
 | 
						|
				m_Control=null;
 | 
						|
			}
 | 
						|
			base.Dispose(disposing);
 | 
						|
		}
 | 
						|
		protected internal override void Serialize(ItemSerializationContext context)
 | 
						|
		{
 | 
						|
			base.Serialize(context);
 | 
						|
            System.Xml.XmlElement ThisItem = context.ItemXmlElement;
 | 
						|
			ThisItem.SetAttribute("AllowResize",System.Xml.XmlConvert.ToString(m_AllowItemResize));
 | 
						|
 | 
						|
			if(ContainerControlSerialize!=null)
 | 
						|
				this.ContainerControlSerialize(this,new ControlContainerSerializationEventArgs(ThisItem));
 | 
						|
			IOwnerItemEvents owner=this.GetIOwnerItemEvents();
 | 
						|
			if(owner!=null)
 | 
						|
				owner.InvokeContainerControlSerialize(this,new ControlContainerSerializationEventArgs(ThisItem));
 | 
						|
 | 
						|
		}
 | 
						|
		public override void Deserialize(ItemSerializationContext context)
 | 
						|
		{
 | 
						|
			base.Deserialize(context);
 | 
						|
            System.Xml.XmlElement ItemXmlSource = context.ItemXmlElement;
 | 
						|
			m_AllowItemResize=System.Xml.XmlConvert.ToBoolean(ItemXmlSource.GetAttribute("AllowResize"));
 | 
						|
			InitControl();
 | 
						|
 | 
						|
			if(ContainerControlDeserialize!=null)
 | 
						|
				this.ContainerControlDeserialize(this,new ControlContainerSerializationEventArgs(ItemXmlSource));
 | 
						|
			IOwnerItemEvents owner=this.GetIOwnerItemEvents();
 | 
						|
			if(owner!=null)
 | 
						|
				owner.InvokeContainerControlDeserialize(this,new ControlContainerSerializationEventArgs(ItemXmlSource));
 | 
						|
		}
 | 
						|
 | 
						|
		// IPersonalizedMenuItem Impementation
 | 
						|
		/// <summary>
 | 
						|
		/// Indicates item's visiblity when on pop-up menu.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates item's visiblity when on pop-up menu.")]
 | 
						|
		public eMenuVisibility MenuVisibility
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_MenuVisibility;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_MenuVisibility!=value)
 | 
						|
				{
 | 
						|
					m_MenuVisibility=value;
 | 
						|
                    if(ShouldSyncProperties)
 | 
						|
                        BarFunctions.SyncProperty(this, "MenuVisibility");
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Indicates whether item was recently used.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
 | 
						|
		public bool RecentlyUsed
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_RecentlyUsed;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_RecentlyUsed!=value)
 | 
						|
				{
 | 
						|
					m_RecentlyUsed=value;
 | 
						|
                    if(ShouldSyncProperties)
 | 
						|
                        BarFunctions.SyncProperty(this, "RecentlyUsed");
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets/Sets informational text (tooltip) for the item.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(false),DevCoBrowsable(false),System.ComponentModel.DefaultValue(""),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Indicates the text that is displayed when mouse hovers over the item."),System.ComponentModel.Localizable(true)]
 | 
						|
		public override string Tooltip
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
			
 | 
						|
				return base.Tooltip;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				base.Tooltip=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the reference to the control that is managed by the item.
 | 
						|
		/// </summary>
 | 
						|
		[Category("Data"), DefaultValue(null), Description("Indicates the control that is managed by the item.")]
 | 
						|
		public System.Windows.Forms.Control Control
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_Control;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_Control!=null)
 | 
						|
				{
 | 
						|
					if(m_Control.Parent!=null)
 | 
						|
						m_Control.Parent.Controls.Remove(m_Control);
 | 
						|
                    m_Control.Enter -= new EventHandler(HostedControlEnter);
 | 
						|
                    m_Control.GotFocus -= new EventHandler(HostedControlGotFocus);
 | 
						|
                    m_Control.Resize -= new EventHandler(HostedControlResized);
 | 
						|
				}
 | 
						|
				m_Control=value;
 | 
						|
				if(m_Control!=null)
 | 
						|
				{
 | 
						|
                    m_Control.Enter += new EventHandler(HostedControlEnter);
 | 
						|
                    m_Control.GotFocus += new EventHandler(HostedControlGotFocus);
 | 
						|
                    m_Control.Resize += new EventHandler(HostedControlResized);
 | 
						|
					if(m_Control.Parent!=null)
 | 
						|
						m_Control.Parent.Controls.Remove(m_Control);
 | 
						|
					m_Control.Dock=System.Windows.Forms.DockStyle.None;
 | 
						|
 | 
						|
                    //if (m_Control is System.Windows.Forms.ListBox)
 | 
						|
                    //{
 | 
						|
                    //    TypeDescriptor.GetProperties(m_Control)["IntegralHeight"].SetValue(m_Control, false);
 | 
						|
                    //}
 | 
						|
                    //if (!(m_Control is ItemControl) && TypeDescriptor.GetProperties(m_Control).Find("AutoSize", true) != null)
 | 
						|
                    //    TypeDescriptor.GetProperties(m_Control)["AutoSize"].SetValue(m_Control, false);
 | 
						|
 | 
						|
					System.Windows.Forms.Control objCtrl=null;
 | 
						|
					if(this.ContainerControl!=null)
 | 
						|
					{
 | 
						|
						objCtrl=this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
						if(objCtrl!=null)
 | 
						|
						{
 | 
						|
							objCtrl.Controls.Add(m_Control);
 | 
						|
							m_Control.Refresh();
 | 
						|
						}
 | 
						|
					}
 | 
						|
					if(!this.Displayed)
 | 
						|
						m_Control.Visible=false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        void HostedControlResized(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            NeedRecalcSize = true;
 | 
						|
            if (this.ContainerControl is MenuPanel)
 | 
						|
                ((MenuPanel)this.ContainerControl).RecalcLayout();
 | 
						|
        }
 | 
						|
 | 
						|
        private void HostedControlGotFocus(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            SetMenuHotSubItem();
 | 
						|
        }
 | 
						|
 | 
						|
        private void SetMenuHotSubItem()
 | 
						|
        {
 | 
						|
            if (this.IsOnMenu)
 | 
						|
            {
 | 
						|
                MenuPanel panel = this.ContainerControl as MenuPanel;
 | 
						|
                if (panel != null && panel.HotSubItem != this)
 | 
						|
                    panel.HotSubItem = this;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private void HostedControlEnter(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            SetMenuHotSubItem();
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Draws the item.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="g">Target Graphics object.</param>
 | 
						|
		public override void Paint(ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			if(this.SuspendLayout)
 | 
						|
				return;
 | 
						|
 | 
						|
            System.Drawing.Graphics g = pa.Graphics;
 | 
						|
 | 
						|
            if (m_Control != null && m_Control.Visible != this.Displayed && !m_Control.Visible)
 | 
						|
                CustomizeChanged();  // Determine based on customize status				
 | 
						|
 | 
						|
            Rectangle r = this.DisplayRectangle;
 | 
						|
 | 
						|
            Size objImageSize = GetMaxImageSize();
 | 
						|
            bool bOnMenu = this.IsOnMenu;
 | 
						|
            if (bOnMenu && this.Parent is ItemContainer)
 | 
						|
                bOnMenu = false;
 | 
						|
 | 
						|
            if (this.Orientation == eOrientation.Horizontal)
 | 
						|
            {
 | 
						|
                if (bOnMenu && !this.Stretch)
 | 
						|
                {
 | 
						|
                    objImageSize.Width += 7;
 | 
						|
                    r.Width -= objImageSize.Width;
 | 
						|
                    r.X += objImageSize.Width;
 | 
						|
                    if (this.IsOnCustomizeMenu)
 | 
						|
                        objImageSize.Width += objImageSize.Height + 8;
 | 
						|
 | 
						|
                    // Draw side bar
 | 
						|
                    Rectangle sideRect = new Rectangle(m_Rect.Left, m_Rect.Top, objImageSize.Width, m_Rect.Height);
 | 
						|
                    if (this.MenuVisibility == eMenuVisibility.VisibleIfRecentlyUsed && !this.RecentlyUsed)
 | 
						|
                    {
 | 
						|
                        if (!pa.Colors.MenuUnusedSide2.IsEmpty)
 | 
						|
                        {
 | 
						|
                            System.Drawing.Drawing2D.LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(sideRect, pa.Colors.MenuUnusedSide, pa.Colors.MenuUnusedSide2, pa.Colors.MenuUnusedSideGradientAngle);
 | 
						|
                            g.FillRectangle(gradient, sideRect);
 | 
						|
                            gradient.Dispose();
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                            g.FillRectangle(new SolidBrush(pa.Colors.MenuUnusedSide), sideRect);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (!pa.Colors.MenuSide2.IsEmpty)
 | 
						|
                        {
 | 
						|
                            System.Drawing.Drawing2D.LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(sideRect, pa.Colors.MenuSide, pa.Colors.MenuSide2, pa.Colors.MenuSideGradientAngle);
 | 
						|
                            g.FillRectangle(gradient, sideRect);
 | 
						|
                            gradient.Dispose();
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                            g.FillRectangle(new SolidBrush(pa.Colors.MenuSide), sideRect);
 | 
						|
                    }
 | 
						|
                    if (BarFunctions.IsOffice2007Style(EffectiveStyle) && GlobalManager.Renderer is Office2007Renderer)
 | 
						|
                    {
 | 
						|
                        Office2007MenuColorTable mt = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.Menu;
 | 
						|
                        if (mt != null && !mt.SideBorder.IsEmpty)
 | 
						|
                        {
 | 
						|
                            if (pa.RightToLeft)
 | 
						|
                                DisplayHelp.DrawGradientLine(g, sideRect.X + 1, sideRect.Y, sideRect.X + 1, sideRect.Bottom - 1, mt.SideBorder, 1);
 | 
						|
                            else
 | 
						|
                                DisplayHelp.DrawGradientLine(g, sideRect.Right - 2, sideRect.Y, sideRect.Right - 2, sideRect.Bottom - 1, mt.SideBorder, 1);
 | 
						|
                        }
 | 
						|
                        if (mt != null && !mt.SideBorderLight.IsEmpty)
 | 
						|
                        {
 | 
						|
                            if (pa.RightToLeft)
 | 
						|
                                DisplayHelp.DrawGradientLine(g, sideRect.X, sideRect.Y, sideRect.X, sideRect.Bottom - 1, mt.SideBorder, 1);
 | 
						|
                            else
 | 
						|
                                DisplayHelp.DrawGradientLine(g, sideRect.Right - 1, sideRect.Y, sideRect.Right - 1, sideRect.Bottom - 1, mt.SideBorderLight, 1);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
				if(this.IsOnCustomizeMenu)
 | 
						|
				{
 | 
						|
                    if (EffectiveStyle != eDotNetBarStyle.Office2000)
 | 
						|
					{
 | 
						|
						r.X+=(objImageSize.Height+8);
 | 
						|
						r.Width-=(objImageSize.Height+8);
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						r.X+=(objImageSize.Height+4);
 | 
						|
						r.Width-=(objImageSize.Height+4);
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
                if (bOnMenu && EffectiveStyle != eDotNetBarStyle.Office2000)
 | 
						|
				{
 | 
						|
					//g.FillRectangle(new SolidBrush(pa.Colors.MenuBackground),r);
 | 
						|
				}
 | 
						|
				//else if(this.Style==eDotNetBarStyle.OfficeXP && !this.IsOnMenuBar)
 | 
						|
				//	g.FillRectangle(new SolidBrush(ColorFunctions.ToolMenuFocusBackColor(g)),this.DisplayRectangle);
 | 
						|
				//else
 | 
						|
				//	g.FillRectangle(SystemBrushes.Control,this.DisplayRectangle);
 | 
						|
 | 
						|
                // Draw text if needed
 | 
						|
                if (m_Control == null || this.GetDesignMode() || this.IsOnCustomizeMenu)
 | 
						|
				{
 | 
						|
					string text=m_Text;
 | 
						|
					if(text=="")
 | 
						|
						text="Container";
 | 
						|
					eTextFormat objStringFormat=GetStringFormat();
 | 
						|
					Font objFont=this.GetFont();
 | 
						|
					Rectangle rText=new Rectangle(r.X+8,r.Y,r.Width,r.Height);
 | 
						|
                    if (EffectiveStyle == eDotNetBarStyle.Office2000)
 | 
						|
					{
 | 
						|
                        TextDrawing.DrawString(g, text, objFont, SystemColors.ControlText, rText, objStringFormat);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        TextDrawing.DrawString(g, text, objFont, SystemColors.ControlText, rText, objStringFormat);
 | 
						|
                    }
 | 
						|
                    Size textSize = TextDrawing.MeasureString(g, text, objFont, 0, objStringFormat);
 | 
						|
                    r.X += (int)textSize.Width + 8;
 | 
						|
                    r.Width -= ((int)textSize.Width + 8);
 | 
						|
                }
 | 
						|
                else if (m_Control != null)
 | 
						|
                {
 | 
						|
                    r.Inflate(-2, -2);
 | 
						|
                    if (m_AllowItemResize)
 | 
						|
                    {
 | 
						|
                        m_Control.Width = r.Width;
 | 
						|
                    }
 | 
						|
                    Point loc = r.Location;
 | 
						|
                    loc.Offset((r.Width - m_Control.Width) / 2, (r.Height - m_Control.Height) / 2);
 | 
						|
 | 
						|
                    ScrollableControl scc = pa.ContainerControl as ScrollableControl;
 | 
						|
                    if (scc != null && scc.AutoScroll /*&& !(scc is ItemPanel)*/)
 | 
						|
                        loc.Offset(scc.AutoScrollPosition.X, scc.AutoScrollPosition.Y);
 | 
						|
 | 
						|
                    if (m_Control.Location != loc &&
 | 
						|
                        (!(m_Control is Controls.ComboBoxEx && ContainerControl is RibbonBar) || IsOnPopup(this)) || _ControlLocationUpdatePending)
 | 
						|
                    {
 | 
						|
                        m_Control.Location = loc;
 | 
						|
                        _ControlLocationUpdatePending = false;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
				if(this.IsOnCustomizeMenu && this.Visible)
 | 
						|
				{
 | 
						|
					// Draw check box if this item is visible
 | 
						|
					Rectangle rBox=new Rectangle(m_Rect.Left,m_Rect.Top,m_Rect.Height,m_Rect.Height);
 | 
						|
                    if (EffectiveStyle != eDotNetBarStyle.Office2000)
 | 
						|
						rBox.Inflate(-1,-1);
 | 
						|
                    BarFunctions.DrawMenuCheckBox(pa, rBox, EffectiveStyle, m_MouseOver);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
            if (this.Focused && (this.GetDesignMode() || m_Control == null && this.DesignMode))
 | 
						|
            {
 | 
						|
                r = this.DisplayRectangle;
 | 
						|
                r.Inflate(-1, -1);
 | 
						|
                DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder);
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// IBlock member implementation
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DevCoBrowsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public override System.Drawing.Rectangle Bounds
 | 
						|
        {
 | 
						|
            get { return base.Bounds; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (base.Bounds != value)
 | 
						|
                {
 | 
						|
                    bool topLocationChanged = base.Bounds.Top != value.Top;
 | 
						|
                    bool leftLocationChanged = base.Bounds.Left != value.Left;
 | 
						|
                    base.Bounds = value;
 | 
						|
                    if (topLocationChanged || leftLocationChanged)
 | 
						|
                        UpdateControlLocation();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
	    private bool _ControlLocationUpdatePending = false;
 | 
						|
        private void UpdateControlLocation()
 | 
						|
        {
 | 
						|
            if (m_Control == null) return;
 | 
						|
            if (this.IsLayoutPassInProgress)
 | 
						|
            {
 | 
						|
                _ControlLocationUpdatePending = true;
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            Rectangle r = this.DisplayRectangle;
 | 
						|
            r.Inflate(-2, -2);
 | 
						|
            m_Control.Location = r.Location;
 | 
						|
            _ControlLocationUpdatePending = false;
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Overridden. Recalculates the size of the item.
 | 
						|
		/// </summary>
 | 
						|
		public override void RecalcSize()
 | 
						|
		{
 | 
						|
			if(this.SuspendLayout)
 | 
						|
				return;
 | 
						|
 | 
						|
			bool bOnMenu=this.IsOnMenu;
 | 
						|
 | 
						|
			if(m_Control==null && !this.DesignMode)
 | 
						|
				InitControl();
 | 
						|
 | 
						|
            // Default Height
 | 
						|
			if(this.Parent!=null && this.Parent is ImageItem)
 | 
						|
				m_Rect.Height=((ImageItem)this.Parent).SubItemsImageSize.Height+4;
 | 
						|
			else
 | 
						|
				m_Rect.Height=this.SubItemsImageSize.Height+4;
 | 
						|
 | 
						|
            if (EffectiveStyle == eDotNetBarStyle.OfficeXP || EffectiveStyle == eDotNetBarStyle.Office2003 || EffectiveStyle == eDotNetBarStyle.VS2005)
 | 
						|
			{
 | 
						|
				if(m_Control!=null && m_Rect.Height<(m_Control.Height+2))
 | 
						|
					m_Rect.Height=m_Control.Height+2;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(m_Control!=null && m_Rect.Height<(m_Control.Height+2))
 | 
						|
					m_Rect.Height=m_Control.Height+2;
 | 
						|
			}
 | 
						|
                
 | 
						|
			// Default width
 | 
						|
			if(m_Control!=null)
 | 
						|
			{
 | 
						|
                if (this.Stretch)
 | 
						|
                    m_Rect.Width = 32;
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    m_Rect.Width = m_Control.Width + 4;
 | 
						|
                }
 | 
						|
			}
 | 
						|
			else
 | 
						|
				m_Rect.Width=64+4;
 | 
						|
 | 
						|
			// Calculate Item Height
 | 
						|
			if(m_Control==null)
 | 
						|
			{
 | 
						|
				string text=m_Text;
 | 
						|
				if(text=="")
 | 
						|
					text="Container";
 | 
						|
				System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
				if(objCtrl!=null && IsHandleValid(objCtrl))
 | 
						|
				{
 | 
						|
					Graphics g=BarFunctions.CreateGraphics(objCtrl);
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
                        Size textSize = TextDrawing.MeasureString(g, text, GetFont(), 0, GetStringFormat());
 | 
						|
                        if (textSize.Height > this.SubItemsImageSize.Height && textSize.Height > m_Rect.Height)
 | 
						|
                            m_Rect.Height = (int)textSize.Height + 4;
 | 
						|
                        m_Rect.Width = (int)textSize.Width + 8;
 | 
						|
                    }
 | 
						|
                    finally
 | 
						|
                    {
 | 
						|
                        g.Dispose();
 | 
						|
                    }
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			Size objImageSize=GetMaxImageSize();
 | 
						|
            if (this.IsOnMenu && EffectiveStyle != eDotNetBarStyle.Office2000 && !this.Stretch && !(this.Parent is ItemContainer))
 | 
						|
			{
 | 
						|
				// THis is side bar that will need to be drawn for DotNet style
 | 
						|
				m_Rect.Width+=(objImageSize.Width+7);
 | 
						|
			}
 | 
						|
 | 
						|
			if(this.IsOnCustomizeMenu)
 | 
						|
				m_Rect.Width+=(objImageSize.Height+2);
 | 
						|
 | 
						|
			// Always call base implementation to reset resize flag
 | 
						|
			base.RecalcSize();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Called when size of the item is changed externally.
 | 
						|
		/// </summary>
 | 
						|
		protected override void OnExternalSizeChange()
 | 
						|
		{
 | 
						|
			base.OnExternalSizeChange();
 | 
						|
            if(m_AllowItemResize)
 | 
						|
			    NeedRecalcSize=true;
 | 
						|
		}
 | 
						|
 | 
						|
		protected internal override void OnContainerChanged(object objOldContainer)
 | 
						|
		{	
 | 
						|
			base.OnContainerChanged(objOldContainer);
 | 
						|
			if(m_Control!=null)
 | 
						|
			{
 | 
						|
				System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
				if(m_Control.Parent!=null && objCtrl!=m_Control.Parent)
 | 
						|
					m_Control.Parent.Controls.Remove(m_Control);
 | 
						|
 | 
						|
				if(objCtrl!=null && m_Control.Parent==null)
 | 
						|
				{
 | 
						|
					objCtrl.Controls.Add(m_Control);
 | 
						|
					m_Control.Refresh();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected internal override void OnVisibleChanged(bool newValue)
 | 
						|
		{
 | 
						|
			if(m_Control!=null && !newValue)
 | 
						|
				m_Control.Visible=newValue;
 | 
						|
			base.OnVisibleChanged(newValue);
 | 
						|
		}
 | 
						|
		protected override void OnDisplayedChanged()
 | 
						|
		{
 | 
						|
            if (!this.Displayed && m_Control != null && !(this.IsOnCustomizeMenu || this.IsOnCustomizeDialog || this.GetDesignMode()))
 | 
						|
			{
 | 
						|
				m_Control.Visible=this.Displayed;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnIsOnCustomizeDialogChanged()
 | 
						|
		{
 | 
						|
			base.OnIsOnCustomizeDialogChanged();
 | 
						|
			CustomizeChanged();
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnDesignModeChanged()
 | 
						|
		{
 | 
						|
			base.OnDesignModeChanged();
 | 
						|
			CustomizeChanged();
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnIsOnCustomizeMenuChanged()
 | 
						|
		{
 | 
						|
			base.OnIsOnCustomizeMenuChanged();
 | 
						|
			CustomizeChanged();
 | 
						|
		}
 | 
						|
 | 
						|
        private bool m_CustomizeChangedExecuting = false;
 | 
						|
        private void CustomizeChanged()
 | 
						|
        {
 | 
						|
	        if(m_Control!=null)
 | 
						|
	        {
 | 
						|
                if (m_CustomizeChangedExecuting) return;
 | 
						|
                m_CustomizeChangedExecuting = true;
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    if (this.IsOnCustomizeMenu || this.IsOnCustomizeDialog || this.GetDesignMode())
 | 
						|
                    {
 | 
						|
                        m_Control.Visible = false;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        m_Control.Visible = this.Displayed;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                finally
 | 
						|
                {
 | 
						|
                    m_CustomizeChangedExecuting = false;
 | 
						|
                }
 | 
						|
	        }
 | 
						|
        }
 | 
						|
 | 
						|
		private Size GetMaxImageSize()
 | 
						|
		{
 | 
						|
			if(m_Parent!=null)
 | 
						|
			{
 | 
						|
				ImageItem objParentImageItem=m_Parent as ImageItem;
 | 
						|
				if(objParentImageItem!=null)
 | 
						|
					return objParentImageItem.SubItemsImageSize;
 | 
						|
				else
 | 
						|
					return this.ImageSize;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				return this.ImageSize;
 | 
						|
		}
 | 
						|
        private eTextFormat GetStringFormat()
 | 
						|
		{
 | 
						|
            eTextFormat format = eTextFormat.Default;
 | 
						|
            format |= eTextFormat.SingleLine;
 | 
						|
            format |= eTextFormat.EndEllipsis;
 | 
						|
            format |= eTextFormat.VerticalCenter;
 | 
						|
            return format;
 | 
						|
 | 
						|
 | 
						|
            //StringFormat sfmt=BarFunctions.CreateStringFormat(); //new StringFormat(StringFormat.GenericDefault);
 | 
						|
            //sfmt.HotkeyPrefix=System.Drawing.Text.HotkeyPrefix.Show;
 | 
						|
            ////sfmt.FormatFlags=sfmt.FormatFlags & ~(sfmt.FormatFlags & StringFormatFlags.DisableKerning);
 | 
						|
            //sfmt.FormatFlags=sfmt.FormatFlags | StringFormatFlags.NoWrap;
 | 
						|
            //sfmt.Trimming=StringTrimming.EllipsisCharacter;
 | 
						|
            //sfmt.Alignment=System.Drawing.StringAlignment.Near;
 | 
						|
            //sfmt.LineAlignment=System.Drawing.StringAlignment.Center;
 | 
						|
 | 
						|
            //return sfmt;
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Returns the Font object to be used for drawing the item text.
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>Font object.</returns>
 | 
						|
		protected virtual Font GetFont()
 | 
						|
		{
 | 
						|
			System.Windows.Forms.Control objCtrl=this.ContainerControl as System.Windows.Forms.Control;
 | 
						|
			if(objCtrl!=null)
 | 
						|
				return (Font)objCtrl.Font;
 | 
						|
            return SystemFonts.DefaultFont;
 | 
						|
		}
 | 
						|
		protected internal override bool IsAnyOnHandle(IntPtr iHandle)
 | 
						|
		{
 | 
						|
			bool bRet=base.IsAnyOnHandle(iHandle);
 | 
						|
			if(!bRet && m_Control!=null && m_Control.Handle==iHandle)
 | 
						|
				bRet=true;
 | 
						|
			return bRet;
 | 
						|
		}
 | 
						|
		protected override void OnEnabledChanged()
 | 
						|
		{
 | 
						|
			base.OnEnabledChanged();
 | 
						|
			if(m_Control!=null)
 | 
						|
				m_Control.Enabled=this.Enabled;
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override void InternalMouseEnter()
 | 
						|
		{
 | 
						|
			base.InternalMouseEnter();
 | 
						|
			if(!m_MouseOver)
 | 
						|
			{
 | 
						|
				m_MouseOver=true;
 | 
						|
                if(this.IsOnCustomizeMenu && this.Visible)
 | 
						|
				    this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override void InternalMouseLeave()
 | 
						|
		{
 | 
						|
			base.InternalMouseLeave();
 | 
						|
			if(m_MouseOver)
 | 
						|
			{
 | 
						|
				m_MouseOver=false;
 | 
						|
                if (this.IsOnCustomizeMenu && this.Visible)
 | 
						|
				    this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Specifies whether contained control can be automatically resized to fill the item container.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Specifies whether contained control can be automatically resized to fill the item container.")]
 | 
						|
		public bool AllowItemResize
 | 
						|
		{
 | 
						|
			get {return m_AllowItemResize;}
 | 
						|
			set {m_AllowItemResize=value;}
 | 
						|
		}
 | 
						|
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
		public override void OnGotFocus()
 | 
						|
		{
 | 
						|
			base.OnGotFocus();
 | 
						|
			if(m_Control==null)
 | 
						|
				return;
 | 
						|
            if (m_Control.Focused || this.IsOnCustomizeMenu || this.IsOnCustomizeDialog || this.GetDesignMode())
 | 
						|
				return;
 | 
						|
			m_Control.Focus();
 | 
						|
		}
 | 
						|
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override bool IsWindowed
 | 
						|
		{
 | 
						|
			get {return true;}
 | 
						|
		}
 | 
						|
 | 
						|
        private bool GetDesignMode()
 | 
						|
        {
 | 
						|
            if (this.ContainerControl is IBarDesignerServices && ((IBarDesignerServices)this.ContainerControl).Designer != null)
 | 
						|
                return false;
 | 
						|
            return base.DesignMode;
 | 
						|
        }
 | 
						|
	}
 | 
						|
 | 
						|
	public class ControlContainerSerializationEventArgs : EventArgs 
 | 
						|
	{
 | 
						|
		private readonly System.Xml.XmlElement xmlstore;
 | 
						|
		public ControlContainerSerializationEventArgs(System.Xml.XmlElement xmlstorage) 
 | 
						|
		{
 | 
						|
			this.xmlstore=xmlstorage;
 | 
						|
		}
 | 
						|
		public System.Xml.XmlElement XmlStorage
 | 
						|
		{
 | 
						|
			get{return this.xmlstore;}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |