public void TestAddConnectionShouldUpdateInputAndOutputConnLists()
        {
            NodeOutputViewModel output = new NodeOutputViewModel();
            NodeViewModel       node1  = new NodeViewModel();

            node1.Outputs.Add(output);

            NodeInputViewModel input = new NodeInputViewModel();
            NodeViewModel      node2 = new NodeViewModel();

            node2.Inputs.Add(input);

            NetworkViewModel network = new NetworkViewModel();

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var conn = network.ConnectionFactory(input, output);

            network.Connections.Add(conn);

            CollectionAssert.AreEqual(new [] { conn }, input.Connections.Items.AsArray());
            CollectionAssert.AreEqual(new[] { conn }, output.Connections.Items.AsArray());

            network.Connections.Clear();

            CollectionAssert.AreEqual(new ConnectionViewModel[0], input.Connections.Items.AsArray());
            CollectionAssert.AreEqual(new ConnectionViewModel[0], output.Connections.Items.AsArray());
        }
示例#2
0
        public MainWindowVm()
        {
            //Create a new viewmodel for the NetworkView
            NetworkViewModel network = new NetworkViewModel();

            //Create the node for the first node, set its name and add it to the network.
            NodeViewModel node1 = new NodeViewModel();
            {
                node1.Name = "Node 1";

                //Create the viewmodel for the input on the first node, set its name and add it to the node.
                NodeInputViewModel node1Input = new NodeInputViewModel();
                node1Input.Name = "Node 1 input";
                node1.Inputs.Add(node1Input);
            }


            //Create the second node viewmodel, set its name, add it to the network and add an output in a similar fashion.
            NodeViewModel node2 = new NodeViewModel();

            {
                node2.Name = "Node 2";

                NodeOutputViewModel node2Output = new NodeOutputViewModel();
                node2Output.Name = "Node 2 output";
                node2.Outputs.Add(node2Output);
            }

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            //Assign the viewmodel to the view.
            Network = network;
        }
        public void TestDeleteOutputShouldRemoveConnections()
        {
            NodeOutputViewModel output = new NodeOutputViewModel();
            NodeViewModel       node1  = new NodeViewModel();

            node1.Outputs.Add(output);

            NodeInputViewModel input = new NodeInputViewModel();
            NodeViewModel      node2 = new NodeViewModel();

            node2.Inputs.Add(input);

            NetworkViewModel network = new NetworkViewModel();

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var conn = network.ConnectionFactory(input, output);

            network.Connections.Add(conn);

            Assert.IsTrue(network.Connections.Items.Contains(conn));
            node1.Outputs.Remove(output);
            Assert.IsFalse(network.Connections.Items.Contains(conn));

            node1.Outputs.Add(output);
            network.Connections.Add(conn);

            Assert.IsTrue(network.Connections.Items.Contains(conn));
            node1.Outputs.Clear();
            Assert.IsFalse(network.Connections.Items.Contains(conn));
        }
        private void NetworkViewMouseWheelDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Middle && e.ButtonState == MouseButtonState.Pressed)
            {
                var position = e.GetPosition(sender as Window);
                MessageBox.Show(x.ToString());

                // Todo: 검색 기능 있는 새 노드 만드는 창
                // ex>
                var addNode = new NodeViewModel {
                    Name = "TestNode"
                };
                network.Nodes.Add(addNode);

                var addNodeInput = new NodeInputViewModel {
                    Name = "Node 1 input"
                };
                addNode.Inputs.Add(addNodeInput);

                var addNodeOutput = new NodeOutputViewModel {
                    Name = "Node 2 output"
                };
                addNode.Outputs.Add(addNodeOutput);
            }
        }
        public void TestConnections()
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel();

            nodeA.Outputs.Add(nodeAOutput);

            NodeInputViewModel  nodeBInput  = new NodeInputViewModel();
            NodeOutputViewModel nodeBOutput = new NodeOutputViewModel();
            NodeViewModel       nodeB       = new NodeViewModel
            {
                CanBeRemovedByUser = false,
                IsSelected         = true
            };

            nodeB.Inputs.Add(nodeBInput);
            nodeB.Outputs.Add(nodeBOutput);

            NodeInputViewModel nodeCInput = new NodeInputViewModel
            {
                MaxConnections = 2
            };
            NodeViewModel nodeC = new NodeViewModel
            {
                IsSelected = true
            };

            nodeC.Inputs.Add(nodeCInput);

            NodeViewModel nodeD = new NodeViewModel
            {
                IsSelected = true
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC, nodeD }
            };

            Assert.IsTrue(nodeBInput.Connections.Count == 0);

            var conAB = network.ConnectionFactory(nodeBInput, nodeAOutput);
            var conBC = network.ConnectionFactory(nodeCInput, nodeBOutput);

            network.Connections.Add(conAB);
            network.Connections.Add(conBC);

            Assert.IsTrue(Enumerable.SequenceEqual(nodeBInput.Connections.Items, new[] { conAB }));

            network.Connections.Remove(conAB);

            Assert.IsTrue(nodeBInput.Connections.Count == 0);

            var conAC = network.ConnectionFactory(nodeCInput, nodeAOutput);

            network.Connections.Add(conAC);

            Assert.IsTrue(Enumerable.SequenceEqual(nodeCInput.Connections.Items, new[] { conBC, conAC }));
        }
