Edit

Share via


WorkflowMenuCommands.Collapse Field

Definition

A CommandID that can be used to access the collapse menu. This field is read-only.

public static readonly System.ComponentModel.Design.CommandID Collapse;

Field Value

Examples

The following example demonstrates how to create a custom MenuCommandService. In this example, a context menu is created when the ShowContextMenu is called. In the GetSelectionMenuItems method, the WorkflowMenuCommands class is utilized to associate the proper menu commands provided by the workflow designer with their corresponding text. When this is finished, an event handler is associated with each command so that when the command is selected, the appropriate MenuCommand is invoked.

internal sealed class WorkflowMenuCommandService : MenuCommandService
{
    public WorkflowMenuCommandService(IServiceProvider serviceProvider)
        : base(serviceProvider)
    {
    }

    public override void ShowContextMenu(CommandID menuID, int x, int y)
    {
        if (menuID == WorkflowMenuCommands.SelectionMenu)
        {
            ContextMenu contextMenu = new ContextMenu();

            foreach (DesignerVerb verb in Verbs)
            {
                MenuItem menuItem = new MenuItem(verb.Text, new EventHandler(OnMenuClicked));
                menuItem.Tag = verb;
                contextMenu.MenuItems.Add(menuItem);
            }

            MenuItem[] items = GetSelectionMenuItems();
            if (items.Length > 0)
            {
                contextMenu.MenuItems.Add(new MenuItem("-"));
                foreach (MenuItem item in items)
                    contextMenu.MenuItems.Add(item);
            }

            WorkflowView workflowView = GetService(typeof(WorkflowView)) as WorkflowView;
            if (workflowView != null)
                contextMenu.Show(workflowView, workflowView.PointToClient(new Point(x, y)));
        }
    }

    private MenuItem[] GetSelectionMenuItems()
    {
        List<MenuItem> menuItems = new List<MenuItem>();

        bool addMenuItems = true;
        ISelectionService selectionService = GetService(typeof(ISelectionService)) as ISelectionService;
        if (selectionService != null)
        {
            foreach (object obj in selectionService.GetSelectedComponents())
            {
                if (!(obj is Activity))
                {
                    addMenuItems = false;
                    break;
                }
            }
        }

        if (addMenuItems)
        {
            Dictionary<CommandID, string> selectionCommands = new Dictionary<CommandID, string>();
            selectionCommands.Add(WorkflowMenuCommands.Cut, "Cut");
            selectionCommands.Add(WorkflowMenuCommands.Copy, "Copy");
            selectionCommands.Add(WorkflowMenuCommands.Paste, "Paste");
            selectionCommands.Add(WorkflowMenuCommands.Delete, "Delete");
            selectionCommands.Add(WorkflowMenuCommands.Collapse, "Collapse");
            selectionCommands.Add(WorkflowMenuCommands.Expand, "Expand");
            selectionCommands.Add(WorkflowMenuCommands.Disable, "Disable");
            selectionCommands.Add(WorkflowMenuCommands.Enable, "Enable");

            foreach (CommandID id in selectionCommands.Keys)
            {
                MenuCommand command = FindCommand(id);
                if (command != null)
                {
                    MenuItem menuItem = new MenuItem(selectionCommands[id], new EventHandler(OnMenuClicked));
                    menuItem.Tag = command;
                    menuItems.Add(menuItem);
                }
            }
        }

        return menuItems.ToArray();
    }

    private void OnMenuClicked(object sender, EventArgs e)
    {
        MenuItem menuItem = sender as MenuItem;
        if (menuItem != null && menuItem.Tag is MenuCommand)
        {
            MenuCommand command = menuItem.Tag as MenuCommand;
            command.Invoke();
        }
    }
}

To enable this service, call the AddService method of the LoaderHost property in a WorkflowDesignerLoader class as shown in the following example.

protected override void Initialize()
{
    base.Initialize();

    IDesignerLoaderHost host = this.LoaderHost;
    if (host != null)
    {
        host.RemoveService(typeof(IIdentifierCreationService));
        host.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService(host));
        host.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(host));
        host.AddService(typeof(IToolboxService), new Toolbox(host));
        TypeProvider typeProvider = new TypeProvider(host);
        typeProvider.AddAssemblyReference(typeof(string).Assembly.Location);
        host.AddService(typeof(ITypeProvider), typeProvider, true);
        host.AddService(typeof(IEventBindingService), new EventBindingService());
    }
}

Remarks

The collapse menu is typically used to collapse composite activities.

Applies to

Product Versions
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1