private static ContextMenu CreateContextMenu(MenuCreateContext context, object owner, string addInTreePath) { IList items = CreateUnexpandedMenuItems( context, AddInTree.BuildItems <MenuItemDescriptor>(addInTreePath, owner, false)); return(CreateContextMenu(items)); }
private static object CreateMenuItemFromDescriptor(MenuCreateContext context, MenuItemDescriptor descriptor) { Codon codon = descriptor.Codon; string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command"; switch (type) { case "Separator": return(new ConditionalSeparator(codon, descriptor.Parameter, false, descriptor.Conditions)); case "CheckBox": return(new MenuCheckBox(context.InputBindingOwner, codon, descriptor.Parameter, descriptor.Conditions)); case "Item": case "Command": return(new MenuCommand(context.InputBindingOwner, codon, descriptor.Parameter, context.ActivationMethod, descriptor.Conditions)); case "Menu": var item = new CoreMenuItem(codon, descriptor.Parameter, descriptor.Conditions) { ItemsSource = new object[1], _setEnabled = true }; var subItems = CreateUnexpandedMenuItems(context, descriptor.SubItems); item.SubmenuOpened += (sender, args) => { item.ItemsSource = ExpandMenuBuilders(subItems, true); args.Handled = true; }; if (context.ImmediatelyExpandMenuBuildersForShortcuts) { ExpandMenuBuilders(subItems, false); } return(item); case "Builder": var builderObj = codon.AddIn.CreateObject(codon.Properties["class"]); var builder = builderObj as IMenuItemBuilder; if (builderObj == null) { throw new NotSupportedException("Menu item builder " + codon.Properties["class"] + " is unkown. Please check if class name is misspelled."); } if (builder == null) { throw new NotSupportedException("Menu item builder " + codon.Properties["class"] + " does not implement IMenuItemBuilder"); } return(new MenuItemBuilderPlaceholder(builder, descriptor.Codon, descriptor.Parameter)); default: throw new NotSupportedException("unsupported menu item type : " + type); } }
internal static IList CreateUnexpandedMenuItems(MenuCreateContext context, IEnumerable descriptors) { ArrayList result = new ArrayList(); if (descriptors != null) { foreach (MenuItemDescriptor descriptor in descriptors) { result.Add(CreateMenuItemFromDescriptor(context, descriptor)); } } return(result); }
static object CreateMenuItemFromDescriptor(MenuCreateContext context, MenuItemDescriptor descriptor) { Codon codon = descriptor.Codon; string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command"; switch (type) { case "Separator": return new ConditionalSeparator(codon, descriptor.Parameter, false, descriptor.Conditions); case "CheckBox": return new MenuCheckBox(context.InputBindingOwner, codon, descriptor.Parameter, descriptor.Conditions); case "Item": case "Command": return new MenuCommand(context.InputBindingOwner, codon, descriptor.Parameter, context.ActivationMethod, descriptor.Conditions); case "Menu": var item = new CoreMenuItem(codon, descriptor.Parameter, descriptor.Conditions) { ItemsSource = new object[1], SetEnabled = true }; var subItems = CreateUnexpandedMenuItems(context, descriptor.SubItems); item.SubmenuOpened += (sender, args) => { item.ItemsSource = ExpandMenuBuilders(subItems, true); args.Handled = true; }; if (context.ImmediatelyExpandMenuBuildersForShortcuts) ExpandMenuBuilders(subItems, false); return item; case "Builder": IMenuItemBuilder builder = codon.AddIn.CreateObject(codon.Properties["class"]) as IMenuItemBuilder; if (builder == null) throw new NotSupportedException("Menu item builder " + codon.Properties["class"] + " does not implement IMenuItemBuilder"); return new MenuItemBuilderPlaceholder(builder, descriptor.Codon, descriptor.Parameter); default: throw new NotSupportedException("unsupported menu item type : " + type); } }
internal static IList CreateUnexpandedMenuItems(MenuCreateContext context, IEnumerable descriptors) { ArrayList result = new ArrayList(); if (descriptors != null) { foreach (MenuItemDescriptor descriptor in descriptors) { result.Add(CreateMenuItemFromDescriptor(context, descriptor)); } } return result; }
static ContextMenu CreateContextMenu(MenuCreateContext context, object owner, string addInTreePath) { IList items = CreateUnexpandedMenuItems( context, AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false)); return CreateContextMenu(items); }