示例#6
0
        public override NodeOutputViewModel AddNewGroupNodeOutput(NodeInputViewModel candidateInput)
        {
            NodeOutputViewModel output = CreateCompatibleOutput((dynamic)candidateInput);

            GroupNode.Outputs.Add(output);
            // Append to bottom of list
            output.SortIndex = GroupNode.Outputs.Items.Select(o => o.SortIndex).DefaultIfEmpty(-1).Max() + 1;
            return(output);
        }
示例#7
0
 protected virtual void BindEndpointProperties(NodeOutputViewModel output, NodeInputViewModel input)
 {
     input.WhenAnyValue(vm => vm.Name).BindTo(output, vm => vm.Name);
     output.WhenAnyValue(vm => vm.Name).BindTo(input, vm => vm.Name);
     input.WhenAnyValue(vm => vm.SortIndex).BindTo(output, vm => vm.SortIndex);
     output.WhenAnyValue(vm => vm.SortIndex).BindTo(input, vm => vm.SortIndex);
     input.WhenAnyValue(vm => vm.Icon).BindTo(output, vm => vm.Icon);
     output.WhenAnyValue(vm => vm.Icon).BindTo(input, vm => vm.Icon);
 }
        public void TestConnections()
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel
            {
                Outputs = { nodeAOutput }
            };

            NodeInputViewModel nodeBInput = new NodeInputViewModel();
            NodeViewModel      nodeB      = new NodeViewModel
            {
                Inputs = { nodeBInput }
            };

            NodeInputViewModel nodeCInput = new NodeInputViewModel();
            NodeViewModel      nodeC      = new NodeViewModel
            {
                Inputs = { nodeCInput }
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC }
            };

            Assert.AreEqual(0, nodeAOutput.Connections.Count);

            var conAB = network.ConnectionFactory(nodeBInput, nodeAOutput);

            network.Connections.Add(conAB);

            Assert.IsTrue(nodeAOutput.Connections.SequenceEqual(new[]
            {
                conAB
            }));

            var conAC = network.ConnectionFactory(nodeCInput, nodeAOutput);

            network.Connections.Add(conAC);

            Assert.IsTrue(nodeAOutput.Connections.SequenceEqual(new []
            {
                conAB, conAC
            }));

            network.Connections.Remove(conAB);

            Assert.IsTrue(nodeAOutput.Connections.SequenceEqual(new[]
            {
                conAC
            }));

            network.Connections.Remove(conAC);

            Assert.AreEqual(0, nodeAOutput.Connections.Count);
        }
