1561 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1561 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Text;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    public abstract class PopupItemControl: Control, IThemeCache, IMessageHandlerClient,
 | 
						|
        IOwnerMenuSupport, IOwner, IRenderingSupport, IAccessibilitySupport, IOwnerLocalize
 | 
						|
    {
 | 
						|
        #region Events
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when popup of type container is loading.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when popup of type container is loading.")]
 | 
						|
        public event EventHandler PopupContainerLoad;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when popup of type container is unloading.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when popup of type container is unloading.")]
 | 
						|
        public event EventHandler PopupContainerUnload;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when popup item is about to open.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when popup item is about to open.")]
 | 
						|
        public event EventHandler PopupOpen;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when popup item is closing.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when popup item is closing.")]
 | 
						|
        public event EventHandler PopupClose;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs just before popup window is shown.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs just before popup window is shown.")]
 | 
						|
        public event EventHandler PopupShowing;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when Control is looking for translated text for one of the internal text that are
 | 
						|
        /// displayed on menus, toolbars and customize forms. You need to set Handled=true if you want
 | 
						|
        /// your custom text to be used instead of the built-in system value.
 | 
						|
        /// </summary>
 | 
						|
        public event DotNetBarManager.LocalizeStringEventHandler LocalizeString;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Private Variables
 | 
						|
        private PopupItem m_PopupItem = null;
 | 
						|
        private ColorScheme m_ColorScheme = null;
 | 
						|
        private bool m_AntiAlias = false;
 | 
						|
        private bool m_FilterInstalled = false;
 | 
						|
        private bool m_MenuEventSupport = false;
 | 
						|
        private bool m_MenuFocus = false;
 | 
						|
        private Timer m_ActiveWindowTimer = null;
 | 
						|
        private IntPtr m_ForegroundWindow = IntPtr.Zero;
 | 
						|
        private IntPtr m_ActiveWindow = IntPtr.Zero;
 | 
						|
        private Hashtable m_ShortcutTable = new Hashtable();
 | 
						|
        private BaseItem m_ExpandedItem = null;
 | 
						|
        private BaseItem m_FocusItem = null;
 | 
						|
		private System.Windows.Forms.ImageList m_ImageList=null;
 | 
						|
		private System.Windows.Forms.ImageList m_ImageListMedium=null;
 | 
						|
		private System.Windows.Forms.ImageList m_ImageListLarge=null;
 | 
						|
        private bool m_DisabledImagesGrayScale = true;
 | 
						|
 | 
						|
        // Theme Caching Support
 | 
						|
        private ThemeWindow m_ThemeWindow = null;
 | 
						|
        private ThemeRebar m_ThemeRebar = null;
 | 
						|
        private ThemeToolbar m_ThemeToolbar = null;
 | 
						|
        private ThemeHeader m_ThemeHeader = null;
 | 
						|
        private ThemeScrollBar m_ThemeScrollBar = null;
 | 
						|
        private ThemeExplorerBar m_ThemeExplorerBar = null;
 | 
						|
        private ThemeProgress m_ThemeProgress = null;
 | 
						|
        private ThemeButton m_ThemeButton = null;
 | 
						|
        private BaseItem m_DoDefaultActionItem = null;
 | 
						|
        
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructor
 | 
						|
        public PopupItemControl()
 | 
						|
        {
 | 
						|
            PainterFactory.InitFactory();
 | 
						|
            if (!ColorFunctions.ColorsLoaded)
 | 
						|
            {
 | 
						|
                NativeFunctions.RefreshSettings();
 | 
						|
                NativeFunctions.OnDisplayChange();
 | 
						|
                ColorFunctions.LoadColors();
 | 
						|
            }
 | 
						|
            
 | 
						|
            m_PopupItem = CreatePopupItem();
 | 
						|
            m_PopupItem.GlobalItem = false;
 | 
						|
            m_PopupItem.ContainerControl = this;
 | 
						|
            m_PopupItem.Style = eDotNetBarStyle.Office2007;
 | 
						|
            m_PopupItem.SetOwner(this);
 | 
						|
            m_ColorScheme = new ColorScheme(m_PopupItem.EffectiveStyle);
 | 
						|
 | 
						|
            this.SetStyle(ControlStyles.UserPaint, true);
 | 
						|
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 | 
						|
            this.SetStyle(ControlStyles.Opaque, true);
 | 
						|
            this.SetStyle(ControlStyles.ResizeRedraw, true);
 | 
						|
            this.SetStyle(DisplayHelp.DoubleBufferFlag, true);
 | 
						|
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 | 
						|
            this.SetStyle(ControlStyles.ContainerControl, false);
 | 
						|
 | 
						|
            this.SetStyle(ControlStyles.Selectable, true);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            if (disposing)
 | 
						|
            {
 | 
						|
                if (m_PopupItem != null)
 | 
						|
                {
 | 
						|
                    m_PopupItem.Dispose();
 | 
						|
                    //m_PopupItem = null; In designer the control keeps on being used after it has been disposed and can generate unpredictable results crashing the designer.
 | 
						|
                }
 | 
						|
            }
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        protected abstract PopupItem CreatePopupItem();
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Notifies the accessibility client applications of the specified AccessibleEvents for the specified child control.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="accEvent">The AccessibleEvents object to notify the accessibility client applications of. </param>
 | 
						|
        /// <param name="childID">The child Control to notify of the accessible event.</param>
 | 
						|
        internal void InternalAccessibilityNotifyClients(AccessibleEvents accEvent, int childID)
 | 
						|
        {
 | 
						|
            this.AccessibilityNotifyClients(accEvent, childID);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
 | 
						|
        {
 | 
						|
            if (Dpi.RecordScalePerControl)
 | 
						|
                Dpi.SetScaling(factor);
 | 
						|
            base.ScaleControl(factor, specified);
 | 
						|
        }
 | 
						|
 | 
						|
        #if FRAMEWORK20
 | 
						|
        protected override void OnBindingContextChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnBindingContextChanged(e);
 | 
						|
            if (m_PopupItem != null) m_PopupItem.UpdateBindings();
 | 
						|
        }
 | 
						|
        #endif
 | 
						|
        protected override void OnFontChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            if (m_PopupItem != null)
 | 
						|
                BarUtilities.InvalidateFontChange(m_PopupItem);
 | 
						|
            base.OnFontChanged(e);
 | 
						|
            this.RecalcLayout();
 | 
						|
        }
 | 
						|
        
 | 
						|
        protected override void OnEnabledChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            if (m_PopupItem != null) m_PopupItem.Enabled = this.Enabled;
 | 
						|
            base.OnEnabledChanged(e);
 | 
						|
        }
 | 
						|
       
 | 
						|
        protected internal virtual ColorScheme GetColorScheme()
 | 
						|
        {
 | 
						|
            if (BarFunctions.IsOffice2007Style(this.Style))
 | 
						|
            {
 | 
						|
                BaseRenderer r = GetRenderer();
 | 
						|
                if (r is Office2007Renderer)
 | 
						|
                    return ((Office2007Renderer)r).ColorTable.LegacyColors;
 | 
						|
            }
 | 
						|
            return m_ColorScheme;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Forces the button to perform internal layout.
 | 
						|
        /// </summary>
 | 
						|
        public void RecalcLayout()
 | 
						|
        {
 | 
						|
            RecalcSize();
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        protected abstract void RecalcSize();
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void SetDesignMode(bool value)
 | 
						|
        {
 | 
						|
            if (m_PopupItem != null)
 | 
						|
                m_PopupItem.SetDesignMode(value);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets/Sets the visual style for the button.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Appearance"), Description("Specifies the visual style of the button."), DefaultValue(eDotNetBarStyle.Office2007)]
 | 
						|
        public virtual eDotNetBarStyle Style
 | 
						|
        {
 | 
						|
            get { return (InternalStyle); }
 | 
						|
            set { InternalStyle = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        protected eDotNetBarStyle InternalStyle
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_PopupItem.Style;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_ColorScheme.Style = value;
 | 
						|
                m_PopupItem.Style = value;
 | 
						|
                OnDotNetBarStyleChanged();
 | 
						|
                this.RecalcLayout();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnDotNetBarStyleChanged() { }
 | 
						|
        /// <summary>
 | 
						|
        /// Creates the Graphics object for the control.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>The Graphics object for the control.</returns>
 | 
						|
        public new Graphics CreateGraphics()
 | 
						|
        {
 | 
						|
            Graphics g = base.CreateGraphics();
 | 
						|
            if (m_AntiAlias)
 | 
						|
            {
 | 
						|
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 | 
						|
				#if FRAMEWORK20
 | 
						|
                if (!SystemInformation.IsFontSmoothingEnabled)
 | 
						|
                #endif
 | 
						|
                    g.TextRenderingHint = DisplayHelp.AntiAliasTextRenderingHint;
 | 
						|
            }
 | 
						|
            return g;
 | 
						|
        }
 | 
						|
 | 
						|
        internal virtual ItemPaintArgs GetItemPaintArgs(Graphics g)
 | 
						|
        {
 | 
						|
            ItemPaintArgs pa = new ItemPaintArgs(this, this, g, GetColorScheme());
 | 
						|
            pa.Renderer = this.GetRenderer();
 | 
						|
            pa.ButtonStringFormat = pa.ButtonStringFormat & ~(pa.ButtonStringFormat & eTextFormat.SingleLine);
 | 
						|
            pa.ButtonStringFormat |= (eTextFormat.WordBreak | eTextFormat.EndEllipsis);
 | 
						|
            return pa;
 | 
						|
        }
 | 
						|
 | 
						|
        private Rendering.BaseRenderer m_DefaultRenderer = null;
 | 
						|
        private Rendering.BaseRenderer m_Renderer = null;
 | 
						|
        private eRenderMode m_RenderMode = eRenderMode.Global;
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the renderer control will be rendered with.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>The current renderer.</returns>
 | 
						|
        public virtual Rendering.BaseRenderer GetRenderer()
 | 
						|
        {
 | 
						|
            if (m_RenderMode == eRenderMode.Global && Rendering.GlobalManager.Renderer != null)
 | 
						|
                return Rendering.GlobalManager.Renderer;
 | 
						|
            else if (m_RenderMode == eRenderMode.Custom && m_Renderer != null)
 | 
						|
                return m_Renderer;
 | 
						|
 | 
						|
            if (m_DefaultRenderer == null)
 | 
						|
            {
 | 
						|
                if (BarFunctions.IsOffice2007Style(this.Style))
 | 
						|
                    m_DefaultRenderer = new Rendering.Office2007Renderer();
 | 
						|
                //else
 | 
						|
                //    m_DefaultRenderer = new Rendering.Office12Renderer();
 | 
						|
            }
 | 
						|
 | 
						|
            return m_Renderer;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the rendering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must
 | 
						|
        /// also be set to the custom renderer that will be used.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DefaultValue(eRenderMode.Global)]
 | 
						|
        public eRenderMode RenderMode
 | 
						|
        {
 | 
						|
            get { return m_RenderMode; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_RenderMode != value)
 | 
						|
                {
 | 
						|
                    m_RenderMode = value;
 | 
						|
                    this.Invalidate(true);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer
 | 
						|
        /// specified here to be used.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DefaultValue(null)]
 | 
						|
        public DevComponents.DotNetBar.Rendering.BaseRenderer Renderer
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_Renderer;
 | 
						|
            }
 | 
						|
            set { m_Renderer = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <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
 | 
						|
            {
 | 
						|
                if (m_AntiAlias != value)
 | 
						|
                {
 | 
						|
                    m_AntiAlias = value;
 | 
						|
                    InvalidateAutoSize();
 | 
						|
                    this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void InvalidateAutoSize()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets button Color Scheme. ColorScheme does not apply to Office2007 styled buttons.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DevCoBrowsable(false), Category("Appearance"), Description("Gets or sets Bar Color Scheme."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
        public ColorScheme ColorScheme
 | 
						|
        {
 | 
						|
            get { return m_ColorScheme; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value == null)
 | 
						|
                    throw new ArgumentException("NULL is not a valid value for this property.");
 | 
						|
                m_ColorScheme = value;
 | 
						|
                if (this.Visible)
 | 
						|
                    this.Invalidate();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        private bool ShouldSerializeColorScheme()
 | 
						|
        {
 | 
						|
            return m_ColorScheme.SchemeChanged;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Specifies whether button is drawn using Windows Themes when running on OS that supports themes like Windows XP.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), DefaultValue(false), Category("Appearance"), Description("Specifies whether button is drawn using Themes when running on OS that supports themes like Windows XP.")]
 | 
						|
        public virtual bool ThemeAware
 | 
						|
        {
 | 
						|
            get { return m_PopupItem.ThemeAware; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_PopupItem.ThemeAware = value;
 | 
						|
                this.RecalcLayout();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether Windows Themes should be used to draw the button.
 | 
						|
        /// </summary>
 | 
						|
        protected bool IsThemed
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (ThemeAware && m_PopupItem.EffectiveStyle != eDotNetBarStyle.Office2000 && BarFunctions.ThemedOS && Themes.ThemesActive)
 | 
						|
                    return true;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public BaseItem InternalItem
 | 
						|
        {
 | 
						|
            get { return m_PopupItem; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IOwnerMenuSupport Implementation
 | 
						|
        private bool m_UseHook = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE.
 | 
						|
        /// </summary>
 | 
						|
        [System.ComponentModel.Browsable(false), DefaultValue(false), System.ComponentModel.Category("Behavior"), System.ComponentModel.Description("Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE.")]
 | 
						|
        public bool UseHook
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_UseHook;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_UseHook = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool GetDesignMode()
 | 
						|
        {
 | 
						|
            return this.DesignMode;
 | 
						|
        }
 | 
						|
        private Hook m_Hook = null;
 | 
						|
        // IOwnerMenuSupport
 | 
						|
        private ArrayList m_RegisteredPopups = new ArrayList();
 | 
						|
        bool IOwnerMenuSupport.PersonalizedAllVisible { get { return false; } set { } }
 | 
						|
        bool IOwnerMenuSupport.ShowFullMenusOnHover { get { return true; } set { } }
 | 
						|
        bool IOwnerMenuSupport.AlwaysShowFullMenus { get { return false; } set { } }
 | 
						|
 | 
						|
        void IOwnerMenuSupport.RegisterPopup(PopupItem objPopup)
 | 
						|
        {
 | 
						|
            this.MenuFocus = true;
 | 
						|
 | 
						|
            if (m_RegisteredPopups.Contains(objPopup))
 | 
						|
                return;
 | 
						|
 | 
						|
            if (!this.GetDesignMode() && !m_UseHook)
 | 
						|
            {
 | 
						|
                if (!m_FilterInstalled)
 | 
						|
                {
 | 
						|
                    MessageHandler.RegisterMessageClient(this);
 | 
						|
                    m_FilterInstalled = true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (m_Hook == null)
 | 
						|
                {
 | 
						|
                    m_Hook = new Hook(this);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (!m_MenuEventSupport)
 | 
						|
                MenuEventSupportHook();
 | 
						|
 | 
						|
            if (m_RegisteredPopups.Count == 0)
 | 
						|
                PopupManager.RegisterPopup((IOwnerMenuSupport)this);
 | 
						|
 | 
						|
            m_RegisteredPopups.Add(objPopup);
 | 
						|
            if (objPopup.GetOwner() != this)
 | 
						|
                objPopup.SetOwner(this);
 | 
						|
        }
 | 
						|
        void IOwnerMenuSupport.UnregisterPopup(PopupItem objPopup)
 | 
						|
        {
 | 
						|
            if (m_RegisteredPopups.Contains(objPopup))
 | 
						|
                m_RegisteredPopups.Remove(objPopup);
 | 
						|
            if (m_RegisteredPopups.Count == 0)
 | 
						|
            {
 | 
						|
                MenuEventSupportUnhook();
 | 
						|
                if (m_Hook != null)
 | 
						|
                {
 | 
						|
                    m_Hook.Dispose();
 | 
						|
                    m_Hook = null;
 | 
						|
                }
 | 
						|
                PopupManager.UnregisterPopup((IOwnerMenuSupport)this);
 | 
						|
                this.MenuFocus = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        bool IOwnerMenuSupport.RelayMouseHover()
 | 
						|
        {
 | 
						|
            foreach (PopupItem popup in m_RegisteredPopups)
 | 
						|
            {
 | 
						|
                Control ctrl = popup.PopupControl;
 | 
						|
                if (ctrl != null && ctrl.DisplayRectangle.Contains(MousePosition))
 | 
						|
                {
 | 
						|
                    if (ctrl is MenuPanel)
 | 
						|
                        ((MenuPanel)ctrl).InternalMouseHover();
 | 
						|
                    else if (ctrl is Bar)
 | 
						|
                        ((Bar)ctrl).InternalMouseHover();
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwnerMenuSupport.ClosePopups()
 | 
						|
        {
 | 
						|
            ClosePopups();
 | 
						|
        }
 | 
						|
 | 
						|
        private void ClosePopups()
 | 
						|
        {
 | 
						|
            ArrayList popupList = new ArrayList(m_RegisteredPopups);
 | 
						|
            foreach (PopupItem objPopup in popupList)
 | 
						|
                objPopup.ClosePopup();
 | 
						|
        }
 | 
						|
 | 
						|
        // Events
 | 
						|
        void IOwnerMenuSupport.InvokePopupClose(PopupItem item, EventArgs e)
 | 
						|
        {
 | 
						|
            if (PopupClose != null)
 | 
						|
                PopupClose(item, e);
 | 
						|
        }
 | 
						|
        void IOwnerMenuSupport.InvokePopupContainerLoad(PopupItem item, EventArgs e)
 | 
						|
        {
 | 
						|
            if (PopupContainerLoad != null)
 | 
						|
                PopupContainerLoad(item, e);
 | 
						|
        }
 | 
						|
        void IOwnerMenuSupport.InvokePopupContainerUnload(PopupItem item, EventArgs e)
 | 
						|
        {
 | 
						|
            if (PopupContainerUnload != null)
 | 
						|
                PopupContainerUnload(item, e);
 | 
						|
        }
 | 
						|
        void IOwnerMenuSupport.InvokePopupOpen(PopupItem item, PopupOpenEventArgs e)
 | 
						|
        {
 | 
						|
            if (PopupOpen != null)
 | 
						|
                PopupOpen(item, e);
 | 
						|
        }
 | 
						|
        void IOwnerMenuSupport.InvokePopupShowing(PopupItem item, EventArgs e)
 | 
						|
        {
 | 
						|
            if (PopupShowing != null)
 | 
						|
                PopupShowing(item, e);
 | 
						|
        }
 | 
						|
        bool IOwnerMenuSupport.ShowPopupShadow { get { return true; } }
 | 
						|
        eMenuDropShadow IOwnerMenuSupport.MenuDropShadow { get { return eMenuDropShadow.SystemDefault; } set { } }
 | 
						|
        ePopupAnimation IOwnerMenuSupport.PopupAnimation { get { return ePopupAnimation.SystemDefault; } set { } }
 | 
						|
        bool IOwnerMenuSupport.AlphaBlendShadow { get { return true; } set { } }
 | 
						|
 | 
						|
        internal bool MenuFocus
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_MenuFocus;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_MenuFocus != value)
 | 
						|
                {
 | 
						|
                    m_MenuFocus = value;
 | 
						|
                    if (m_MenuFocus)
 | 
						|
                    {
 | 
						|
                        SetupActiveWindowTimer();
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        ReleaseActiveWindowTimer();
 | 
						|
                        ClosePopups();
 | 
						|
                    }
 | 
						|
                    this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Active Window Changed Handling
 | 
						|
        /// <summary>
 | 
						|
        /// Sets up timer that watches when active window changes.
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void SetupActiveWindowTimer()
 | 
						|
        {
 | 
						|
            if (m_ActiveWindowTimer != null)
 | 
						|
                return;
 | 
						|
            m_ActiveWindowTimer = new Timer();
 | 
						|
            m_ActiveWindowTimer.Interval = 100;
 | 
						|
            m_ActiveWindowTimer.Tick += new EventHandler(ActiveWindowTimer_Tick);
 | 
						|
 | 
						|
            m_ForegroundWindow = NativeFunctions.GetForegroundWindow();
 | 
						|
            m_ActiveWindow = NativeFunctions.GetActiveWindow();
 | 
						|
 | 
						|
            m_ActiveWindowTimer.Start();
 | 
						|
        }
 | 
						|
 | 
						|
        private void ActiveWindowTimer_Tick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (m_ActiveWindowTimer == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            IntPtr f = NativeFunctions.GetForegroundWindow();
 | 
						|
            IntPtr a = NativeFunctions.GetActiveWindow();
 | 
						|
 | 
						|
            if (f != m_ForegroundWindow || a != m_ActiveWindow)
 | 
						|
            {
 | 
						|
                Control c = Control.FromChildHandle(a);
 | 
						|
                if (c != null)
 | 
						|
                {
 | 
						|
                    do
 | 
						|
                    {
 | 
						|
                        if ((c is MenuPanel || c is Bar || c is PopupContainer || c is PopupContainerControl))
 | 
						|
                            return;
 | 
						|
                        c = c.Parent;
 | 
						|
                    } while (c!=null && c.Parent != null);
 | 
						|
                }
 | 
						|
                m_ActiveWindowTimer.Stop();
 | 
						|
                OnActiveWindowChanged();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Called after change of active window has been detected. SetupActiveWindowTimer must be called to enable detection.
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void OnActiveWindowChanged()
 | 
						|
        {
 | 
						|
            if (this.MenuFocus)
 | 
						|
                this.MenuFocus = false;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Releases and disposes the active window watcher timer.
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void ReleaseActiveWindowTimer()
 | 
						|
        {
 | 
						|
            if (m_ActiveWindowTimer != null)
 | 
						|
            {
 | 
						|
                Timer timer = m_ActiveWindowTimer;
 | 
						|
                m_ActiveWindowTimer = null;
 | 
						|
                timer.Stop();
 | 
						|
                timer.Tick -= new EventHandler(ActiveWindowTimer_Tick);
 | 
						|
                timer.Dispose();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IMessageHandlerClient Implementation
 | 
						|
        bool IMessageHandlerClient.IsModal
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                Form form = this.FindForm();
 | 
						|
                if (form != null && form.Modal && Form.ActiveForm == form)
 | 
						|
                    return true;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        bool IMessageHandlerClient.OnMouseWheel(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            return OnMouseWheel(hWnd, wParam, lParam);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool OnMouseWheel(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        bool IMessageHandlerClient.OnKeyDown(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            return OnKeyDown(hWnd, wParam, lParam);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool EatMenuFilterKeyDown
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected virtual bool OnKeyDown(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            int wParamInt = WinApi.ToInt(wParam);
 | 
						|
            if (m_RegisteredPopups.Count > 0)
 | 
						|
            {
 | 
						|
                if (((BaseItem)m_RegisteredPopups[m_RegisteredPopups.Count - 1]).Parent == null)
 | 
						|
                {
 | 
						|
                    PopupItem objItem = (PopupItem)m_RegisteredPopups[m_RegisteredPopups.Count - 1];
 | 
						|
 | 
						|
                    Control ctrl = objItem.PopupControl as Control;
 | 
						|
                    Control ctrl2 = FromChildHandle(hWnd);
 | 
						|
 | 
						|
                    if (ctrl2 != null)
 | 
						|
                    {
 | 
						|
                        while (ctrl2.Parent != null)
 | 
						|
                            ctrl2 = ctrl2.Parent;
 | 
						|
                    }
 | 
						|
 | 
						|
                    bool bIsOnHandle = false;
 | 
						|
                    if (ctrl2 != null && objItem != null)
 | 
						|
                        bIsOnHandle = objItem.IsAnyOnHandle(ctrl2.Handle);
 | 
						|
 | 
						|
                    bool bNoEat = ctrl != null && ctrl2 != null && ctrl.Handle == ctrl2.Handle || bIsOnHandle;
 | 
						|
 | 
						|
                    if (!bIsOnHandle)
 | 
						|
                    {
 | 
						|
                        Keys key = (Keys)NativeFunctions.MapVirtualKey((uint)wParam, 2);
 | 
						|
                        if (key == Keys.None)
 | 
						|
                            key = (Keys)wParamInt;
 | 
						|
                        
 | 
						|
                        KeyEventArgs keyArgs = new KeyEventArgs(key | Control.ModifierKeys);
 | 
						|
                        objItem.InternalKeyDown(keyArgs);
 | 
						|
                        
 | 
						|
                        if (keyArgs.Handled) bNoEat = false;
 | 
						|
                        if (!EatMenuFilterKeyDown) bNoEat = true;
 | 
						|
                    }
 | 
						|
 | 
						|
                    // Don't eat the message if the pop-up window has focus
 | 
						|
                    if (bNoEat)
 | 
						|
                        return false;
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (this.MenuFocus)
 | 
						|
            {
 | 
						|
                bool bPassToMenu = true;
 | 
						|
                Control ctrl2 = Control.FromChildHandle(hWnd);
 | 
						|
                if (ctrl2 != null)
 | 
						|
                {
 | 
						|
                    while (ctrl2.Parent != null)
 | 
						|
                        ctrl2 = ctrl2.Parent;
 | 
						|
                    if ((ctrl2 is MenuPanel || ctrl2 is ItemControl || ctrl2 is PopupContainer || ctrl2 is PopupContainerControl) && ctrl2.Handle != hWnd)
 | 
						|
                        bPassToMenu = false;
 | 
						|
                }
 | 
						|
 | 
						|
                if (bPassToMenu)
 | 
						|
                {
 | 
						|
                    Keys key = (Keys)NativeFunctions.MapVirtualKey((uint)wParam, 2);
 | 
						|
                    if (key == Keys.None)
 | 
						|
                        key = (Keys)wParamInt;
 | 
						|
                    m_PopupItem.InternalKeyDown(new KeyEventArgs(key));
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (!this.IsParentFormActive)
 | 
						|
                return false;
 | 
						|
 | 
						|
            if (wParamInt >= 0x70 || ModifierKeys != Keys.None || (WinApi.ToInt(lParam) & 0x1000000000) != 0 || wParamInt == 0x2E || wParamInt == 0x2D) // 2E=VK_DELETE, 2D=VK_INSERT
 | 
						|
            {
 | 
						|
                int i = (int)ModifierKeys | wParamInt;
 | 
						|
                return ProcessShortcut((eShortcut)i);
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        private bool ProcessShortcut(eShortcut key)
 | 
						|
        {
 | 
						|
            foreach (eShortcut k in m_PopupItem.Shortcuts)
 | 
						|
            {
 | 
						|
                if (k == key)
 | 
						|
                {
 | 
						|
                    PerformClick();
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return BarFunctions.ProcessItemsShortcuts(key, m_ShortcutTable);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Generates a Click event for the control.
 | 
						|
        /// </summary>
 | 
						|
        public abstract void PerformClick();
 | 
						|
 | 
						|
        protected bool IsParentFormActive
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                // Process only if parent form is active
 | 
						|
                Form form = this.FindForm();
 | 
						|
                if (form == null)
 | 
						|
                    return false;
 | 
						|
                if (form.IsMdiChild)
 | 
						|
                {
 | 
						|
                    if (form.MdiParent == null)
 | 
						|
                        return false;
 | 
						|
                    if (form.MdiParent.ActiveMdiChild != form)
 | 
						|
                        return false;
 | 
						|
                }
 | 
						|
                else if (form != Form.ActiveForm)
 | 
						|
                    return false;
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private PopupDelayedClose m_DelayClose = null;
 | 
						|
        private PopupDelayedClose GetDelayClose()
 | 
						|
        {
 | 
						|
            if (m_DelayClose == null)
 | 
						|
                m_DelayClose = new PopupDelayedClose();
 | 
						|
            return m_DelayClose;
 | 
						|
        }
 | 
						|
 | 
						|
        internal void DesignerNewItemAdded()
 | 
						|
        {
 | 
						|
            this.GetDelayClose().EraseDelayClose();
 | 
						|
        }
 | 
						|
 | 
						|
        bool IMessageHandlerClient.OnMouseDown(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            if (m_RegisteredPopups.Count == 0)
 | 
						|
                return false;
 | 
						|
 | 
						|
            BaseItem[] popups = new BaseItem[m_RegisteredPopups.Count];
 | 
						|
            m_RegisteredPopups.CopyTo(popups);
 | 
						|
            for (int i = popups.Length - 1; i >= 0; i--)
 | 
						|
            {
 | 
						|
                PopupItem objPopup = popups[i] as PopupItem;
 | 
						|
                bool bChildHandle = objPopup.IsAnyOnHandle(hWnd);
 | 
						|
 | 
						|
                if (!bChildHandle)
 | 
						|
                {
 | 
						|
                    System.Windows.Forms.Control cTmp = System.Windows.Forms.Control.FromChildHandle(hWnd);
 | 
						|
                    if (cTmp != null)
 | 
						|
                    {
 | 
						|
                        if (cTmp is MenuPanel)
 | 
						|
                        {
 | 
						|
                            bChildHandle = true;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            while (cTmp.Parent != null)
 | 
						|
                            {
 | 
						|
                                cTmp = cTmp.Parent;
 | 
						|
                                if (cTmp.GetType().FullName.IndexOf("DropDownHolder") >= 0 || cTmp is MenuPanel || cTmp is PopupContainerControl)
 | 
						|
                                {
 | 
						|
                                    bChildHandle = true;
 | 
						|
                                    break;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        if (!bChildHandle)
 | 
						|
                            bChildHandle = objPopup.IsAnyOnHandle(cTmp.Handle);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        string s = NativeFunctions.GetClassName(hWnd);
 | 
						|
                        s = s.ToLower();
 | 
						|
                        if (s.IndexOf("combolbox") >= 0)
 | 
						|
                            bChildHandle = true;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if (!bChildHandle)
 | 
						|
                {
 | 
						|
                    Control popupContainer = objPopup.PopupControl;
 | 
						|
                    if (popupContainer != null)
 | 
						|
                        while (popupContainer.Parent != null) popupContainer = popupContainer.Parent;
 | 
						|
                    if (popupContainer != null && popupContainer.Bounds.Contains(Control.MousePosition))
 | 
						|
                        bChildHandle = true;
 | 
						|
                }
 | 
						|
 | 
						|
                if (bChildHandle)
 | 
						|
                    break;
 | 
						|
 | 
						|
                if (objPopup.Displayed)
 | 
						|
                {
 | 
						|
                    // Do not close if mouse is inside the popup parent button
 | 
						|
                    Point p = this.PointToClient(MousePosition);
 | 
						|
                    if (objPopup.DisplayRectangle.Contains(p))
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
 | 
						|
                if (this.GetDesignMode())
 | 
						|
                {
 | 
						|
                    this.GetDelayClose().DelayClose(objPopup);
 | 
						|
                }
 | 
						|
                else if(QueryPopupCloseMouseDown())
 | 
						|
                    objPopup.ClosePopup();
 | 
						|
 | 
						|
                if (m_RegisteredPopups.Count == 0)
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
            if (m_RegisteredPopups.Count == 0)
 | 
						|
                this.MenuFocus = false;
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        protected virtual bool QueryPopupCloseMouseDown()
 | 
						|
        {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
        bool IMessageHandlerClient.OnMouseMove(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            if (m_RegisteredPopups.Count > 0)
 | 
						|
            {
 | 
						|
                foreach (BaseItem item in m_RegisteredPopups)
 | 
						|
                {
 | 
						|
                    if (item.Parent == null)
 | 
						|
                    {
 | 
						|
                        Control ctrl = ((PopupItem)item).PopupControl;
 | 
						|
                        if (ctrl != null && ctrl.Handle != hWnd && !item.IsAnyOnHandle(hWnd) && !(ctrl.Parent != null && ctrl.Parent.Handle != hWnd))
 | 
						|
                            return true;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        bool IMessageHandlerClient.OnSysKeyDown(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            return OnSysKeyDown(hWnd, wParam, lParam);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool OnSysKeyDown(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            if (!this.GetDesignMode())
 | 
						|
            {
 | 
						|
                // Check Shortcuts
 | 
						|
                int wParamInt = WinApi.ToInt(wParam);
 | 
						|
                if (ModifierKeys != Keys.None || wParamInt >= (int)eShortcut.F1 && wParamInt <= (int)eShortcut.F12)
 | 
						|
                {
 | 
						|
                    int i = (int)ModifierKeys | wParamInt;
 | 
						|
                    if (ProcessShortcut((eShortcut)i))
 | 
						|
                        return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        bool IMessageHandlerClient.OnSysKeyUp(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            return OnSysKeyUp(hWnd, wParam, lParam);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual bool OnSysKeyUp(IntPtr hWnd, IntPtr wParam, IntPtr lParam)
 | 
						|
        {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        private void MenuEventSupportHook()
 | 
						|
        {
 | 
						|
            if (m_MenuEventSupport)
 | 
						|
                return;
 | 
						|
            m_MenuEventSupport = true;
 | 
						|
 | 
						|
            Form parentForm = this.FindForm();
 | 
						|
            if (parentForm == null)
 | 
						|
            {
 | 
						|
                m_MenuEventSupport = false;
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            parentForm.Resize += new EventHandler(this.ParentResize);
 | 
						|
            parentForm.Deactivate += new EventHandler(this.ParentDeactivate);
 | 
						|
 | 
						|
            DotNetBarManager.RegisterParentMsgHandler(this, parentForm);
 | 
						|
        }
 | 
						|
 | 
						|
        private void MenuEventSupportUnhook()
 | 
						|
        {
 | 
						|
            if (!m_MenuEventSupport)
 | 
						|
                return;
 | 
						|
            m_MenuEventSupport = false;
 | 
						|
 | 
						|
            Form parentForm = this.FindForm();
 | 
						|
            if (parentForm == null)
 | 
						|
                return;
 | 
						|
            DotNetBarManager.UnRegisterParentMsgHandler(this, parentForm);
 | 
						|
            parentForm.Resize -= new EventHandler(this.ParentResize);
 | 
						|
            parentForm.Deactivate -= new EventHandler(this.ParentDeactivate);
 | 
						|
        }
 | 
						|
        private void ParentResize(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            Form parentForm = this.FindForm();
 | 
						|
            if (parentForm != null && parentForm.WindowState == FormWindowState.Minimized)
 | 
						|
                ((IOwner)this).OnApplicationDeactivate();
 | 
						|
        }
 | 
						|
        private void ParentDeactivate(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            Form parentForm = this.FindForm();
 | 
						|
            if (parentForm != null && parentForm.WindowState == FormWindowState.Minimized)
 | 
						|
                ((IOwner)this).OnApplicationDeactivate();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IThemeCache Implementation
 | 
						|
        protected override void WndProc(ref Message m)
 | 
						|
        {
 | 
						|
            if (m.Msg == NativeFunctions.WM_THEMECHANGED)
 | 
						|
            {
 | 
						|
                this.RefreshThemes();
 | 
						|
            }
 | 
						|
            else if (m.Msg == NativeFunctions.WM_USER + 107)
 | 
						|
            {
 | 
						|
                if (m_DoDefaultActionItem != null)
 | 
						|
                {
 | 
						|
                    if (!m_DoDefaultActionItem._AccessibleExpandAction)
 | 
						|
                        this.PerformClick();
 | 
						|
                    m_DoDefaultActionItem.DoAccesibleDefaultAction();
 | 
						|
                    m_DoDefaultActionItem = null;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            base.WndProc(ref m);
 | 
						|
        }
 | 
						|
        protected void RefreshThemes()
 | 
						|
        {
 | 
						|
            if (m_ThemeWindow != null)
 | 
						|
            {
 | 
						|
                m_ThemeWindow.Dispose();
 | 
						|
                m_ThemeWindow = new ThemeWindow(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeRebar != null)
 | 
						|
            {
 | 
						|
                m_ThemeRebar.Dispose();
 | 
						|
                m_ThemeRebar = new ThemeRebar(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeToolbar != null)
 | 
						|
            {
 | 
						|
                m_ThemeToolbar.Dispose();
 | 
						|
                m_ThemeToolbar = new ThemeToolbar(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeHeader != null)
 | 
						|
            {
 | 
						|
                m_ThemeHeader.Dispose();
 | 
						|
                m_ThemeHeader = new ThemeHeader(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeScrollBar != null)
 | 
						|
            {
 | 
						|
                m_ThemeScrollBar.Dispose();
 | 
						|
                m_ThemeScrollBar = new ThemeScrollBar(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeProgress != null)
 | 
						|
            {
 | 
						|
                m_ThemeProgress.Dispose();
 | 
						|
                m_ThemeProgress = new ThemeProgress(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeExplorerBar != null)
 | 
						|
            {
 | 
						|
                m_ThemeExplorerBar.Dispose();
 | 
						|
                m_ThemeExplorerBar = new ThemeExplorerBar(this);
 | 
						|
            }
 | 
						|
            if (m_ThemeButton != null)
 | 
						|
            {
 | 
						|
                m_ThemeButton.Dispose();
 | 
						|
                m_ThemeButton = new ThemeButton(this);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private void DisposeThemes()
 | 
						|
        {
 | 
						|
            if (m_ThemeWindow != null)
 | 
						|
            {
 | 
						|
                m_ThemeWindow.Dispose();
 | 
						|
                m_ThemeWindow = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeRebar != null)
 | 
						|
            {
 | 
						|
                m_ThemeRebar.Dispose();
 | 
						|
                m_ThemeRebar = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeToolbar != null)
 | 
						|
            {
 | 
						|
                m_ThemeToolbar.Dispose();
 | 
						|
                m_ThemeToolbar = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeHeader != null)
 | 
						|
            {
 | 
						|
                m_ThemeHeader.Dispose();
 | 
						|
                m_ThemeHeader = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeScrollBar != null)
 | 
						|
            {
 | 
						|
                m_ThemeScrollBar.Dispose();
 | 
						|
                m_ThemeScrollBar = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeProgress != null)
 | 
						|
            {
 | 
						|
                m_ThemeProgress.Dispose();
 | 
						|
                m_ThemeProgress = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeExplorerBar != null)
 | 
						|
            {
 | 
						|
                m_ThemeExplorerBar.Dispose();
 | 
						|
                m_ThemeExplorerBar = null;
 | 
						|
            }
 | 
						|
            if (m_ThemeButton != null)
 | 
						|
            {
 | 
						|
                m_ThemeButton.Dispose();
 | 
						|
                m_ThemeButton = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected override void OnHandleCreated(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnHandleCreated(e);
 | 
						|
 | 
						|
            if (!m_FilterInstalled && !this.DesignMode)
 | 
						|
            {
 | 
						|
                MessageHandler.RegisterMessageClient(this);
 | 
						|
                m_FilterInstalled = true;
 | 
						|
            }
 | 
						|
 | 
						|
#if FRAMEWORK20
 | 
						|
            if (this.AutoSize)
 | 
						|
                this.AdjustSize();
 | 
						|
#endif
 | 
						|
            this.RecalcLayout();
 | 
						|
        }
 | 
						|
#if FRAMEWORK20
 | 
						|
        protected virtual void AdjustSize() { }
 | 
						|
#endif
 | 
						|
        protected override void OnHandleDestroyed(EventArgs e)
 | 
						|
        {
 | 
						|
            DisposeThemes();
 | 
						|
            MenuEventSupportUnhook();
 | 
						|
            base.OnHandleDestroyed(e);
 | 
						|
 | 
						|
            if (m_FilterInstalled)
 | 
						|
            {
 | 
						|
                MessageHandler.UnregisterMessageClient(this);
 | 
						|
                m_FilterInstalled = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeWindow IThemeCache.ThemeWindow
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeWindow == null)
 | 
						|
                    m_ThemeWindow = new ThemeWindow(this);
 | 
						|
                return m_ThemeWindow;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeRebar IThemeCache.ThemeRebar
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeRebar == null)
 | 
						|
                    m_ThemeRebar = new ThemeRebar(this);
 | 
						|
                return m_ThemeRebar;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeToolbar IThemeCache.ThemeToolbar
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeToolbar == null)
 | 
						|
                    m_ThemeToolbar = new ThemeToolbar(this);
 | 
						|
                return m_ThemeToolbar;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeHeader IThemeCache.ThemeHeader
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeHeader == null)
 | 
						|
                    m_ThemeHeader = new ThemeHeader(this);
 | 
						|
                return m_ThemeHeader;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeScrollBar IThemeCache.ThemeScrollBar
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeScrollBar == null)
 | 
						|
                    m_ThemeScrollBar = new ThemeScrollBar(this);
 | 
						|
                return m_ThemeScrollBar;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeExplorerBar IThemeCache.ThemeExplorerBar
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeExplorerBar == null)
 | 
						|
                    m_ThemeExplorerBar = new ThemeExplorerBar(this);
 | 
						|
                return m_ThemeExplorerBar;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeProgress IThemeCache.ThemeProgress
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeProgress == null)
 | 
						|
                    m_ThemeProgress = new ThemeProgress(this);
 | 
						|
                return m_ThemeProgress;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        ThemeButton IThemeCache.ThemeButton
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_ThemeButton == null)
 | 
						|
                    m_ThemeButton = new ThemeButton(this);
 | 
						|
                return m_ThemeButton;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IOwner Implementation
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the form button is attached to.
 | 
						|
        /// </summary>
 | 
						|
        Form IOwner.ParentForm
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.FindForm();
 | 
						|
            }
 | 
						|
            set { }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the collection of items with the specified name. This member is not implemented and should not be used.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="ItemName">Item name to look for.</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        ArrayList IOwner.GetItems(string ItemName)
 | 
						|
        {
 | 
						|
            ArrayList list = new ArrayList(15);
 | 
						|
            BarFunctions.GetSubItemsByName(m_PopupItem, ItemName, list);
 | 
						|
            return list;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the collection of items with the specified name and type. This member is not implemented and should not be used.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="ItemName">Item name to look for.</param>
 | 
						|
        /// <param name="itemType">Item type to look for.</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        ArrayList IOwner.GetItems(string ItemName, Type itemType)
 | 
						|
        {
 | 
						|
            ArrayList list = new ArrayList(15);
 | 
						|
            BarFunctions.GetSubItemsByNameAndType(m_PopupItem, ItemName, list, itemType);
 | 
						|
            return list;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the collection of items with the specified name and type. This member is not implemented and should not be used.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="ItemName">Item name to look for.</param>
 | 
						|
        /// <param name="itemType">Item type to look for.</param>
 | 
						|
        /// <param name="useGlobalName">Indicates whether GlobalName property is used for searching.</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        ArrayList IOwner.GetItems(string ItemName, Type itemType, bool useGlobalName)
 | 
						|
        {
 | 
						|
            ArrayList list = new ArrayList(15);
 | 
						|
            BarFunctions.GetSubItemsByNameAndType(m_PopupItem, ItemName, list, itemType, useGlobalName);
 | 
						|
            return list;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first item that matches specified name.  This member is not implemented and should not be used.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="ItemName">Item name to look for.</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        BaseItem IOwner.GetItem(string ItemName)
 | 
						|
        {
 | 
						|
            BaseItem item = BarFunctions.GetSubItemByName(m_PopupItem, ItemName);
 | 
						|
            if (item != null)
 | 
						|
                return item;
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        // Only one Popup Item can be expanded at a time. This is used
 | 
						|
        // to track the currently expanded popup item and to close the popup item
 | 
						|
        // if another item is expanding.
 | 
						|
        void IOwner.SetExpandedItem(BaseItem objItem)
 | 
						|
        {
 | 
						|
            if (objItem != null && objItem.Parent is PopupItem)
 | 
						|
                return;
 | 
						|
            if (m_ExpandedItem != null)
 | 
						|
            {
 | 
						|
                if(objItem == null)
 | 
						|
                    BaseItem.CollapseSubItemsTree(m_ExpandedItem);
 | 
						|
                if (m_ExpandedItem.Expanded)
 | 
						|
                    m_ExpandedItem.Expanded = false;
 | 
						|
                m_ExpandedItem = null;
 | 
						|
            }
 | 
						|
            m_ExpandedItem = objItem;
 | 
						|
        }
 | 
						|
 | 
						|
        BaseItem IOwner.GetExpandedItem()
 | 
						|
        {
 | 
						|
            return m_ExpandedItem;
 | 
						|
        }
 | 
						|
 | 
						|
        // Currently we are using this to communicate "focus" when control is in
 | 
						|
        // design mode. This can be used later if we decide to add focus
 | 
						|
        // handling to our BaseItem class.
 | 
						|
        void IOwner.SetFocusItem(BaseItem objFocusItem)
 | 
						|
        {
 | 
						|
            if (m_FocusItem != null && m_FocusItem != objFocusItem)
 | 
						|
            {
 | 
						|
                m_FocusItem.OnLostFocus();
 | 
						|
            }
 | 
						|
            m_FocusItem = objFocusItem;
 | 
						|
            if (m_FocusItem != null)
 | 
						|
                m_FocusItem.OnGotFocus();
 | 
						|
        }
 | 
						|
 | 
						|
        BaseItem IOwner.GetFocusItem()
 | 
						|
        {
 | 
						|
            return m_FocusItem;
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.DesignTimeContextMenu(BaseItem objItem)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        bool IOwner.DesignMode
 | 
						|
        {
 | 
						|
            get { return this.GetDesignMode(); }
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.RemoveShortcutsFromItem(BaseItem objItem)
 | 
						|
        {
 | 
						|
            ShortcutTableEntry objEntry = null;
 | 
						|
            if (objItem.ShortcutString != "")
 | 
						|
            {
 | 
						|
                foreach (eShortcut key in objItem.Shortcuts)
 | 
						|
                {
 | 
						|
                    if (m_ShortcutTable.ContainsKey(key))
 | 
						|
                    {
 | 
						|
                        objEntry = (ShortcutTableEntry)m_ShortcutTable[key];
 | 
						|
                        try
 | 
						|
                        {
 | 
						|
                            objEntry.Items.Remove(objItem.Id);
 | 
						|
                            if (objEntry.Items.Count == 0)
 | 
						|
                                m_ShortcutTable.Remove(objEntry.Shortcut);
 | 
						|
                        }
 | 
						|
                        catch (ArgumentException) { }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            IOwner owner = this as IOwner;
 | 
						|
            foreach (BaseItem objTmp in objItem.SubItems)
 | 
						|
                owner.RemoveShortcutsFromItem(objTmp);
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.AddShortcutsFromItem(BaseItem objItem)
 | 
						|
        {
 | 
						|
            ShortcutTableEntry objEntry = null;
 | 
						|
            if (objItem.ShortcutString != "")
 | 
						|
            {
 | 
						|
                foreach (eShortcut key in objItem.Shortcuts)
 | 
						|
                {
 | 
						|
                    if (m_ShortcutTable.ContainsKey(key))
 | 
						|
                        objEntry = (ShortcutTableEntry)m_ShortcutTable[objItem.Shortcuts[0]];
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        objEntry = new ShortcutTableEntry(key);
 | 
						|
                        m_ShortcutTable.Add(objEntry.Shortcut, objEntry);
 | 
						|
                    }
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
                        objEntry.Items.Add(objItem.Id, objItem);
 | 
						|
                    }
 | 
						|
                    catch (ArgumentException) { }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            IOwner owner = this as IOwner;
 | 
						|
            foreach (BaseItem objTmp in objItem.SubItems)
 | 
						|
                owner.AddShortcutsFromItem(objTmp);
 | 
						|
        }
 | 
						|
 | 
						|
        Form IOwner.ActiveMdiChild
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                Form form = base.FindForm();
 | 
						|
                if (form == null)
 | 
						|
                    return null;
 | 
						|
                if (form.IsMdiContainer)
 | 
						|
                {
 | 
						|
                    return form.ActiveMdiChild;
 | 
						|
                }
 | 
						|
                return null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        bool IOwner.AlwaysDisplayKeyAccelerators
 | 
						|
        {
 | 
						|
            get { return true; }
 | 
						|
            set { }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Invokes the DotNetBar Customize dialog.
 | 
						|
        /// </summary>
 | 
						|
        void IOwner.Customize()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.InvokeResetDefinition(BaseItem item, EventArgs e)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state.
 | 
						|
        /// </summary>
 | 
						|
        bool IOwner.ShowResetButton
 | 
						|
        {
 | 
						|
            get { return false; }
 | 
						|
            set { }
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.OnApplicationActivate() { }
 | 
						|
        void IOwner.OnApplicationDeactivate()
 | 
						|
        {
 | 
						|
            ClosePopups();
 | 
						|
        }
 | 
						|
        void IOwner.OnParentPositionChanging() { }
 | 
						|
 | 
						|
        void IOwner.StartItemDrag(BaseItem item) { }
 | 
						|
 | 
						|
        bool IOwner.DragInProgress
 | 
						|
        {
 | 
						|
            get { return false; }
 | 
						|
        }
 | 
						|
 | 
						|
        BaseItem IOwner.DragItem
 | 
						|
        {
 | 
						|
            get { return null; }
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.InvokeUserCustomize(object sender, EventArgs e)  {}
 | 
						|
 | 
						|
        void IOwner.InvokeEndUserCustomize(object sender, EndUserCustomizeEventArgs e) { }
 | 
						|
 | 
						|
        MdiClient IOwner.GetMdiClient(Form MdiForm)
 | 
						|
        {
 | 
						|
            return BarFunctions.GetMdiClient(MdiForm);
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.Category("Data"),DefaultValue(null),System.ComponentModel.Description("ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars.")]
 | 
						|
		public System.Windows.Forms.ImageList Images
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ImageList;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_ImageList!=null)
 | 
						|
					m_ImageList.Disposed-=new EventHandler(this.ImageListDisposed);
 | 
						|
				m_ImageList=value;
 | 
						|
				if(m_ImageList!=null)
 | 
						|
					m_ImageList.Disposed+=new EventHandler(this.ImageListDisposed);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// ImageList for medium-sized images used on Items.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.Category("Data"),DefaultValue(null),System.ComponentModel.Description("ImageList for medium-sized images used on Items.")]
 | 
						|
		public System.Windows.Forms.ImageList ImagesMedium
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ImageListMedium;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_ImageListMedium!=null)
 | 
						|
					m_ImageListMedium.Disposed-=new EventHandler(this.ImageListDisposed);
 | 
						|
				m_ImageListMedium=value;
 | 
						|
				if(m_ImageListMedium!=null)
 | 
						|
					m_ImageListMedium.Disposed+=new EventHandler(this.ImageListDisposed);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// ImageList for large-sized images used on Items.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.Category("Data"),DefaultValue(null),System.ComponentModel.Description("ImageList for large-sized images used on Items.")]
 | 
						|
		public System.Windows.Forms.ImageList ImagesLarge
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return m_ImageListLarge;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(m_ImageListLarge!=null)
 | 
						|
					m_ImageListLarge.Disposed-=new EventHandler(this.ImageListDisposed);
 | 
						|
				m_ImageListLarge=value;
 | 
						|
				if(m_ImageListLarge!=null)
 | 
						|
					m_ImageListLarge.Disposed+=new EventHandler(this.ImageListDisposed);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void ImageListDisposed(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			if(sender==m_ImageList)
 | 
						|
			{
 | 
						|
				m_ImageList=null;
 | 
						|
			}
 | 
						|
			else if(sender==m_ImageListLarge)
 | 
						|
			{
 | 
						|
				m_ImageListLarge=null;
 | 
						|
			}
 | 
						|
			else if(sender==m_ImageListMedium)
 | 
						|
			{
 | 
						|
				m_ImageListMedium=null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
        protected override void OnParentChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnParentChanged(e);
 | 
						|
            if (this.DesignMode)
 | 
						|
                m_PopupItem.SetDesignMode(this.DesignMode);
 | 
						|
        }
 | 
						|
 | 
						|
        void IOwner.InvokeDefinitionLoaded(object sender, EventArgs e) {}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether Tooltips are shown on Bars and menus.
 | 
						|
        /// </summary>
 | 
						|
        //[Browsable(false), DefaultValue(true), Category("Run-time Behavior"), Description("Indicates whether Tooltips are shown on Bars and menus.")]
 | 
						|
        bool IOwner.ShowToolTips
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                //m_ShowToolTips = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether item shortcut is displayed in Tooltips.
 | 
						|
        /// </summary>
 | 
						|
        //[Browsable(false), DefaultValue(false), Category("Run-time Behavior"), Description("Indicates whether item shortcut is displayed in Tooltips.")]
 | 
						|
        bool IOwner.ShowShortcutKeysInToolTips
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                //m_ShowShortcutKeysInToolTips = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(true), Category("Appearance"), Description("Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images.")]
 | 
						|
        public virtual bool DisabledImagesGrayScale
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_DisabledImagesGrayScale;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_DisabledImagesGrayScale = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IOwnerLocalize Members
 | 
						|
        void IOwnerLocalize.InvokeLocalizeString(LocalizeEventArgs e)
 | 
						|
        {
 | 
						|
            if (LocalizeString != null)
 | 
						|
                LocalizeString(this, e);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IAccessibilitySupport Members
 | 
						|
 | 
						|
        BaseItem IAccessibilitySupport.DoDefaultActionItem
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return m_DoDefaultActionItem;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_DoDefaultActionItem = value; ;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |