Пример #1
0
        /// <summary>
        /// Docks specified bar by appending it to the container. Bar will be added according to the container's orientation.
        /// </summary>
        /// <param name="barToDock">Bar to dock.</param>
        /// <param name="dockSide">Side to dock bar at.</param>
		public void Dock(Bar referenceBar, Bar barToDock, eDockSide dockSide)
		{
			if(dockSide==eDockSide.None && barToDock.Parent==m_Container)
			{
				ApplyBarStyle(barToDock);
				return;
			}

			if(barToDock.Parent is DockSite && ((DockSite)barToDock.Parent).DocumentDockContainer!=null)
				((DockSite)barToDock.Parent).GetDocumentUIManager().UnDock(barToDock);
			else if(barToDock.Parent is DockSite && barToDock.Parent!=m_Container)
				((DockSite)barToDock.Parent).RemoveBar(barToDock);
            else if (barToDock.Parent != null && barToDock.Parent != m_Container)
            {
                if (barToDock.Parent is FloatingContainer)
                {
                    barToDock.RemoveFromFloatingContainer();
                    barToDock.SetBarState(eBarState.Docked);
                }
                else
                    barToDock.Parent.Controls.Remove(barToDock);
            }

			if(!m_LoadingLayout)
			{
				// TODO: Add Docking as Document, i.e. add DockContainerItems from barToDock...
				DocumentBarContainer doc=this.CreateDocumentBarContainer(barToDock);
                DocumentBaseContainer referenceDoc = this.GetDocumentFromBar(referenceBar);

                if (referenceBar == null || dockSide == eDockSide.None || referenceBar == barToDock || referenceDoc == null)
				{
                    if (m_Container.Dock == DockStyle.Fill)
                        m_DocumentDockContainer.Documents.Add(doc);
                    else
                    {
                        eOrientation containerOrientation = eOrientation.Horizontal; // Needed container orientation
                        if (m_Container.Dock == DockStyle.Top || m_Container.Dock == DockStyle.Bottom)
                            containerOrientation = eOrientation.Vertical;

                        // Switch orientation when adding new bar if possible
                        if (m_DocumentDockContainer.Orientation != containerOrientation)
                        {
                            if (m_DocumentDockContainer.Documents.Count <= 1)
                            {
                                m_DocumentDockContainer.Orientation = containerOrientation;
                                if (IsAddedInFront(dockSide))
                                    m_DocumentDockContainer.Documents.Insert(0, doc);
                                else
                                    m_DocumentDockContainer.Documents.Add(doc);
                            }
                            else
                            {
                                DocumentBaseContainer[] docs = new DocumentBaseContainer[m_DocumentDockContainer.Documents.Count];
                                m_DocumentDockContainer.Documents.CopyTo(docs);
                                m_DocumentDockContainer.Documents.Clear();

                                DocumentDockContainer newParent = new DocumentDockContainer(docs, m_DocumentDockContainer.Orientation);
								newParent.SetLayoutBounds(m_DocumentDockContainer.DisplayBounds);
                                m_DocumentDockContainer.Orientation = containerOrientation;
                                m_DocumentDockContainer.Documents.Add(newParent);
                                if (IsAddedInFront(dockSide))
                                    m_DocumentDockContainer.Documents.Insert(0, doc);
                                else
                                    m_DocumentDockContainer.Documents.Add(doc);
                            }
                        }
                        else
                        {
                            if (IsAddedInFront(dockSide))
                                m_DocumentDockContainer.Documents.Insert(0, doc);
                            else
                                m_DocumentDockContainer.Documents.Add(doc);
                        }
                    }
				}
				else
				{
					DocumentDockContainer parent=referenceDoc.Parent as DocumentDockContainer;

					referenceDoc.SetLayoutBounds(Rectangle.Empty);
					doc.SetLayoutBounds(Rectangle.Empty);

					if((parent.Orientation==eOrientation.Horizontal && (dockSide==eDockSide.Left || dockSide==eDockSide.Right)) ||
						(parent.Orientation==eOrientation.Vertical && (dockSide==eDockSide.Top || dockSide==eDockSide.Bottom)))
					{
						if(dockSide==eDockSide.Right || dockSide==eDockSide.Bottom)
							parent.Documents.Insert(parent.Documents.IndexOf(referenceDoc)+1,doc);
						else
							parent.Documents.Insert(parent.Documents.IndexOf(referenceDoc),doc);
					}
					else if(parent.Documents.Count==1)
					{
						// Orientation of the parent dock container can be changed
						if(parent.Orientation==eOrientation.Vertical)
							parent.Orientation=eOrientation.Horizontal;
						else
							parent.Orientation=eOrientation.Vertical;

						if(dockSide==eDockSide.Right || dockSide==eDockSide.Bottom)
							parent.Documents.Insert(parent.Documents.IndexOf(referenceDoc)+1,doc);
						else
							parent.Documents.Insert(parent.Documents.IndexOf(referenceDoc),doc);
					}
					else
					{
						// New DocumentDockContainer needs to be inserted with appropriate orientation and referenceBar needs
						// to be moved into it.
						DocumentDockContainer newParent=new DocumentDockContainer();
						if(parent.Orientation==eOrientation.Horizontal)
							newParent.Orientation=eOrientation.Vertical;
						else
							newParent.Orientation=eOrientation.Horizontal;

						parent.Documents.Insert(parent.Documents.IndexOf(referenceDoc),newParent);
						parent.Documents.Remove(referenceDoc);
	                    
						if(dockSide==eDockSide.Right || dockSide==eDockSide.Bottom)
						{
							newParent.Documents.Add(referenceDoc);
							newParent.Documents.Add(doc);
						}
						else
						{
							newParent.Documents.Add(doc);
							newParent.Documents.Add(referenceDoc);
						}
					}
				}

                AdjustContainerSize(barToDock, false);
			}

			if(m_Container!=null)
			{
				if(barToDock.Parent==null)
					m_Container.Controls.Add(barToDock);
                ApplyBarStyle(barToDock);	
				m_Container.RecalcLayout();
			}
			else
				ApplyBarStyle(barToDock);
		}
