Exemplo n.º 1
0
        private void ContentWindow_OnEndDrag(bool abort)
        {
            User32.SetCursor(DragControl.Cursor.Handle);

            if (abort)
            {
                return;
            }

            ContentWindow cw = ((TabWindow)DragControl).ContentWindow;

            if (DropTarget.DropTo is TabWindow)
            {
                TabWindow tabWindow = DropTarget.DropTo as TabWindow;

                if (DropTarget.Dock == DockStyle.Fill)
                {
                    for (int i = cw.Contents.Count - 1; i >= 0; i--)
                    {
                        Content c = cw.Contents[i];
                        c.ContentWindow = tabWindow.ContentWindow;
                        if (DropTarget.ContentIndex != -1)
                        {
                            tabWindow.ContentWindow.SetContentIndex(c, DropTarget.ContentIndex);
                        }
                        c.Activate();
                    }
                }
                else
                {
                    if (DropTarget.Dock == DockStyle.Left)
                    {
                        tabWindow.InsertContentWindowBefore(cw, LayoutStyles.Horizontal, 0.5);
                    }
                    else if (DropTarget.Dock == DockStyle.Right)
                    {
                        tabWindow.InsertContentWindowAfter(cw, LayoutStyles.Horizontal, 0.5);
                    }
                    else if (DropTarget.Dock == DockStyle.Top)
                    {
                        tabWindow.InsertContentWindowBefore(cw, LayoutStyles.Vertical, 0.5);
                    }
                    else if (DropTarget.Dock == DockStyle.Bottom)
                    {
                        tabWindow.InsertContentWindowAfter(cw, LayoutStyles.Vertical, 0.5);
                    }

                    cw.Activate();
                }
            }
            else if (DropTarget.DropTo is DockManager)
            {
                if (DropTarget.Dock == DockStyle.Top)
                {
                    cw.VisibleState = DockState.DockTop;
                }
                else if (DropTarget.Dock == DockStyle.Bottom)
                {
                    cw.VisibleState = DockState.DockBottom;
                }
                else if (DropTarget.Dock == DockStyle.Left)
                {
                    cw.VisibleState = DockState.DockLeft;
                }
                else if (DropTarget.Dock == DockStyle.Right)
                {
                    cw.VisibleState = DockState.DockRight;
                }
                else if (DropTarget.Dock == DockStyle.Fill)
                {
                    cw.VisibleState = DockState.Document;
                }

                cw.DockManager.SetContentWindowIndex(cw, 0);
                cw.Activate();
            }
            else if (IsDockStateValid(DockState.Float))
            {
                Point ptMouse = Control.MousePosition;

                Point location = new Point(ptMouse.X + m_mouseOffset.X, ptMouse.Y + m_mouseOffset.Y);
                Size  size;
                bool  createFloatWindow = true;
                if (cw.FloatWindow == null)
                {
                    size = FloatWindow.DefaultWindowSize;
                }
                else if (cw.FloatWindow.ContentWindows.Count == 1)
                {
                    size = ((TabWindow)DragControl).ContentWindow.FloatWindow.Size;
                    createFloatWindow = false;
                }
                else
                {
                    size = FloatWindow.DefaultWindowSize;
                }

                if (ptMouse.X > location.X + size.Width)
                {
                    location.X += ptMouse.X - (location.X + size.Width) + DragBorderWidth;
                }

                if (createFloatWindow)
                {
                    cw.FloatWindow = new FloatWindow(cw.DockManager, cw, new Rectangle(location, size));
                }
                else
                {
                    cw.FloatWindow.Bounds = new Rectangle(location, size);
                }

                cw.VisibleState = DockState.Float;
                cw.Activate();
            }
        }
