/// <include file='CodeDoc\DockPanel.xml' path='//CodeDoc/Class[@name="DockPanel"]/Constructor[@name="()"]/*'/> public DockPanel() { m_extender = new DockPanelExtender(this); m_dragHandler = new DragHandler(this); m_panes = new DockPaneCollection(); m_floatWindows = new FloatWindowCollection(); SetStyle(ControlStyles.ResizeRedraw | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true); SuspendLayout(); Font = SystemInformation.MenuFont; m_autoHideWindow = new AutoHideWindow(this); m_autoHideWindow.Visible = false; m_dummyControl = new DummyControl(); m_dummyControl.Bounds = Rectangle.Empty; m_dockWindows = new DockWindowCollection(this); Controls.AddRange(new Control[] { m_autoHideWindow, m_dummyControl, DockWindows[DockState.Document], DockWindows[DockState.DockLeft], DockWindows[DockState.DockRight], DockWindows[DockState.DockTop], DockWindows[DockState.DockBottom] }); m_localWindowsHook = new LocalWindowsHook(HookType.WH_CALLWNDPROCRET); m_localWindowsHook.HookInvoked += new LocalWindowsHook.HookEventHandler(this.HookEventHandler); m_localWindowsHook.Install(); m_dummyContent = new DockContent(); ResumeLayout(); }
internal void TestDrop(DragHandler dragHandler, Point pt) { if (DockArea.Width <= 0 || DockArea.Height <= 0) { return; } Point ptClient = PointToClient(pt); int dragSize = MeasurePane.DragSize; Rectangle rectDoc = DocumentRectangle; if (ptClient.Y - rectDoc.Top >= 0 && ptClient.Y - rectDoc.Top < dragSize && DockWindows[DockState.DockTop].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockTop)) { dragHandler.DropTarget.SetDropTarget(this, DockStyle.Top); } else if (rectDoc.Bottom - ptClient.Y >= 0 && rectDoc.Bottom - ptClient.Y < dragSize && DockWindows[DockState.DockBottom].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockBottom)) { dragHandler.DropTarget.SetDropTarget(this, DockStyle.Bottom); } else if (rectDoc.Right - ptClient.X >= 0 && rectDoc.Right - ptClient.X < dragSize && DockWindows[DockState.DockRight].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockRight)) { dragHandler.DropTarget.SetDropTarget(this, DockStyle.Right); } else if (ptClient.X - rectDoc.Left >= 0 && ptClient.X - rectDoc.Left < dragSize && DockWindows[DockState.DockLeft].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockLeft)) { dragHandler.DropTarget.SetDropTarget(this, DockStyle.Left); } else if (((ptClient.Y - rectDoc.Top >= dragSize && ptClient.Y - rectDoc.Top < 2 * dragSize) || (rectDoc.Bottom - ptClient.Y >= dragSize && rectDoc.Bottom - ptClient.Y < 2 * dragSize) || (rectDoc.Right - ptClient.X >= dragSize && rectDoc.Right - ptClient.X < 2 * dragSize) || (ptClient.X - rectDoc.Left >= dragSize && ptClient.X - rectDoc.Left < 2 * dragSize)) && DockWindows[DockState.Document].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.Document)) { dragHandler.DropTarget.SetDropTarget(this, DockStyle.Fill); } else { return; } if (dragHandler.DropTarget.SameAsOldValue) { return; } Rectangle rect = DockArea; if (dragHandler.DropTarget.Dock == DockStyle.Top) { rect.Height = (int)(DockArea.Height * DockTopPortion); } else if (dragHandler.DropTarget.Dock == DockStyle.Bottom) { rect.Height = (int)(DockArea.Height * DockBottomPortion); rect.Y = DockArea.Bottom - rect.Height; } else if (dragHandler.DropTarget.Dock == DockStyle.Left) { rect.Width = (int)(DockArea.Width * DockLeftPortion); } else if (dragHandler.DropTarget.Dock == DockStyle.Right) { rect.Width = (int)(DockArea.Width * DockRightPortion); rect.X = DockArea.Right - rect.Width; } else if (dragHandler.DropTarget.Dock == DockStyle.Fill) { rect = DocumentRectangle; } rect.Location = PointToScreen(rect.Location); dragHandler.DragOutline = DrawHelper.CreateDragOutline(rect, dragSize); }
internal void TestDrop(DragHandler dragHandler, Point pt) { if (DockState == DockState.Document) DockPanel.TestDrop(dragHandler, pt); if (dragHandler.DropTarget.DropTo != null) return; if (DockHelper.IsDockStateAutoHide(DockState)) return; if (!dragHandler.IsDockStateValid(DockState)) return; if (dragHandler.DragSource == DragSource.FloatWindow && FloatWindow == dragHandler.DragControl) return; if (dragHandler.DragSource == DragSource.Pane && dragHandler.DragControl == this) return; if (dragHandler.DragSource == DragSource.Content && dragHandler.DragControl == this && DockState == DockState.Document && DisplayingContents.Count == 1) return; Point ptClient = PointToClient(pt); Rectangle rectPane = DisplayingRectangle; int dragSize = MeasurePane.DragSize; if (ptClient.Y - rectPane.Top >= 0 && ptClient.Y - rectPane.Top < dragSize) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Top); else if (rectPane.Bottom - ptClient.Y >= 0 && rectPane.Bottom - ptClient.Y < dragSize) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Bottom); else if (rectPane.Right - ptClient.X >= 0 && rectPane.Right - ptClient.X < dragSize) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Right); else if (ptClient.X - rectPane.Left >= 0 && ptClient.X - rectPane.Left < dragSize) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Left); else { if (rectPane.Height <= TabStripRectangle.Height) return; HitTestResult hitTestResult = GetHitTest(pt); if (hitTestResult.HitArea == HitTestArea.Caption) dragHandler.DropTarget.SetDropTarget(this, -1); else if (hitTestResult.HitArea == HitTestArea.TabStrip && hitTestResult.Index != -1) dragHandler.DropTarget.SetDropTarget(this, hitTestResult.Index); else if (DockState == DockState.Float && !HasCaption && ((ptClient.Y - rectPane.Top >= dragSize && ptClient.Y - rectPane.Top < 2 * dragSize) || (rectPane.Bottom - ptClient.Y >= dragSize && rectPane.Bottom - ptClient.Y < 2 * dragSize) || (rectPane.Right - ptClient.X >= dragSize && rectPane.Right - ptClient.X < 2 * dragSize) || (ptClient.X - rectPane.Left >= dragSize && ptClient.X - rectPane.Left < 2 * dragSize))) dragHandler.DropTarget.SetDropTarget(this, -1); else return; } if (dragHandler.DropTarget.SameAsOldValue) return; dragHandler.DragOutline = GetTestDropOutline(dragHandler.DropTarget.Dock, dragHandler.DropTarget.ContentIndex); }
internal void TestDrop(DragHandler dragHandler, Point pt) { if (DockArea.Width <=0 || DockArea.Height <= 0) return; Point ptClient = PointToClient(pt); int dragSize = MeasurePane.DragSize; Rectangle rectDoc = DocumentRectangle; if (ptClient.Y - rectDoc.Top >= 0 && ptClient.Y - rectDoc.Top < dragSize && DockWindows[DockState.DockTop].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockTop)) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Top); else if (rectDoc.Bottom - ptClient.Y >= 0 && rectDoc.Bottom - ptClient.Y < dragSize && DockWindows[DockState.DockBottom].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockBottom)) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Bottom); else if (rectDoc.Right - ptClient.X >= 0 && rectDoc.Right - ptClient.X < dragSize && DockWindows[DockState.DockRight].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockRight)) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Right); else if (ptClient.X - rectDoc.Left >= 0 && ptClient.X - rectDoc.Left < dragSize && DockWindows[DockState.DockLeft].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.DockLeft)) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Left); else if (((ptClient.Y - rectDoc.Top >= dragSize && ptClient.Y - rectDoc.Top < 2 * dragSize) || (rectDoc.Bottom - ptClient.Y >= dragSize && rectDoc.Bottom - ptClient.Y < 2 * dragSize) || (rectDoc.Right - ptClient.X >= dragSize && rectDoc.Right - ptClient.X < 2 * dragSize) || (ptClient.X - rectDoc.Left >= dragSize && ptClient.X - rectDoc.Left < 2 * dragSize)) && DockWindows[DockState.Document].DisplayingList.Count == 0 && dragHandler.IsDockStateValid(DockState.Document)) dragHandler.DropTarget.SetDropTarget(this, DockStyle.Fill); else return; if (dragHandler.DropTarget.SameAsOldValue) return; Rectangle rect = DockArea; if (dragHandler.DropTarget.Dock == DockStyle.Top) rect.Height = (int)(DockArea.Height * DockTopPortion); else if (dragHandler.DropTarget.Dock == DockStyle.Bottom) { rect.Height = (int)(DockArea.Height * DockBottomPortion); rect.Y = DockArea.Bottom - rect.Height; } else if (dragHandler.DropTarget.Dock == DockStyle.Left) rect.Width = (int)(DockArea.Width * DockLeftPortion); else if (dragHandler.DropTarget.Dock == DockStyle.Right) { rect.Width = (int)(DockArea.Width * DockRightPortion); rect.X = DockArea.Right - rect.Width; } else if (dragHandler.DropTarget.Dock == DockStyle.Fill) rect = DocumentRectangle; rect.Location = PointToScreen(rect.Location); dragHandler.DragOutline = DrawHelper.CreateDragOutline(rect, dragSize); }