/// <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); }
internal void DockTo(DockSite site, ToolWindowBase referenceWindow, eDockSide side) { site.GetDocumentUIManager().Dock(referenceWindow.Bar, CreateBar(), side); }
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; }
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(); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }