/// <summary> /// A common method to handle the node Options Button being clicked and /// the user right-clicking on the node body to open its ContextMenu. /// </summary> private void DisplayNodeContextMenu(object sender, RoutedEventArgs e) { Guid nodeGuid = ViewModel.NodeModel.GUID; ViewModel.WorkspaceViewModel.HideAllPopupCommand.Execute(sender); ViewModel.DynamoViewModel.ExecuteCommand( new DynCmd.SelectModelCommand(nodeGuid, Keyboard.Modifiers.AsDynamoType())); var contextMenu = grid.ContextMenu; // Stashing any injected MenuItems from the Node View Customization process. if (contextMenu.Items.Count > 0 && NodeViewCustomizationMenuItems.Count < 1) { StashNodeViewCustomizationMenuItems(); } // Clearing any existing items in the node's ContextMenu. contextMenu.Items.Clear(); NodeContextMenuBuilder.Build(contextMenu, viewModel, NodeViewCustomizationMenuItems); contextMenu.DataContext = viewModel; contextMenu.IsOpen = true; e.Handled = true; }
public void AddNodeViewCustomizationMenuItems() { // Arrange var dummyNode = new DummyNode(); var dummyNodeForCustomization = new DummyNode(); ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(dummyNode, false); ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(dummyNodeForCustomization, false); var dummyNodeViewModel = ViewModel.CurrentSpaceViewModel.Nodes .FirstOrDefault(x => x.Id == dummyNode.GUID); var dummyNodeForCustomizationViewModel = ViewModel.CurrentSpaceViewModel.Nodes .FirstOrDefault(x => x.Id == dummyNode.GUID); Assert.That(ViewModel.Model.CurrentWorkspace.Nodes.Contains(dummyNode)); Assert.That(ViewModel.Model.CurrentWorkspace.Nodes.Contains(dummyNodeForCustomization)); ContextMenu contextMenu = new ContextMenu(); ContextMenu contextMenuForNodeViewCustomization = new ContextMenu(); OrderedDictionary emptyDictionary = new OrderedDictionary(); OrderedDictionary nodeViewCustomizationMenuItems = new OrderedDictionary(); MenuItem menuItem1 = new MenuItem { Header = "TestItem1" }; MenuItem menuItem2 = new MenuItem { Header = "TestItem2" }; nodeViewCustomizationMenuItems.Add(menuItem1.Header, menuItem1); nodeViewCustomizationMenuItems.Add(menuItem2.Header, menuItem2); // Act NodeContextMenuBuilder.Build ( contextMenu, dummyNodeViewModel, emptyDictionary ); NodeContextMenuBuilder.Build ( contextMenuForNodeViewCustomization, dummyNodeForCustomizationViewModel, nodeViewCustomizationMenuItems ); // Assert CollectionAssert.DoesNotContain(contextMenu.Items, menuItem1); CollectionAssert.Contains(contextMenuForNodeViewCustomization.Items, menuItem1); CollectionAssert.DoesNotContain(contextMenu.Items, menuItem2); CollectionAssert.Contains(contextMenuForNodeViewCustomization.Items, menuItem2); }
public void TestBuildContextMenu() { // Arrange var dummyNode = new DummyNode(); ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(dummyNode, false); Assert.That(ViewModel.Model.CurrentWorkspace.Nodes.Contains(dummyNode)); var dummyNodeViewModel = ViewModel.CurrentSpaceViewModel.Nodes .FirstOrDefault(x => x.Id == dummyNode.GUID); ContextMenu contextMenu = new ContextMenu(); // Act NodeContextMenuBuilder.Build ( contextMenu, dummyNodeViewModel, new OrderedDictionary() ); // Assert List <string> menuItemNames = contextMenu.Items .OfType <MenuItem>() .Select(x => x.Header.ToString()) .ToList(); CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.ContextMenuDelete); CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.ContextMenuGroups); CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodesRunStatus); CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodeContextMenuShowLabels); CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodeContextMenuRenameNode); CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodeContextMenuHelp); if (dummyNodeViewModel.ShowsVisibilityToggles) { CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodeContextMenuShowLabels); } if (dummyNodeViewModel.ArgumentLacing != LacingStrategy.Disabled) { CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.ContextMenuLacing); } if (dummyNodeViewModel.IsInput) { CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodeContextMenuIsInput); } if (dummyNodeViewModel.IsOutput) { CollectionAssert.Contains(menuItemNames, Dynamo.Wpf.Properties.Resources.NodeContextMenuIsOutput); } int expectedSeparatorsCount = dummyNodeViewModel.IsInput || dummyNodeViewModel.IsOutput ? 2 : 1; List <Separator> separators = contextMenu.Items.OfType <Separator>().ToList(); Assert.AreEqual(expectedSeparatorsCount, separators.Count); }