Exemplo n.º 1
0
        private void InternalConstruct(Content content, DockState dockState, FloatWindow floatWindow, bool flagBounds, Rectangle floatWindowBounds)
        {
            if (content == null)
            {
                throw(new ArgumentNullException(ResourceHelper.GetString("ContentWindow.Constructor.NullContent")));
            }

            if (dockState == DockState.Unknown || dockState == DockState.Hidden)
            {
                throw(new ArgumentException(ResourceHelper.GetString("ContentWindow.Constructor.InvalidDockState")));
            }

            if (content.DockManager == null)
            {
                throw(new ArgumentException(ResourceHelper.GetString("ContentWindow.Constructor.InvalidDockManager")));
            }

            m_events   = new EventHandlerList();
            m_contents = new ContentCollection();

            m_dockManager = content.DockManager;
            m_dockManager.AddContentWindow(this);

            if (floatWindow != null)
            {
                FloatWindow = floatWindow;
            }
            else if (flagBounds)
            {
                FloatWindow = new FloatWindow(DockManager, this, floatWindowBounds);
            }

            VisibleState          = dockState;
            content.ContentWindow = this;
        }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
0
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == (int)Win32.Msgs.WM_NCLBUTTONDOWN)
            {
                if (IsDisposed)
                {
                    return;
                }

                uint result = User32.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam);
                if (result == 2 && DockManager.AllowRedocking && this.AllowRedocking)                   // HITTEST_CAPTION
                {
                    Activate();
                    m_dockManager.DragHandler.BeginDragFloatWindow(this);
                }
                else
                {
                    base.WndProc(ref m);
                }

                return;
            }
            else if (m.Msg == (int)Win32.Msgs.WM_CLOSE)
            {
                if (ContentWindows.Count == 0)
                {
                    base.WndProc(ref m);
                    return;
                }

                for (int i = ContentWindows.Count - 1; i >= 0; i--)
                {
                    if (ContentWindows[i].DockState != DockState.Float)
                    {
                        continue;
                    }

                    ContentCollection contents = ContentWindows[i].Contents;
                    for (int j = contents.Count - 1; j >= 0; j--)
                    {
                        Content c = contents[j];
                        if (c.HideOnClose)
                        {
                            c.Hide();
                        }
                        else
                        {
                            c.Close();
                        }
                    }
                }

                return;
            }
            else if (m.Msg == (int)Win32.Msgs.WM_NCLBUTTONDBLCLK)
            {
                uint result = User32.SendMessage(this.Handle, (int)Win32.Msgs.WM_NCHITTEST, 0, (uint)m.LParam);
                if (result != 2)                        // HITTEST_CAPTION
                {
                    base.WndProc(ref m);
                    return;
                }

                // Show as RestoreState
                foreach (ContentWindow cw in ContentWindows)
                {
                    if (cw.DockState != DockState.Float)
                    {
                        continue;
                    }

                    if (cw.RestoreState != DockState.Unknown)
                    {
                        cw.VisibleState = cw.RestoreState;
                        cw.Activate();
                    }
                }

                return;
            }

            base.WndProc(ref m);
        }