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