From f8625669a8bcb83a726c2464a487ab3b0b57e628 Mon Sep 17 00:00:00 2001 From: Robin Date: Fri, 1 Jan 2016 00:59:54 +0000 Subject: [PATCH] Can now drag document tabs. --- DarkUI/Docking/DarkDockGroup.cs | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/DarkUI/Docking/DarkDockGroup.cs b/DarkUI/Docking/DarkDockGroup.cs index 97f7ce9..b1658a7 100644 --- a/DarkUI/Docking/DarkDockGroup.cs +++ b/DarkUI/Docking/DarkDockGroup.cs @@ -19,6 +19,8 @@ namespace DarkUI.Docking private DarkDockTabArea _tabArea; + private DarkDockTab _dragTab = null; + #endregion #region Property Region @@ -414,6 +416,61 @@ namespace DarkUI.Docking { base.OnMouseMove(e); + if (_dragTab != null) + { + var offsetX = e.Location.X + _tabArea.Offset; + if (offsetX < _dragTab.ClientRectangle.Left) + { + if (_dragTab.DockContent.Order > 0) + { + var otherTabs = _tabs.Values.Where(t => t.DockContent.Order == _dragTab.DockContent.Order - 1).ToList(); + if (otherTabs.Count == 0) + return; + + var otherTab = otherTabs.First(); + + if (otherTab == null) + return; + + var oldIndex = _dragTab.DockContent.Order; + _dragTab.DockContent.Order = oldIndex - 1; + otherTab.DockContent.Order = oldIndex; + + BuildTabs(); + EnsureVisible(); + + return; + } + } + else if (offsetX > _dragTab.ClientRectangle.Right) + { + var maxOrder = _contents.Count; + + if (_dragTab.DockContent.Order < maxOrder) + { + var otherTabs = _tabs.Values.Where(t => t.DockContent.Order == _dragTab.DockContent.Order + 1).ToList(); + if(otherTabs.Count == 0) + return; + + var otherTab = otherTabs.First(); + + if (otherTab == null) + return; + + var oldIndex = _dragTab.DockContent.Order; + _dragTab.DockContent.Order = oldIndex + 1; + otherTab.DockContent.Order = oldIndex; + + BuildTabs(); + EnsureVisible(); + + return; + } + } + + return; + } + if (_tabArea.DropdownRectangle.Contains(e.Location)) { _tabArea.DropdownHot = true; @@ -480,6 +537,7 @@ namespace DarkUI.Docking { DockPanel.ActiveContent = tab.DockContent; EnsureVisible(); + _dragTab = tab; return; } } @@ -493,6 +551,8 @@ namespace DarkUI.Docking { base.OnMouseUp(e); + _dragTab = null; + if (_tabArea.DropdownRectangle.Contains(e.Location)) { if (_tabArea.DropdownHot)