private void RefreshStateChange(INestedPanesContainer oldContainer, DockState oldDockState) { lock (this) { if (IsRefreshStateChangeSuspended) { return; } SuspendRefreshStateChange(); } DockPanel.SuspendLayout(true); IDockContent contentFocused = GetFocusedContent(); if (contentFocused != null) { DockPanel.SaveFocus(); } SetParent(); if (ActiveContent != null) { ActiveContent.DockHandler.SetDockState(ActiveContent.DockHandler.IsHidden, DockState, ActiveContent.DockHandler.Pane); } foreach (IDockContent content in Contents) { if (content.DockHandler.Pane == this) { content.DockHandler.SetDockState(content.DockHandler.IsHidden, DockState, content.DockHandler.Pane); } } if (oldContainer != null) { Control 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(); if (contentFocused != null) { contentFocused.DockHandler.Activate(); } DockPanel.ResumeLayout(true, true); if (oldDockState != DockState) { OnDockStateChanged(EventArgs.Empty); } }
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; if (dockPanel != null) { dockPanel.SuspendLayout(true); } SuspendSetDockState(); DockState oldDockState = DockState; if (m_isHidden != isHidden || oldDockState == DockState.Unknown) { m_isHidden = isHidden; } m_visibleState = visibleState; m_dockState = isHidden ? DockState.Hidden : visibleState; if (visibleState == DockState.Unknown) { Pane = null; } else { m_isFloat = (m_visibleState == 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) { DockPanel.ContentFocusManager.GiveUpFocus(Content); } } SetPaneAndVisible(Pane); if (oldPane != null && !oldPane.IsDisposed && oldDockState == oldPane.DockState) { RefreshDockPane(oldPane); } if (Pane != null && DockState == Pane.DockState) { if ((Pane != oldPane) || (Pane == oldPane && oldDockState != oldPane.DockState)) { // Avoid early refresh of hidden AutoHide panes if ((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)) { DockPanel.ContentFocusManager.RemoveFromList(Content); } else { DockPanel.ContentFocusManager.AddToList(Content); } OnDockStateChanged(EventArgs.Empty); } ResumeSetDockState(); if (dockPanel != null) { dockPanel.ResumeLayout(true, true); } }
private Rectangle GetLogicalTabStripRectangle(DockState dockState, bool transformed) { if (!DockHelper.IsDockStateAutoHide(dockState)) { return(Rectangle.Empty); } int leftPanes = GetPanes(DockState.DockLeftAutoHide).Count; int rightPanes = GetPanes(DockState.DockRightAutoHide).Count; int topPanes = GetPanes(DockState.DockTopAutoHide).Count; int bottomPanes = GetPanes(DockState.DockBottomAutoHide).Count; int x, y, width, height; 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 (!transformed) { return(new Rectangle(x, y, width, height)); } else { return(GetTransformedRectangle(dockState, new Rectangle(x, y, width, height))); } }