Пример #2
0
 internal void DockTo(DockSite site, ToolWindowBase referenceWindow, eDockSide side)
 {
     site.GetDocumentUIManager().Dock(referenceWindow.Bar, CreateBar(), side);
 }
Пример #3
0
        private bool IsAddedInFront(eDockSide dockSide)
        {
            if (m_Container.Dock == DockStyle.Left && dockSide == eDockSide.Left ||
                m_Container.Dock == DockStyle.Right && dockSide == eDockSide.Left ||
                m_Container.Dock == DockStyle.Top && dockSide== eDockSide.Top || 
                m_Container.Dock == DockStyle.Bottom && dockSide == eDockSide.Top)
                return true;

            return false;
        }
Пример #4
0
        private DocumentDockUIManager GetDocumentUIManager(eDockSide side)
        {
            if (side == eDockSide.None)
                throw new ArgumentException("eDockSide.None is not supported parameter value");

            if (side == eDockSide.Bottom)
            {
                return this.BottomDockSite.GetDocumentUIManager();
            }
            else if (side == eDockSide.Left)
            {
                return this.LeftDockSite.GetDocumentUIManager();
            }
            else if (side == eDockSide.Right)
            {
                return this.RightDockSite.GetDocumentUIManager();
            }
            else if (side == eDockSide.Top)
            {
                return this.TopDockSite.GetDocumentUIManager();
            }
            return this.FillDockSite.GetDocumentUIManager();
        }