示例#9
0
        public void TestCutLine()
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel();

            nodeA.Outputs.Add(nodeAOutput);

            NodeInputViewModel  nodeBInput  = new NodeInputViewModel();
            NodeOutputViewModel nodeBOutput = new NodeOutputViewModel();
            NodeViewModel       nodeB       = new NodeViewModel
            {
                CanBeRemovedByUser = false,
                IsSelected         = true
            };

            nodeB.Inputs.Add(nodeBInput);
            nodeB.Outputs.Add(nodeBOutput);

            NodeInputViewModel nodeCInput = new NodeInputViewModel();
            NodeViewModel      nodeC      = new NodeViewModel
            {
                IsSelected = true
            };

            nodeC.Inputs.Add(nodeCInput);

            NodeViewModel nodeD = new NodeViewModel
            {
                IsSelected = true
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC, nodeD }
            };

            var conAB = network.ConnectionFactory(nodeBInput, nodeAOutput);
            var conBC = network.ConnectionFactory(nodeCInput, nodeBOutput);

            network.Connections.Add(conAB);
            network.Connections.Add(conBC);

            network.StartCut();
            network.CutLine.IntersectingConnections.Add(conAB);
            network.FinishCut();

            Assert.IsTrue(network.Connections.Items.SequenceEqual(new [] { conBC }));
            Assert.IsFalse(network.CutLine.IsVisible);
        }
        public void TestValidateAfterConnectionsAllUpdated()
        {
            NodeInputViewModel  input1  = new NodeInputViewModel();
            NodeOutputViewModel output1 = new NodeOutputViewModel();
            NodeViewModel       node1   = new NodeViewModel
            {
                Inputs  = { input1 },
                Outputs = { output1 }
            };

            NodeInputViewModel  input2  = new NodeInputViewModel();
            NodeOutputViewModel output2 = new NodeOutputViewModel();
            NodeViewModel       node2   = new NodeViewModel
            {
                Inputs  = { input2 },
                Outputs = { output2 }
            };

            NetworkViewModel network = new NetworkViewModel();

            network.Validator = n =>
            {
                if (GraphAlgorithms.FindLoops(network).Any())
                {
                    return(new NetworkValidationResult(false, false, null));
                }
                return(new NetworkValidationResult(true, true, null));
            };

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var conn1 = network.ConnectionFactory(input1, output2);

            network.Connections.Add(conn1);

            Assert.IsTrue(network.LatestValidation.IsValid);

            var conn2 = network.ConnectionFactory(input2, output1);

            network.Connections.Add(conn2);

            Assert.IsFalse(network.LatestValidation.IsValid);

            network.Connections.Remove(conn1);

            Assert.IsTrue(network.LatestValidation.IsValid);
        }
示例#11
0
        public void TestOutputParent()
        {
            NodeOutputViewModel output = new NodeOutputViewModel();

            Assert.AreEqual(null, output.Parent);

            NodeViewModel node = new NodeViewModel
            {
                Outputs = { output }
            };

            Assert.AreEqual(node, output.Parent);

            node.Outputs.Remove(output);
            Assert.AreEqual(null, output.Parent);
        }
