1357 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1357 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Data;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Reflection;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for TabControl.
 | 
						|
	/// </summary>
 | 
						|
    [ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.TabControlDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
 | 
						|
	public class TabControl : System.Windows.Forms.Control,ISupportInitialize
 | 
						|
	{
 | 
						|
		#region Events
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when selected tab changes.
 | 
						|
		/// </summary>
 | 
						|
		public event TabStrip.SelectedTabChangedEventHandler SelectedTabChanged;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs before selected tab changes and gives you opportunity to cancel the change.
 | 
						|
		/// </summary>
 | 
						|
		public event TabStrip.SelectedTabChangingEventHandler SelectedTabChanging;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when tab is dragged by user.
 | 
						|
		/// </summary>
 | 
						|
		public event TabStrip.TabMovedEventHandler TabMoved;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when the user navigates back using the back arrow.
 | 
						|
		/// </summary>
 | 
						|
		public event TabStrip.UserActionEventHandler NavigateBack;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when the user navigates forward using the forward arrow.
 | 
						|
		/// </summary>
 | 
						|
		public event TabStrip.UserActionEventHandler NavigateForward;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when tab item is closing.
 | 
						|
		/// </summary>
 | 
						|
		public event TabStrip.UserActionEventHandler TabItemClose;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs when tab item is added to the tabs collection.
 | 
						|
		/// </summary>
 | 
						|
		public event EventHandler TabItemOpen;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs before control or item attached to the tab is displayed.
 | 
						|
		/// </summary>
 | 
						|
		public event EventHandler BeforeTabDisplay;
 | 
						|
		/// <summary>
 | 
						|
		/// Occurs after tab item has been removed from tabs collection.
 | 
						|
		/// </summary>
 | 
						|
		public event EventHandler TabRemoved;
 | 
						|
		#endregion
 | 
						|
 | 
						|
        #region Private Variables & Constructor, Dispose
 | 
						|
        private DevComponents.DotNetBar.TabStrip tabStrip1;
 | 
						|
        //private int m_SelectedTabIndex=0;
 | 
						|
		private System.Windows.Forms.Timer m_ClickTimer=null;
 | 
						|
        private bool m_AutoCloseTabs = false;
 | 
						|
        private bool m_TabStripVisible = true;
 | 
						|
        private int m_LoadSelectedTabIndex = -1;
 | 
						|
        private bool m_SyncingTabStripSize = false;
 | 
						|
 | 
						|
		/// <summary> 
 | 
						|
		/// Required designer variable.
 | 
						|
		/// </summary>
 | 
						|
		private System.ComponentModel.Container components = null;
 | 
						|
 | 
						|
		public TabControl()
 | 
						|
		{
 | 
						|
			this.SetStyle(ControlStyles.Opaque,true);
 | 
						|
			this.SetStyle(DisplayHelp.DoubleBufferFlag,true);
 | 
						|
			this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
 | 
						|
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 | 
						|
 | 
						|
			// This call is required by the Windows.Forms Form Designer.
 | 
						|
			InitializeComponent();
 | 
						|
			//tabStrip1.VariableTabWidth=false;
 | 
						|
			tabStrip1.TabLayoutType=eTabLayoutType.FixedWithNavigationBox;
 | 
						|
			tabStrip1.SizeRecalculated+=new EventHandler(this.TabStripSizeRecalculated);
 | 
						|
 | 
						|
            StyleManager.Register(this);
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary> 
 | 
						|
		/// Clean up any resources being used.
 | 
						|
		/// </summary>
 | 
						|
		protected override void Dispose( bool disposing )
 | 
						|
		{
 | 
						|
			if( disposing )
 | 
						|
			{
 | 
						|
				if(components != null)
 | 
						|
				{
 | 
						|
					components.Dispose();
 | 
						|
				}
 | 
						|
                StyleManager.Unregister(this);
 | 
						|
			}
 | 
						|
			base.Dispose( disposing );
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
		#region Component Designer generated code
 | 
						|
		/// <summary> 
 | 
						|
		/// Required method for Designer support - do not modify 
 | 
						|
		/// the contents of this method with the code editor.
 | 
						|
		/// </summary>
 | 
						|
		private void InitializeComponent()
 | 
						|
		{
 | 
						|
			this.tabStrip1 = new DevComponents.DotNetBar.TabStrip();
 | 
						|
			this.SuspendLayout();
 | 
						|
			// 
 | 
						|
			// tabStrip1
 | 
						|
			// 
 | 
						|
			this.tabStrip1.CanReorderTabs = true;
 | 
						|
			this.tabStrip1.CloseButtonVisible = true;
 | 
						|
			this.tabStrip1.Dock = System.Windows.Forms.DockStyle.Top;
 | 
						|
			this.tabStrip1.ImageList = null;
 | 
						|
			this.tabStrip1.Name = "tabStrip1";
 | 
						|
			this.tabStrip1.SelectedTab = null;
 | 
						|
			this.tabStrip1.Size = new System.Drawing.Size(256, 26);
 | 
						|
			this.tabStrip1.Style = DevComponents.DotNetBar.eTabStripStyle.OneNote;
 | 
						|
			this.tabStrip1.TabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
 | 
						|
			this.tabStrip1.TabIndex = 0;
 | 
						|
			this.tabStrip1.Text = "tabStrip1";
 | 
						|
			this.tabStrip1.AutoHideSystemBox=true;
 | 
						|
			this.tabStrip1.CloseButtonVisible=false;
 | 
						|
			this.tabStrip1.TabRemoved += new System.EventHandler(this.tabStrip1_TabRemoved);
 | 
						|
            this.tabStrip1.TabItemOpen += new EventHandler(tabStrip1_TabItemAdded);
 | 
						|
			this.tabStrip1.SelectedTabChanged += new DevComponents.DotNetBar.TabStrip.SelectedTabChangedEventHandler(this.tabStrip1_SelectedTabChanged);
 | 
						|
			this.tabStrip1.SelectedTabChanging += new DevComponents.DotNetBar.TabStrip.SelectedTabChangingEventHandler(this.tabStrip1_SelectedTabChanging);
 | 
						|
			this.tabStrip1.TabMoved+=new TabStrip.TabMovedEventHandler(this.tabStrip1_TabMoved);
 | 
						|
			this.tabStrip1.NavigateBack+=new TabStrip.UserActionEventHandler(this.tabStrip1_NavigateBack);
 | 
						|
			this.tabStrip1.NavigateForward+=new TabStrip.UserActionEventHandler(this.tabStrip1_NavigateForward);
 | 
						|
			this.tabStrip1.TabItemClose+=new TabStrip.UserActionEventHandler(this.tabStrip1_TabItemClose);
 | 
						|
			this.tabStrip1.TabItemOpen+=new EventHandler(this.tabStrip1_TabItemOpen);
 | 
						|
            this.tabStrip1.TabsCleared += new EventHandler(this.tabStrip1_TabsCleared);
 | 
						|
			this.tabStrip1.BeforeTabDisplay+=new EventHandler(this.tabStrip1_BeforeTabDisplay);
 | 
						|
			this.tabStrip1.TabStop=false;
 | 
						|
			// 
 | 
						|
			// TabControl
 | 
						|
			// 
 | 
						|
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
 | 
						|
																		  this.tabStrip1});
 | 
						|
			this.Name = "TabControl";
 | 
						|
			this.Size = new System.Drawing.Size(256, 152);
 | 
						|
			this.ResumeLayout(false);
 | 
						|
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Hidden Properties
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the background color.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),Description("Indicates the background color."),Category("Style")]
 | 
						|
		public override Color BackColor
 | 
						|
		{
 | 
						|
			get {return base.BackColor;}
 | 
						|
			set
 | 
						|
            {
 | 
						|
                base.BackColor=value;
 | 
						|
                if (tabStrip1 != null)
 | 
						|
                    tabStrip1.BackColor = value;
 | 
						|
            }
 | 
						|
		}
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether property should be serialized. Used by Windows Forms designer.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeBackColor()
 | 
						|
        {
 | 
						|
            return (BackColor != SystemColors.Control);
 | 
						|
        }
 | 
						|
 | 
						|
		#endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        /// <summary>
 | 
						|
        /// Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if
 | 
						|
        /// its style is controlled by StyleManager.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="newStyle">New active style.</param>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void StyleManagerStyleChanged(eDotNetBarStyle newStyle)
 | 
						|
        {
 | 
						|
            UpdateTabPanelStyle();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnGotFocus(EventArgs e)
 | 
						|
        {
 | 
						|
            if (this.TabStripTabStop)
 | 
						|
                tabStrip1.Focus();
 | 
						|
            base.OnGotFocus(e);
 | 
						|
        }
 | 
						|
#if FRAMEWORK20
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public virtual bool ValidateChildren()
 | 
						|
        {
 | 
						|
            return this.ValidateChildren(ValidationConstraints.Selectable);
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false)]
 | 
						|
        public virtual bool ValidateChildren(ValidationConstraints validationConstraints)
 | 
						|
        {
 | 
						|
            if ((validationConstraints < ValidationConstraints.None) || (validationConstraints > (ValidationConstraints.ImmediateChildren | ValidationConstraints.TabStop | ValidationConstraints.Visible | ValidationConstraints.Enabled | ValidationConstraints.Selectable)))
 | 
						|
            {
 | 
						|
                throw new InvalidEnumArgumentException("validationConstraints", (int)validationConstraints, typeof(ValidationConstraints));
 | 
						|
            }
 | 
						|
            Type t = typeof(Control);
 | 
						|
            MethodInfo mi = t.GetMethod("PerformContainerValidation", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance);
 | 
						|
            if (mi != null)
 | 
						|
            {
 | 
						|
                bool b = (bool)mi.Invoke(this, new object[] { validationConstraints });
 | 
						|
                return !b;
 | 
						|
            }
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
#endif
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the collection of all tabs.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), System.ComponentModel.Editor("DevComponents.DotNetBar.Design.TabStripTabsEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)), DesignerSerializationVisibility(DesignerSerializationVisibility.Content), System.ComponentModel.Category("Data"), System.ComponentModel.Description("Returns the collection of Tabs.")]
 | 
						|
        public TabsCollection Tabs
 | 
						|
        {
 | 
						|
            get { return tabStrip1.Tabs; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether tabs are visible. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Appearance"), Description("Indicates whether tabs are visible")]
 | 
						|
        public bool TabsVisible
 | 
						|
        {
 | 
						|
            get { return m_TabStripVisible; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_TabStripVisible = value;
 | 
						|
                tabStrip1.Visible = value;
 | 
						|
                RefreshPanelsStyle();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns reference to internal tab strip control.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public TabStrip TabStrip
 | 
						|
        {
 | 
						|
            get { return tabStrip1; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether TabStrip will get focus when Tab key is used. Default value is false.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Category("Behavior"), Description("Gets or sets whether TabStrip will get focus when Tab key is used.")]
 | 
						|
        public bool TabStripTabStop
 | 
						|
        {
 | 
						|
            get { return tabStrip1.TabStop; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.TabStop = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
 | 
						|
        public void RecalcLayout()
 | 
						|
        {
 | 
						|
            tabStrip1.Refresh();
 | 
						|
            this.SyncTabStripSize();
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
		private void tabStrip1_SelectedTabChanged(object sender, DevComponents.DotNetBar.TabStripTabChangedEventArgs e)
 | 
						|
		{
 | 
						|
			if(e.NewTab!=null && e.NewTab.AttachedControl!=null)
 | 
						|
				e.NewTab.AttachedControl.BringToFront();
 | 
						|
 | 
						|
			InvokeSelectedTabChanged(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeSelectedTabChanged(DevComponents.DotNetBar.TabStripTabChangedEventArgs e)
 | 
						|
		{
 | 
						|
			if(SelectedTabChanged!=null)
 | 
						|
				SelectedTabChanged(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_SelectedTabChanging(object sender, DevComponents.DotNetBar.TabStripTabChangingEventArgs e)
 | 
						|
		{
 | 
						|
			InvokeSelectedTabChanging(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeSelectedTabChanging(DevComponents.DotNetBar.TabStripTabChangingEventArgs e)
 | 
						|
		{
 | 
						|
			if(SelectedTabChanging!=null)
 | 
						|
				SelectedTabChanging(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_TabMoved(object sender, TabStripTabMovedEventArgs e)
 | 
						|
		{
 | 
						|
			InvokeTabMoved(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeTabMoved(TabStripTabMovedEventArgs e)
 | 
						|
		{
 | 
						|
			if(TabMoved!=null)
 | 
						|
				TabMoved(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_NavigateBack(object sender, TabStripActionEventArgs e)
 | 
						|
		{
 | 
						|
			InvokeNavigateBack(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeNavigateBack(TabStripActionEventArgs e)
 | 
						|
		{
 | 
						|
			if(NavigateBack!=null)
 | 
						|
				NavigateBack(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_NavigateForward(object sender, TabStripActionEventArgs e)
 | 
						|
		{
 | 
						|
			InvokeNavigateForward(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeNavigateForward(TabStripActionEventArgs e)
 | 
						|
		{
 | 
						|
			if(NavigateForward!=null)
 | 
						|
				NavigateForward(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_TabItemClose(object sender, TabStripActionEventArgs e)
 | 
						|
		{
 | 
						|
			InvokeTabItemClose(e);
 | 
						|
 | 
						|
            if (!e.Cancel && m_AutoCloseTabs && !this.DesignMode)
 | 
						|
            {
 | 
						|
                TabItem tab = tabStrip1.SelectedTab;
 | 
						|
                if (tab != null)
 | 
						|
                {
 | 
						|
                    tabStrip1.Tabs.Remove(tab);
 | 
						|
                    Control c = tab.AttachedControl;
 | 
						|
                    if (c != null)
 | 
						|
                    {
 | 
						|
                        if (this.Controls.Contains(c))
 | 
						|
                            this.Controls.Remove(c);
 | 
						|
                        c.Dispose();
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                this.RecalcLayout();
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeTabItemClose(TabStripActionEventArgs e)
 | 
						|
		{
 | 
						|
			if(TabItemClose!=null)
 | 
						|
				TabItemClose(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_TabItemOpen(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			InvokeTabItemOpen(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeTabItemOpen(EventArgs e)
 | 
						|
		{
 | 
						|
			if(TabItemOpen!=null)
 | 
						|
				TabItemOpen(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		private void tabStrip1_BeforeTabDisplay(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			InvokeBeforeTabDisplay(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void InvokeBeforeTabDisplay(EventArgs e)
 | 
						|
		{
 | 
						|
			if(BeforeTabDisplay!=null)
 | 
						|
				BeforeTabDisplay(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnControlAdded(ControlEventArgs e)
 | 
						|
		{
 | 
						|
			base.OnControlAdded(e);
 | 
						|
 | 
						|
            if (this.DesignMode)
 | 
						|
                return;
 | 
						|
			TabControlPanel panel=e.Control as TabControlPanel;
 | 
						|
			if(panel==null)
 | 
						|
				return;
 | 
						|
			if(panel.TabItem!=null)
 | 
						|
			{
 | 
						|
				if(this.Tabs.Contains(panel.TabItem) && this.SelectedTab==panel.TabItem)
 | 
						|
				{
 | 
						|
					panel.Visible=true;
 | 
						|
					panel.BringToFront();
 | 
						|
				}
 | 
						|
				else
 | 
						|
					panel.Visible=false;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				panel.Visible=false;
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnControlRemoved(ControlEventArgs e)
 | 
						|
		{
 | 
						|
			base.OnControlRemoved(e);
 | 
						|
 | 
						|
			TabControlPanel panel=e.Control as TabControlPanel;
 | 
						|
			if(panel==null)
 | 
						|
				return;
 | 
						|
			if(panel.TabItem!=null)
 | 
						|
			{
 | 
						|
				if(this.Tabs.Contains(panel.TabItem))
 | 
						|
					this.Tabs.Remove(panel.TabItem);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
//		protected override void OnEnter(EventArgs e)
 | 
						|
//		{
 | 
						|
//			base.OnEnter(e);
 | 
						|
//			if(this.Controls.Count>0)
 | 
						|
//			{
 | 
						|
//				foreach(Control c in this.Controls)
 | 
						|
//				{
 | 
						|
//					if(c.Visible && c.Controls.Count>0)
 | 
						|
//					{
 | 
						|
//						this.SelectNextControl(c,true,true,true,true);
 | 
						|
//					}
 | 
						|
//				}
 | 
						|
//			}
 | 
						|
//		}
 | 
						|
 | 
						|
		private void tabStrip1_TabRemoved(object sender, System.EventArgs e)
 | 
						|
		{
 | 
						|
			if(sender is TabItem)
 | 
						|
			{
 | 
						|
				TabItem tab=sender as TabItem;
 | 
						|
				if(tab.AttachedControl!=null && this.Controls.Contains(tab.AttachedControl))
 | 
						|
				{
 | 
						|
					this.Controls.Remove(tab.AttachedControl);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			InvokeTabRemoved(e);
 | 
						|
		}
 | 
						|
 | 
						|
        void tabStrip1_TabItemAdded(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            TabItem item = sender as TabItem;
 | 
						|
            if (!this.DesignMode && !m_Initializing && item!=null && item.AttachedControl!=null && !this.Controls.Contains(item.AttachedControl))
 | 
						|
            {
 | 
						|
                this.Controls.Add(item.AttachedControl);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		protected virtual void InvokeTabRemoved(EventArgs e)
 | 
						|
		{
 | 
						|
			if(TabRemoved!=null)
 | 
						|
				TabRemoved(this,e);
 | 
						|
		}
 | 
						|
 | 
						|
        private void tabStrip1_TabsCleared(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (this.DesignMode) return;
 | 
						|
            Control[] cs = new Control[this.Controls.Count];
 | 
						|
            this.Controls.CopyTo(cs, 0);
 | 
						|
            foreach (Control c in cs)
 | 
						|
            {
 | 
						|
                if (c is TabControlPanel)
 | 
						|
                {
 | 
						|
                    this.Controls.Remove(c);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		protected override void OnPaint(PaintEventArgs e)
 | 
						|
		{
 | 
						|
			base.OnPaint(e);
 | 
						|
            
 | 
						|
            if (this.BackColor == Color.Transparent || this.ColorScheme.TabBackground == Color.Transparent)
 | 
						|
            {
 | 
						|
                base.OnPaintBackground(e);
 | 
						|
            }
 | 
						|
 | 
						|
			if(this.Controls.Count<=1)
 | 
						|
			{
 | 
						|
				using(SolidBrush brush=new SolidBrush(SystemColors.Control))
 | 
						|
					e.Graphics.FillRectangle(brush,this.DisplayRectangle);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnResize(EventArgs e)
 | 
						|
		{
 | 
						|
            base.OnResize(e);
 | 
						|
 | 
						|
            if (this.Width == 0 || this.Height == 0)
 | 
						|
                return;
 | 
						|
 | 
						|
			if(tabStrip1.IsMultiLine)
 | 
						|
			{
 | 
						|
				CreateSyncSizeTimer();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void CreateSyncSizeTimer()
 | 
						|
		{
 | 
						|
			if(m_ClickTimer!=null)
 | 
						|
				return;
 | 
						|
			m_ClickTimer=new Timer();
 | 
						|
			m_ClickTimer.Interval=10;
 | 
						|
			m_ClickTimer.Tick+=new EventHandler(this.SyncSizeTimerTick);
 | 
						|
			m_ClickTimer.Enabled=true;
 | 
						|
			m_ClickTimer.Start();
 | 
						|
		}
 | 
						|
		private void SyncSizeTimerTick(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			m_ClickTimer.Stop();
 | 
						|
			m_ClickTimer.Enabled=false;
 | 
						|
			m_ClickTimer=null;
 | 
						|
			try
 | 
						|
			{
 | 
						|
				this.PerformLayout();
 | 
						|
			}
 | 
						|
			catch{}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Applies default tab colors to the panel
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="panel">Panel to apply colors to.</param>
 | 
						|
		public void ApplyDefaultPanelStyle(TabControlPanel panel)
 | 
						|
		{
 | 
						|
			if(panel==null || panel.UseCustomStyle)
 | 
						|
				return;
 | 
						|
 | 
						|
			if(panel.TabItem!=null && !panel.TabItem.BackColor.IsEmpty)
 | 
						|
			{
 | 
						|
				if(!panel.TabItem.BackColor2.IsEmpty)
 | 
						|
				{
 | 
						|
					panel.Style.BackColor1.Color=panel.TabItem.BackColor;
 | 
						|
					panel.Style.BackColor2.Color=panel.TabItem.BackColor2;
 | 
						|
					switch(tabStrip1.TabAlignment)
 | 
						|
					{
 | 
						|
						case eTabStripAlignment.Top:
 | 
						|
							panel.Style.GradientAngle=panel.TabItem.BackColorGradientAngle-180;
 | 
						|
							break;
 | 
						|
						case eTabStripAlignment.Bottom:
 | 
						|
							panel.Style.GradientAngle=panel.TabItem.BackColorGradientAngle;
 | 
						|
							break;
 | 
						|
						case eTabStripAlignment.Left:
 | 
						|
							panel.Style.GradientAngle=panel.TabItem.BackColorGradientAngle-90;
 | 
						|
							break;
 | 
						|
						case eTabStripAlignment.Right:
 | 
						|
							panel.Style.GradientAngle=panel.TabItem.BackColorGradientAngle+90;
 | 
						|
							break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				panel.Style.BackColor1.Color=tabStrip1.ColorScheme.TabPanelBackground;
 | 
						|
				panel.Style.BackColor2.Color=tabStrip1.ColorScheme.TabPanelBackground2;
 | 
						|
				
 | 
						|
				switch(tabStrip1.TabAlignment)
 | 
						|
				{
 | 
						|
					case eTabStripAlignment.Top:
 | 
						|
					{
 | 
						|
						panel.Style.GradientAngle=tabStrip1.ColorScheme.TabPanelBackgroundGradientAngle;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
					case eTabStripAlignment.Bottom:
 | 
						|
					{
 | 
						|
						panel.Style.GradientAngle=tabStrip1.ColorScheme.TabPanelBackgroundGradientAngle-180;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
					case eTabStripAlignment.Left:
 | 
						|
					{
 | 
						|
						panel.Style.GradientAngle=tabStrip1.ColorScheme.TabPanelBackgroundGradientAngle-90;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
					case eTabStripAlignment.Right:
 | 
						|
					{
 | 
						|
						panel.Style.GradientAngle=tabStrip1.ColorScheme.TabPanelBackgroundGradientAngle+90;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				panel.Style.BorderColor.Color=tabStrip1.ColorScheme.TabPanelBorder;
 | 
						|
				
 | 
						|
			}
 | 
						|
 | 
						|
			panel.Style.Border=eBorderType.SingleLine;
 | 
						|
 | 
						|
            if (m_TabStripVisible)
 | 
						|
            {
 | 
						|
                switch (tabStrip1.TabAlignment)
 | 
						|
                {
 | 
						|
                    case eTabStripAlignment.Top:
 | 
						|
                        panel.Style.BorderSide = (eBorderSide.Left | eBorderSide.Right | eBorderSide.Bottom);
 | 
						|
                        break;
 | 
						|
                    case eTabStripAlignment.Bottom:
 | 
						|
                        panel.Style.BorderSide = (eBorderSide.Left | eBorderSide.Right | eBorderSide.Top);
 | 
						|
                        break;
 | 
						|
                    case eTabStripAlignment.Left:
 | 
						|
                        panel.Style.BorderSide = (eBorderSide.Top | eBorderSide.Right | eBorderSide.Bottom);
 | 
						|
                        break;
 | 
						|
                    case eTabStripAlignment.Right:
 | 
						|
                        panel.Style.BorderSide = (eBorderSide.Left | eBorderSide.Top | eBorderSide.Bottom);
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
                panel.Style.BorderSide = eBorderSide.All;
 | 
						|
 | 
						|
 | 
						|
			if(tabStrip1.IsThemed)
 | 
						|
				panel.DrawThemedPane=true;
 | 
						|
			else
 | 
						|
                panel.DrawThemedPane=false;
 | 
						|
		}
 | 
						|
 | 
						|
        private void UpdateTabPanelStyle()
 | 
						|
        {
 | 
						|
            foreach (Control c in this.Controls)
 | 
						|
            {
 | 
						|
                if (c is TabControlPanel)
 | 
						|
                {
 | 
						|
                    TabControlPanel panel = c as TabControlPanel;
 | 
						|
                    ApplyDefaultPanelStyle(panel);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected override void OnSystemColorsChanged(EventArgs e)
 | 
						|
		{
 | 
						|
			base.OnSystemColorsChanged(e);
 | 
						|
			Application.DoEvents();
 | 
						|
            UpdateTabPanelStyle();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Resumes normal layout logic. Optionally forces an immediate layout of pending layout requests.
 | 
						|
		/// </summary>
 | 
						|
		public new void ResumeLayout(bool performLayout)
 | 
						|
		{
 | 
						|
			base.ResumeLayout(performLayout);
 | 
						|
            if (!this.IsHandleCreated)
 | 
						|
            {
 | 
						|
                m_DelayedSync = true;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                tabStrip1.ResetTabHeight();
 | 
						|
                SyncTabStripSize();
 | 
						|
            }
 | 
						|
		}
 | 
						|
        private bool m_DelayedSync = false;
 | 
						|
        protected override void OnHandleCreated(EventArgs e)
 | 
						|
        {
 | 
						|
            if (m_DelayedSync || this.DesignMode)
 | 
						|
            {
 | 
						|
                m_DelayedSync = false;
 | 
						|
                tabStrip1.ResetTabHeight();
 | 
						|
                SyncTabStripSize();
 | 
						|
 | 
						|
                if (this.DesignMode) // There is bug in VS2010 designer where tab alignment is not updated we need to remedy that
 | 
						|
                {
 | 
						|
                    InvokeDelayed(new MethodInvoker(delegate { this.PerformLayout(); }));
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnHandleCreated(e);
 | 
						|
        }
 | 
						|
 | 
						|
		private void RefreshPanelsStyle()
 | 
						|
		{
 | 
						|
            if (m_Initializing) return;
 | 
						|
			foreach(Control c in this.Controls)
 | 
						|
			{
 | 
						|
				if(c is TabControlPanel)
 | 
						|
					ApplyDefaultPanelStyle(c as TabControlPanel);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Use TabControlPanel.Style property to set the background image for each tab panel.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public override Image BackgroundImage
 | 
						|
		{
 | 
						|
			get{return base.BackgroundImage;}
 | 
						|
			set{base.BackgroundImage=value;}
 | 
						|
        }
 | 
						|
 | 
						|
        private void TabStripSizeRecalculated(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            //if (tabStrip1.IsMultiLine)
 | 
						|
                SyncTabStripSize();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Resizes the portion of the control that holds the tabs.
 | 
						|
        /// </summary>
 | 
						|
        public void SyncTabStripSize()
 | 
						|
        {
 | 
						|
            if (m_SyncingTabStripSize)
 | 
						|
                return;
 | 
						|
            m_SyncingTabStripSize = true;
 | 
						|
            try
 | 
						|
            {
 | 
						|
                switch (tabStrip1.Dock)
 | 
						|
                {
 | 
						|
                    case DockStyle.Left:
 | 
						|
                    case DockStyle.Right:
 | 
						|
                        tabStrip1.Width = tabStrip1.MinTabStripHeight;
 | 
						|
                        break;
 | 
						|
                    default:
 | 
						|
                        tabStrip1.Height = tabStrip1.MinTabStripHeight;
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
                //this.PerformLayout();
 | 
						|
                tabStrip1.SendToBack();
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                m_SyncingTabStripSize = false;
 | 
						|
            }
 | 
						|
            //this.ResumeLayout();
 | 
						|
        }
 | 
						|
        private void InvokeDelayed(MethodInvoker method)
 | 
						|
        {
 | 
						|
            Timer delayedInvokeTimer = new Timer();
 | 
						|
            delayedInvokeTimer = new Timer();
 | 
						|
            delayedInvokeTimer.Tag = method;
 | 
						|
            delayedInvokeTimer.Interval = 10;
 | 
						|
            delayedInvokeTimer.Tick += new EventHandler(DelayedInvokeTimerTick);
 | 
						|
            delayedInvokeTimer.Start();
 | 
						|
        }
 | 
						|
        void DelayedInvokeTimerTick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            Timer timer = (Timer)sender;
 | 
						|
            MethodInvoker method = (MethodInvoker)timer.Tag;
 | 
						|
            timer.Stop();
 | 
						|
            timer.Dispose();
 | 
						|
            method.Invoke();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new tab and tab panel and adds it to the Tabs collection.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="tabText">Tab text.</param>
 | 
						|
        /// <returns>Reference to newly created TabItem.</returns>
 | 
						|
        public TabItem CreateTab(string tabText)
 | 
						|
        {
 | 
						|
            return CreateTab(tabText, -1);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new tab and tab panel and inserts it at specified position inside of Tabs collection.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="tabText">Tab text.</param>
 | 
						|
        /// <param name="insertAt">Index to insert newly created tab at. -1 will append tab to the end of Tabs collection.</param>
 | 
						|
        /// <returns>Reference to newly created TabItem.</returns>
 | 
						|
        public TabItem CreateTab(string tabText, int insertAt)
 | 
						|
        {
 | 
						|
            TabItem tab = new TabItem();
 | 
						|
            tab.Text = tabText;
 | 
						|
            TabControlPanel panel = new TabControlPanel();
 | 
						|
            this.ApplyDefaultPanelStyle(panel);
 | 
						|
            tab.AttachedControl = panel;
 | 
						|
            panel.TabItem = tab;
 | 
						|
 | 
						|
            if (insertAt < 0 || insertAt >= tabStrip1.Tabs.Count)
 | 
						|
            {
 | 
						|
                tabStrip1.Tabs.Add(tab);
 | 
						|
                this.Controls.Add(panel);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                tabStrip1.Tabs.Insert(insertAt, tab);
 | 
						|
                this.Controls.Add(panel);
 | 
						|
            }
 | 
						|
 | 
						|
            panel.Dock = DockStyle.Fill;
 | 
						|
            panel.SendToBack();
 | 
						|
 | 
						|
            this.RecalcLayout();
 | 
						|
 | 
						|
            return tab;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
 | 
						|
        {
 | 
						|
            if (_ControlTabNavigationEnabled)
 | 
						|
            {
 | 
						|
                if (keyData == (Keys.Tab | Keys.Control))
 | 
						|
                {
 | 
						|
                    tabStrip1.SelectNextTab(eEventSource.Keyboard, true);
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
                else if (keyData == (Keys.Tab | Keys.Control | Keys.Shift))
 | 
						|
                {
 | 
						|
                    tabStrip1.SelectPreviousTab(eEventSource.Keyboard, true);
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return base.ProcessCmdKey(ref msg, keyData);
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _ControlTabNavigationEnabled = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether pressing Ctrl+Tab keys will cycle through the selected tabs. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Behavior"), Description("Indicates whether pressing Ctrl+Tab keys will cycle through the selected tabs.")]
 | 
						|
        public bool ControlTabNavigationEnabled
 | 
						|
        {
 | 
						|
            get { return _ControlTabNavigationEnabled; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _ControlTabNavigationEnabled = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ISupportInitialize
 | 
						|
        private bool m_Initializing=false;
 | 
						|
		void ISupportInitialize.BeginInit()
 | 
						|
		{
 | 
						|
            m_Initializing = true;
 | 
						|
		}
 | 
						|
		void ISupportInitialize.EndInit()
 | 
						|
		{
 | 
						|
            m_Initializing = false;
 | 
						|
			// Apply default panel style
 | 
						|
			RefreshPanelsStyle();
 | 
						|
            if(m_LoadSelectedTabIndex>=0)
 | 
						|
                tabStrip1.SelectedTabIndex = m_LoadSelectedTabIndex;
 | 
						|
            m_LoadSelectedTabIndex = -1;
 | 
						|
			if(tabStrip1.SelectedTab!=null && tabStrip1.SelectedTab.AttachedControl!=null)
 | 
						|
			{
 | 
						|
				//if(!this.DesignMode)
 | 
						|
					tabStrip1.SelectedTab.AttachedControl.Visible=true;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Properties
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether tabs use anti-alias smoothing when painted. Default value is false.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Browsable(true), Category("Appearance"), Description("Gets or sets whether tabs use anti-aliasing when painted.")]
 | 
						|
        public bool AntiAlias
 | 
						|
        {
 | 
						|
            get { return tabStrip1.AntiAlias; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.AntiAlias = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether the tab scrolling is animated.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Description("Indicates whether the tab scrolling is animanted."),Category("Behavior"),DefaultValue(true)]
 | 
						|
		public bool Animate
 | 
						|
		{
 | 
						|
			get{return tabStrip1.Animate;}
 | 
						|
			set {tabStrip1.Animate=value;}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether system box that enables scrolling and closing of the tabs is automatically hidden when tab items size does not exceed the size of the control.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(true),Category("Behavior"),Description("Indicates whether system box that enables scrolling and closing of the tabs is automatically hidden when tab items size does not exceed the size of the control.")]
 | 
						|
		public bool AutoHideSystemBox
 | 
						|
		{
 | 
						|
			get {return tabStrip1.AutoHideSystemBox;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.AutoHideSystemBox=value;
 | 
						|
				if(this.DesignMode)
 | 
						|
					this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Specifes whether end-user can reorder the tabs.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Specifes whether end-user can reorder the tabs.")]
 | 
						|
		public bool CanReorderTabs
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.CanReorderTabs;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.CanReorderTabs=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether tab is automatically closed when close button is clicked. Closing the tab will remove tab being closed from Tabs collection
 | 
						|
        /// and it will remove the panel as well. Default value is false which means that tab will not be closed and you should handle TabClose event to
 | 
						|
        /// perform desired action as result of user closing the tab.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(false), Category("Close Button"), Description("Indicates whether tab is automatically closed when close button is clicked.")]
 | 
						|
        public bool AutoCloseTabs
 | 
						|
        {
 | 
						|
            get { return m_AutoCloseTabs; }
 | 
						|
            set { m_AutoCloseTabs = value; }
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether the Close button that closes the active tab is visible on system box.
 | 
						|
		/// </summary>
 | 
						|
        [Browsable(true), DevCoBrowsable(true), Category("Close Button"), Description("Indicates whether the Close button that closes the active tab is visible."), DefaultValue(false)]
 | 
						|
		public bool CloseButtonVisible
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.CloseButtonVisible;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.CloseButtonVisible=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether close button is visible on each tab instead of in system box.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(false), DevCoBrowsable(true), Category("Close Button"), Description("Indicates whether close button is visible on each tab instead of in system box.")]
 | 
						|
        public bool CloseButtonOnTabsVisible
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return tabStrip1.CloseButtonOnTabsVisible;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.CloseButtonOnTabsVisible = value;
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether close button on tabs when visible is displayed for every tab state. Default value is true. When set to false
 | 
						|
        /// the close button will be displayed only for selected and tab that mouse is currently over.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(true), DevCoBrowsable(true), Category("Close Button"), Description("Indicates whether close button on tabs when visible is displayed for every tab state.")]
 | 
						|
        public bool CloseButtonOnTabsAlwaysDisplayed
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return tabStrip1.CloseButtonOnTabsAlwaysDisplayed;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.CloseButtonOnTabsAlwaysDisplayed = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the position of the close button displayed on each tab. Default value is Left.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(eTabCloseButtonPosition.Left), DevCoBrowsable(true), Category("Close Button"), Description("Indicates position of the close button displayed on each tab.")]
 | 
						|
        public eTabCloseButtonPosition CloseButtonPosition
 | 
						|
        {
 | 
						|
            get { return tabStrip1.CloseButtonPosition; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.CloseButtonPosition = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets custom image that is used on tabs as Close button that allows user to close the tab.
 | 
						|
        /// Use TabCloseButtonHot property to specify image that is used when mouse is over the close button. Note that image size must
 | 
						|
        /// be same for both images.
 | 
						|
        /// Default value is null
 | 
						|
        /// which means that internal representation of close button is used.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(null), Category("Close Button"), Description("Indicates custom image that is used on tabs as Close button that allows user to close the tab.")]
 | 
						|
        public Image TabCloseButtonNormal
 | 
						|
        {
 | 
						|
            get { return tabStrip1.TabCloseButtonNormal; }
 | 
						|
            set {tabStrip1.TabCloseButtonNormal = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets custom image that is used on tabs as Close button whem mouse is over the close button.
 | 
						|
        /// To use this property you must set TabCloseButtonNormal as well. Note that image size for both images must be same.
 | 
						|
        /// Default value is null which means that internal representation of close button is used.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(null), Category("Close Button"), Description("Indicates custom image that is used on tabs as Close button whem mouse is over the close button.")]
 | 
						|
        public Image TabCloseButtonHot
 | 
						|
        {
 | 
						|
            get { return tabStrip1.TabCloseButtonHot; }
 | 
						|
            set {tabStrip1.TabCloseButtonHot = value;}
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether only selected tab is displaying it's text.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Category("Behavior"),Description("Specifes whether only selected tab is displaying it's text."),DefaultValue(false)]
 | 
						|
		public bool DisplaySelectedTextOnly
 | 
						|
		{
 | 
						|
			get {return tabStrip1.DisplaySelectedTextOnly;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.DisplaySelectedTextOnly=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the image list used by tab items.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Category("Appearance"),DefaultValue(null)]
 | 
						|
		public System.Windows.Forms.ImageList ImageList
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.ImageList;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.ImageList=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets scrolling offset of the first tab. You can use this property to programmatically scroll the tab strip.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false),DevCoBrowsable(false),DefaultValue(0),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
		public int ScrollOffset
 | 
						|
		{
 | 
						|
			get {return tabStrip1.ScrollOffset;}
 | 
						|
			set {tabStrip1.ScrollOffset=value;}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		///     Selects previous visible tab. Returns true if previous tab was found for selection.
 | 
						|
		/// </summary>
 | 
						|
		public bool SelectPreviousTab()
 | 
						|
		{
 | 
						|
			return tabStrip1.SelectPreviousTab();
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		///     Selects next visible tab. Returns true if next tab was found for selection.
 | 
						|
		/// </summary>
 | 
						|
		public bool SelectNextTab()
 | 
						|
		{
 | 
						|
			return tabStrip1.SelectNextTab();
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets Tab Control style. Theme style is supported only on themed OS and only for bottom or top aligned tabs.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Category("Appearance"),Description("Specifies the Tab Control style."),DefaultValue(eTabStripStyle.OneNote)]
 | 
						|
		public eTabStripStyle Style
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.Style;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.Style=value;
 | 
						|
				this.SyncTabStripSize();
 | 
						|
				this.RefreshPanelsStyle();
 | 
						|
				if(this.DesignMode)
 | 
						|
					this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        protected override void OnParentChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            if (this.Style == eTabStripStyle.Office2007Dock || this.Style == eTabStripStyle.Office2007Document)
 | 
						|
            {
 | 
						|
                tabStrip1.Style = this.Style;
 | 
						|
                this.RefreshPanelsStyle();
 | 
						|
            }
 | 
						|
            base.OnParentChanged(e);
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Specifies whether tab is drawn using Themes when running on OS that supports themes like Windows XP.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.DefaultValue(false),System.ComponentModel.Category("Appearance"),System.ComponentModel.Description("Specifies whether tab is drawn using Themes when running on OS that supports themes like Windows XP.")]
 | 
						|
		public virtual bool ThemeAware
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.ThemeAware;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.ThemeAware=value;
 | 
						|
				this.RefreshPanelsStyle();
 | 
						|
				if(this.DesignMode)
 | 
						|
					this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether tabs are scrolled continuously while mouse is pressed over the scroll tab button.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.DefaultValue(false),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Indicates whether tabs are scrolled continuously while mouse is pressed over the scroll tab button.")]
 | 
						|
		public virtual bool TabScrollAutoRepeat
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.TabScrollAutoRepeat;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.TabScrollAutoRepeat=value;                
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the auto-repeat interval for the tab scrolling while mouse button is kept pressed over the scroll tab button.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.DefaultValue(300),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Indicates auto-repeat interval for the tab scrolling while mouse button is kept pressed over the scroll tab button.")]
 | 
						|
		public virtual int TabScrollRepeatInterval
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.TabScrollRepeatInterval;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.TabScrollRepeatInterval=value;                
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets Tab Color Scheme.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Category("Style"),Description("Gets or sets Tab Color Scheme."),DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
 | 
						|
		public TabColorScheme ColorScheme
 | 
						|
		{
 | 
						|
			get {return tabStrip1.ColorScheme;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.ColorScheme=value;
 | 
						|
				if(this.DesignMode)
 | 
						|
					this.Refresh();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		[Browsable(false),EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
		public bool ShouldSerializeColorScheme()
 | 
						|
		{
 | 
						|
			return tabStrip1.ColorScheme.SchemeChanged;
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Resets color scheme to default value.
 | 
						|
		/// </summary>
 | 
						|
		public void ResetColorScheme()
 | 
						|
		{
 | 
						|
			tabStrip1.ResetColorScheme();
 | 
						|
			if(this.DesignMode)
 | 
						|
				this.Refresh();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the tab alignment within the Tab-Strip control.
 | 
						|
		/// </summary>
 | 
						|
		[DefaultValue(eTabStripAlignment.Top),Browsable(true),DevCoBrowsable(true),Category("Appearance"),Description("Indicates the tab alignment within the Tab-Strip control.")]
 | 
						|
		public eTabStripAlignment TabAlignment
 | 
						|
		{
 | 
						|
			get {return tabStrip1.TabAlignment;}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(tabStrip1.TabAlignment==value)
 | 
						|
					return;
 | 
						|
				this.SuspendLayout();
 | 
						|
				try
 | 
						|
				{
 | 
						|
					switch(value)
 | 
						|
					{
 | 
						|
						case eTabStripAlignment.Top:
 | 
						|
							tabStrip1.Dock=DockStyle.Top;
 | 
						|
							break;
 | 
						|
						case eTabStripAlignment.Bottom:
 | 
						|
							tabStrip1.Dock=DockStyle.Bottom;
 | 
						|
							break;
 | 
						|
						case eTabStripAlignment.Left:
 | 
						|
							tabStrip1.Dock=DockStyle.Left;
 | 
						|
							break;
 | 
						|
						case eTabStripAlignment.Right:
 | 
						|
							tabStrip1.Dock=DockStyle.Right;
 | 
						|
							break;
 | 
						|
					}
 | 
						|
					tabStrip1.TabAlignment=value;
 | 
						|
					RefreshPanelsStyle();
 | 
						|
				}
 | 
						|
				finally
 | 
						|
				{
 | 
						|
					this.ResumeLayout(true);
 | 
						|
				}
 | 
						|
                if (this.Visible)
 | 
						|
                    SyncTabStripSize();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the selected tab.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false),DevCoBrowsable(false),Category("Behavior"),Description("Indicates selected tab."),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
		public TabItem SelectedTab
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.SelectedTab;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.SelectedTab=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the selected tab Font
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Category("Style"),DefaultValue(null),Description("Gets or sets the selected tab Font")]
 | 
						|
		public System.Drawing.Font SelectedTabFont
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return tabStrip1.SelectedTabFont;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				tabStrip1.SelectedTabFont=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | 
						|
		public void ResetSelectedTabFont()
 | 
						|
		{
 | 
						|
			tabStrip1.ResetSelectedTabFont();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether focus rectangle is displayed on the tab when tab has input focus.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(true),Category("Behavior"),Description("Indicates whether focus rectangle is displayed on the tab when tab has input focus.")]
 | 
						|
		public bool ShowFocusRectangle
 | 
						|
		{
 | 
						|
			get {return tabStrip1.ShowFocusRectangle;}
 | 
						|
			set {tabStrip1.ShowFocusRectangle=value;}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether keyboard navigation using Left and Right arrow keys to select tabs is enabled. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        [Category("Behavior"), DefaultValue(true), Description("Indicates whether keyboard navigation using Left and Right arrow keys to select tabs is enabled.")]
 | 
						|
        public bool KeyboardNavigationEnabled
 | 
						|
        {
 | 
						|
            get { return tabStrip1.KeyboardNavigationEnabled; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.KeyboardNavigationEnabled = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the index of the selected tab.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DevCoBrowsable(true),Category("Behavior"),Description("Indicates the index of selected tab.")]
 | 
						|
		public int SelectedTabIndex
 | 
						|
		{
 | 
						|
            get { return tabStrip1.SelectedTabIndex; }
 | 
						|
			set
 | 
						|
			{
 | 
						|
                if (m_Initializing)
 | 
						|
                    m_LoadSelectedTabIndex = value;
 | 
						|
                else
 | 
						|
                    tabStrip1.SelectedTabIndex = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets selected tab panel.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(false),DevCoBrowsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
		public TabControlPanel SelectedPanel
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(tabStrip1.SelectedTab!=null)
 | 
						|
					return tabStrip1.SelectedTab.AttachedControl as TabControlPanel;
 | 
						|
				return null;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if(value!=null && this.Controls.Contains(value) && value.TabItem!=null && this.Tabs.Contains(value.TabItem))
 | 
						|
				{
 | 
						|
					tabStrip1.SelectedTab=value.TabItem;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the type of the tab layout.
 | 
						|
		/// </summary>
 | 
						|
		[Browsable(true),DefaultValue(eTabLayoutType.FitContainer),Category("Appearance"),Description("Indicates the type of the tab layout.")]
 | 
						|
		public eTabLayoutType TabLayoutType
 | 
						|
		{
 | 
						|
			get {return tabStrip1.TabLayoutType;}
 | 
						|
			set {tabStrip1.TabLayoutType=value;}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates whether selected tab is aligned with the panel in multiple lines use case.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance"), DefaultValue(true), Description("Indicates whether selected tab is aligned with the panel in multiple lines use case.")]
 | 
						|
        public bool MultiLinePanelAlignSelectedTab
 | 
						|
        {
 | 
						|
            get { return tabStrip1.MultiLinePanelAlignSelectedTab; }
 | 
						|
            set { tabStrip1.MultiLinePanelAlignSelectedTab = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the fixed tab size in pixels. Either Height or Width can be set or both.
 | 
						|
        /// Value of 0 indicates that size is automatically calculated which is
 | 
						|
        /// default behavior.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), Category("Appearance"), Description("Gets or sets the fixed tab size in pixels. Either Height or Width can be set or both.")]
 | 
						|
        public Size FixedTabSize
 | 
						|
        {
 | 
						|
            get { return tabStrip1.FixedTabSize; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                tabStrip1.FixedTabSize = value;
 | 
						|
                this.RecalcLayout();
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Memeber used by Windows Forms designer.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>true if property should be serialized.</returns>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public bool ShouldSerializeFixedTabSize()
 | 
						|
        {
 | 
						|
            return tabStrip1.ShouldSerializeFixedTabSize();
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Memeber used by Windows Forms designer to reset property to default value.
 | 
						|
        /// </summary>
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public void ResetFixedTabSize()
 | 
						|
        {
 | 
						|
            TypeDescriptor.GetProperties(this)["FixedTabSize"].SetValue(this, Size.Empty);
 | 
						|
        }
 | 
						|
		#endregion
 | 
						|
	}
 | 
						|
}
 |