From d620759de8d1094710f3fea9f152f2ca6e752770 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 24 Jun 2024 19:10:35 +0200 Subject: [PATCH] Fix main treeview selecting wrong asset after rebuild(#36) --- PCK-Studio/Extensions/TreeViewExtensions.cs | 26 +++++++++++++++++++++ PCK-Studio/MainForm.cs | 7 +++--- PCK-Studio/PckStudio.csproj | 1 + 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 PCK-Studio/Extensions/TreeViewExtensions.cs diff --git a/PCK-Studio/Extensions/TreeViewExtensions.cs b/PCK-Studio/Extensions/TreeViewExtensions.cs new file mode 100644 index 00000000..61583041 --- /dev/null +++ b/PCK-Studio/Extensions/TreeViewExtensions.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using PckStudio.Internal.App; + +namespace PckStudio.Extensions +{ + internal static class TreeViewExtensions + { + public static TreeNode[] FindPath(this TreeView treeView, string path) + { + if (string.IsNullOrWhiteSpace(path)) + return Array.Empty(); + string segment = path.Substring(0, path.IndexOf(treeView.PathSeparator)); + if (treeView.Nodes.ContainsKey(segment)) + { + var res = treeView.Nodes[segment].GetChildNodes().Where(node => node.FullPath == path).ToArray(); + return res; + } + return Array.Empty(); + } + } +} diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index dc877551..cd201ba7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -423,7 +423,7 @@ namespace PckStudio private void BuildMainTreeView() { // In case the Rename function was just used and the selected node name no longer matches the file name - string selectedNodeText = treeViewMain.SelectedNode is TreeNode node ? node.Text : string.Empty; + string selectedNodeText = treeViewMain.SelectedNode is TreeNode node ? node.FullPath : string.Empty; previewPictureBox.Image = Resources.NoImageFound; treeMeta.Nodes.Clear(); treeViewMain.Nodes.Clear(); @@ -440,9 +440,8 @@ namespace PckStudio } treeViewMain.Sort(); - TreeNode[] selectedNodes; - if (!string.IsNullOrEmpty(selectedNodeText) && - (selectedNodes = treeViewMain.Nodes.Find(selectedNodeText, true)).Length > 0) + TreeNode[] selectedNodes = treeViewMain.FindPath(selectedNodeText); + if (selectedNodes.Length > 0) { treeViewMain.SelectedNode = selectedNodes[0]; } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 5c6c2dc5..49985dfc 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -134,6 +134,7 @@ + Form