Managed machine right-click menu commands

Post Reply
User avatar
IXix
Posts: 1113
Joined: Wed Nov 23, 2011 3:24 pm

Managed machine right-click menu commands

Post by IXix »

Apologies if I've asked this before but how do you set the items in the machine context menu for a managed machine? I found a getter that looks related...

Code: Select all

public IEnumerable<IMenuItem> Commands { get; }
but where's the setter?

edit: and for that matter, where do you handle the commands?

:?:
wde
Posts: 332
Joined: Sun Jan 08, 2012 9:28 am

Re: Managed machine right-click menu commands

Post by wde »

You need to create 'Commands' property to your main buzz machine class aka the one that implements IBuzzMachine.

To handle the command, you create 'SimpleCommand' like the one below. Then you just replace the MessageBox to you method or {} code block.

Code: Select all

public IEnumerable<IMenuItem> Commands
{
	get
	{
		yield return new MenuItemVM() { Text = "Hello" };
		yield return new MenuItemVM() { IsSeparator = true };

		yield return new MenuItemVM() 
		{ 
			Text = "About...", 
			Command = new SimpleCommand()
			{
				CanExecuteDelegate = p => true,
				ExecuteDelegate = p => MessageBox.Show("About")
			}
		};
	}
}			
You can also do check boxes and groups:

Code: Select all

...
yield return new MenuItemVM()
{
	Text = "Submenu",
	Children = new[]
	{
		new MenuItemVM() { Text = "Child 1" },
		new MenuItemVM() { Text = "Child 2" }
	}
};
yield return new MenuItemVM() { Text = "Label", IsLabel = true };
yield return new MenuItemVM()
{
	Text = "Checkable",
	Children = new[]
	{
		new MenuItemVM() { Text = "Child 1", IsCheckable = true, StaysOpenOnClick = true },
		new MenuItemVM() { Text = "Child 2", IsCheckable = true, StaysOpenOnClick = true },
		new MenuItemVM() { Text = "Child 3", IsCheckable = true, StaysOpenOnClick = true }
	}
};

var g = new MenuItemVM.Group();

yield return new MenuItemVM()
{
	Text = "CheckGroup",
	Children = Enumerable.Range(1, 5).Select(i => new MenuItemVM() 
	{ 
		Text = "Child " + i, 
		IsCheckable = true, 
		CheckGroup = g,
		StaysOpenOnClick = true, 
		IsChecked = i == checkedItem, 
		CommandParameter = i,
		Command = new SimpleCommand()
		{
			CanExecuteDelegate = p => true,
			ExecuteDelegate = p => checkedItem = (int)p
		}
	})
};
User avatar
IXix
Posts: 1113
Joined: Wed Nov 23, 2011 3:24 pm

Re: Managed machine right-click menu commands

Post by IXix »

Ah! Thanks. I would never have figured that out! :lol:
Post Reply