Exemplo n.º 2
0
        private void FloatWindow_OnEndDrag(bool abort)
        {
            if (abort)
            {
                return;
            }

            FloatWindow floatWindow = (FloatWindow)DragControl;

            if (DropTarget.DropTo == null)
            {
                Rectangle rect = DragControl.Bounds;
                rect.X             = Control.MousePosition.X + m_mouseOffset.X;
                rect.Y             = Control.MousePosition.Y + m_mouseOffset.Y;
                DragControl.Bounds = rect;
            }
            else if (DropTarget.DropTo is TabWindow)
            {
                TabWindow tabWindow = DropTarget.DropTo as TabWindow;

                if (DropTarget.Dock == DockStyle.Fill)
                {
                    for (int i = floatWindow.ContentWindows.Count - 1; i >= 0; i--)
                    {
                        ContentWindow cw = floatWindow.ContentWindows[i];
                        for (int j = cw.Contents.Count - 1; j >= 0; j--)
                        {
                            Content c = cw.Contents[j];
                            c.ContentWindow = tabWindow.ContentWindow;
                            if (DropTarget.ContentIndex != -1)
                            {
                                tabWindow.ContentWindow.SetContentIndex(c, DropTarget.ContentIndex);
                            }
                            c.Activate();
                        }
                    }
                }
                else
                {
                    TabWindow lastTabWindow = null;
                    for (int i = floatWindow.ContentWindows.Count - 1; i >= 0; i--)
                    {
                        ContentWindow cw = floatWindow.ContentWindows[i];
                        if (i == floatWindow.ContentWindows.Count - 1)
                        {
                            if (DropTarget.Dock == DockStyle.Left)
                            {
                                tabWindow.InsertContentWindowBefore(cw, LayoutStyles.Horizontal, 0.5);
                            }
                            else if (DropTarget.Dock == DockStyle.Right)
                            {
                                tabWindow.InsertContentWindowAfter(cw, LayoutStyles.Horizontal, 0.5);
                            }
                            else if (DropTarget.Dock == DockStyle.Top)
                            {
                                tabWindow.InsertContentWindowBefore(cw, LayoutStyles.Vertical, 0.5);
                            }
                            else if (DropTarget.Dock == DockStyle.Bottom)
                            {
                                tabWindow.InsertContentWindowAfter(cw, LayoutStyles.Vertical, 0.5);
                            }
                        }
                        else
                        {
                            lastTabWindow.InsertContentWindowBefore(cw, cw.TabWindow.LayoutStyle, cw.TabWindow.LayoutSize);
                        }

                        lastTabWindow = cw.TabWindow;
                    }
                }
            }
            else if (DropTarget.DropTo is DockManager)
            {
                for (int i = floatWindow.ContentWindows.Count - 1; i >= 0; i--)
                {
                    ContentWindow cw = floatWindow.ContentWindows[i];
                    if (DropTarget.Dock == DockStyle.Top)
                    {
                        cw.VisibleState = DockState.DockTop;
                    }
                    else if (DropTarget.Dock == DockStyle.Bottom)
                    {
                        cw.VisibleState = DockState.DockBottom;
                    }
                    else if (DropTarget.Dock == DockStyle.Left)
                    {
                        cw.VisibleState = DockState.DockLeft;
                    }
                    else if (DropTarget.Dock == DockStyle.Right)
                    {
                        cw.VisibleState = DockState.DockRight;
                    }
                    else if (DropTarget.Dock == DockStyle.Fill)
                    {
                        cw.VisibleState = DockState.Document;
                    }

                    cw.DockManager.SetContentWindowIndex(cw, 0);
                    cw.LayoutDock = cw.LayoutFloat;
                    cw.SizeDock   = cw.SizeFloat;
                    floatWindow.ContentWindows[i].Activate();
                }
            }
        }
