From 4f54a41b4af345b1455130c5571adb2810caf789 Mon Sep 17 00:00:00 2001 From: TheGamerzs <44209534+TheGamerzs@users.noreply.github.com> Date: Fri, 4 Apr 2025 02:40:43 +0100 Subject: [PATCH] feature: Only reload specific train file on clone track node --- .../Project/Panels/ProjectExplorerPanel.cs | 46 +++++++++++++------ CodeWalker/Project/ProjectForm.cs | 19 ++++++-- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/CodeWalker/Project/Panels/ProjectExplorerPanel.cs b/CodeWalker/Project/Panels/ProjectExplorerPanel.cs index 9d8592e63..35ba60412 100644 --- a/CodeWalker/Project/Panels/ProjectExplorerPanel.cs +++ b/CodeWalker/Project/Panels/ProjectExplorerPanel.cs @@ -601,30 +601,46 @@ private void LoadYnvTreeNodes(YnvFile ynv, TreeNode node)//TODO! } - private void LoadTrainTrackTreeNodes(TrainTrack track, TreeNode node) + public async Task LoadTrainTrackTreeNodes(TrainTrack track, TreeNode node) { if (track == null) return; if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Nodes - node.Nodes.Clear(); + await Task.Run(() => + { + // Invoke the method on the form's thread. + ProjectForm.Invoke((MethodInvoker)delegate + { + node.Nodes.Clear(); + }); + if ((track.Nodes != null) && (track.Nodes.Count > 0)) + { + TreeNode nodesnode = null; + ProjectForm.Invoke((MethodInvoker)delegate + { + nodesnode = node.Nodes.Add("Nodes (" + track.Nodes.Count.ToString() + ")"); + nodesnode.Name = "Nodes"; + nodesnode.Tag = track; + }); + var nodes = track.Nodes; - if ((track.Nodes != null) && (track.Nodes.Count > 0)) - { - var nodesnode = node.Nodes.Add("Nodes (" + track.Nodes.Count.ToString() + ")"); - nodesnode.Name = "Nodes"; - nodesnode.Tag = track; - var nodes = track.Nodes; - for (int i = 0; i < nodes.Count; i++) - { - var ynode = nodes[i]; - var tnode = nodesnode.Nodes.Add(ynode.ToString()); - tnode.Tag = ynode; - } - } + TreeNode[] tempList = new TreeNode[track.Nodes.Count]; + for (int i = 0; i < nodes.Count; i++) + { + var ynode = nodes[i]; + tempList[i] = new TreeNode(ynode.ToString()); + tempList[i].Tag = ynode; + } + ProjectForm.Invoke((MethodInvoker)delegate + { + nodesnode.Nodes.AddRange(tempList); + }); + } + }); } private void LoadScenarioTreeNodes(YmtFile ymt, TreeNode node) { diff --git a/CodeWalker/Project/ProjectForm.cs b/CodeWalker/Project/ProjectForm.cs index 5d1f1a6d0..f1354cd43 100644 --- a/CodeWalker/Project/ProjectForm.cs +++ b/CodeWalker/Project/ProjectForm.cs @@ -629,6 +629,7 @@ private void ShowCurrentProjectItem(bool promote) if (CurrentMulti != null) { ShowEditMultiPanel(promote); + return; } else if (CurrentMloEntity != null) { @@ -5213,10 +5214,22 @@ public TrainTrackNode NewTrainNode(TrainTrackNode copy = null, bool copyPosition if (selectNew) { - LoadProjectTree(); - ProjectExplorer?.TrySelectTrainNodeTreeNode(n); CurrentTrainNode = n; - ShowEditTrainNodePanel(false); + + var trainTrackNodeTreeNode = ProjectExplorer?.FindTrainTrackTreeNode(n.Track); + if (trainTrackNodeTreeNode != null) { + ProjectExplorer?.LoadTrainTrackTreeNodes(n.Track, trainTrackNodeTreeNode).ContinueWith(delegate + { + ProjectExplorer?.TrySelectTrainNodeTreeNode(n); + ShowEditTrainNodePanel(false); + + }, TaskContinuationOptions.ExecuteSynchronously); + } else + { + LoadProjectTree(); + ProjectExplorer?.TrySelectTrainNodeTreeNode(n); + ShowEditTrainNodePanel(false); + } }