public void ApplyTemplate(TunableMenuTemplate template) { if (null == template) { throw new ArgumentNullException(nameof(template)); } Reset(); var toolStripItems = new List <ToolStripItem>(); foreach (var itemTemplate in template.Items) { if (null == itemTemplate.Text) { throw new BadTemplateException("null == itemTemplate.Text"); } if ("-".Equals(itemTemplate.Text, StringComparison.OrdinalIgnoreCase)) { toolStripItems.Add(new ToolStripSeparator()); continue; } var image = itemTemplate.BuildIconHolder()?.TryBuildImage(); var toolStripLabel = new ToolStripMenuItem(itemTemplate.Text, image, OnMenuItemClick); toolStripItems.Add(toolStripLabel); if (null == itemTemplate.Command) { continue; } toolStripLabel.Tag = itemTemplate.Command; } SuspendLayout(); Items.AddRange(toolStripItems.ToArray()); ResumeLayout(); }
public static TunableMenuTemplate BuildCommandMenu(ExtensionManager extensionManager, string tagName, string templateBaseDirectory) { if (null == extensionManager) { throw new ArgumentNullException(nameof(extensionManager)); } if (null == tagName) { throw new ArgumentNullException(nameof(tagName)); } if (null == templateBaseDirectory) { throw new ArgumentNullException(nameof(templateBaseDirectory)); } var extensionInfoList = extensionManager.SelectExtensionInfoListByTag(tagName); var itemTemplates = new List <MenuItemTemplate>(); decimal?currentGroupOrder = null; foreach (var extensionInfo in extensionInfoList) { if (null == currentGroupOrder) { currentGroupOrder = extensionInfo.GroupOrder; } if (currentGroupOrder != extensionInfo.GroupOrder) { itemTemplates.Add(new MenuItemTemplate("-")); currentGroupOrder = extensionInfo.GroupOrder; } string iconPath = null; if (null != extensionInfo.IconPath) { var iconAbsolutePath = Path.Combine(extensionInfo.BaseDirectory, extensionInfo.IconPath); iconPath = FileUtility.MakeRelativePath(iconAbsolutePath, templateBaseDirectory); } var menuItemTemplate = new MenuItemTemplate(extensionInfo.Name) { Command = extensionInfo.Id, IconPath = iconPath }; itemTemplates.Add(menuItemTemplate); } TunableMenuTemplate tunableMenuTemplate; if (0 == itemTemplates.Count) { tunableMenuTemplate = null; } else { tunableMenuTemplate = new TunableMenuTemplate(); tunableMenuTemplate.Items.Clear(); tunableMenuTemplate.Items.AddRange(itemTemplates); } return(tunableMenuTemplate); }