Esempio n. 1
0
        private static ContextMenu CreateContextMenu(MenuCreateContext context, object owner, string addInTreePath)
        {
            IList items = CreateUnexpandedMenuItems(
                context,
                AddInTree.BuildItems <MenuItemDescriptor>(addInTreePath, owner, false));

            return(CreateContextMenu(items));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
		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);
			}
		}
Esempio n. 5
0
		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;
		}
Esempio n. 6
0
		static ContextMenu CreateContextMenu(MenuCreateContext context, object owner, string addInTreePath)
		{
			IList items = CreateUnexpandedMenuItems(
				context,
				AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false));
			return CreateContextMenu(items);
		}