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(); }
public new void Activate() { if (DockManager == null) { base.Activate(); } else if (ContentWindow == null) { Show(DockManager); } else { IsHidden = false; ContentWindow.ActiveContent = this; ContentWindow.Activate(); } }
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(); } }
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; }