Page 1 of 1

Managed machine right-click menu commands

Posted: Sat Oct 22, 2022 11:52 am
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?

:?:

Re: Managed machine right-click menu commands

Posted: Sat Oct 22, 2022 3:40 pm
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
		}
	})
};

Re: Managed machine right-click menu commands

Posted: Sat Oct 22, 2022 3:43 pm
by IXix
Ah! Thanks. I would never have figured that out! :lol: