Пример #1
0
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            Graphics g = e.Graphics;

            TabWindow tabWindow = Parent as DocumentWindow;

            if (tabWindow == null)
            {
                return;
            }

            if (Dock == DockStyle.Left)
            {
                Rectangle rectTabStrip = ClientRectangle;
                rectTabStrip.Height = tabWindow.TabStripRectangle.Height;
                g.FillRectangle(SystemBrushes.ControlLightLight, rectTabStrip);
                Point ptRightTop    = new Point(ClientRectangle.Right - 1, ClientRectangle.Top);
                Point ptRightBottom = new Point(ClientRectangle.Right - 1, ClientRectangle.Bottom);
                g.DrawLine(SystemPens.ControlDark, ptRightTop, ptRightBottom);
            }
            else if (Dock == DockStyle.Top)
            {
                Point ptLeftBottom  = new Point(ClientRectangle.Left, ClientRectangle.Bottom - 1);
                Point ptRightBottom = new Point(ClientRectangle.Right, ClientRectangle.Bottom - 1);
                g.DrawLine(SystemPens.ControlDark, ptLeftBottom, ptRightBottom);
            }
        }
Пример #2
0
        internal void RemoveContent(Content c)
        {
            if (!Contents.Contains(c))
            {
                return;
            }

            int index = GetIndexOfVisibleContents(c);

            Contents.Remove(c);
            if (TabWindow != null)
            {
                if (TabWindow.Contains(c))
                {
                    c.SetParent(null);
                }
            }

            SetDockState();

            ValidateActiveContent();

            if (Contents.Count == 0)
            {
                Close();
            }

            if (index != -1)
            {
                Refresh();
            }
        }
Пример #3
0
        public void BeginDragContentWindow(TabWindow tabWindow, Point captionLocation)
        {
            if (!InitDrag(tabWindow, DragSources.ContentWindow))
            {
                return;
            }

            ContentWindow_BeginDrag(captionLocation);
        }
Пример #4
0
        public void BeginDragContent(TabWindow tabWindow, Rectangle rectTabWindow)
        {
            if (!InitDrag(tabWindow, DragSources.Content))
            {
                return;
            }

            Content_BeginDrag(rectTabWindow);
        }
Пример #5
0
        public void BeginDragTabWindowSplitter(TabWindow tabWindow, Point splitterLocation)
        {
            if (!InitDrag(tabWindow, DragSources.TabWindowSplitter))
            {
                return;
            }

            TabWindowSplitter_BeginDrag(splitterLocation);
        }
Пример #6
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);

            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            TabWindow tabWindow = Parent as TabWindow;

            if (tabWindow == null)
            {
                return;
            }

            tabWindow.DockManager.DragHandler.BeginDragTabWindowSplitter(tabWindow, tabWindow.SplitterLocation);
        }
Пример #7
0
        private void Content_BeginDrag(Rectangle rectTabWindow)
        {
            TabWindow tabWindow = (TabWindow)DragControl;

            Point pt;

            if (tabWindow is DocumentWindow)
            {
                pt = new Point(rectTabWindow.Top, rectTabWindow.Left);
            }
            else
            {
                pt = new Point(rectTabWindow.Left, rectTabWindow.Bottom);
            }

            pt = DragControl.PointToScreen(pt);

            m_mouseOffset.X = pt.X - StartMousePosition.X;
            m_mouseOffset.Y = pt.Y - StartMousePosition.Y;
        }
Пример #8
0
        internal void SetParent(Control control)
        {
            TabWindow tabWindow = TabWindow;

            if (TabWindowDock != null)
            {
                TabWindowDock.SetParent(null);
            }
            if (TabWindowDocument != null)
            {
                TabWindowDocument.SetParent(null);
            }
            if (TabWindowFloat != null)
            {
                TabWindowFloat.SetParent(null);
            }

            if (tabWindow != null)
            {
                tabWindow.SetParent(control);
            }
        }
Пример #9
0
        public void Refresh()
        {
            if (DockState == DockState.Unknown || DockState == DockState.Hidden)
            {
                return;
            }

            if (IsAutoHide)
            {
                DockManager.Invalidate();
            }

            if (TabWindow != null)
            {
                TabWindow.Invalidate();
                PerformLayout();
                if (TabWindow is DockWindow)
                {
                    ((DockWindow)TabWindow).OnAutoHide(DockManager.ActiveAutoHideContent == ActiveContent);
                }
            }
        }
Пример #10
0
 public void SetDropTarget(TabWindow tabWindow, DockStyle dock)
 {
     m_dropTo       = tabWindow;
     m_dock         = dock;
     m_contentIndex = -1;
 }
Пример #11
0
        private Rectangle TabWindowSplitter_GetDragRectangle()
        {
            TabWindow   tabWindow   = DragControl as TabWindow;
            DockManager dockManager = tabWindow.DockManager;

            DockStyle splitterDockStyle = tabWindow.SplitterDockStyle;
            Rectangle rectParentClient;

            if (tabWindow.IsTopLevel)
            {
                rectParentClient = dockManager.ClientRectangle;
                if (splitterDockStyle == DockStyle.Left || splitterDockStyle == DockStyle.Right)
                {
                    rectParentClient.X     += dockManager.DockPadding.Left + MeasureContentWindow.MinSize;
                    rectParentClient.Width -= dockManager.DockPadding.Left + dockManager.DockPadding.Right + 2 * MeasureContentWindow.MinSize;
                }
                else if (splitterDockStyle == DockStyle.Top || splitterDockStyle == DockStyle.Bottom)
                {
                    rectParentClient.Y      += dockManager.DockPadding.Top + MeasureContentWindow.MinSize;
                    rectParentClient.Height -= dockManager.DockPadding.Top + dockManager.DockPadding.Bottom + 2 * MeasureContentWindow.MinSize;
                }
                rectParentClient.Location = dockManager.PointToScreen(rectParentClient.Location);
            }
            else
            {
                TabWindow tabWindowPrev = tabWindow.Previous;
                rectParentClient          = tabWindowPrev.ClientRectangle;
                rectParentClient.Location = tabWindowPrev.PointToScreen(rectParentClient.Location);
                if (tabWindowPrev.LayoutStyle == LayoutStyles.Horizontal)
                {
                    rectParentClient.X     += MeasureContentWindow.MinSize;
                    rectParentClient.Width -= 2 * MeasureContentWindow.MinSize;
                }
                else
                {
                    rectParentClient.Y      += MeasureContentWindow.MinSize;
                    rectParentClient.Height -= 2 * MeasureContentWindow.MinSize;
                }
            }

            Point     ptMouse = Control.MousePosition;
            Point     pt      = m_splitterLocation;
            Rectangle rect    = Rectangle.Empty;

            if (splitterDockStyle == DockStyle.Left || splitterDockStyle == DockStyle.Right)
            {
                rect.X      = ptMouse.X + m_mouseOffset.X;
                rect.Y      = pt.Y;
                rect.Width  = DragBorderWidth;
                rect.Height = DragControl.ClientRectangle.Height;
            }
            else if (splitterDockStyle == DockStyle.Top || splitterDockStyle == DockStyle.Bottom)
            {
                rect.X      = pt.X;
                rect.Y      = ptMouse.Y + m_mouseOffset.Y;
                rect.Width  = DragControl.ClientRectangle.Width;
                rect.Height = DragBorderWidth;
            }

            if (rectParentClient.Width <= 0 || rectParentClient.Height <= 0)
            {
                rect.X = pt.X;
                rect.Y = pt.Y;
                return(rect);
            }

            if (rect.Left < rectParentClient.Left)
            {
                rect.X = rectParentClient.X;
            }
            if (rect.Top < rectParentClient.Top)
            {
                rect.Y = rectParentClient.Y;
            }
            if (rect.Right > rectParentClient.Right)
            {
                rect.X -= rect.Right - rectParentClient.Right;
            }
            if (rect.Bottom > rectParentClient.Bottom)
            {
                rect.Y -= rect.Bottom - rectParentClient.Bottom;
            }

            return(rect);
        }
