コード例 #1
0
        /// <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;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }