/// <summary> /// Set logical dock /// </summary> /// <param name="hostContainerDock">host container dock</param> /// <param name="dock">dock</param> /// <param name="mode">mode</param> public void SetDock(DockStyle hostContainerDock, DockStyle dock, DockableMode mode) { if (_hostContainerDock != hostContainerDock) { if (AllowedDock != DockAllowed.Unknown) { bool isAllowed = false; switch (hostContainerDock) { case DockStyle.Left: isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Left); break; case DockStyle.Right: isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Right); break; case DockStyle.Top: isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Top); break; case DockStyle.Bottom: isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Bottom); break; case DockStyle.None: isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.None); break; case DockStyle.Fill: isAllowed = EnumUtility.Contains(AllowedDock, DockAllowed.Fill); break; case Globals.DockAutoHide: isAllowed = _hostContainerDock == DockStyle.Left || _hostContainerDock == DockStyle.Right || _hostContainerDock == DockStyle.Top || _hostContainerDock == DockStyle.Bottom; break; } if (isAllowed == false) { throw new NotSupportedException("Err"); } } _hostContainerDock = hostContainerDock; IsDocked = hostContainerDock != DockStyle.None && hostContainerDock != Globals.DockAutoHide; PagesPanel.ShowAutohideButton = (hostContainerDock != DockStyle.None && hostContainerDock != DockStyle.Fill); } _dock = dock; _dockMode = mode; foreach (DockableFormInfo info in _cachedInfos) { info.HostContainerDock = _hostContainerDock; info.Dock = _dock; info.DockMode = _dockMode; } }
/// <summary> /// Set view dock /// </summary> /// <param name="view">view</param> /// <param name="hostContainerDock">host container dock</param> /// <param name="dock">dock</param> /// <param name="mode">mode</param> public void SetViewDock(FormsTabbedView view, DockStyle hostContainerDock, DockStyle dock, DockableMode mode) { UpdateViewButtons(view); if (CanMoveByMouseFilledForms == false && hostContainerDock == DockStyle.Fill) { view.CanMoveByMouse = false; } else { view.CanMoveByMouse = true; } if (view.HostContainerDock == dock) { view.SetDock(hostContainerDock, dock, mode); return; } view.SetDock(hostContainerDock, dock, mode); view.Positioner.BeginMoveByMouse -= OnPositionerBeginMoveByMouse; view.Positioner.MoveByMouse -= OnPositionerMoveByMouse; view.Positioner.EndMoveByMouse -= OnPositionerEndMoveByMouse; view.Positioner.Dispose(); if (dock == DockStyle.None) { view.Positioner = new ControlPositioner(view.Parent); view.Positioner.MoveByMouse += OnPositionerMoveByMouse; view.Positioner.EndMoveByMouse += OnPositionerEndMoveByMouse; } else if (dock == Globals.DockAutoHide) { view.Positioner = null; return; } else { view.Positioner = new ControlPositioner(view); } view.Positioner.BeginMoveByMouse += OnPositionerBeginMoveByMouse; }
/// <summary> /// Dock the form in host /// </summary> /// <param name="containerToDock">container to dock</param> /// <param name="dock">dock</param> /// <param name="mode">mode</param> private void DockInHost(DockingContainer container, DockStyle dock, DockableMode mode) { Rectangle availableBounds = FormWrapper.GetFillScreenRectangle(_host); container.SingleChild.SaveFloatingSize(); container.Splitter.Visible = false; if (_host.Contains(container.Splitter) == false && dock != DockStyle.Fill) { _host.AddLast(container.Splitter); } if (mode == DockableMode.Inner) { if (dock != DockStyle.Fill) { _host.MoveFirst(container); _host.MoveFirst(container.Splitter); } } else { if (dock != DockStyle.Fill) { _host.MoveLast(container.Splitter); _host.MoveLast(container); } } container.Dock = dock; if (dock != DockStyle.Fill) { container.Splitter.Dock = dock; container.Splitter.Visible = true; } else { container.SingleChild.ButtonsRenderer = new TopUnitButtonDrawer(); } // Must call this again after splitter is docked and made visible, to have proper splitter. // Must have this if/else block also before making the splitter visible to prevent flickering if (mode == DockableMode.Inner) { if (dock != DockStyle.Fill) { _host.MoveFirst(container); _host.MoveFirst(container.Splitter); if (availableBounds.IsEmpty == false) { if (dock == DockStyle.Left || dock == DockStyle.Right) { if (container.Width >= availableBounds.Width - MinAvailableSize) { container.Width = availableBounds.Width - MinAvailableSize; } } else if (dock == DockStyle.Top || dock == DockStyle.Bottom) { if (container.Height >= availableBounds.Height - MinAvailableSize) { container.Height = availableBounds.Height - MinAvailableSize; } } } } } else { if (dock != DockStyle.Fill) { _host.MoveLast(container.Splitter); _host.MoveLast(container); } } SetViewDock(container.SingleChild, dock, dock, mode); }
/// <summary> /// Dock a form previously added to guider /// </summary> /// <param name="containerToDock">container to dock</param> /// <param name="containerWhereToDock">container where to dock</param> /// <param name="mode">were to dock</param> public void DockControl(DockingContainer containerToDock, DockingContainer containerWhereToDock, DockStyle dock, DockableMode mode) { Debug.Assert(dock != DockStyle.None); if (ShouldDockInHost(containerToDock, containerWhereToDock)) { DockInHost(containerToDock, dock, mode); } else if (ShouldDockInParentContainer(containerToDock, containerWhereToDock)) { DockInParentContainer(containerToDock, containerWhereToDock, dock); } OnShowFloatingWindows(); }
/// <summary> /// Dock a form previously added to guider over another form previously added to guider /// </summary> /// <param name="info">info about the form to dock</param> /// <param name="infoOver">info about form over which to dock</param> /// <param name="dock">how to dock</param> /// <param name="mode">were to dock</param> public void DockOver(DockableFormInfo info, DockableFormInfo infoOver, DockStyle dock, DockableMode mode) { DockingContainer containerToDock = HierarchyUtility.GetClosestDockableContainer(info.DockableForm); DockingContainer containerWhereToDock = null; if (infoOver != null) { containerWhereToDock = HierarchyUtility.GetClosestDockableContainer(infoOver.DockableForm); } _layout.DockControl(containerToDock, containerWhereToDock, dock, mode); }
/// <summary> /// Dock a form previously added to guider /// </summary> /// <param name="info">info about the form to dock</param> /// <param name="dock">how to dock</param> /// <param name="mode">were to dock</param> public void Dock(DockableFormInfo info, DockStyle dock, DockableMode mode) { DockingContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm); _layout.DockControl(container, null, dock, mode); }
/// <summary> /// Dock a form previously added to guider over another form previously added to guider /// </summary> /// <param name="info">info about the form to dock</param> /// <param name="infoOver">info about form over which to dock</param> /// <param name="dock">how to dock</param> /// <param name="mode">were to dock</param> public void DockForm(DockableFormInfo info, DockableFormInfo infoOver, DockStyle dock, DockableMode mode) { _docker.DockOver(info, infoOver, dock, mode); }
/// <summary> /// Constructor /// </summary> /// <param name="control">control</param> /// <param name="dock">dock</param> /// <param name="mode">dock mode</param> public DockControlEventArgs(Control control, DockStyle dock, DockableMode mode) { _control = control; _dock = dock; _dockMode = mode; }