Пример #12
0
        private void TabWindowSplitter_OnEndDrag(bool abort)
        {
            if (abort)
            {
                return;
            }

            Point       pt          = m_splitterLocation;
            Rectangle   rect        = TabWindowSplitter_GetDragRectangle();
            TabWindow   tabWindow   = DragControl as TabWindow;
            DockManager dockManager = tabWindow.DockManager;
            DockState   state       = tabWindow.DockState;

            if (tabWindow.IsTopLevel)
            {
                Rectangle rectDockArea = dockManager.DockArea;
                Content   c            = dockManager.ActiveAutoHideContent;
                if (state == DockState.DockLeft && rectDockArea.Width > 0)
                {
                    dockManager.DockLeftPortion += ((double)rect.X - (double)pt.X) / (double)rectDockArea.Width;
                }
                else if (state == DockState.DockRight && rectDockArea.Width > 0)
                {
                    dockManager.DockRightPortion += ((double)pt.X - (double)rect.X) / (double)rectDockArea.Width;
                }
                else if (state == DockState.DockBottom && rectDockArea.Height > 0)
                {
                    dockManager.DockBottomPortion += ((double)pt.Y - (double)rect.Y) / (double)rectDockArea.Height;
                }
                else if (state == DockState.DockTop && rectDockArea.Height > 0)
                {
                    dockManager.DockTopPortion += ((double)rect.Y - (double)pt.Y) / (double)rectDockArea.Height;
                }
                else if (state == DockState.DockLeftAutoHide && rectDockArea.Width > 0)
                {
                    c.AutoHidePortion += ((double)rect.X - (double)pt.X) / (double)rectDockArea.Width;
                }
                else if (state == DockState.DockRightAutoHide && rectDockArea.Width > 0)
                {
                    c.AutoHidePortion += ((double)pt.X - (double)rect.X) / (double)rectDockArea.Width;
                }
                else if (state == DockState.DockBottomAutoHide && rectDockArea.Height > 0)
                {
                    c.AutoHidePortion += ((double)pt.Y - (double)rect.Y) / (double)rectDockArea.Height;
                }
                else if (state == DockState.DockTopAutoHide && rectDockArea.Height > 0)
                {
                    c.AutoHidePortion += ((double)rect.Y - (double)pt.Y) / (double)rectDockArea.Height;
                }
            }
            else
            {
                TabWindow tabWindowPrev = tabWindow.Previous;
                double    sizeAdjust;
                if (tabWindowPrev.LayoutStyle == LayoutStyles.Horizontal && tabWindowPrev.ClientRectangle.Width > 0)
                {
                    sizeAdjust = ((double)rect.X - (double)pt.X) / (double)tabWindowPrev.ClientRectangle.Width;
                }
                else
                {
                    sizeAdjust = ((double)rect.Y - (double)pt.Y) / (double)tabWindowPrev.ClientRectangle.Height;
                }

                tabWindowPrev.LayoutSize += sizeAdjust;
                tabWindowPrev.Invalidate();
                tabWindowPrev.PerformLayout();
            }
        }
Пример #13
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();
            }
        }
Пример #14
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();
            }
        }
Пример #15
0
 public void PerformLayout()
 {
     TabWindow.PerformLayout();
 }
Пример #16
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();
                }
            }
        }
Пример #17
0
 public void SetDropTarget(TabWindow tabWindow, int contentIndex)
 {
     m_dropTo       = tabWindow;
     m_dock         = DockStyle.Fill;
     m_contentIndex = contentIndex;
 }
Пример #18
0
 public bool Contains(TabWindow tabWindow)
 {
     return(tabWindow == null ? false : ContentWindow.Contains(tabWindow.ContentWindow));
 }