internal bool IsDockStateValid(DockState dockState) { return(NestedPanes.All(pane => pane.Contents.All(content => DockHelper.IsDockStateValid(dockState, content.DockHandler.DockAreas)))); }
public bool IsDockStateValid(DockState dockState) { return(DockHelper.IsDockStateValid(dockState, DockAreas)); }
private Rectangle GetLogicalTabStripRectangle(DockState dockState, bool transformed = false) { if (!DockHelper.IsDockStateAutoHide(dockState)) { return(Rectangle.Empty); } var leftPanes = GetPanes(DockState.DockLeftAutoHide).Count; var rightPanes = GetPanes(DockState.DockRightAutoHide).Count; var topPanes = GetPanes(DockState.DockTopAutoHide).Count; var bottomPanes = GetPanes(DockState.DockBottomAutoHide).Count; int x, y, width; var height = MeasureHeight(); if (dockState == DockState.DockLeftAutoHide && leftPanes > 0) { x = 0; y = topPanes == 0 ? 0 : height; width = Height - (topPanes == 0 ? 0 : height) - (bottomPanes == 0 ? 0 : height); } else if (dockState == DockState.DockRightAutoHide && rightPanes > 0) { x = Width - height; if (leftPanes != 0 && x < height) { x = height; } y = topPanes == 0 ? 0 : height; width = Height - (topPanes == 0 ? 0 : height) - (bottomPanes == 0 ? 0 : height); } else if (dockState == DockState.DockTopAutoHide && topPanes > 0) { x = leftPanes == 0 ? 0 : height; y = 0; width = Width - (leftPanes == 0 ? 0 : height) - (rightPanes == 0 ? 0 : height); } else if (dockState == DockState.DockBottomAutoHide && bottomPanes > 0) { x = leftPanes == 0 ? 0 : height; y = Height - height; if (topPanes != 0 && y < height) { y = height; } width = Width - (leftPanes == 0 ? 0 : height) - (rightPanes == 0 ? 0 : height); } else { return(Rectangle.Empty); } if (width == 0 || height == 0) { return(Rectangle.Empty); } var rect = new Rectangle(x, y, width, height); return(transformed ? GetTransformedRectangle(dockState, rect) : rect); }
internal void SetDockState(bool isHidden, DockState visibleState, DockPane oldPane) { if (IsSuspendSetDockState) { return; } if (DockPanel == null && visibleState != DockState.Unknown) { throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_NullPanel); } if (visibleState == DockState.Hidden || (visibleState != DockState.Unknown && !IsDockStateValid(visibleState))) { throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_InvalidState); } DockPanel dockPanel = DockPanel; dockPanel?.SuspendLayout(true); SuspendSetDockState(); DockState oldDockState = DockState; if (_mIsHidden != isHidden || oldDockState == DockState.Unknown) { _mIsHidden = isHidden; } _mVisibleState = visibleState; _mDockState = isHidden ? DockState.Hidden : visibleState; if (visibleState == DockState.Unknown) { Pane = null; } else { _mIsFloat = _mVisibleState == DockState.Float; if (Pane == null) { Pane = DockPanel?.DockPaneFactory.CreateDockPane(Content, visibleState, true); } else if (Pane.DockState != visibleState) { if (Pane.Contents.Count == 1) { Pane.SetDockState(visibleState); } else { Pane = DockPanel?.DockPaneFactory.CreateDockPane(Content, visibleState, true); } } } if (Form.ContainsFocus) { if (DockState == DockState.Hidden || DockState == DockState.Unknown) { if (!Win32Helper.IsRunningOnMono) { DockPanel?.ContentFocusManager.GiveUpFocus(Content); } } } SetPaneAndVisible(Pane); if (oldPane != null && !oldPane.IsDisposed && oldDockState == oldPane.DockState) { RefreshDockPane(oldPane); } if (Pane != null && DockState == Pane.DockState) { if (oldPane != null && ((Pane != oldPane) || (Pane == oldPane && oldDockState != oldPane.DockState))) { // Avoid early refresh of hidden AutoHide panes if (Pane != null && (Pane.DockWindow == null || Pane.DockWindow.Visible || Pane.IsHidden) && !Pane.IsAutoHide) { RefreshDockPane(Pane); } } } if (oldDockState != DockState) { if (DockState == DockState.Hidden || DockState == DockState.Unknown || DockHelper.IsDockStateAutoHide(DockState)) { if (!Win32Helper.IsRunningOnMono) { DockPanel?.ContentFocusManager.RemoveFromList(Content); } } else if (!Win32Helper.IsRunningOnMono) { DockPanel?.ContentFocusManager.AddToList(Content); } ResetAutoHidePortion(oldDockState, DockState); OnDockStateChanged(EventArgs.Empty); } ResumeSetDockState(); dockPanel?.ResumeLayout(true, true); }
private void RefreshStateChange(INestedPanesContainer oldContainer, DockState oldDockState) { if (IsRefreshStateChangeSuspended) { return; } SuspendRefreshStateChange(); DockPanel.SuspendLayout(true); var contentFocused = GetFocusedContent(); if (contentFocused != null) { DockPanel.SaveFocus(); } SetParent(); ActiveContent?.DockHandler.SetDockState(ActiveContent.DockHandler.IsHidden, DockState, ActiveContent.DockHandler.Pane); foreach (var content in Contents.Where(content => content.DockHandler.Pane == this)) { content.DockHandler.SetDockState(content.DockHandler.IsHidden, DockState, content.DockHandler.Pane); } var oldContainerControl = (Control)oldContainer; if (oldContainer?.DockState == oldDockState && !oldContainerControl.IsDisposed) { oldContainerControl.PerformLayout(); } if (DockHelper.IsDockStateAutoHide(oldDockState)) { DockPanel.RefreshActiveAutoHideContent(); } if (NestedPanesContainer.DockState == DockState) { ((Control)NestedPanesContainer).PerformLayout(); } if (DockHelper.IsDockStateAutoHide(DockState)) { DockPanel.RefreshActiveAutoHideContent(); } if (DockHelper.IsDockStateAutoHide(oldDockState) || DockHelper.IsDockStateAutoHide(DockState)) { DockPanel.RefreshAutoHideStrip(); DockPanel.PerformLayout(); } ResumeRefreshStateChange(); contentFocused?.DockHandler.Activate(); DockPanel.ResumeLayout(true, true); if (oldDockState != DockState) { OnDockStateChanged(EventArgs.Empty); } }