// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Specialized;
using System.ComponentModel;
namespace System.Windows.Forms.Design;
internal class GroupedContextMenuStrip : ContextMenuStrip
{
private StringCollection? _groupOrdering;
private ContextMenuStripGroupCollection? _groups;
private bool _populated;
public bool Populated
{
set => _populated = value;
}
public GroupedContextMenuStrip()
{
}
public ContextMenuStripGroupCollection Groups
{
get
{
_groups ??= new ContextMenuStripGroupCollection();
return _groups;
}
}
public StringCollection GroupOrdering
{
get
{
_groupOrdering ??= [];
return _groupOrdering;
}
}
// merges all the items which are currently in the groups into the items collection.
public void Populate()
{
Items.Clear();
foreach (string? groupName in GroupOrdering)
{
if (groupName is not null && _groups is not null && _groups.ContainsKey(groupName))
{
List<ToolStripItem> items = _groups[groupName].Items;
if (Items.Count > 0 && items.Count > 0)
{
Items.Add(new ToolStripSeparator());
}
foreach (ToolStripItem item in items)
{
Items.Add(item);
}
}
}
_populated = true;
}
protected override void OnOpening(CancelEventArgs e)
{
SuspendLayout();
if (!_populated)
{
Populate();
}
RefreshItems();
ResumeLayout(true);
PerformLayout();
e.Cancel = (Items.Count == 0);
base.OnOpening(e);
}
public virtual void RefreshItems()
{
}
}
|