public override void AddPane(DockPaneBase pane, DockDirection dire, double splitRate) { if (pane.Neigh.Owner != null) pane.Remove(); Neigh.Add(pane, dire); _layoutEngine.AddPane(pane, dire, splitRate); }
public PaneRemovedEventArgs(DockPaneBase pane) { DockPane = pane; }
public PaneAddedEventArgs(DockBase addedpane, DockPaneBase pane, DockDirection dire) : base(pane, dire) { AddedPane = addedpane; }
void SplitPane(DockPaneBase pane, DockDirection dire) { if ((dire == DockDirection.Top) || (dire == DockDirection.Bottom)) { DockBaseNeigh.DireInfo pairInfoA; DockBaseNeigh.DireInfo pairInfoB; pane.Neigh.Left = Left.Outers[0].Neigh.Left; pane.Neigh.Left.Inners.Add(pane); pane.Neigh.Right = Right.Outers[0].Neigh.Right; pane.Neigh.Right.Inners.Add(pane); if (dire == DockDirection.Top) { pane.Neigh.Bottom = Top; pane.Neigh.Bottom.Inners.Remove(Node); pane.Neigh.Bottom.Inners.Add(pane); pairInfoA = Top = DockBaseNeigh.DireInfo.Initialize(Node); pairInfoB = pane.Neigh.Top = DockBaseNeigh.DireInfo.Initialize(pane); } else { pane.Neigh.Top = Bottom; pane.Neigh.Top.Inners.Remove(Node); pane.Neigh.Top.Inners.Add(pane); pairInfoA = Bottom = DockBaseNeigh.DireInfo.Initialize(Node); pairInfoB = pane.Neigh.Bottom = DockBaseNeigh.DireInfo.Initialize(pane); } pairInfoA.Outers = pairInfoB.Inners; pairInfoB.Outers = pairInfoA.Inners; } else if ((dire == DockDirection.Left) || (dire == DockDirection.Right)) { DockBaseNeigh.DireInfo pairInfoA; DockBaseNeigh.DireInfo pairInfoB; pane.Neigh.Top = Top.Outers[0].Neigh.Top; pane.Neigh.Top.Inners.Add(pane); pane.Neigh.Bottom = Bottom.Outers[0].Neigh.Bottom; pane.Neigh.Bottom.Inners.Add(pane); if (dire == DockDirection.Left) { pane.Neigh.Right = Left; pane.Neigh.Right.Inners.Remove(Node); pane.Neigh.Right.Inners.Add(pane); pairInfoA = Left = DockBaseNeigh.DireInfo.Initialize(Node); pairInfoB = pane.Neigh.Left = DockBaseNeigh.DireInfo.Initialize(pane); } else { pane.Neigh.Left = Right; pane.Neigh.Left.Inners.Remove(Node); pane.Neigh.Left.Inners.Add(pane); pairInfoA = Right = DockBaseNeigh.DireInfo.Initialize(Node); pairInfoB = pane.Neigh.Right = DockBaseNeigh.DireInfo.Initialize(pane); } pairInfoA.Outers = pairInfoB.Inners; pairInfoB.Outers = pairInfoA.Inners; } }
public sealed override void Add(DockPaneBase pane, DockDirection dire) { ((DockPaneBase.DockNeigh)pane.Neigh).Owner = Node as DockBayBase; ((DockPaneBase.DockNeigh)pane.Neigh).Parent = Node; var node = (DockBayBase)Node; if (node.Panes.Count > 0) SplitPane(pane, dire); else { pane.Neigh.Top.Outers = Top.Inners; pane.Neigh.Bottom.Outers = Bottom.Inners; pane.Neigh.Left.Outers = Left.Inners; pane.Neigh.Right.Outers = Right.Inners; pane.Neigh.Top.Inners = Top.Outers; pane.Neigh.Bottom.Inners = Bottom.Outers; pane.Neigh.Left.Inners = Left.Outers; pane.Neigh.Right.Inners = Right.Outers; pane.Neigh.Top.Inners.Add(pane); pane.Neigh.Bottom.Inners.Add(pane); pane.Neigh.Left.Inners.Add(pane); pane.Neigh.Right.Inners.Add(pane); pane.Neigh.Top.Inners.Remove(Node); pane.Neigh.Bottom.Inners.Remove(Node); pane.Neigh.Left.Inners.Remove(Node); pane.Neigh.Right.Inners.Remove(Node); } Children.Add(pane); ((DockPaneBase.DockNeigh)pane.Neigh).Align = dire; OnPaneAdded(new DockEventArgs(pane, dire)); }
public override void AddPane(DockPaneBase pane, DockDirection dire, double rate) { var dictionary = GetSplitPaneRect(_bay.Bounds, dire, rate); Rectangle rectangle = dictionary[DockLayoutEngineBase.RectRate.LargeRect]; Rectangle rectangle2 = dictionary[DockLayoutEngineBase.RectRate.SmallRect]; if (_bay.Panes.Count < 2) { rectangle = new Rectangle(); rectangle2 = new Rectangle(new Point(0, 0), _bay.Size); } else { foreach (var child in _bay._panes) { if (child != pane) { ResizeRate rate2 = _rateOf_paneSize[child]; Rectangle rectangle3 = new Rectangle(((int)(((rectangle.Width - 1) * rate2.X) + 0.5)) + ((dire == DockDirection.Left) ? rectangle2.Width : 0), ((int)(((rectangle.Height - 1) * rate2.Y) + 0.5)) + ((dire == DockDirection.Top) ? rectangle2.Height : 0), (int)((rectangle.Width * rate2.Width) + 0.5), (int)((rectangle.Height * rate2.Height) + 0.5)); child.Bounds = rectangle3; } } } pane.Bounds = rectangle2; }
public override void AddPane(DockPaneBase pane, DockDirection dire) { AddPane(pane, dire, _default_splitRate); }
public abstract void Add(DockPaneBase pane, DockDirection dire);
void otherForm_FormEndMoving(object sender, EventArgs e) { if (_isFloatFormOver) { OnFloatFormEndMove(new FloatFormEventArgs(sender as DockFormFloating, _pane)); } HideDockHelper(); _isFloatFormOver = false; _pane = null; }
public DockEventArgs(DockPaneBase pane, DockDirection align) { DockPane = pane; Align = align; }
public override void AddPane(DockPaneBase pane, DockDirection dire, double rate) { var dictionary = GetSplitPaneRect(_pane.Bounds, dire, rate); Rectangle rectangle2 = dictionary[DockLayoutEngineBase.RectRate.SmallRect]; Rectangle rectangle = dictionary[DockLayoutEngineBase.RectRate.LargeRect]; _pane.Size = rectangle.Size; _pane.Location = rectangle.Location; pane.Size = rectangle2.Size; pane.Location = rectangle2.Location; }
public DockPaneLayoutEngine(DockPaneBase pane) { _pane = pane; }
protected static void InitializeOf(DockBaseNeigh neigh, DockPaneBase node) { node.NeighInitialized((DockPaneBase.DockNeigh)neigh); DockBaseNeigh.InitializeOf(neigh, node); }
public sealed override void Add(DockPaneBase pane, DockDirection dire) { pane._neigh.Owner = Owner; pane._neigh.Parent = Node; Children.Add(pane); switch (dire) { case DockDirection.Top: pane.Neigh.Top = Top; pane.Neigh.Left = Left; pane.Neigh.Right = Right; pane.Neigh.Top.Inners.Remove(Node); pane.Neigh.Top.Inners.Add(pane); pane.Neigh.Left.Inners.Add(pane); pane.Neigh.Right.Inners.Add(pane); pane.Neigh.Bottom = DockBaseNeigh.DireInfo.Initialize(pane); Top = DockBaseNeigh.DireInfo.Initialize(Node); pane.Neigh.Bottom.Outers = Top.Inners; Top.Outers = pane.Neigh.Bottom.Inners; break; case DockDirection.Bottom: pane.Neigh.Bottom = Bottom; pane.Neigh.Right = Right; pane.Neigh.Left = Left; pane.Neigh.Bottom.Inners.Remove(Node); Bottom.Inners.Add(pane); Left.Inners.Add(pane); Right.Inners.Add(pane); pane.Neigh.Top = DockBaseNeigh.DireInfo.Initialize(pane); Bottom = DockBaseNeigh.DireInfo.Initialize(Node); Bottom.Outers = pane.Neigh.Top.Inners; pane.Neigh.Top.Outers = Bottom.Inners; break; case DockDirection.Left: pane.Neigh.Bottom = Bottom; pane.Neigh.Left = Left; pane.Neigh.Top = Top; pane.Neigh.Left.Inners.Remove(Node); pane.Neigh.Left.Inners.Add(pane); pane.Neigh.Top.Inners.Add(pane); pane.Neigh.Bottom.Inners.Add(pane); pane.Neigh.Right = DockBaseNeigh.DireInfo.Initialize(pane); Left = DockBaseNeigh.DireInfo.Initialize(Node); Left.Outers = pane.Neigh.Right.Inners; pane.Neigh.Right.Outers = Left.Inners; break; case DockDirection.Right: pane.Neigh.Bottom = Bottom; pane.Neigh.Right = Right; pane.Neigh.Top = Top; pane.Neigh.Right.Inners.Remove(Node); pane.Neigh.Right.Inners.Add(pane); pane.Neigh.Top.Inners.Add(pane); pane.Neigh.Bottom.Inners.Add(pane); pane.Neigh.Left = DockBaseNeigh.DireInfo.Initialize(pane); Right = DockBaseNeigh.DireInfo.Initialize(Node); Right.Outers = pane.Neigh.Left.Inners; pane.Neigh.Left.Outers = Right.Inners; break; default: throw new ApplicationException("direの値が異常です。"); } pane._neigh.Align = dire; OnPaneAdded(new DockEventArgs(pane, dire)); }
public override void AddPane(DockPaneBase pane, DockDirection dire, double splitRate) { if (Neigh.Owner == null) throw new ArgumentException("Bayに挿入されていない状態で他のPaneを自身に挿入することは出来ません。"); if (pane.Neigh.Owner != null) pane.Remove(); Neigh.Add(pane, dire); _layoutEngine.AddPane(pane, dire, splitRate); OnPaneAdded(new DockEventArgs(pane, dire)); }
public override void AddPane(DockPaneBase pane, DockDirection dire) { double splitRate = 0.25; AddPane(pane, dire, splitRate); }
void otherForm_FormMoving(object sender, EventArgs e) { var form = (DockFormFloating)sender; var mousePosition = Control.MousePosition; var childAtPoint = GetChildAtPoint(PointToClient(mousePosition)) as DockPaneBase; var flag = Parent.RectangleToScreen(Bounds).Contains(mousePosition); if (TopLevelControl != form) { if (flag) { foreach (DockFormFloating floating2 in ((DockNeigh)Neigh).TopLevelRootBay.FloatFormOrder) { if (floating2.Bounds.Contains(mousePosition) && (floating2 != form)) { if (floating2.DockBay != this) { flag = false; } break; } } } if (flag) { OnFloatFormMove(new FloatFormEventArgs(form, childAtPoint)); if ((childAtPoint != _pane) || (flag != _isFloatFormOver)) { OnFloatFormOver(new FloatFormEventArgs(form, childAtPoint)); OnFloatFormEnter(new FloatFormEventArgs(form, childAtPoint)); } _pane = childAtPoint; } else if (!flag && (flag != _isFloatFormOver)) { OnFloatFormOver(new FloatFormEventArgs(form, childAtPoint)); OnFloatFormLeave(new FloatFormEventArgs(form, childAtPoint)); _pane = null; } _dragBay = form.DockBay; } _isFloatFormOver = flag; }
public FloatFormEventArgs(DockFormFloating form, DockPaneBase pane) { FloatForm = form; DockPane = pane; }
public abstract void AddPane(DockPaneBase pane, DockDirection dire, double rate);
void floatForm_FormMoving(object sender, EventArgs e) { var form = (DockFormFloating)sender; var mousePosition = Control.MousePosition; var childAtPoint = GetChildAtPoint(PointToClient(mousePosition)) as DockPaneBase; var flag = Parent.RectangleToScreen(Bounds).Contains(mousePosition); if (flag) { foreach (var floatBay in FloatFormOrder) if ((floatBay != form) && floatBay.Bounds.Contains(mousePosition)) { flag = false; childAtPoint = null; } } if (flag) { OnFloatFormMove(new FloatFormEventArgs(form, childAtPoint)); if ((childAtPoint != _pane) || (flag != _isFloatFormOver)) { OnFloatFormOver(new FloatFormEventArgs(form, childAtPoint)); OnFloatFormEnter(new FloatFormEventArgs(form, childAtPoint)); } _pane = childAtPoint; } else if (!flag && (flag != _isFloatFormOver)) { OnFloatFormOver(new FloatFormEventArgs(form, childAtPoint)); OnFloatFormLeave(new FloatFormEventArgs(form, childAtPoint)); } _dragBay = form.DockBay; _isFloatFormOver = flag; }