public void AddPluginItems(PluginContextMenu contextMenu, SelectedItemCollection selection) { if (_pluginManager == null) { throw new InvalidOperationException("No plugin manager was specified."); } bool addedSeparatorBefore = false; foreach (PluginDescriptor plugin in _pluginManager.Plugins) { if (plugin.Enabled) { foreach (Feature feature in plugin.Features) { MenuItemFeature menuItemFeature = feature as MenuItemFeature; if (menuItemFeature != null && menuItemFeature.ContextMenu == contextMenu) { if (!addedSeparatorBefore) { AddSeparator(); addedSeparatorBefore = true; } Add(menuItemFeature.GetCommand(_mainWindow, selection)); } ParentMenuItemFeature parentMenuItemFeature = feature as ParentMenuItemFeature; if (parentMenuItemFeature != null && parentMenuItemFeature.ContextMenu == contextMenu) { CommandToolStripMenuItem parentItem = new CommandToolStripMenuItem(parentMenuItemFeature.GetCommand(_mainWindow, selection)); foreach (MenuItemFeature f in parentMenuItemFeature.Features) { parentItem.DropDownItems.Add(new CommandToolStripMenuItem(f.GetCommand(_mainWindow, selection))); } if (!addedSeparatorBefore) { AddSeparator(); addedSeparatorBefore = true; } Add(parentItem); } } } } if (addedSeparatorBefore) { AddSeparator(); } }
public void TestLoadPlugin() { Assert.AreEqual(1, _pluginManager.Plugins.Count, "No plugins loaded."); Assert.AreEqual(1, _pluginManager.Plugins[0].Features.Count, "No features only"); Assert.IsInstanceOf <ParentMenuItemFeature>(_pluginManager.Plugins[0].Features[0], "ParentMenuItemFeature wasn't loaded"); ParentMenuItemFeature parentFeature = (ParentMenuItemFeature)_pluginManager.Plugins[0].Features[0]; Assert.AreEqual(1, parentFeature.Features.Count, "Child feature wasn't loaded."); Assert.AreEqual("file_ShellTest1", parentFeature.Features[0].Name); Assert.IsInstanceOf <MenuItemFeature>(parentFeature.Features[0]); }