Exemplo n.º 3
0
        private void Content_OnEndDrag(bool abort)
        {
            User32.SetCursor(DragControl.Cursor.Handle);

            if (abort)
            {
                return;
            }

            Content content = ((TabWindow)DragControl).ActiveContent;

            if (DropTarget.DropTo is TabWindow)
            {
                TabWindow tabWindow = DropTarget.DropTo as TabWindow;

                if (DropTarget.Dock == DockStyle.Fill)
                {
                    bool sameContentWindow = (content.ContentWindow == tabWindow.ContentWindow);
                    if (!sameContentWindow)
                    {
                        content.ContentWindow = tabWindow.ContentWindow;
                    }

                    if (DropTarget.ContentIndex == -1 || !sameContentWindow)
                    {
                        tabWindow.ContentWindow.SetContentIndex(content, DropTarget.ContentIndex);
                    }
                    else
                    {
                        ContentCollection contents = content.ContentWindow.Contents;
                        int oldIndex = contents.IndexOf(content);
                        int newIndex = DropTarget.ContentIndex;
                        if (oldIndex < newIndex)
                        {
                            newIndex += 1;
                            if (newIndex > contents.Count - 1)
                            {
                                newIndex = -1;
                            }
                        }
                        tabWindow.ContentWindow.SetContentIndex(content, newIndex);
                    }

                    content.Activate();
                }
                else
                {
                    ContentWindow cw = new ContentWindow(content, tabWindow.DockState);
                    if (!tabWindow.ContentWindow.IsDisposed)
                    {
                        if (DropTarget.Dock == DockStyle.Left)
                        {
                            tabWindow.InsertContentWindowBefore(cw, LayoutStyles.Horizontal, 0.5);
                        }
                        else if (DropTarget.Dock == DockStyle.Right)
                        {
                            tabWindow.InsertContentWindowAfter(cw, LayoutStyles.Horizontal, 0.5);
                        }
                        else if (DropTarget.Dock == DockStyle.Top)
                        {
                            tabWindow.InsertContentWindowBefore(cw, LayoutStyles.Vertical, 0.5);
                        }
                        else if (DropTarget.Dock == DockStyle.Bottom)
                        {
                            tabWindow.InsertContentWindowAfter(cw, LayoutStyles.Vertical, 0.5);
                        }
                    }

                    cw.Activate();
                }
            }
            else if (DropTarget.DropTo is DockManager)
            {
                ContentWindow cw;
                if (DropTarget.Dock == DockStyle.Top)
                {
                    cw = new ContentWindow(content, DockState.DockTop);
                }
                else if (DropTarget.Dock == DockStyle.Bottom)
                {
                    cw = new ContentWindow(content, DockState.DockBottom);
                }
                else if (DropTarget.Dock == DockStyle.Left)
                {
                    cw = new ContentWindow(content, DockState.DockLeft);
                }
                else if (DropTarget.Dock == DockStyle.Right)
                {
                    cw = new ContentWindow(content, DockState.DockRight);
                }
                else if (DropTarget.Dock == DockStyle.Fill)
                {
                    cw = new ContentWindow(content, DockState.Document);
                }
                else
                {
                    return;
                }

                cw.DockManager.SetContentWindowIndex(cw, 0);
                cw.Activate();
            }
            else if (IsDockStateValid(DockState.Float))
            {
                Point         ptMouse = Control.MousePosition;
                ContentWindow cw      = content.ContentWindow;

                Size  size = FloatWindow.DefaultWindowSize;
                Point location;
                if (cw.DockState == DockState.Document)
                {
                    location = new Point(ptMouse.X + m_mouseOffset.X, ptMouse.Y + m_mouseOffset.Y);
                }
                else
                {
                    location = new Point(ptMouse.X + m_mouseOffset.X, ptMouse.Y + m_mouseOffset.Y - size.Height);
                }

                if (ptMouse.X > location.X + size.Width)
                {
                    location.X += ptMouse.X - (location.X + size.Width) + DragBorderWidth;
                }

                cw = new ContentWindow(content, new Rectangle(location, size));
                cw.Activate();
            }
        }