379 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			379 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Design
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Summary description for SuperTabStripDesigner
 | 
						|
    /// </summary>
 | 
						|
    public class SuperTabStripDesigner : BarBaseControlDesigner
 | 
						|
    {
 | 
						|
        #region Protected variables
 | 
						|
 | 
						|
        protected bool InternalRemove;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Private variables
 | 
						|
 | 
						|
        private SuperTabStrip _TabStrip;
 | 
						|
        private SuperTabItem _SelectItem;
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        public SuperTabStripDesigner()
 | 
						|
        {
 | 
						|
            EnableItemDragDrop = true;
 | 
						|
        }
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        public SuperTabStrip TabStrip
 | 
						|
        {
 | 
						|
            get { return (_TabStrip); }
 | 
						|
            set { _TabStrip = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Initialize
 | 
						|
 | 
						|
        public override void Initialize(IComponent component)
 | 
						|
        {
 | 
						|
            base.Initialize(component);
 | 
						|
 | 
						|
            if (component.Site.DesignMode == true)
 | 
						|
            {
 | 
						|
                _TabStrip = component as SuperTabStrip;
 | 
						|
 | 
						|
                ISelectionService ss =
 | 
						|
                    (ISelectionService) GetService(typeof (ISelectionService));
 | 
						|
 | 
						|
                if (ss != null)
 | 
						|
                    ss.SelectionChanged += OnSelectionChanged;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InitializeNewComponent
 | 
						|
 | 
						|
#if FRAMEWORK20
 | 
						|
        public override void InitializeNewComponent(IDictionary defaultValues)
 | 
						|
        {
 | 
						|
            base.InitializeNewComponent(defaultValues);
 | 
						|
 | 
						|
            SetDesignTimeDefaults();
 | 
						|
        }
 | 
						|
#else
 | 
						|
		public override void OnSetComponentDefaults()
 | 
						|
		{
 | 
						|
			base.OnSetComponentDefaults();
 | 
						|
			SetDesignTimeDefaults();
 | 
						|
		}
 | 
						|
#endif
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SetDesignTimeDefaults
 | 
						|
 | 
						|
        private void SetDesignTimeDefaults()
 | 
						|
        {
 | 
						|
            if (Component != null && Component.Site != null && Component.Site.DesignMode == true)
 | 
						|
            {
 | 
						|
                _TabStrip.TabStyle = eSuperTabStyle.Office2007;
 | 
						|
                _TabStrip.TabFont = _TabStrip.Font;
 | 
						|
                _TabStrip.SelectedTabFont = new System.Drawing.Font(_TabStrip.TabFont, FontStyle.Bold);
 | 
						|
                CreateNewTab(null, null);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Verbs
 | 
						|
 | 
						|
        public override DesignerVerbCollection Verbs
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                DesignerVerb[] verbs = new DesignerVerb[]
 | 
						|
                {
 | 
						|
                    new DesignerVerb("Next Tab", SelectNextTab),
 | 
						|
                    new DesignerVerb("Previous Tab", SelectPreviousTab),
 | 
						|
                    new DesignerVerb("Create New Tab", CreateNewTab),
 | 
						|
 | 
						|
					new DesignerVerb("Add Button", CreateButton),
 | 
						|
					new DesignerVerb("Add Text Box", CreateTextBox),
 | 
						|
					new DesignerVerb("Add Combo Box", CreateComboBox),
 | 
						|
					new DesignerVerb("Add Label", CreateLabel),
 | 
						|
					new DesignerVerb("Add Color Picker", CreateColorPicker),
 | 
						|
                    new DesignerVerb("Add Progress bar", CreateProgressBar),
 | 
						|
                    new DesignerVerb("Add Check box", CreateCheckBox),
 | 
						|
                    new DesignerVerb("Add Switch Button", CreateSwitch),
 | 
						|
                    new DesignerVerb("Add Micro-Chart", CreateMicroChart)
 | 
						|
                };
 | 
						|
 | 
						|
                return (new DesignerVerbCollection(verbs));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region CreateNewTab
 | 
						|
        public virtual SuperTabItem CreateNewTab()
 | 
						|
        {
 | 
						|
            IDesignerHost dh =
 | 
						|
                (IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
            SuperTabItem tab = null;
 | 
						|
            if (dh != null)
 | 
						|
            {
 | 
						|
                DesignerTransaction dt = dh.CreateTransaction();
 | 
						|
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    m_CreatingItem = true;
 | 
						|
                    IComponentChangeService change =
 | 
						|
                        GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | 
						|
 | 
						|
                    if (change != null)
 | 
						|
                        change.OnComponentChanging(Component, null);
 | 
						|
 | 
						|
                    tab =
 | 
						|
                        dh.CreateComponent(typeof(SuperTabItem)) as SuperTabItem;
 | 
						|
 | 
						|
                    if (tab != null)
 | 
						|
                    {
 | 
						|
                        tab.Text = tab.Name;
 | 
						|
 | 
						|
                        _TabStrip.Tabs.Add(tab);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (change != null)
 | 
						|
                        change.OnComponentChanged(Component, null, null, null);
 | 
						|
                    OnitemCreated(tab);
 | 
						|
                }
 | 
						|
                catch
 | 
						|
                {
 | 
						|
                    dt.Cancel();
 | 
						|
                }
 | 
						|
                finally
 | 
						|
                {
 | 
						|
                    if (dt.Canceled == false)
 | 
						|
                        dt.Commit();
 | 
						|
                    m_CreatingItem = false;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return tab;
 | 
						|
        }
 | 
						|
        private void CreateNewTab(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            CreateNewTab();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SelectNextTab
 | 
						|
 | 
						|
        protected virtual void SelectNextTab(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (_TabStrip.SelectedTabIndex < _TabStrip.Tabs.Count - 1)
 | 
						|
                _TabStrip.SelectNextTab();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region SelectPreviousTab
 | 
						|
 | 
						|
        protected virtual void SelectPreviousTab(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (_TabStrip.SelectedTabIndex > 0)
 | 
						|
                _TabStrip.SelectPreviousTab();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnSelectionChanged
 | 
						|
 | 
						|
        private void OnSelectionChanged(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (_TabStrip != null && _TabStrip.IsDisposed == false)
 | 
						|
            {
 | 
						|
                ISelectionService ss = (ISelectionService) sender;
 | 
						|
                BaseItem item = null;
 | 
						|
 | 
						|
                if (ss != null && ss.PrimarySelection != Control)
 | 
						|
                {
 | 
						|
                    item = ss.PrimarySelection as BaseItem;
 | 
						|
 | 
						|
                    if (item != null && _TabStrip.Tabs.Contains(item) == false)
 | 
						|
                        item = null;
 | 
						|
                }
 | 
						|
 | 
						|
                if (_TabStrip.DesignTimeSelection != item)
 | 
						|
                {
 | 
						|
                    _TabStrip.DesignTimeSelection = item;
 | 
						|
 | 
						|
                    if (item != null)
 | 
						|
                        ClosePopups();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region ComponentChangeComponentAdded
 | 
						|
 | 
						|
        protected override void ComponentChangeComponentAdded(object sender, ComponentEventArgs e)
 | 
						|
        {
 | 
						|
            ISelectionService ss = this.GetService(typeof (ISelectionService)) as ISelectionService;
 | 
						|
 | 
						|
            if (ss != null && ss.PrimarySelection == _TabStrip)
 | 
						|
            {
 | 
						|
                if (e.Component is BaseItem)
 | 
						|
                {
 | 
						|
                   if (m_InsertItemTransaction == null)
 | 
						|
                    {
 | 
						|
                        IDesignerHost dh = sender as IDesignerHost;
 | 
						|
 | 
						|
                        if (dh != null)
 | 
						|
                            m_InsertItemTransaction = dh.CreateTransaction("Adding Item Clip");
 | 
						|
                    }
 | 
						|
 | 
						|
                    IComponentChangeService cc =
 | 
						|
                        GetService(typeof (IComponentChangeService)) as IComponentChangeService;
 | 
						|
 | 
						|
                    if (cc != null)
 | 
						|
                        cc.OnComponentChanging(_TabStrip, TypeDescriptor.GetProperties(_TabStrip)["SubItems"]);
 | 
						|
 | 
						|
                    _TabStrip.Tabs.Add(e.Component as BaseItem);
 | 
						|
 | 
						|
                    if (cc != null)
 | 
						|
                        cc.OnComponentChanged(_TabStrip, TypeDescriptor.GetProperties(_TabStrip)["SubItems"], null, null);
 | 
						|
 | 
						|
                    if (m_InsertItemTransaction != null)
 | 
						|
                    {
 | 
						|
                        m_InsertItemTransaction.Commit();
 | 
						|
                        m_InsertItemTransaction = null;
 | 
						|
                    }
 | 
						|
 | 
						|
                    RecalcLayout();
 | 
						|
 | 
						|
                    if (e.Component is SuperTabItem)
 | 
						|
                        _TabStrip.SelectedTab = e.Component as SuperTabItem;
 | 
						|
                }
 | 
						|
                else if (e.Component is SuperTabControlPanel)
 | 
						|
                {
 | 
						|
                    throw new Exception("Invalid component addition");
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OtherComponentRemoving
 | 
						|
 | 
						|
        protected override void OtherComponentRemoving(object sender, ComponentEventArgs e)
 | 
						|
        {
 | 
						|
            BaseItem item = e.Component as BaseItem;
 | 
						|
 | 
						|
            if (item != null)
 | 
						|
            {
 | 
						|
                if (item.Parent != null && item.Parent.SubItems.Contains(item))
 | 
						|
                    item.Parent.SubItems.Remove(item);
 | 
						|
 | 
						|
                DestroySubItems(item);
 | 
						|
 | 
						|
                RecalcLayout();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region AssociatedComponents
 | 
						|
 | 
						|
        public override ICollection AssociatedComponents
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                ArrayList list = new ArrayList(base.AssociatedComponents);
 | 
						|
 | 
						|
                foreach (BaseItem tab in _TabStrip.Tabs)
 | 
						|
                    list.Add(tab);
 | 
						|
 | 
						|
                return (list);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region DragInProgress
 | 
						|
 | 
						|
        protected override bool DragInProgress
 | 
						|
        {
 | 
						|
            get { return (base.DragInProgress); }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value == true)
 | 
						|
                {
 | 
						|
                    if (_TabStrip != null)
 | 
						|
                        _SelectItem = _TabStrip.SelectedTab;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if (_TabStrip != null)
 | 
						|
                        _TabStrip.SelectedTab = _SelectItem;
 | 
						|
                }
 | 
						|
 | 
						|
                base.DragInProgress = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnMouseDragBegin
 | 
						|
 | 
						|
        protected override void OnMouseDragBegin(int x, int y)
 | 
						|
        {
 | 
						|
            base.OnMouseDragBegin(x, y);
 | 
						|
 | 
						|
            if (DragInProgress == true)
 | 
						|
                _SelectItem = _TabStrip.SelectedTab;
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Dispose
 | 
						|
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            ISelectionService ss =
 | 
						|
                (ISelectionService)GetService(typeof(ISelectionService));
 | 
						|
 | 
						|
            if (ss != null)
 | 
						|
                ss.SelectionChanged -= OnSelectionChanged;
 | 
						|
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
 | 
						|
        #region GetHitTest
 | 
						|
        private const string SysBackstageBackButtonName = "sys_backstage_back_button";
 | 
						|
        protected override bool GetHitTest(Point pt)
 | 
						|
        {
 | 
						|
            if (_TabStrip.TabStyle == eSuperTabStyle.Office2010BackstageBlue)
 | 
						|
            {
 | 
						|
                Point clientPt = _TabStrip.PointToClient(pt);
 | 
						|
                BaseItem item = _TabStrip.HitTest(clientPt.X, clientPt.Y);
 | 
						|
                if (item != null && item.Name == SysBackstageBackButtonName)
 | 
						|
                    return true;
 | 
						|
            }
 | 
						|
            return base.GetHitTest(pt);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |