internal void SetStatus(NestedPaneCollection nestedPanes, DockPane previousPane, DockAlignment alignment, double proportion) { NestedPanes = nestedPanes; PreviousPane = previousPane; Alignment = alignment; Proportion = proportion; }
public void DockTo(DockPanel panel, DockStyle dockStyle) { if (panel != DockPanel) { throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, nameof(panel)); } NestedPaneCollection nestedPanesTo = null; if (dockStyle == DockStyle.Top) { nestedPanesTo = DockPanel.DockWindows[DockState.DockTop].NestedPanes; } else if (dockStyle == DockStyle.Bottom) { nestedPanesTo = DockPanel.DockWindows[DockState.DockBottom].NestedPanes; } else if (dockStyle == DockStyle.Left) { nestedPanesTo = DockPanel.DockWindows[DockState.DockLeft].NestedPanes; } else if (dockStyle == DockStyle.Right) { nestedPanesTo = DockPanel.DockWindows[DockState.DockRight].NestedPanes; } else if (dockStyle == DockStyle.Fill) { nestedPanesTo = DockPanel.DockWindows[DockState.Document].NestedPanes; } DockPane prevPane = null; if (nestedPanesTo == null) { return; } for (var i = nestedPanesTo.Count - 1; i >= 0; i--) { if (nestedPanesTo[i] != VisibleNestedPanes[0]) { prevPane = nestedPanesTo[i]; } } MergeNestedPanes(VisibleNestedPanes, nestedPanesTo, prevPane, DockAlignment.Left, 0.5); }
private void InternalConstruct(DockPanel dockPanel, DockPane pane, bool boundsSpecified, Rectangle bounds) { if (dockPanel == null) { throw new ArgumentNullException(Strings.FloatWindow_Constructor_NullDockPanel); } _mNestedPanes = new NestedPaneCollection(this); FormBorderStyle = FormBorderStyle.SizableToolWindow; ShowInTaskbar = false; if (dockPanel.RightToLeft != RightToLeft) { RightToLeft = dockPanel.RightToLeft; } if (RightToLeftLayout != dockPanel.RightToLeftLayout) { RightToLeftLayout = dockPanel.RightToLeftLayout; } SuspendLayout(); if (boundsSpecified) { Bounds = bounds; StartPosition = FormStartPosition.Manual; } else { StartPosition = FormStartPosition.WindowsDefaultLocation; Size = dockPanel.DefaultFloatWindowSize; } DockPanel = dockPanel; Owner = DockPanel.FindForm(); DockPanel.AddFloatWindow(this); if (pane != null) { pane.FloatWindow = this; } ResumeLayout(); }
private static void MergeNestedPanes(VisibleNestedPaneCollection nestedPanesFrom, NestedPaneCollection nestedPanesTo, DockPane prevPane, DockAlignment alignment, double proportion) { if (nestedPanesFrom.Count == 0) { return; } int count = nestedPanesFrom.Count; DockPane[] panes = new DockPane[count]; DockPane[] prevPanes = new DockPane[count]; DockAlignment[] alignments = new DockAlignment[count]; double[] proportions = new double[count]; for (int i = 0; i < count; i++) { panes[i] = nestedPanesFrom[i]; prevPanes[i] = nestedPanesFrom[i].NestedDockingStatus.PreviousPane; alignments[i] = nestedPanesFrom[i].NestedDockingStatus.Alignment; proportions[i] = nestedPanesFrom[i].NestedDockingStatus.Proportion; } DockPane pane = panes[0].DockTo(nestedPanesTo.Container, prevPane, alignment, proportion); panes[0].DockState = nestedPanesTo.DockState; for (int i = 1; i < count; i++) { for (int j = i; j < count; j++) { if (prevPanes[j] == panes[i - 1]) { prevPanes[j] = pane; } } pane = panes[i].DockTo(nestedPanesTo.Container, prevPanes[i], alignments[i], proportions[i]); panes[i].DockState = nestedPanesTo.DockState; } }
internal DockWindow(DockPanel dockPanel, DockState dockState) { NestedPanes = new NestedPaneCollection(this); DockPanel = dockPanel; DockState = dockState; Visible = false; SuspendLayout(); if (DockState == DockState.DockLeft || DockState == DockState.DockRight || DockState == DockState.DockTop || DockState == DockState.DockBottom) { _mSplitter = DockPanel.Extender.DockWindowSplitterControlFactory.CreateSplitterControl(); Controls.Add(_mSplitter); } switch (DockState) { case DockState.DockLeft: Dock = DockStyle.Left; _mSplitter.Dock = DockStyle.Right; break; case DockState.DockRight: Dock = DockStyle.Right; _mSplitter.Dock = DockStyle.Left; break; case DockState.DockTop: Dock = DockStyle.Top; _mSplitter.Dock = DockStyle.Bottom; break; case DockState.DockBottom: Dock = DockStyle.Bottom; _mSplitter.Dock = DockStyle.Top; break; case DockState.Document: Dock = DockStyle.Fill; break; case DockState.Unknown: break; case DockState.Float: break; case DockState.DockTopAutoHide: break; case DockState.DockLeftAutoHide: break; case DockState.DockBottomAutoHide: break; case DockState.DockRightAutoHide: break; case DockState.Hidden: break; default: throw new ArgumentOutOfRangeException(); } ResumeLayout(); }
internal VisibleNestedPaneCollection(NestedPaneCollection nestedPanes) : base(new List <DockPane>()) { NestedPanes = nestedPanes; }