示例#12
0
        public ValueNodeGroupIOBinding(NodeViewModel groupNode, NodeViewModel entranceNode, NodeViewModel exitNode)
            : base(groupNode, entranceNode, exitNode)
        {
            // For each input on the group node, create an output in the subnet
            groupNode.Inputs.Connect()
            .Filter(input => input.PortPosition == PortPosition.Left)
            .Transform(i =>
            {
                // Dynamic is applied here so that late binding is used to find the most specific
                // CreateCompatibleOutput variant for this specific input.
                NodeOutputViewModel result = CreateCompatibleOutput((dynamic)i);
                BindOutputToInput((dynamic)result, (dynamic)i);
                return(result);
            }).PopulateInto(entranceNode.Outputs);
            groupNode.Inputs.Connect()
            .Filter(input => input.PortPosition == PortPosition.Right)
            .Transform(i =>
            {
                NodeOutputViewModel result = CreateCompatibleOutput((dynamic)i);
                BindOutputToInput((dynamic)result, (dynamic)i);
                return(result);
            }).PopulateInto(exitNode.Outputs);
            groupNode.Inputs.Connect().OnItemRemoved(input =>
                                                     _outputInputMapping.Remove(
                                                         _outputInputMapping.First(kvp => kvp.Value == input)
                                                         )
                                                     );

            // For each output on the group node, create an input in the subnet
            groupNode.Outputs.Connect()
            .Filter(input => input.PortPosition == PortPosition.Right)
            .Transform(o =>
            {
                NodeInputViewModel result = CreateCompatibleInput((dynamic)o);
                BindOutputToInput((dynamic)o, (dynamic)result);
                return(result);
            }).PopulateInto(exitNode.Inputs);
            groupNode.Outputs.Connect()
            .Filter(input => input.PortPosition == PortPosition.Left)
            .Transform(o =>
            {
                NodeInputViewModel result = CreateCompatibleInput((dynamic)o);
                BindOutputToInput((dynamic)o, (dynamic)result);
                return(result);
            }).PopulateInto(entranceNode.Inputs);
            groupNode.Outputs.Connect().OnItemRemoved(output => _outputInputMapping.Remove(output));
        }
示例#13
0
        public MainWindow()
        {
            InitializeComponent();

            //Create a new viewmodel for the NetworkView
            var network = new NetworkViewModel();

            //Create the node for the first node, set its name and add it to the network.
            var node1 = new NodeViewModel();

            node1.Name = "Node 1";
            network.Nodes.Add(node1);

            //Create the viewmodel for the input on the first node, set its name and add it to the node.
            var node1Input = new NodeInputViewModel();

            node1Input.Name = "Node 1 input";
            node1.Inputs.Add(node1Input);

            //Create the second node viewmodel, set its name, add it to the network and add an output in a similar fashion.
            var node2 = new NodeViewModel();

            node2.Name = "Node 2";
            network.Nodes.Add(node2);

            var node2Output = new NodeOutputViewModel();

            node2Output.Name = "Node 2 output";
            node2.Outputs.Add(node2Output);

            //Create a third test node

            var node3 = new NodeViewModel();

            node3.Name = "Test ";
            network.Nodes.Add(node3);

            var node3Input = new ValueNodeInputViewModel <string>();

            node3Input.Name = "Test String";
            node3.Inputs.Add(node3Input);

            //Assign the viewmodel to the view.
            networkView.ViewModel = network;
        }
        public void TestNestedObserving()
        {
            //Setup
            var scheduler = new TestScheduler();

            NodeInputViewModel  input1  = new NodeInputViewModel();
            NodeOutputViewModel output1 = new NodeOutputViewModel();
            NodeViewModel       node1   = new NodeViewModel
            {
                Inputs  = { input1 },
                Outputs = { output1 }
            };

            NodeInputViewModel  input2  = new NodeInputViewModel();
            NodeOutputViewModel output2 = new NodeOutputViewModel();
            NodeViewModel       node2   = new NodeViewModel
            {
                Inputs  = { input2 },
                Outputs = { output2 }
            };

            NetworkViewModel network = new NetworkViewModel();

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var conn1 = network.ConnectionFactory(input1, output2);

            network.Connections.Add(conn1);

            var obs = network.ConnectionsUpdated;


            //Define actions
            scheduler.Schedule(TimeSpan.FromTicks(10), () => network.Connections.Remove(conn1));
            var actual = scheduler.Start(() => obs, created: 0, subscribed: 0, disposed: 100); // But subscribe to it here

            //Assert
            var expected = new[]
            {
                ReactiveTest.OnNext(10, Unit.Default)
            };

            ReactiveAssert.AreElementsEqual(expected, actual.Messages);
        }
