Skip to content

Commit

Permalink
Stop the user from creating or deleting the Output node.
Browse files Browse the repository at this point in the history
Also fixes #107.
  • Loading branch information
Jcparkyn committed Aug 11, 2020
1 parent 9271df2 commit 3b32b41
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 38 deletions.
1 change: 0 additions & 1 deletion Nodexr/Shared/Components/NodeList.razor
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
{
new TextNode(),
new GroupNode(),
new OutputNode(),
}),

("Wildcards",
Expand Down
9 changes: 3 additions & 6 deletions Nodexr/Shared/Components/NodeListPreview.razor
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<div class="node-title collapsed" style="background-color: @Color; height:100%;">
<b> @Data.Title</b>
<button class="icon-button info-button"
@onclick="@ShowModal">
@onclick="@ShowInfoModal">
<i class="fas fa-info-circle"></i>
</button>
</div>
Expand All @@ -20,9 +20,8 @@

string Color => $"var(--col-node-{Data.Title.Replace(" ", "").ToLower()})";

void ShowModal()
void ShowInfoModal()
{
//Console.WriteLine("Showing Modal");
var modalParameters = new ModalParameters();
modalParameters.Add(nameof(NodeInfo.InfoText), Data.NodeInfo);
Modal.Show<NodeInfo>(Data.Title, modalParameters);
Expand All @@ -31,14 +30,12 @@
void StartNodeDrag(DragEventArgs e)
{
INode newNode = (INode)Activator.CreateInstance(Data.GetType());
//NodeHandler.Tree.AddNode(newNode, refreshIndex: false);
NodeDragService.OnStartCreateNodeDrag(newNode, e);
}

void AddNode(Type type)
{
INode node = (INode)Activator.CreateInstance(type);
NodeHandler.Tree.AddNode(node, refreshIndex: true);
NodeHandler.Tree.AddNode(node);
}
}
4 changes: 3 additions & 1 deletion Nodexr/Shared/Components/OutputDisplaySegment.razor
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@
get => segment;
set
{
//The view needs to be refreshed when the node is selected or deselected.
//This is done in the setter (instead of OnParametersSet) so the previous segment can be unsubscribed from.
if(segment != null)
{
segment.Node.SelectionChanged -= Refresh;
}
value.Node.SelectionChanged += Refresh;
segment = value;
segment.Node.SelectionChanged += Refresh;
}
}

Expand Down
34 changes: 8 additions & 26 deletions Nodexr/Shared/Nodes/NodeTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,7 @@ public class NodeTree

public NodeResult CachedOutput { get; private set; }

public void AddNode<TNode>(bool refreshIndex = true) where TNode : Node, new()
{
Node newNode = new TNode();
newNode.CalculateInputsPos();
AddNode(newNode, refreshIndex);
}

public void AddNode(INode node, bool refreshIndex = true)
public void AddNode(INode node)
{
nodes.Add(node);

Expand All @@ -37,40 +30,29 @@ public void AddNode(INode node, bool refreshIndex = true)
}
}

public void DeleteNode(INode nodeToRemove, bool refreshIndex = true)
public void DeleteNode(INode nodeToRemove)
{
DeleteOutputNoodles(nodeToRemove);
nodes.Remove(nodeToRemove);
RecalculateOutput();
}

void OnOutputChanged(object sender, EventArgs e)
private void OnOutputChanged(object sender, EventArgs e)
{
RecalculateOutput();
}

private IEnumerable<OutputNode> GetOutputNodes()
private OutputNode GetOutputNode()
{
//TODO: refactor
return nodes.OfType<OutputNode>();
return nodes.OfType<OutputNode>().Single();
}

public void RecalculateOutput()
{
var outputNodes = GetOutputNodes();
var outputNode = GetOutputNode();

NodeResult output = outputNodes.Count() switch
{
1 => outputNodes.First().CachedOutput,
var count when count > 1 => new NodeResult("Too many Output nodes", null),
_ => new NodeResult("Add an output node to get started", null)
};

if (output != CachedOutput)
{
CachedOutput = output;
OutputChanged?.Invoke(this, EventArgs.Empty);
}
CachedOutput = outputNode.CachedOutput;
OutputChanged?.Invoke(this, EventArgs.Empty);
}

private void DeleteOutputNoodles(INode nodeToRemove)
Expand Down
14 changes: 10 additions & 4 deletions Nodexr/Shared/Services/NodeHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,12 +179,18 @@ public bool IsNodeSelected(INode node)

public void DeleteSelectedNode()
{
if (SelectedNode != null)
if (SelectedNode is null)
{
Tree.DeleteNode(SelectedNode, false);
SelectedNode = null;
ForceRefreshNodeGraph();
return;
}
if (SelectedNode is OutputNode)
{
toastService.ShowInfo("", "Can't delete the Output node");
return;
}
Tree.DeleteNode(SelectedNode);
SelectedNode = null;
ForceRefreshNodeGraph();
}

private void OnOutputChanged(object sender, EventArgs e)
Expand Down

0 comments on commit 3b32b41

Please sign in to comment.