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()); }
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 })); }
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); }
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); }
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); }
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); }
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)); }
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); }
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)); }
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); }
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); }
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); }
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); }); }
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; }
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); }
public CodeGenConnectionViewModel(NetworkViewModel parent, NodeInputViewModel input, NodeOutputViewModel output) : base(parent, input, output) { }
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)); }
/// <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);
/// <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);
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); } } } }