示例#15
0
        public void TestDeleteSelectedNodes()
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel();

            nodeA.Outputs.Add(nodeAOutput);

            NodeInputViewModel  nodeBInput  = new NodeInputViewModel();
            NodeOutputViewModel nodeBOutput = new NodeOutputViewModel();
            NodeViewModel       nodeB       = new NodeViewModel
            {
                CanBeRemovedByUser = false,
                IsSelected         = true,
            };

            nodeB.Inputs.Add(nodeBInput);
            nodeB.Outputs.Add(nodeBOutput);

            NodeInputViewModel nodeCInput = new NodeInputViewModel();
            NodeViewModel      nodeC      = new NodeViewModel
            {
                IsSelected = true
            };

            nodeC.Inputs.Add(nodeCInput);

            NodeViewModel nodeD = new NodeViewModel
            {
                IsSelected = true
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC, nodeD }
            };

            network.Connections.Add(network.ConnectionFactory(nodeBInput, nodeAOutput));
            network.Connections.Add(network.ConnectionFactory(nodeCInput, nodeBOutput));

            Observable.Return(Unit.Default).InvokeCommand(network.DeleteSelectedNodes);

            Assert.AreEqual(1, network.Connections.Count);
            Assert.IsTrue(network.Nodes.SequenceEqual(new [] { nodeA, nodeB }));
        }
        public void TestDeleteNodeShouldRemoveConnections()
        {
            NodeInputViewModel  input1  = new NodeInputViewModel();
            NodeOutputViewModel output1 = new NodeOutputViewModel();
            NodeViewModel       node1   = new NodeViewModel
            {
                Inputs  = { input1 },
                Outputs = { output1 }
            };

            NodeInputViewModel  input2  = new NodeInputViewModel();
            NodeOutputViewModel output2 = new NodeOutputViewModel();
            NodeViewModel       node2   = new NodeViewModel
            {
                Inputs  = { input2 },
                Outputs = { output2 }
            };

            NetworkViewModel network = new NetworkViewModel();

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var conn1 = network.ConnectionFactory(input1, output2);
            var conn2 = network.ConnectionFactory(input2, output1);

            network.Connections.Add(conn1);
            network.Connections.Add(conn2);

            Assert.IsTrue(network.Connections.Contains(conn1));
            Assert.IsTrue(network.Connections.Contains(conn2));
            network.Nodes.Remove(node1);
            Assert.IsFalse(network.Connections.Contains(conn1));
            Assert.IsFalse(network.Connections.Contains(conn2));

            network.Nodes.AddRange(new [] { node1, node2 });
            network.Connections.AddRange(new[] { conn1, conn2 });

            Assert.IsTrue(network.Connections.Contains(conn1));
            Assert.IsTrue(network.Connections.Contains(conn2));
            network.Nodes.Clear();
            Assert.IsFalse(network.Connections.Contains(conn1));
            Assert.IsFalse(network.Connections.Contains(conn2));
        }
示例#17
0
        public void TestRectangleSelection()
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel();

            nodeA.Outputs.Add(nodeAOutput);

            NodeInputViewModel  nodeBInput  = new NodeInputViewModel();
            NodeOutputViewModel nodeBOutput = new NodeOutputViewModel();
            NodeViewModel       nodeB       = new NodeViewModel
            {
                CanBeRemovedByUser = false,
                IsSelected         = true
            };

            nodeB.Inputs.Add(nodeBInput);
            nodeB.Outputs.Add(nodeBOutput);

            NodeInputViewModel nodeCInput = new NodeInputViewModel();
            NodeViewModel      nodeC      = new NodeViewModel
            {
                IsSelected = true
            };

            nodeC.Inputs.Add(nodeCInput);

            NodeViewModel nodeD = new NodeViewModel
            {
                IsSelected = true
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC, nodeD }
            };

            network.StartRectangleSelection();
            network.SelectionRectangle.IntersectingNodes.Add(nodeA);
            network.SelectionRectangle.IntersectingNodes.Add(nodeD);
            network.FinishRectangleSelection();

            Assert.IsTrue(network.SelectedNodes.SequenceEqual(new[] { nodeA, nodeD }));
        }
        public void TestConnectionsUpdatedAfterPreexistingConnectionRemoved()
        {
            //Setup
            var scheduler = new TestScheduler();

            NodeInputViewModel  input1  = new NodeInputViewModel();
            NodeOutputViewModel output1 = new NodeOutputViewModel();
            NodeViewModel       node1   = new NodeViewModel();

            node1.Inputs.Add(input1);
            node1.Outputs.Add(output1);

            NodeInputViewModel  input2  = new NodeInputViewModel();
            NodeOutputViewModel output2 = new NodeOutputViewModel();
            NodeViewModel       node2   = new NodeViewModel();

            node2.Inputs.Add(input2);
            node2.Outputs.Add(output2);

            NetworkViewModel network = new NetworkViewModel();

            var observable = network.ConnectionsUpdated; // Create observable before nodes/connections are added

            network.Nodes.Add(node1);
            network.Nodes.Add(node2);

            var conn1 = network.ConnectionFactory(input1, output2);

            network.Connections.Add(conn1);


            //Define actions
            scheduler.Schedule(TimeSpan.FromTicks(10), () => network.Connections.Remove(conn1));
            var actual = scheduler.Start(() => observable, created: 0, subscribed: 0, disposed: 100); // But subscribe to it here

            //Assert
            var expected = new[]
            {
                ReactiveTest.OnNext(10, Unit.Default)
            };

            ReactiveAssert.AreElementsEqual(expected, actual.Messages);
        }
