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