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;
 }