예제 #1
0
파일: DockWindow.cs 프로젝트: angel2230/ZZZ
 private void AutoHide_Click(object sender, EventArgs e)
 {
     ContentWindow.VisibleState = DockHelper.ToggleAutoHideState(DockState);
     if (IsAutoHide)
     {
         bool oldAnimateAutoHide = DockManager.AnimateAutoHide;
         DockManager.AnimateAutoHide       = false;
         DockManager.ActiveAutoHideContent = ActiveContent;
         DockManager.AnimateAutoHide       = oldAnimateAutoHide;
     }
     ContentWindow.Activate();
 }
예제 #2
0
 public new void Activate()
 {
     if (DockManager == null)
     {
         base.Activate();
     }
     else if (ContentWindow == null)
     {
         Show(DockManager);
     }
     else
     {
         IsHidden = false;
         ContentWindow.ActiveContent = this;
         ContentWindow.Activate();
     }
 }
예제 #3
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();
            }
        }
예제 #4
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();
            }
        }
예제 #5
0
파일: TabWindow.cs 프로젝트: angel2230/ZZZ
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == (int)Win32.Msgs.WM_NCCALCSIZE)
            {
                Win32.RECT rect = (Win32.RECT)m.GetLParam(typeof(Win32.RECT));
                m_sizeFrame = new Size(rect.right - rect.left, rect.bottom - rect.top);
                base.WndProc(ref m);
                rect.left   += BorderWidth;
                rect.right  -= BorderWidth;
                rect.top    += BorderWidth;
                rect.bottom -= BorderWidth;
                Marshal.StructureToPtr(rect, m.LParam, true);
                return;
            }
            else if (m.Msg == (int)Win32.Msgs.WM_NCPAINT)
            {
                if (BorderWidth <= 0)
                {
                    return;
                }

                IntPtr    hDC       = User32.GetWindowDC(m.HWnd);
                Graphics  g         = Graphics.FromHdc(hDC);
                Rectangle rectFrame = new Rectangle(0, 0, m_sizeFrame.Width, m_sizeFrame.Height);
                using (Region regionBorder = new Region(rectFrame))
                {
                    regionBorder.Xor(Rectangle.Inflate(rectFrame, -BorderWidth, -BorderWidth));
                    g.FillRegion(SystemBrushes.ControlDark, regionBorder);
                }
                User32.ReleaseDC(m.HWnd, hDC);
                return;
            }
            else if (m.Msg == (int)Win32.Msgs.WM_MOUSEACTIVATE)
            {
                if (!ContentWindow.FlagMouseActivate)
                {
                    ContentWindow.FlagMouseActivate = true;
                    base.WndProc(ref m);
                    ContentWindow.FlagMouseActivate = false;
                    ContentWindow.Activate();
                }
                else
                {
                    base.WndProc(ref m);
                }
                return;
            }
            else if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK)
            {
                base.WndProc(ref m);

                HitTestResult hitTestResult = GetHitTest();
                if (hitTestResult.HitArea != HitTestArea.Caption)
                {
                    return;
                }

                if (DockHelper.IsDockStateAutoHide(DockState))
                {
                    DockManager.ActiveAutoHideContent = null;
                    return;
                }

                if (DockHelper.IsDockStateDocked(DockState) && ContentWindow.IsDockStateValid(DockState.Float))
                {
                    ContentWindow.VisibleState = DockState.Float;
                }
                else if (DockState == DockState.Float && ContentWindow.RestoreState != DockState.Unknown &&
                         ContentWindow.IsDockStateValid(ContentWindow.RestoreState))
                {
                    ContentWindow.VisibleState = ContentWindow.RestoreState;
                }

                return;
            }

            base.WndProc(ref m);
            return;
        }