From 2aeffecd0acc3d60dd06bd8f6cef38a4ae580681 Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 5 Dec 2015 23:35:31 +0000 Subject: [PATCH] Added ActiveContentChanged event to DockPanel --- DarkUI/DarkUI.csproj | 1 + DarkUI/Docking/DarkDockGroup.cs | 23 +++++++++++++++++++ DarkUI/Docking/DarkDockPanel.cs | 18 +++++++++++++++ .../Docking/EventArgs/DockContentEventArgs.cs | 14 +++++++++++ 4 files changed, 56 insertions(+) create mode 100644 DarkUI/Docking/EventArgs/DockContentEventArgs.cs diff --git a/DarkUI/DarkUI.csproj b/DarkUI/DarkUI.csproj index 3156143..f02f8c3 100644 --- a/DarkUI/DarkUI.csproj +++ b/DarkUI/DarkUI.csproj @@ -106,6 +106,7 @@ UserControl + diff --git a/DarkUI/Docking/DarkDockGroup.cs b/DarkUI/Docking/DarkDockGroup.cs index 17dcca4..22235ea 100644 --- a/DarkUI/Docking/DarkDockGroup.cs +++ b/DarkUI/Docking/DarkDockGroup.cs @@ -52,6 +52,8 @@ namespace DarkUI.Docking Order = order; _tabArea = new DarkDockTabArea(DockArea); + + DockPanel.ActiveContentChanged += DockPanel_ActiveContentChanged; } #endregion @@ -282,6 +284,10 @@ namespace DarkUI.Docking var width = ClientRectangle.Width - Padding.Horizontal - _tabArea.DropdownRectangle.Width; var offsetArea = new Rectangle(Padding.Left, 0, width, 0); + + if (!_tabs.ContainsKey(DockPanel.ActiveContent)) + return; + var tab = _tabs[DockPanel.ActiveContent]; if (tab.ClientRectangle.IsEmpty) @@ -438,6 +444,23 @@ namespace DarkUI.Docking DockPanel.ActiveContent = content; } + private void DockPanel_ActiveContentChanged(object sender, DockContentEventArgs e) + { + if (!_contents.Contains(e.Content)) + return; + + if (e.Content == VisibleContent) + return; + + VisibleContent = e.Content; + + foreach (var content in _contents) + content.Visible = content == VisibleContent; + + EnsureVisible(); + Invalidate(); + } + #endregion #region Render Region diff --git a/DarkUI/Docking/DarkDockPanel.cs b/DarkUI/Docking/DarkDockPanel.cs index bd87fc1..f2b6744 100644 --- a/DarkUI/Docking/DarkDockPanel.cs +++ b/DarkUI/Docking/DarkDockPanel.cs @@ -1,5 +1,6 @@ using DarkUI.Config; using DarkUI.Win32; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; @@ -8,12 +9,19 @@ namespace DarkUI.Docking { public class DarkDockPanel : UserControl { + #region Event Region + + public event EventHandler ActiveContentChanged; + + #endregion + #region Field Region private List _contents; private Dictionary _regions; private DarkDockContent _activeContent; + private bool _switchingContent = false; #endregion @@ -24,6 +32,11 @@ namespace DarkUI.Docking get { return _activeContent; } internal set { + if (_switchingContent) + return; + + _switchingContent = true; + _activeContent = value; ActiveGroup = _activeContent.DockGroup; @@ -31,6 +44,11 @@ namespace DarkUI.Docking foreach (var region in _regions.Values) region.Redraw(); + + if (ActiveContentChanged != null) + ActiveContentChanged(this, new DockContentEventArgs(_activeContent)); + + _switchingContent = false; } } diff --git a/DarkUI/Docking/EventArgs/DockContentEventArgs.cs b/DarkUI/Docking/EventArgs/DockContentEventArgs.cs new file mode 100644 index 0000000..13ae74d --- /dev/null +++ b/DarkUI/Docking/EventArgs/DockContentEventArgs.cs @@ -0,0 +1,14 @@ +using System; + +namespace DarkUI.Docking +{ + public class DockContentEventArgs : EventArgs + { + public DarkDockContent Content { get; private set; } + + public DockContentEventArgs(DarkDockContent content) + { + Content = content; + } + } +}