From 7070c4c0c2bdc66c7bf3ef3d9c9e4505b52bfa72 Mon Sep 17 00:00:00 2001 From: MattNL Date: Thu, 29 Sep 2022 13:38:28 -0400 Subject: [PATCH 1/4] HUGE WIP: Some SubPCK support. --- PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs | 9 ++- PCK-Studio/MainForm.cs | 72 +++++++++++++++++++++- 2 files changed, 74 insertions(+), 7 deletions(-) diff --git a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs index 3dd00e26..41ba27b9 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKFileWriter.cs @@ -11,17 +11,16 @@ namespace PckStudio.Classes.IO private PCKFile _pckfile; private List LUT = new List(); - public static void Write(Stream stream, PCKFile file, bool isLittleEndian) + public static void Write(Stream stream, PCKFile file, bool isLittleEndian, bool isSkinsPCK = false) { - new PCKFileWriter(file, isLittleEndian).WriteToStream(stream); + new PCKFileWriter(file, isLittleEndian, isSkinsPCK).WriteToStream(stream); } - private PCKFileWriter(PCKFile file, bool isLittleEndian) : base(isLittleEndian) + private PCKFileWriter(PCKFile file, bool isLittleEndian, bool isSkinsPCK) : base(isLittleEndian) { _pckfile = file; LUT = _pckfile.GatherPropertiesList(); - // fix for Skins.pck - if (!file.HasFile("localisation.loc", PCKFile.FileData.FileType.LocalisationFile) && !LUT.Contains("XMLVERSION")) LUT.Insert(0, "XMLVERSION"); + if (!LUT.Contains("XMLVERSION") && isSkinsPCK) LUT.Insert(0, "XMLVERSION"); } private void WriteToStream(Stream stream) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 0d628934..4ee961d7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -79,6 +79,7 @@ namespace PckStudio public void LoadFromPath(string filepath) { + treeViewMain.Nodes.Clear(); currentPCK = openPck(filepath); if (currentPCK == null) return; if (addPasswordToolStripMenuItem.Enabled = checkForPassword()) @@ -131,9 +132,9 @@ namespace PckStudio if (ofd.ShowDialog() == DialogResult.OK) { LoadFromPath(ofd.FileName); - } } } + } private PCKFile openPck(string filePath) { @@ -273,8 +274,16 @@ 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 filepath = ""; + if(treeViewMain.SelectedNode != null) filepath = (treeViewMain.SelectedNode.Tag as PCKFile.FileData).filepath; treeViewMain.Nodes.Clear(); BuildPckTreeView(treeViewMain.Nodes, currentPCK); + if (!String.IsNullOrEmpty(filepath)) + { + // Looks kinda nuts but this line of code is responsible for finding the correct node that was originally selected + treeViewMain.SelectedNode = treeViewMain.Nodes.Find(Path.GetFileName(filepath), true).ToList().Find(t => (t.Tag as PCKFile.FileData).filepath == filepath); + } } private void HandleTextureFile(PCKFile.FileData file) @@ -663,11 +672,69 @@ namespace PckStudio } } + List GetSubPCKFiles(TreeNodeCollection children) + { + List new_nodes = new List(); + + foreach(TreeNode node in children) + { + Console.WriteLine(node.Text); + if (node.Nodes.Count > 0) + { + new_nodes.Concat(GetSubPCKFiles(node.Nodes)); + } + else if(node.Tag is PCKFile.FileData) new_nodes.Add(node); + } + + return new_nodes; + } + + void RebuildSubPCK(string PCKPath) + { + // Support for if a file is edited within a PCK File + TreeNode parent = treeViewMain.Nodes[treeViewMain.Nodes.IndexOfKey(PCKPath)]; + if (parent is null || parent.Tag is not PCKFile.FileData) return; + PCKFile.FileData parent_file = (PCKFile.FileData)parent.Tag; + if ((parent_file.filetype is PCKFile.FileData.FileType.TexturePackInfoFile) + || (parent_file.filetype is PCKFile.FileData.FileType.SkinDataFile)) + { + Console.WriteLine("Rebuilding " + parent_file.filepath); + PCKFile newPCKFile = new PCKFile(3); + + foreach (TreeNode node in GetSubPCKFiles(parent.Nodes)) + { + if (node.Tag is PCKFile.FileData) + { + PCKFile.FileData node_file = (PCKFile.FileData)node.Tag; + PCKFile.FileData new_file = new PCKFile.FileData(node_file.filepath, node_file.filetype); + foreach (var prop in node_file.properties) new_file.properties.Add(prop); + new_file.SetData(node_file.data); + newPCKFile.Files.Add(new_file); + } + } + + MemoryStream ms = new MemoryStream(); + // Bool to add the XMLVersion property + bool isSkinsPCK = parent_file.filetype is PCKFile.FileData.FileType.SkinDataFile; + PCKFileWriter.Write(ms, newPCKFile, LittleEndianCheckBox.Checked, isSkinsPCK); + parent_file.SetData(ms.ToArray()); + parent.Tag = parent_file; + } + } + private void treeViewMain_DoubleClick(object sender, EventArgs e) { if (treeViewMain.SelectedNode is TreeNode t && t.Tag is PCKFile.FileData file) + { pckFileTypeHandler[file.filetype]?.Invoke(file); - } + if (t.FullPath.Contains(".pck")) + { + string pathToPCK = t.FullPath.Substring(0, t.FullPath.IndexOf(".pck") + 4); + Console.WriteLine(pathToPCK); + RebuildSubPCK(pathToPCK); + } + } + } private void treeMeta_AfterSelect(object sender, TreeViewEventArgs e) { @@ -984,6 +1051,7 @@ namespace PckStudio LoadEditorTab(); } } + private void texturePackToolStripMenuItem_Click(object sender, EventArgs e) { CreateTexturePack packPrompt = new CreateTexturePack(""); From c10c607c201ddf79a071e54cbc73fed034a7394e Mon Sep 17 00:00:00 2001 From: MattNL Date: Sat, 26 Nov 2022 21:37:52 -0500 Subject: [PATCH 2/4] Most file operations now work with Sub-Pcks (mostly) --- PCK-Studio/MainForm.cs | 88 +++++++++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 26 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 4ee961d7..ddf4a56a 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -236,10 +236,11 @@ namespace PckStudio return BuildNodeTreeBySeperator(subNode.Nodes, subPath, seperator); } - private void BuildPckTreeView(TreeNodeCollection root, PCKFile pckFile) + private void BuildPckTreeView(TreeNodeCollection root, PCKFile pckFile, string parentPath = "") { pckFile.Files.ForEach(file => { + if (file.filepath.StartsWith(parentPath)) file.filepath = file.filepath.Remove(0, parentPath.Length); TreeNode node = BuildNodeTreeBySeperator(root, file.filepath, '/'); node.Tag = file; switch (file.filetype) @@ -253,7 +254,7 @@ namespace PckStudio try { PCKFile subPCKfile = PCKFileReader.Read(stream, LittleEndianCheckBox.Checked); - BuildPckTreeView(node.Nodes, subPCKfile); + BuildPckTreeView(node.Nodes, subPCKfile, file.filepath + "/"); // passes parent path to remove from sub pck filepaths } catch (OverflowException ex) { @@ -528,6 +529,9 @@ namespace PckStudio { var node = treeViewMain.SelectedNode; if (node == null) return; + + string path = node.FullPath; + if (node.Tag is PCKFile.FileData) { PCKFile.FileData file = node.Tag as PCKFile.FileData; @@ -556,18 +560,21 @@ namespace PckStudio node.Remove(); saved = false; } + if (IsSubPCKNode(path)) RebuildSubPCK(path); } private void renameFileToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = treeViewMain.SelectedNode; if (node == null) return; + string path = node.FullPath; using RenamePrompt diag = new RenamePrompt(node.FullPath); if (diag.ShowDialog(this) == DialogResult.OK) { - if (node.Tag is PCKFile.FileData) + if (node.Tag is PCKFile.FileData file + && file.filetype is not PCKFile.FileData.FileType.TexturePackInfoFile + && file.filetype is not PCKFile.FileData.FileType.SkinDataFile) { - var file = node.Tag as PCKFile.FileData; file.filepath = diag.NewText; } else // folder @@ -579,6 +586,7 @@ namespace PckStudio }); } saved = false; + if (IsSubPCKNode(path)) RebuildSubPCK(path); BuildMainTreeView(); } } @@ -672,16 +680,32 @@ namespace PckStudio } } - List GetSubPCKFiles(TreeNodeCollection children) + bool IsSubPCKNode(string nodePath) + { + // written by miku, implemented and modified by me - MNL + string[] subpaths = nodePath.Split('/'); + string[] conditions = subpaths.Select(s => Path.GetExtension(s) switch { + ".pck" => "yes", + _ => "no", + }).ToArray(); + + bool isSubFile = conditions.Contains("yes") && !nodePath.EndsWith(".pck"); + + Console.WriteLine(nodePath + " is " + (isSubFile ? "" : "not ") + "a Sub-PCK File"); + + return isSubFile; + } + + List GetSubPCKNodes(TreeNodeCollection children) { List new_nodes = new List(); foreach(TreeNode node in children) { - Console.WriteLine(node.Text); if (node.Nodes.Count > 0) { - new_nodes.Concat(GetSubPCKFiles(node.Nodes)); + // TODO: for some reason, folders aren't included when rebuilding PCKs? + new_nodes.Concat(GetSubPCKNodes(node.Nodes)); } else if(node.Tag is PCKFile.FileData) new_nodes.Add(node); } @@ -692,19 +716,25 @@ namespace PckStudio void RebuildSubPCK(string PCKPath) { // Support for if a file is edited within a PCK File - TreeNode parent = treeViewMain.Nodes[treeViewMain.Nodes.IndexOfKey(PCKPath)]; - if (parent is null || parent.Tag is not PCKFile.FileData) return; - PCKFile.FileData parent_file = (PCKFile.FileData)parent.Tag; - if ((parent_file.filetype is PCKFile.FileData.FileType.TexturePackInfoFile) - || (parent_file.filetype is PCKFile.FileData.FileType.SkinDataFile)) + + PCKPath = Path.GetDirectoryName(PCKPath).Replace('\\', '/'); + + Console.WriteLine(PCKPath); + + TreeNode parent = treeViewMain.Nodes.Find(Path.GetFileName(PCKPath), true).ToList().Find(t => t.Tag != null && (t.Tag as PCKFile.FileData).filepath == PCKPath); + if (parent == null) return; + + PCKFile.FileData parent_file = parent.Tag as PCKFile.FileData; + if (parent_file.filetype is PCKFile.FileData.FileType.TexturePackInfoFile || parent_file.filetype is PCKFile.FileData.FileType.SkinDataFile) { Console.WriteLine("Rebuilding " + parent_file.filepath); PCKFile newPCKFile = new PCKFile(3); - foreach (TreeNode node in GetSubPCKFiles(parent.Nodes)) + foreach (TreeNode node in GetSubPCKNodes(parent.Nodes)) { if (node.Tag is PCKFile.FileData) { + Console.WriteLine(node.FullPath); PCKFile.FileData node_file = (PCKFile.FileData)node.Tag; PCKFile.FileData new_file = new PCKFile.FileData(node_file.filepath, node_file.filetype); foreach (var prop in node_file.properties) new_file.properties.Add(prop); @@ -719,6 +749,8 @@ namespace PckStudio PCKFileWriter.Write(ms, newPCKFile, LittleEndianCheckBox.Checked, isSkinsPCK); parent_file.SetData(ms.ToArray()); parent.Tag = parent_file; + + BuildMainTreeView(); } } @@ -729,9 +761,7 @@ namespace PckStudio pckFileTypeHandler[file.filetype]?.Invoke(file); if (t.FullPath.Contains(".pck")) { - string pathToPCK = t.FullPath.Substring(0, t.FullPath.IndexOf(".pck") + 4); - Console.WriteLine(pathToPCK); - RebuildSubPCK(pathToPCK); + RebuildSubPCK(t.FullPath); } } } @@ -740,9 +770,9 @@ namespace PckStudio { if (e.Node is TreeNode t && t.Tag is ValueTuple property) { - entryTypeTextBox.Text = property.Item1; - entryDataTextBox.Text = property.Item2; - } + entryTypeTextBox.Text = property.Item1; + entryDataTextBox.Text = property.Item2; + } } private void treeMeta_DoubleClick(object sender, EventArgs e) @@ -761,6 +791,7 @@ namespace PckStudio if (diag.ShowDialog(this) == DialogResult.OK && diag.saved) { file.properties[i] = new ValueTuple("ANIM", diag.outANIM); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); saved = false; } @@ -776,6 +807,7 @@ namespace PckStudio if (add.ShowDialog() == DialogResult.OK && i != -1) { file.properties[i] = new ValueTuple(add.PropertyName, add.PropertyValue); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); saved = false; } @@ -820,7 +852,9 @@ namespace PckStudio if (node.Parent == null) treeViewMain.Nodes.Insert(node.Index + 1, newNode); //adds generated minefile node else node.Parent.Nodes.Insert(node.Index + 1, newNode);//adds generated minefile node to selected folder - currentPCK.Files.Insert(node.Index + 1, mf); + + if (!IsSubPCKNode(node.FullPath)) currentPCK.Files.Insert(node.Index + 1, mf); + else RebuildSubPCK(node.FullPath); } private void deleteEntryToolStripMenuItem_Click(object sender, EventArgs e) @@ -830,6 +864,7 @@ namespace PckStudio file.properties.Remove(property)) { treeMeta.SelectedNode.Remove(); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); saved = false; } } @@ -852,15 +887,16 @@ namespace PckStudio if (treeViewMain.SelectedNode is TreeNode t && t.Tag is PCKFile.FileData file) { - using addMeta add = new addMeta(); - if (add.ShowDialog() == DialogResult.OK) - { + using addMeta add = new addMeta(); + if (add.ShowDialog() == DialogResult.OK) + { file.properties.Add((add.PropertyName, add.PropertyValue)); - ReloadMetaTreeView(); - saved = false; + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); + ReloadMetaTreeView(); + saved = false; + } } } - } private void moveUpToolStripMenuItem_Click(object sender, EventArgs e) { From 21ffb891788d742057713f9f5ba297bd79b3f215 Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 28 Nov 2022 17:54:38 -0500 Subject: [PATCH 3/4] Completed SubPCK Support (: --- PCK-Studio/MainForm.cs | 128 +++++++++++++++++++++++++++++++---------- 1 file changed, 98 insertions(+), 30 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ddf4a56a..110805d7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -277,7 +277,7 @@ namespace PckStudio { // In case the Rename function was just used and the selected node name no longer matches the file name string filepath = ""; - if(treeViewMain.SelectedNode != null) filepath = (treeViewMain.SelectedNode.Tag as PCKFile.FileData).filepath; + if(treeViewMain.SelectedNode != null && treeViewMain.SelectedNode.Tag is PCKFile.FileData) filepath = (treeViewMain.SelectedNode.Tag as PCKFile.FileData).filepath; treeViewMain.Nodes.Clear(); BuildPckTreeView(treeViewMain.Nodes, currentPCK); if (!String.IsNullOrEmpty(filepath)) @@ -509,6 +509,7 @@ namespace PckStudio if (ofd.ShowDialog() == DialogResult.OK) { file.SetData(File.ReadAllBytes(ofd.FileName)); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); saved = false; } return; @@ -560,7 +561,7 @@ namespace PckStudio node.Remove(); saved = false; } - if (IsSubPCKNode(path)) RebuildSubPCK(path); + if (IsSubPCKNode(path)) RebuildSubPCK(node); } private void renameFileToolStripMenuItem_Click(object sender, EventArgs e) @@ -577,7 +578,7 @@ namespace PckStudio { file.filepath = diag.NewText; } - else // folder + else if(!IsSubPCKNode(path)) // folder { currentPCK.Files.ForEach(file => { @@ -585,8 +586,18 @@ namespace PckStudio file.filepath = diag.NewText + file.filepath.Substring(node.FullPath.Length); }); } + else + { + foreach (var n in GetNodes(node.Nodes)) + { + if (n.Tag is PCKFile.FileData f && n.FullPath.StartsWith(node.FullPath)) + { + f.filepath = diag.NewText + n.FullPath.Substring(node.FullPath.Length); + } + } + } saved = false; - if (IsSubPCKNode(path)) RebuildSubPCK(path); + if (IsSubPCKNode(path)) RebuildSubPCK(node); BuildMainTreeView(); } } @@ -601,14 +612,52 @@ namespace PckStudio using (addNewSkin add = new addNewSkin(locFile)) if (add.ShowDialog() == DialogResult.OK) { + if (currentPCK.HasFile("Skins.pck", PCKFile.FileData.FileType.SkinDataFile)) // Prioritize Skins.pck + { + TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault(); + if (subPCK.Nodes.ContainsKey("Skins")) add.Skin.filepath = add.Skin.filepath.Insert(0, "Skins/"); + add.Skin.filepath = add.Skin.filepath.Insert(0, "Skins.pck/"); + + TreeNode newNode = new TreeNode(Path.GetFileName(add.Skin.filepath)); + newNode.Tag = add.Skin; + setFileIcon(newNode, PCKFile.FileData.FileType.SkinFile); + + subPCK.Nodes.Add(newNode); + + RebuildSubPCK(newNode); + } + else + { + if (treeViewMain.Nodes.ContainsKey("Skins")) add.Skin.filepath = add.Skin.filepath.Insert(0, "Skins/"); // Then Skins folder + currentPCK.Files.Add(add.Skin); + } + if (add.useCape) - currentPCK.Files.Add(add.Cape); - if (!(treeViewMain.SelectedNode.Tag is PCKFile.FileData)) - add.Skin.filepath = $"{treeViewMain.SelectedNode.FullPath}/{add.Skin.filepath}"; - currentPCK.Files.Add(add.Skin); + { + if (currentPCK.HasFile("Skins.pck", PCKFile.FileData.FileType.SkinDataFile)) // Prioritize Skins.pck + { + TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault(); + if (subPCK.Nodes.ContainsKey("Skins")) add.Cape.filepath = add.Cape.filepath.Insert(0, "Skins/"); + add.Cape.filepath = add.Cape.filepath.Insert(0, "Skins.pck/"); + + TreeNode newNode = new TreeNode(Path.GetFileName(add.Cape.filepath)); + newNode.Tag = add.Cape; + setFileIcon(newNode, PCKFile.FileData.FileType.SkinFile); + + subPCK.Nodes.Add(newNode); + + RebuildSubPCK(newNode); + } + else + { + if (treeViewMain.Nodes.ContainsKey("Skins")) add.Cape.filepath = add.Cape.filepath.Insert(0, "Skins/"); // Then Skins folder + currentPCK.Files.Add(add.Cape); + } + } + TrySetLocFile(locFile); saved = false; - BuildMainTreeView(); + //BuildMainTreeView(); } } @@ -696,32 +745,48 @@ namespace PckStudio return isSubFile; } - List GetSubPCKNodes(TreeNodeCollection children) + List GetNodes(TreeNodeCollection children) { List new_nodes = new List(); foreach(TreeNode node in children) { + new_nodes.Add(node); if (node.Nodes.Count > 0) { - // TODO: for some reason, folders aren't included when rebuilding PCKs? - new_nodes.Concat(GetSubPCKNodes(node.Nodes)); + foreach(var n in GetNodes(node.Nodes)) + { + new_nodes.Add(n); + } } - else if(node.Tag is PCKFile.FileData) new_nodes.Add(node); } return new_nodes; } - void RebuildSubPCK(string PCKPath) + TreeNode GetSubPCK(TreeNode child) + { + TreeNode parent = child; + + bool flag = false; + + while (parent.Parent != null) + { + parent = parent.Parent; + Console.WriteLine(parent.Text); + flag = parent.Tag is PCKFile.FileData f && (f.filetype is PCKFile.FileData.FileType.TexturePackInfoFile || f.filetype is PCKFile.FileData.FileType.SkinDataFile); + if (flag) break; + } + + if (!flag) return null; + else return parent; + } + + void RebuildSubPCK(TreeNode childNode) { // Support for if a file is edited within a PCK File - PCKPath = Path.GetDirectoryName(PCKPath).Replace('\\', '/'); - - Console.WriteLine(PCKPath); - - TreeNode parent = treeViewMain.Nodes.Find(Path.GetFileName(PCKPath), true).ToList().Find(t => t.Tag != null && (t.Tag as PCKFile.FileData).filepath == PCKPath); + TreeNode parent = GetSubPCK(childNode); if (parent == null) return; PCKFile.FileData parent_file = parent.Tag as PCKFile.FileData; @@ -730,11 +795,10 @@ namespace PckStudio Console.WriteLine("Rebuilding " + parent_file.filepath); PCKFile newPCKFile = new PCKFile(3); - foreach (TreeNode node in GetSubPCKNodes(parent.Nodes)) + foreach (TreeNode node in GetNodes(parent.Nodes)) { if (node.Tag is PCKFile.FileData) { - Console.WriteLine(node.FullPath); PCKFile.FileData node_file = (PCKFile.FileData)node.Tag; PCKFile.FileData new_file = new PCKFile.FileData(node_file.filepath, node_file.filetype); foreach (var prop in node_file.properties) new_file.properties.Add(prop); @@ -759,10 +823,6 @@ namespace PckStudio if (treeViewMain.SelectedNode is TreeNode t && t.Tag is PCKFile.FileData file) { pckFileTypeHandler[file.filetype]?.Invoke(file); - if (t.FullPath.Contains(".pck")) - { - RebuildSubPCK(t.FullPath); - } } } @@ -791,7 +851,7 @@ namespace PckStudio if (diag.ShowDialog(this) == DialogResult.OK && diag.saved) { file.properties[i] = new ValueTuple("ANIM", diag.outANIM); - if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); ReloadMetaTreeView(); saved = false; } @@ -807,7 +867,7 @@ namespace PckStudio if (add.ShowDialog() == DialogResult.OK && i != -1) { file.properties[i] = new ValueTuple(add.PropertyName, add.PropertyValue); - if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); ReloadMetaTreeView(); saved = false; } @@ -854,7 +914,7 @@ namespace PckStudio else node.Parent.Nodes.Insert(node.Index + 1, newNode);//adds generated minefile node to selected folder if (!IsSubPCKNode(node.FullPath)) currentPCK.Files.Insert(node.Index + 1, mf); - else RebuildSubPCK(node.FullPath); + else RebuildSubPCK(node); } private void deleteEntryToolStripMenuItem_Click(object sender, EventArgs e) @@ -864,7 +924,7 @@ namespace PckStudio file.properties.Remove(property)) { treeMeta.SelectedNode.Remove(); - if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); saved = false; } } @@ -891,7 +951,7 @@ namespace PckStudio if (add.ShowDialog() == DialogResult.OK) { file.properties.Add((add.PropertyName, add.PropertyValue)); - if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode.FullPath); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); ReloadMetaTreeView(); saved = false; } @@ -927,6 +987,9 @@ namespace PckStudio treeViewMain.SelectedNode.Remove(); } treeViewMain.SelectedNode = move; + + if (IsSubPCKNode(move.FullPath)) RebuildSubPCK(move); + BuildMainTreeView(); saved = false; } @@ -959,6 +1022,10 @@ namespace PckStudio treeViewMain.SelectedNode.Remove(); } treeViewMain.SelectedNode = move; + + if (IsSubPCKNode(move.FullPath)) RebuildSubPCK(move); + BuildMainTreeView(); + saved = false; } #region drag and drop for main tree node @@ -2924,6 +2991,7 @@ namespace PckStudio Console.WriteLine($"Setting {file.filetype} to {type}"); file.filetype = type; setFileIcon(t, type); + if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); } } From a6a8046c4f1fad5d439fee34b5ec9ca24d1c52be Mon Sep 17 00:00:00 2001 From: MattNL Date: Mon, 28 Nov 2022 18:38:14 -0500 Subject: [PATCH 4/4] Fixed small oversight in merged code --- PCK-Studio/MainForm.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ec436ec5..b66c2e0b 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -715,7 +715,7 @@ namespace PckStudio add.SkinFile.filepath = add.SkinFile.filepath.Insert(0, "Skins.pck/"); TreeNode newNode = new TreeNode(Path.GetFileName(add.SkinFile.filepath)); newNode.Tag = add.SkinFile; - setFileIcon(newNode, PCKFile.FileData.FileType.SkinFile); + SetPckFileIcon(newNode, PCKFile.FileData.FileType.SkinFile); subPCK.Nodes.Add(newNode); RebuildSubPCK(newNode); } @@ -733,7 +733,7 @@ namespace PckStudio add.CapeFile.filepath = add.CapeFile.filepath.Insert(0, "Skins.pck/"); TreeNode newNode = new TreeNode(Path.GetFileName(add.CapeFile.filepath)); newNode.Tag = add.CapeFile; - setFileIcon(newNode, PCKFile.FileData.FileType.SkinFile); + SetPckFileIcon(newNode, PCKFile.FileData.FileType.SkinFile); subPCK.Nodes.Add(newNode); RebuildSubPCK(newNode); } @@ -1892,7 +1892,7 @@ namespace PckStudio { Debug.WriteLine($"Setting {file.filetype} to {type}"); file.filetype = type; - setFileIcon(t, type); + SetPckFileIcon(t, type); if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); } }