/// <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(DockableContainer container, DockStyle dock, zDockMode 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 == zDockMode.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 TopTabButtonRenderer(); } // 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 == zDockMode.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="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, zDockMode mode) { DockableContainer container = HierarchyUtility.GetClosestDockableContainer(info.DockableForm); _layout.DockControl(container, null, 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(DockableContainer containerToDock, DockableContainer containerWhereToDock, DockStyle dock, zDockMode 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> /// 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, zDockMode 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> /// Constructor /// </summary> /// <param name="control">control</param> /// <param name="dock">dock</param> /// <param name="mode">dock mode</param> public DockControlEventArgs(Control control, DockStyle dock, zDockMode mode) { _control = control; _dock = dock; _dockMode = 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 DockForm(DockableFormInfo info, DockStyle dock, zDockMode mode) { _docker.Dock(info, dock, mode); }
/// <summary> /// Actualizeaza dimensiunile panourilor /// </summary> /// <returns>modurile actualizate</returns> public zDockMode UpdatePanelsLayout() { zDockMode modActualizat = zDockMode.None; if (_layout.UpdateLeftPanelLayout(_container.ClientSize)) { modActualizat |= zDockMode.Left; } if (_layout.UpdateRightPanelLayout(_container.ClientSize)) { modActualizat |= zDockMode.Right; } if (_layout.UpdateTopPanelLayout(_container.ClientSize)) { modActualizat |= zDockMode.Top; } if (_layout.UpdateBottomPanelLayout(_container.ClientSize)) { modActualizat |= zDockMode.Bottom; } if (_layout.UpdateCenterPanelLayout(_container.ClientSize)) { modActualizat |= zDockMode.Fill; } int minimumWidth = // Fit left panel DockPanelsLayout.ButtonsPanelDimension + _layout.LeftPanel.NotHiddenDimension + SplitterDimension + // Fit right panel DockPanelsLayout.ButtonsPanelDimension + _layout.RightPanel.NotHiddenDimension + SplitterDimension + // Fit center panel DockPanelsLayout.MinPanelDimension; int minimumHeight = // Fit top panel DockPanelsLayout.ButtonsPanelDimension + _layout.TopPanel.NotHiddenDimension + SplitterDimension + // Fit bottom panel DockPanelsLayout.ButtonsPanelDimension + _layout.BottomPanel.NotHiddenDimension + SplitterDimension + // Fit center panel DockPanelsLayout.ButtonsPanelDimension + DockPanelsLayout.MinPanelDimension; minimumWidth = Math.Min(_container.Width, minimumWidth); minimumHeight = Math.Min(_container.Height, minimumHeight); if (minimumWidth != _minViewWidth || minimumHeight != _minViewHeight) { _minViewWidth = minimumWidth; _minViewHeight = minimumHeight; _container.MinimumSize = new Size(_minViewWidth, _minViewHeight); if (MinimumSizeChanged != null) { MinimumSizeChanged(this, EventArgs.Empty); } } _container.Invalidate(); return(modActualizat); }
/// <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, zDockMode mode) { if (_hostContainerDock != hostContainerDock) { if (AllowedDock != zAllowedDock.Unknown) { bool isAllowed = false; switch (hostContainerDock) { case DockStyle.Left: isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.Left); break; case DockStyle.Right: isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.Right); break; case DockStyle.Top: isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.Top); break; case DockStyle.Bottom: isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.Bottom); break; case DockStyle.None: isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.None); break; case DockStyle.Fill: isAllowed = EnumUtility.Contains(AllowedDock, zAllowedDock.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> /// 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, zDockMode mode) { DockableContainer containerToDock = HierarchyUtility.GetClosestDockableContainer(info.DockableForm); DockableContainer containerWhereToDock = null; if (infoOver != null) { containerWhereToDock = HierarchyUtility.GetClosestDockableContainer(infoOver.DockableForm); } _layout.DockControl(containerToDock, containerWhereToDock, dock, mode); }
/// <summary> /// Constructor /// </summary> /// <param name="dockMode">dock mode of this panel</param> /// <param name="toolWindowsBorder">border of the tool windows from this panel</param> public DockPanel(zDockMode dockMode, FormBorderStyle toolWindowsBorder) { _dockMode = dockMode; _toolWindowsBorderStyle = toolWindowsBorder; }
/// <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(DockableContainer container, DockStyle dock, zDockMode mode) { container.SingleChild.SaveFloatingSize(); container.Splitter.Visible = false; if (_host.Contains(container.Splitter) == false && dock != DockStyle.Fill) { _host.AddLast(container.Splitter); } if (mode == zDockMode.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 TopTabButtonRenderer(); } // 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 == zDockMode.Inner) { if (dock != DockStyle.Fill) { _host.MoveFirst(container); _host.MoveFirst(container.Splitter); } } else { if (dock != DockStyle.Fill) { _host.MoveLast(container.Splitter); _host.MoveLast(container); } } SetViewDock(container.SingleChild, dock, dock, mode); }
/// <summary> /// Show the dock guiders buttons /// </summary> /// <param name="allowedDockMode">allowed dock mode. Guiders will be shown depending on this mode.</param> /// <param name="screenClientBounds">screen client bounds of the container</param> public void ShowDockGuiders(zDockMode allowedDockMode, Rectangle screenClientBounds) { if (allowedDockMode == zDockMode.None) { HideDockGuiders(); return; } if (_lastAllowedDock == allowedDockMode && _lastScreenClientBounds == screenClientBounds) { return; } _lastAllowedDock = allowedDockMode; _lastScreenClientBounds = screenClientBounds; int width = screenClientBounds.Width; int height = screenClientBounds.Height; Point offset = screenClientBounds.Location; Point center = new Point(width / 2, height / 2); Point leftPosition1 = new Point(12, center.Y - _dockLeftGuider1.Height / 2); Point topPosition1 = new Point(center.X - _dockTopGuider1.Width / 2, 12); Point rightPosition1 = new Point(width - _dockRightGuider1.Width - 12, center.Y - _dockRightGuider1.Height / 2); Point bottomPosition1 = new Point(center.X - _dockBottomGuider1.Width / 2, height - _dockBottomGuider1.Height - 12); Point fillPosition = new Point(center.X - _dockFillGuider.Width / 2, center.Y - _dockFillGuider.Height / 2); Point leftPosition2 = new Point(fillPosition.X - _dockLeftGuider2.Width + 7, center.Y - _dockLeftGuider2.Height / 2); Point topPosition2 = new Point(center.X - _dockTopGuider2.Width / 2 - 1, fillPosition.Y - _dockTopGuider2.Height + 7); Point rightPosition2 = new Point(fillPosition.X + _dockFillGuider.Width - 7, center.Y - _dockRightGuider2.Height / 2); Point bottomPosition2 = new Point(center.X - _dockBottomGuider2.Width / 2, fillPosition.Y + _dockBottomGuider2.Height + 7); leftPosition1.Offset(offset); rightPosition1.Offset(offset); topPosition1.Offset(offset); bottomPosition1.Offset(offset); fillPosition.Offset(offset); leftPosition2.Offset(offset); rightPosition2.Offset(offset); topPosition2.Offset(offset); bottomPosition2.Offset(offset); _dockLeftGuider1.Location = leftPosition1; _dockRightGuider1.Location = rightPosition1; _dockTopGuider1.Location = topPosition1; _dockBottomGuider1.Location = bottomPosition1; _dockFillGuider.Location = fillPosition; _dockLeftGuider2.Location = leftPosition2; _dockRightGuider2.Location = rightPosition2; _dockTopGuider2.Location = topPosition2; _dockBottomGuider2.Location = bottomPosition2; _dockFillGuider.Show(); bool showLeft = EnumUtility.Contains(allowedDockMode, zDockMode.Left); _dockLeftGuider1.Visible = showLeft; _dockLeftGuider2.Visible = showLeft; bool showRight = EnumUtility.Contains(allowedDockMode, zDockMode.Right); _dockRightGuider1.Visible = showRight; _dockRightGuider2.Visible = showRight; bool showTop = EnumUtility.Contains(allowedDockMode, zDockMode.Top); _dockTopGuider1.Visible = showTop; _dockTopGuider2.Visible = showTop; bool showBottom = EnumUtility.Contains(allowedDockMode, zDockMode.Bottom); _dockBottomGuider1.Visible = showBottom; _dockBottomGuider2.Visible = showBottom; _dockFillGuider.ShowFillPreview = EnumUtility.Contains(allowedDockMode, zDockMode.Fill); if (VisibleChanged != null) { VisibleChanged(this, EventArgs.Empty); } }
/// <summary> /// Create a new instance of <see cref="ContextMenuEventArg"/> /// </summary> /// <param name="selection">dock mode of the selected panel</param> public AutoHideEventArgs(zDockMode selection) { _selection = selection; }
/// <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, zDockMode mode) { _docker.DockOver(info, infoOver, dock, mode); }
/// <summary> /// Lock the form. This lock should be called when dock begins /// </summary> /// <param name="lockedBounds">locked bounds</param> /// <param name="lockedBorder">locked border</param> /// <param name="dockMode">dock mode of the tool window</param> internal void LockFormSizeAndDock(Rectangle lockedBounds, FormBorderStyle lockedBorder, zDockMode dockMode) { if (_dockMode == zDockMode.None) { _dockMode = dockMode; _boundsBeforeLock = Bounds; _borderBeforeLock = FormBorderStyle; } _resizeIsLocked = true; _lockedBounds = lockedBounds; FormBorderStyle = lockedBorder; Bounds = lockedBounds; }