/// <summary> /// On begin move a positioner using the mouse /// </summary> /// <param name="sender">sender of the event</param> /// <param name="e">event arguments</param> private void OnPositionerBeginMoveByMouse(object sender, EventArgs e) { DockableContainer container = sender as DockableContainer; if (container != null) { Debug.Assert(_host.Contains(container), "Only floating forms should have a container as positioner. Docked forms should have their tabbed view."); _host.MoveFirst(container); } else { FormsTabbedView view = sender as FormsTabbedView; Debug.Assert(view != null, "The positioner should wrap either a container for floating forms or a tabbed view for docked forms"); Undock(view); container = view.Parent as DockableContainer; } EventHandler <ControlEventArgs> handler = BeginMoveByMouse; if (handler != null) { ControlEventArgs args = new ControlEventArgs(container); handler(this, args); } }
/// <summary> /// Add sorted fill containers to the list /// </summary> /// <param name="containers">containers</param> private void AddSortedFillContainers(List <DockableContainer> containers) { List <DockableContainer> containersToBringInFront = new List <DockableContainer>(); foreach (DockableFormInfo info in _dockableForms) { FormsTabbedView view = HierarchyUtility.GetTabbedView(info.DockableForm); if (view.HostContainerDock != DockStyle.Fill) { continue; } DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm); while (true) { if (container.Parent as DockableContainer != null) { container = (DockableContainer)container.Parent; } else { break; } } Debug.Assert(_host.Contains(container), "Floating form views must have their parent in form"); if (containersToBringInFront.Contains(container) == false) { containersToBringInFront.Add(container); } } SortContainersBasedOnTheirZOrder(containersToBringInFront); containers.AddRange(containersToBringInFront); }