Пример #5
0
        private void ChangeAutoHidePanel(eDockSide side)
        {
            if (!this.AutoHide)
                return;
            DockStyle dockStyle = DockStyle.Left;
            if (side == eDockSide.Bottom)
                dockStyle = DockStyle.Bottom;
            else if (side == eDockSide.Right)
                dockStyle = DockStyle.Right;
            else if (side == eDockSide.Top)
                dockStyle = DockStyle.Top;

            if (m_LastDockSiteInfo.DockSide == dockStyle || side == eDockSide.None)
                return;

            AutoHidePanel panel = GetAutoHidePanel(m_LastDockSiteInfo.DockSide);
            if (panel == null)
                return;

            IOwnerBarSupport barSupp = m_Owner as IOwnerBarSupport;
            if (barSupp == null)
                return;

            AnimateHide();

            panel.RemoveBar(this);
            m_LastDockSiteInfo.DockSide = dockStyle;
            switch (dockStyle)
            {
                case DockStyle.Left:
                    m_LastDockSiteInfo.objDockSite = barSupp.LeftDockSite;
                    break;
                case DockStyle.Right:
                    m_LastDockSiteInfo.objDockSite = barSupp.RightDockSite;
                    break;
                case DockStyle.Top:
                    m_LastDockSiteInfo.objDockSite = barSupp.TopDockSite;
                    break;
                case DockStyle.Bottom:
                    m_LastDockSiteInfo.objDockSite = barSupp.BottomDockSite;
                    break;
            }

            panel = GetAutoHidePanel(dockStyle);
            panel.AddBar(this);
        }
Пример #6
0
        /// <summary>
        /// Docks specified DockContainerItem.
        /// </summary>
        /// <param name="itemToDock">DockContainerItem to dock.</param>
        /// <param name="referenceBar">Reference bar.</param>
        /// <param name="dockToReferenceBarSide">Side to dock item to.</param>
        private void Dock(DockContainerItem itemToDock, Bar referenceBar, eDockSide dockToReferenceBarSide, Point initialFloatLocation)
        {
            Bar parentBar = itemToDock.ContainerControl as Bar;

            if (dockToReferenceBarSide == eDockSide.None)
            {
                if (parentBar != null)
                {
                    parentBar.TearOffDockContainerItem(itemToDock, true, initialFloatLocation);
                    return;
                }
            }

            Bar newBar = null;
            if (parentBar != null)
            {
                newBar = BarFunctions.CreateDuplicateDockBar(parentBar);
            }

            // Un-parent DockContainerItem
            if (itemToDock.Parent != null)
            {
                if (parentBar != null)
                {
                    parentBar.Items.Remove(itemToDock);
                    if (parentBar.Items.Count == 0)
                    {
                        if (parentBar.CustomBar)
                        {
                            this.Bars.Remove(parentBar);
                            parentBar.Dispose();
                        }
                        else
                        {
                            parentBar.Visible = false;
                        }
                    }
                    else if (parentBar.VisibleItemCount == 0)
                        parentBar.Visible = false;
                    else
                        parentBar.RecalcLayout();
                }
                else
                    itemToDock.Parent.SubItems.Remove(itemToDock);
            }

            if (newBar == null)
            {
                newBar = new Bar();
                newBar.Name = "customBar" + itemToDock.Name;
                newBar.LayoutType = eLayoutType.DockContainer;
                newBar.Text = itemToDock.Text;
                newBar.AutoSyncBarCaption = true;
                newBar.CustomBar = true;
                this.Bars.Add(newBar);
            }

            newBar.Items.Add(itemToDock);
            if (dockToReferenceBarSide == eDockSide.None)
            {
                newBar.DockSide = eDockSide.None;
                newBar.Location = initialFloatLocation;
                return;
            }

            if (referenceBar == null)
                Dock(newBar, dockToReferenceBarSide);
            else
                Dock(newBar, referenceBar, dockToReferenceBarSide);
        }
Пример #7
0
 /// <summary>
 /// Docks specified DockContainerItem.
 /// </summary>
 /// <param name="itemToDock">DockContainerItem to dock.</param>
 /// <param name="referenceBar">Reference bar.</param>
 /// <param name="dockToReferenceBarSide">Side to dock item to.</param>
 public void Dock(DockContainerItem itemToDock, Bar referenceBar, eDockSide dockToReferenceBarSide)
 {
     Dock(itemToDock, referenceBar, dockToReferenceBarSide, Point.Empty);
 }
Пример #8
0
 /// <summary>
 /// Docks specified DockContainerItem.
 /// </summary>
 /// <param name="itemToDock">DockContainerItem to dock.</param>
 /// <param name="side">Side to dock item to.</param>
 public void Dock(DockContainerItem itemToDock, eDockSide side)
 {
     Dock(itemToDock, null, side);
 }
Пример #9
0
        /// <summary>
        /// Docks the bar to the specified side of the reference bar.
        /// </summary>
        /// <param name="barToDock">Bar to dock.</param>
        /// <param name="referenceBar">Reference bar.</param>
        /// <param name="dockToReferenceBarSide">Side of the reference bar to dock the bar to.</param>
        public void Dock(Bar barToDock, Bar referenceBar, eDockSide dockToReferenceBarSide)
        {
            if (dockToReferenceBarSide == eDockSide.None)
                throw new ArgumentException("eDockSide.None is not supported value for dockToReferenceBarSide parameter. Use Float method to make floating bar.");
            if (referenceBar.DockSide == eDockSide.None)
                throw new ArgumentException("referenceBar must be docked to be used as reference for docking.");

            if (barToDock.LayoutType != eLayoutType.DockContainer)
            {
                barToDock.DockSide = dockToReferenceBarSide;
                return;
            }

            if (dockToReferenceBarSide == eDockSide.Document)
            {
                System.Collections.ArrayList list = new System.Collections.ArrayList(barToDock.Items.Count);
                barToDock.Items.CopyTo(list);
                DockContainerItem firstItem = null;
                foreach (BaseItem item in list)
                {
                    DockContainerItem dockitem = item as DockContainerItem;
                    if (dockitem != null)
                    {
                        if (firstItem == null) firstItem = dockitem;
                        dockitem.Displayed = false;
                        if (dockitem.OriginalBarName == "")
                        {
                            dockitem.OriginalBarName = barToDock.Name;
                            dockitem.OriginalPosition = barToDock.Items.IndexOf(dockitem);
                        }
                        barToDock.Items.Remove(dockitem);
                        referenceBar.Items.Add(dockitem);
                    }
                }
                referenceBar.RecalcLayout();

                if (firstItem != null)
                    referenceBar.SelectedDockContainerItem = firstItem;
                referenceBar.InvokeBarDockEvents();

                if (barToDock.CustomBar)
                {
                    this.Bars.Remove(barToDock);
                    barToDock.Dispose();
                }
                else
                {
                    barToDock.Visible = false;
                }
            }
            else
            {
                DocumentDockUIManager dockManager = GetDocumentUIManager(referenceBar.DockSide);
                if (!this.Bars.Contains(barToDock))
                    this.Bars.Add(barToDock);
                dockManager.Dock(referenceBar, barToDock, dockToReferenceBarSide);
            }
        }
Пример #10
0
        /// <summary>
        /// Dock bar to the specified side of the form.
        /// </summary>
        /// <param name="barToDock">Bar to dock.</param>
        /// <param name="side">Side to dock bar to.</param>
        public void Dock(Bar barToDock, eDockSide side)
        {
            if (side == eDockSide.None)
            {
                Float(barToDock);
                return;
            }

            if (barToDock.LayoutType != eLayoutType.DockContainer)
            {
                barToDock.DockSide = side;
                return;
            }

            DocumentDockUIManager dockManager = GetDocumentUIManager(side);
            if (!this.Bars.Contains(barToDock))
                this.Bars.Add(barToDock);
            dockManager.Dock(barToDock);
        }