示例#1
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);
        }
示例#2
0
        public void TestAddSeparator()
        {
            // Arrange
            ContextMenu contextMenu = new ContextMenu();

            NodeContextMenuBuilder.ContextMenu = contextMenu;

            Assert.IsEmpty(contextMenu.Items);

            // Act
            NodeContextMenuBuilder.AddContextMenuSeparator();

            // Assert
            Assert.AreEqual(1, contextMenu.Items.Count);
            Assert.IsInstanceOf(typeof(Separator), contextMenu.Items[0]);
        }
示例#3
0
        public void TestAddMenuItem()
        {
            // Arrange
            ContextMenu contextMenu = new ContextMenu();

            NodeContextMenuBuilder.ContextMenu = contextMenu;

            MenuItem menuItem1 = new MenuItem {
                Header = "TestItem1"
            };

            CollectionAssert.DoesNotContain(contextMenu.Items, menuItem1);

            // Act
            NodeContextMenuBuilder.AddContextMenuItem(menuItem1);

            // Assert
            CollectionAssert.Contains(contextMenu.Items, menuItem1);
        }
示例#4
0
        public void TestBuildMethods()
        {
            // Act
            MenuItem buildDeleteMenuItem     = NodeContextMenuBuilder.BuildDeleteMenuItem();
            MenuItem buildGroupsMenuItem     = NodeContextMenuBuilder.BuildGroupsMenuItem();
            MenuItem buildPreviewMenuItem    = NodeContextMenuBuilder.BuildPreviewMenuItem();
            MenuItem buildFreezeMenuItem     = NodeContextMenuBuilder.BuildFreezeMenuItem();
            MenuItem buildShowLabelsMenuItem = NodeContextMenuBuilder.BuildShowLabelsMenuItem();
            MenuItem buildRenameMenuItem     = NodeContextMenuBuilder.BuildRenameMenuItem();
            MenuItem buildLacingMenuItem     = NodeContextMenuBuilder.BuildLacingMenuItem();
            MenuItem buildIsInputMenuItem    = NodeContextMenuBuilder.BuildIsInputMenuItem();
            MenuItem buildIsOutputMenuItem   = NodeContextMenuBuilder.BuildIsOutputMenuItem();
            MenuItem buildHelpMenuItem       = NodeContextMenuBuilder.BuildHelpMenuItem();

            // Assert
            Assert.IsNotNull(buildDeleteMenuItem);
            Assert.IsNotNull(buildGroupsMenuItem);
            Assert.IsNotNull(buildPreviewMenuItem);
            Assert.IsNotNull(buildFreezeMenuItem);
            Assert.IsNotNull(buildShowLabelsMenuItem);
            Assert.IsNotNull(buildRenameMenuItem);
            Assert.IsNotNull(buildLacingMenuItem);
            Assert.IsNotNull(buildIsInputMenuItem);
            Assert.IsNotNull(buildIsOutputMenuItem);
            Assert.IsNotNull(buildHelpMenuItem);

            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.ContextMenuDelete, buildDeleteMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.ContextMenuGroups, buildGroupsMenuItem.Header);
            Assert.AreEqual(3, buildGroupsMenuItem.Items.Count);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodeContextMenuPreview, buildPreviewMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodesRunStatus, buildFreezeMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodeContextMenuShowLabels, buildShowLabelsMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodeContextMenuRenameNode, buildRenameMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.ContextMenuLacing, buildLacingMenuItem.Header);
            Assert.AreEqual(4, buildLacingMenuItem.Items.Count);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodeContextMenuIsInput, buildIsInputMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodeContextMenuIsOutput, buildIsOutputMenuItem.Header);
            Assert.AreEqual(Dynamo.Wpf.Properties.Resources.NodeContextMenuHelp, buildHelpMenuItem.Header);
        }
示例#5
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.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;
        }
示例#6
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);
        }