Document menu now rebuilt when order changes.

This commit is contained in:
Robin 2016-01-01 01:21:11 +00:00
parent f8625669a8
commit 89853f1a6e
2 changed files with 71 additions and 21 deletions

View File

@ -102,7 +102,7 @@ namespace DarkUI.Docking
menuItem.Tag = dockContent;
menuItem.Click += TabMenuItem_Select;
menuItem.Image = dockContent.Icon;
_tabArea.TabMenu.Items.Add(menuItem);
_tabArea.AddMenuItem(menuItem);
UpdateTabArea();
}
@ -139,22 +139,10 @@ namespace DarkUI.Docking
}
}
ToolStripMenuItem itemToRemove = null;
foreach (ToolStripMenuItem item in _tabArea.TabMenu.Items)
{
var menuContent = item.Tag as DarkDockContent;
if (menuContent == null)
continue;
var menuItem = _tabArea.GetMenuItem(dockContent);
if (menuContent == dockContent)
itemToRemove = item;
}
if (itemToRemove != null)
{
itemToRemove.Click -= TabMenuItem_Select;
_tabArea.TabMenu.Items.Remove(itemToRemove);
}
menuItem.Click -= TabMenuItem_Select;
_tabArea.RemoveMenuItem(menuItem);
UpdateTabArea();
}
@ -439,6 +427,8 @@ namespace DarkUI.Docking
BuildTabs();
EnsureVisible();
_tabArea.RebuildMenu();
return;
}
}
@ -464,6 +454,8 @@ namespace DarkUI.Docking
BuildTabs();
EnsureVisible();
_tabArea.RebuildMenu();
return;
}
}
@ -556,7 +548,7 @@ namespace DarkUI.Docking
if (_tabArea.DropdownRectangle.Contains(e.Location))
{
if (_tabArea.DropdownHot)
_tabArea.TabMenu.Show(this, new Point(_tabArea.DropdownRectangle.Left, _tabArea.DropdownRectangle.Bottom - 2));
_tabArea.ShowMenu(this, new Point(_tabArea.DropdownRectangle.Left, _tabArea.DropdownRectangle.Bottom - 2));
return;
}

View File

@ -1,7 +1,7 @@
using DarkUI.Config;
using DarkUI.Controls;
using DarkUI.Controls;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace DarkUI.Docking
{
@ -11,6 +11,7 @@ namespace DarkUI.Docking
private Dictionary<DarkDockContent, DarkDockTab> _tabs = new Dictionary<DarkDockContent, DarkDockTab>();
private List<ToolStripMenuItem> _menuItems = new List<ToolStripMenuItem>();
private DarkContextMenu _tabMenu = new DarkContextMenu();
#endregion
@ -31,8 +32,6 @@ namespace DarkUI.Docking
public bool Visible { get; set; }
public DarkContextMenu TabMenu { get { return _tabMenu; } }
public DarkDockTab ClickedCloseButton { get; set; }
#endregion
@ -45,5 +44,64 @@ namespace DarkUI.Docking
}
#endregion
#region Method Region
public void ShowMenu(Control control, Point location)
{
_tabMenu.Show(control, location);
}
public void AddMenuItem(ToolStripMenuItem menuItem)
{
_menuItems.Add(menuItem);
RebuildMenu();
}
public void RemoveMenuItem(ToolStripMenuItem menuItem)
{
_menuItems.Remove(menuItem);
RebuildMenu();
}
public ToolStripMenuItem GetMenuItem(DarkDockContent content)
{
ToolStripMenuItem menuItem = null;
foreach (ToolStripMenuItem item in _menuItems)
{
var menuContent = item.Tag as DarkDockContent;
if (menuContent == null)
continue;
if (menuContent == content)
menuItem = item;
}
return menuItem;
}
public void RebuildMenu()
{
_tabMenu.Items.Clear();
var orderedItems = new List<ToolStripMenuItem>();
var index = 0;
for (var i = 0; i < _menuItems.Count; i++)
{
foreach (var item in _menuItems)
{
var content = (DarkDockContent)item.Tag;
if (content.Order == index)
orderedItems.Add(item);
}
index++;
}
foreach (var item in orderedItems)
_tabMenu.Items.Add(item);
}
#endregion
}
}