示例#19
0
        public NodeViewModel CreateNode()
        {
            NodeInputViewModel input = new NodeInputViewModel
            {
                Name = "A"
            };

            NodeOutputViewModel output = new NodeOutputViewModel
            {
                Name = "B"
            };

            NodeViewModel node = new NodeViewModel();

            node.Inputs.Add(input);
            node.Outputs.Add(output);

            return(node);
        }
示例#20
0
        public NodeViewModel CreateNode()
        {
            NodeInputViewModel input = new NodeInputViewModel
            {
                Name = "A"
            };

            NodeOutputViewModel output = new NodeOutputViewModel
            {
                Name = "B"
            };

            NodeViewModel node = new NodeViewModel
            {
                Inputs  = { input },
                Outputs = { output }
            };

            return(node);
        }
示例#21
0
        public BeginNodeViewModel(Staff actor)
        {
            Actor = actor;
            Name  = Actor.Name;

            // Create exec output node
            NodeOutputViewModel exec_output = new NodeOutputViewModel()
            {
                Name = "Begin", Port = new ExecPortViewModel()
                {
                    PortType = PortType.Execution
                }, MaxConnections = 1
            };

            Outputs.Edit(x => x.Add(exec_output));

            exec_output.Connections.Connect()
            .Subscribe(change => {
                OnExecOutputChanged(change);
            });
        }
示例#22
0
        public CutNodeViewModel(Cut cut)
        {
            Cut = cut;
            cut.NodeViewModel = this;

            // Create exec input node
            NodeInputViewModel exec_input = new NodeInputViewModel()
            {
                Port = new ExecPortViewModel()
                {
                    PortType = PortType.Execution
                }, MaxConnections = 1
            };

            Inputs.Edit(x => x.Add(exec_input));

            exec_input.Connections.Connect()
            .Subscribe(change => {
                OnExecInputChanged(change);
            });

            // Create exec output node
            NodeOutputViewModel exec_output = new NodeOutputViewModel()
            {
                Port = new ExecPortViewModel()
                {
                    PortType = PortType.Execution
                }, MaxConnections = 1
            };

            Outputs.Edit(x => x.Add(exec_output));

            exec_output.Connections.Connect()
            .Subscribe(change => {
                OnExecOutputChanged(change);
            });

            PropertyChanged += CutNodeViewModel_PropertyChanged;
        }
