private void Pane_OnDragging() { Point ptMouse = Control.MousePosition; DockPane pane = (DockPane)DragControl; if (!TestDrop(ptMouse)) { return; } if (DropTarget.DropTo == null) { if (IsDockStateValid(DockState.Float)) { Point location = new Point(ptMouse.X + m_mouseOffset.X, ptMouse.Y + m_mouseOffset.Y); Size size; if (pane.FloatWindow == null) { size = FloatWindow.DefaultWindowSize; } else if (pane.FloatWindow.DisplayingList.Count == 1) { size = pane.FloatWindow.Size; } else { size = FloatWindow.DefaultWindowSize; } if (ptMouse.X > location.X + size.Width) { location.X += ptMouse.X - (location.X + size.Width) + OutlineBorderWidth; } Rectangle rect = new Rectangle(location, size); DragOutline = DrawHelper.CreateDragOutline(rect, OutlineBorderWidth); } else { DragOutline = null; } } if (DragOutline == null) { User32.SetCursor(Cursors.No.Handle); } else { User32.SetCursor(DragControl.Cursor.Handle); } }
private void TestDrop() { DockOutline.FlagTestDrop = false; DockIndicator.FullPanelEdge = ((Control.ModifierKeys & Keys.Shift) != 0); if ((Control.ModifierKeys & Keys.Control) == 0) { DockIndicator.TestDrop(); if (!DockOutline.FlagTestDrop) { DockPane pane = DockHelper.PaneAtPoint(Control.MousePosition, DockPanel); if (pane != null && IsDockStateValid(pane.DockState)) { pane.TestDrop(this); } } if (!DockOutline.FlagTestDrop && IsDockStateValid(DockState.Float)) { FloatWindow floatWindow = DockHelper.FloatWindowAtPoint(Control.MousePosition, DockPanel); if (floatWindow != null) { floatWindow.TestDrop(this); } } } else { DockIndicator.DockPane = DockHelper.PaneAtPoint(Control.MousePosition, DockPanel); } if (!DockOutline.FlagTestDrop) { if (IsDockStateValid(DockState.Float)) { DockOutline.Show(GetFloatWindowBounds()); } } if (!DockOutline.FlagTestDrop) { User32.SetCursor(Cursors.No.Handle); DockOutline.Show(); } else { User32.SetCursor(DragControl.Cursor.Handle); } }
private void ContentWindow_OnDragging() { Point ptMouse = Control.MousePosition; ContentWindow cw = ((TabWindow)DragControl).ContentWindow; if (!TestDrop(ptMouse)) { return; } if (DropTarget.DropTo == null && IsDockStateValid(DockState.Float)) { Point location = new Point(ptMouse.X + m_mouseOffset.X, ptMouse.Y + m_mouseOffset.Y); Size size; if (cw.FloatWindow == null) { size = FloatWindow.DefaultWindowSize; } else if (cw.FloatWindow.ContentWindows.Count == 1) { size = ((TabWindow)DragControl).ContentWindow.FloatWindow.Size; } else { size = FloatWindow.DefaultWindowSize; } if (ptMouse.X > location.X + size.Width) { location.X += ptMouse.X - (location.X + size.Width) + DragBorderWidth; } DragFrame = DrawHelper.CreateDragFrame(new Rectangle(location, size), DragBorderWidth); } if (DragFrame == null) { User32.SetCursor(Cursors.No.Handle); } else { User32.SetCursor(DragControl.Cursor.Handle); } }
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 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(); } }
private void Pane_OnEndDrag(bool abort) { User32.SetCursor(DragControl.Cursor.Handle); if (abort) { return; } DockPane pane = (DockPane)DragControl; if (!DockOutline.FloatWindowBounds.IsEmpty) { if (pane.FloatWindow == null || pane.FloatWindow.DockList.Count != 1) { pane.FloatWindow = pane.DockPanel.FloatWindowFactory.CreateFloatWindow(pane.DockPanel, pane, DockOutline.FloatWindowBounds); } else { pane.FloatWindow.Bounds = DockOutline.FloatWindowBounds; } pane.DockState = DockState.Float; pane.Activate(); } else if (DockOutline.DockTo is DockPane) { DockPane paneTo = DockOutline.DockTo as DockPane; if (DockOutline.Dock == DockStyle.Fill) { for (int i = pane.Contents.Count - 1; i >= 0; i--) { IDockContent c = pane.Contents[i]; c.DockHandler.Pane = paneTo; if (DockOutline.ContentIndex != -1) { paneTo.SetContentIndex(c, DockOutline.ContentIndex); } c.DockHandler.Activate(); } } else { if (DockOutline.Dock == DockStyle.Left) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Left, 0.5); } else if (DockOutline.Dock == DockStyle.Right) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Right, 0.5); } else if (DockOutline.Dock == DockStyle.Top) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Top, 0.5); } else if (DockOutline.Dock == DockStyle.Bottom) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Bottom, 0.5); } pane.DockState = paneTo.DockState; pane.Activate(); } } else if (DockOutline.DockTo is DockPanel) { SetDockWindow(); if (DockOutline.Dock == DockStyle.Top) { pane.DockState = DockState.DockTop; } else if (DockOutline.Dock == DockStyle.Bottom) { pane.DockState = DockState.DockBottom; } else if (DockOutline.Dock == DockStyle.Left) { pane.DockState = DockState.DockLeft; } else if (DockOutline.Dock == DockStyle.Right) { pane.DockState = DockState.DockRight; } else if (DockOutline.Dock == DockStyle.Fill) { pane.DockState = DockState.Document; } pane.Activate(); } }
private void Content_OnEndDrag(bool abort) { User32.SetCursor(DragControl.Cursor.Handle); if (abort) { return; } IDockContent content = DragControl as IDockContent; if (!DockOutline.FloatWindowBounds.IsEmpty) { DockPane pane = content.DockHandler.DockPanel.DockPaneFactory.CreateDockPane(content, DockOutline.FloatWindowBounds, true); pane.Activate(); } else if (DockOutline.DockTo is DockPane) { DockPane paneTo = DockOutline.DockTo as DockPane; if (DockOutline.Dock == DockStyle.Fill) { bool samePane = (content.DockHandler.Pane == paneTo); if (!samePane) { content.DockHandler.Pane = paneTo; } if (DockOutline.ContentIndex == -1 || !samePane) { paneTo.SetContentIndex(content, DockOutline.ContentIndex); } else { DockContentCollection contents = paneTo.Contents; int oldIndex = contents.IndexOf(content); int newIndex = DockOutline.ContentIndex; if (oldIndex < newIndex) { newIndex += 1; if (newIndex > contents.Count - 1) { newIndex = -1; } } paneTo.SetContentIndex(content, newIndex); } content.DockHandler.Activate(); } else { DockPane pane = content.DockHandler.DockPanel.DockPaneFactory.CreateDockPane(content, paneTo.DockState, true); IDockListContainer container = paneTo.DockListContainer; if (DockOutline.Dock == DockStyle.Left) { pane.AddToDockList(container, paneTo, DockAlignment.Left, 0.5); } else if (DockOutline.Dock == DockStyle.Right) { pane.AddToDockList(container, paneTo, DockAlignment.Right, 0.5); } else if (DockOutline.Dock == DockStyle.Top) { pane.AddToDockList(container, paneTo, DockAlignment.Top, 0.5); } else if (DockOutline.Dock == DockStyle.Bottom) { pane.AddToDockList(container, paneTo, DockAlignment.Bottom, 0.5); } pane.DockState = paneTo.DockState; pane.Activate(); } } else if (DockOutline.DockTo is DockPanel) { DockPane pane; DockPanel dockPanel = content.DockHandler.DockPanel; SetDockWindow(); if (DockOutline.Dock == DockStyle.Top) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockTop, true); } else if (DockOutline.Dock == DockStyle.Bottom) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockBottom, true); } else if (DockOutline.Dock == DockStyle.Left) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockLeft, true); } else if (DockOutline.Dock == DockStyle.Right) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockRight, true); } else if (DockOutline.Dock == DockStyle.Fill) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.Document, true); } else { return; } pane.Activate(); } }
private void Pane_OnEndDrag(bool abort) { User32.SetCursor(DragControl.Cursor.Handle); if (abort) { return; } DockPane pane = (DockPane)DragControl; if (DropTarget.DropTo is DockPane) { DockPane paneTo = DropTarget.DropTo as DockPane; if (DropTarget.Dock == DockStyle.Fill) { for (int i = pane.Contents.Count - 1; i >= 0; i--) { DockContent c = pane.Contents[i]; c.Pane = paneTo; if (DropTarget.ContentIndex != -1) { paneTo.SetContentIndex(c, DropTarget.ContentIndex); } c.Activate(); } } else { if (DropTarget.Dock == DockStyle.Left) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Left, 0.5); } else if (DropTarget.Dock == DockStyle.Right) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Right, 0.5); } else if (DropTarget.Dock == DockStyle.Top) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Top, 0.5); } else if (DropTarget.Dock == DockStyle.Bottom) { pane.AddToDockList(paneTo.DockListContainer, paneTo, DockAlignment.Bottom, 0.5); } pane.DockState = paneTo.DockState; pane.Activate(); } } else if (DropTarget.DropTo is DockPanel) { if (DropTarget.Dock == DockStyle.Top) { pane.DockState = DockState.DockTop; } else if (DropTarget.Dock == DockStyle.Bottom) { pane.DockState = DockState.DockBottom; } else if (DropTarget.Dock == DockStyle.Left) { pane.DockState = DockState.DockLeft; } else if (DropTarget.Dock == DockStyle.Right) { pane.DockState = DockState.DockRight; } else if (DropTarget.Dock == DockStyle.Fill) { pane.DockState = DockState.Document; } pane.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 (pane.FloatWindow == null) { size = FloatWindow.DefaultWindowSize; } else if (pane.FloatWindow.DockList.Count == 1) { size = pane.FloatWindow.Size; createFloatWindow = false; } else { size = FloatWindow.DefaultWindowSize; } if (ptMouse.X > location.X + size.Width) { location.X += ptMouse.X - (location.X + size.Width) + OutlineBorderWidth; } if (createFloatWindow) { pane.FloatWindow = pane.DockPanel.FloatWindowFactory.CreateFloatWindow(pane.DockPanel, pane, new Rectangle(location, size)); } else { pane.FloatWindow.Bounds = new Rectangle(location, size); } pane.DockState = DockState.Float; pane.Activate(); } }
private void Content_OnEndDrag(bool abort) { User32.SetCursor(DragControl.Cursor.Handle); if (abort) { return; } DockContent content = ((DockPane)DragControl).ActiveContent; if (DropTarget.DropTo is DockPane) { DockPane paneTo = DropTarget.DropTo as DockPane; if (DropTarget.Dock == DockStyle.Fill) { bool samePane = (content.Pane == paneTo); if (!samePane) { content.Pane = paneTo; } if (DropTarget.ContentIndex == -1 || !samePane) { paneTo.SetContentIndex(content, DropTarget.ContentIndex); } else { DockContentCollection contents = paneTo.Contents; int oldIndex = contents.IndexOf(content); int newIndex = DropTarget.ContentIndex; if (oldIndex < newIndex) { newIndex += 1; if (newIndex > contents.Count - 1) { newIndex = -1; } } paneTo.SetContentIndex(content, newIndex); } content.Activate(); } else { DockPane pane = content.DockPanel.DockPaneFactory.CreateDockPane(content, paneTo.DockState, true); IDockListContainer container = paneTo.DockListContainer; if (DropTarget.Dock == DockStyle.Left) { pane.AddToDockList(container, paneTo, DockAlignment.Left, 0.5); } else if (DropTarget.Dock == DockStyle.Right) { pane.AddToDockList(container, paneTo, DockAlignment.Right, 0.5); } else if (DropTarget.Dock == DockStyle.Top) { pane.AddToDockList(container, paneTo, DockAlignment.Top, 0.5); } else if (DropTarget.Dock == DockStyle.Bottom) { pane.AddToDockList(container, paneTo, DockAlignment.Bottom, 0.5); } pane.DockState = paneTo.DockState; pane.Activate(); } } else if (DropTarget.DropTo is DockPanel) { DockPane pane; DockPanel dockPanel = content.DockPanel; if (DropTarget.Dock == DockStyle.Top) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockTop, true); } else if (DropTarget.Dock == DockStyle.Bottom) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockBottom, true); } else if (DropTarget.Dock == DockStyle.Left) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockLeft, true); } else if (DropTarget.Dock == DockStyle.Right) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.DockRight, true); } else if (DropTarget.Dock == DockStyle.Fill) { pane = dockPanel.DockPaneFactory.CreateDockPane(content, DockState.Document, true); } else { return; } pane.Activate(); } else if (IsDockStateValid(DockState.Float)) { Point ptMouse = Control.MousePosition; Size size = FloatWindow.DefaultWindowSize; Point location; if (content.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) + OutlineBorderWidth; } DockPane pane = content.DockPanel.DockPaneFactory.CreateDockPane(content, new Rectangle(location, size), true); pane.Activate(); } }