示例#23
0
        public BlockingCutNodeViewModel(Cut cut)
        {
            Cut  = cut;
            Name = "Blocking Actions";
            BlockingCutEditor = new BlockingCutEditorViewModel(cut);

            // Create exec input node
            NodeInputViewModel exec_input = new NodeInputViewModel()
            {
                Port = new ExecPortViewModel()
                {
                    PortType = PortType.Execution
                }, MaxConnections = 1
            };

            Inputs.Edit(x => x.Add(exec_input));

            exec_input.Connections.Connect()
            .Subscribe(change => {
                OnExecInputChanged(change);
            });

            // Create exec output node
            NodeOutputViewModel exec_output = new NodeOutputViewModel()
            {
                Port = new ExecPortViewModel()
                {
                    PortType = PortType.Execution
                }, MaxConnections = 1, Editor = BlockingCutEditor
            };

            Outputs.Edit(x => x.Add(exec_output));

            exec_output.Connections.Connect()
            .Subscribe(change => {
                OnExecOutputChanged(change);
            });
        }
        public void TestNodeCollapse()
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel
            {
                Outputs = { nodeAOutput }
            };

            NodeInputViewModel  nodeBInput   = new NodeInputViewModel();
            NodeInputViewModel  nodeBInput2  = new NodeInputViewModel();
            NodeOutputViewModel nodeBOutput  = new NodeOutputViewModel();
            NodeOutputViewModel nodeBOutput2 = new NodeOutputViewModel();
            NodeViewModel       nodeB        = new NodeViewModel
            {
                Inputs  = { nodeBInput, nodeBInput2 },
                Outputs = { nodeBOutput, nodeBOutput2 }
            };

            NodeInputViewModel nodeCInput = new NodeInputViewModel();
            NodeViewModel      nodeC      = new NodeViewModel
            {
                Inputs = { nodeCInput }
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC }
            };

            network.Connections.Add(network.ConnectionFactory(nodeBInput, nodeAOutput));
            network.Connections.Add(network.ConnectionFactory(nodeCInput, nodeBOutput));

            nodeB.IsCollapsed = true;

            Assert.IsTrue(nodeB.VisibleInputs.SequenceEqual(new [] { nodeBInput }));
            Assert.IsTrue(nodeB.VisibleOutputs.SequenceEqual(new[] { nodeBOutput }));
        }
        public void TestPortParent()
        {
            NodeOutputViewModel output = new NodeOutputViewModel();

            Assert.AreEqual(output, output.Port.Parent);
        }
示例#26
0
 public CodeGenConnectionViewModel(NetworkViewModel parent, NodeInputViewModel input, NodeOutputViewModel output) : base(parent, input, output)
 {
 }
示例#27
0
        public void TestNodeCollapse(EndpointVisibility visibility, bool nonCollapsedNonConnectedVisible, bool nonCollapsedConnectedVisible, bool collapsedNonConnectedVisible, bool collapsedConnectedVisible)
        {
            NodeOutputViewModel nodeAOutput = new NodeOutputViewModel();
            NodeViewModel       nodeA       = new NodeViewModel
            {
                Outputs = { nodeAOutput }
            };

            NodeInputViewModel nodeBInput = new NodeInputViewModel {
                Visibility = visibility
            };
            NodeInputViewModel nodeBInput2 = new NodeInputViewModel {
                Visibility = visibility
            };
            NodeOutputViewModel nodeBOutput = new NodeOutputViewModel {
                Visibility = visibility
            };
            NodeOutputViewModel nodeBOutput2 = new NodeOutputViewModel {
                Visibility = visibility
            };
            NodeViewModel nodeB = new NodeViewModel
            {
                Inputs  = { nodeBInput, nodeBInput2 },
                Outputs = { nodeBOutput, nodeBOutput2 }
            };

            NodeInputViewModel nodeCInput = new NodeInputViewModel();
            NodeViewModel      nodeC      = new NodeViewModel
            {
                Inputs = { nodeCInput }
            };

            NetworkViewModel network = new NetworkViewModel
            {
                Nodes = { nodeA, nodeB, nodeC }
            };

            network.Connections.Add(network.ConnectionFactory(nodeBInput, nodeAOutput));
            network.Connections.Add(network.ConnectionFactory(nodeCInput, nodeBOutput));

            var expectedInputSeq  = Enumerable.Empty <Endpoint>();
            var expectedOutputSeq = Enumerable.Empty <Endpoint>();

            if (nonCollapsedConnectedVisible)
            {
                expectedInputSeq  = expectedInputSeq.Concat(new[] { nodeBInput });
                expectedOutputSeq = expectedOutputSeq.Concat(new[] { nodeBOutput });
            }
            if (nonCollapsedNonConnectedVisible)
            {
                expectedInputSeq  = expectedInputSeq.Concat(new[] { nodeBInput2 });
                expectedOutputSeq = expectedOutputSeq.Concat(new[] { nodeBOutput2 });
            }

            Assert.IsTrue(nodeB.VisibleInputs.SequenceEqual(expectedInputSeq));
            Assert.IsTrue(nodeB.VisibleOutputs.SequenceEqual(expectedOutputSeq));

            nodeB.IsCollapsed = true;

            expectedInputSeq  = Enumerable.Empty <Endpoint>();
            expectedOutputSeq = Enumerable.Empty <Endpoint>();

            if (collapsedConnectedVisible)
            {
                expectedInputSeq  = expectedInputSeq.Concat(new[] { nodeBInput });
                expectedOutputSeq = expectedOutputSeq.Concat(new[] { nodeBOutput });
            }
            if (collapsedNonConnectedVisible)
            {
                expectedInputSeq  = expectedInputSeq.Concat(new[] { nodeBInput2 });
                expectedOutputSeq = expectedOutputSeq.Concat(new[] { nodeBOutput2 });
            }

            Assert.IsTrue(nodeB.VisibleInputs.SequenceEqual(expectedInputSeq));
            Assert.IsTrue(nodeB.VisibleOutputs.SequenceEqual(expectedOutputSeq));
        }
示例#28
0
 /// <summary>
 /// Create and add a new input to the group node, along with a corresponding output in the subnet (e.g. on the entrance node).
 /// </summary>
 /// <param name="candidateOutput">Output viewmodel that should match the new input on the group node.</param>
 /// <returns></returns>
 public abstract NodeInputViewModel AddNewGroupNodeInput(NodeOutputViewModel candidateOutput);
示例#29
0
 /// <summary>
 /// Create and add a new output to the group node, along with a corresponding input in the subnet (e.g. on the exit node).
 /// </summary>
 /// <param name="candidateOutput">Output viewmodel that should match the new input that is added to the subnet.</param>
 public abstract NodeInputViewModel AddNewSubnetOutlet(NodeOutputViewModel candidateOutput);
示例#30
0
        private void UpdateNetwork()
        {
            network.Nodes.Clear();
            network.Connections.Clear();

            var stateMachineToDraw = parsed.cStateMachines.ElementAt(Index);

            var states1 = stateMachineToDraw.states.ToDictionary(state => state, state => new NodeViewModel()
            {
                Name = state.Raw.GetParam <string>("name")
            });

            foreach (var state in states1)
            {
                network.Nodes.Add(state.Value);
            }

            var anyStateNode = new NodeViewModel()
            {
                Name = "Any State"
            };

            network.Nodes.Add(anyStateNode);

            if (stateMachineToDraw.wildcardTransitions != null)
            {
                foreach (var trans in stateMachineToDraw.wildcardTransitions)
                {
                    var targetStateNode = states1[trans.targetState];

                    var output = new NodeOutputViewModel();

                    var input = new NodeInputViewModel();

                    anyStateNode.Outputs.Add(output);

                    targetStateNode.Inputs.Add(input);

                    var connection = new ConnectionViewModel(network, input, output);

                    network.Connections.Add(connection);
                }
            }

            foreach (var state in states1)
            {
                var originNode = state.Value;

                if (state.Key.transitions != null)
                {
                    foreach (var trans in state.Key.transitions)
                    {
                        var targetStateNode = states1[trans.targetState];

                        var output = new NodeOutputViewModel();

                        var input = new NodeInputViewModel();

                        originNode.Outputs.Add(output);

                        targetStateNode.Inputs.Add(input);

                        var connection = new ConnectionViewModel(network, input, output);

                        network.Connections.Add(connection);
                    }
                }
            }
        }