diff --git a/PCK-Studio/Controls/Editor/PckEditor.cs b/PCK-Studio/Controls/Editor/PckEditor.cs index 580e0e4c..d4959e61 100644 --- a/PCK-Studio/Controls/Editor/PckEditor.cs +++ b/PCK-Studio/Controls/Editor/PckEditor.cs @@ -1694,6 +1694,33 @@ namespace PckStudio.Controls } } + public void extractEntirePCK() + { + OpenFolderDialog dialog = new OpenFolderDialog(); + dialog.Title = @"Select destination folder"; + + if (dialog.ShowDialog(Handle) == true) + { + foreach (TreeNode node in treeViewMain.Nodes) + { + if(node == null) + continue; + + if (node.Tag == null) + { + extractFolder(dialog.ResultPath, node); + } + else if (node.TryGetTagData(out PckAsset asset)) + { + extractFile(Path.Combine(dialog.ResultPath, Path.GetFileName(asset.Filename)), asset); + } + } + + // Verification that file extraction path was successful + MessageBox.Show(this, $"{TitleName} successfully extracted"); + } + } + private void extractToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = treeViewMain.SelectedNode; @@ -1711,7 +1738,7 @@ namespace PckStudio.Controls dialog.Title = @"Select destination folder"; if (dialog.ShowDialog(Handle) == true) - extractFolder(dialog.ResultPath); + extractFolder(dialog.ResultPath, node); } else if (node.TryGetTagData(out PckAsset asset)) { @@ -1734,10 +1761,8 @@ namespace PckStudio.Controls MessageBox.Show(this, $"\"{node.Text}\" successfully extracted"); } - private void extractFolder(string outPath) + private void extractFolder(string outPath, TreeNode node) { - TreeNode node = treeViewMain.SelectedNode; - string selectedFolder = node.FullPath; foreach (PckAsset asset in EditorValue.File.GetAssets().Where(asset => asset.Filename.StartsWith(selectedFolder))) @@ -1750,7 +1775,7 @@ namespace PckStudio.Controls if (!Directory.Exists(finalPath)) Directory.CreateDirectory(finalPath); - extractFile(finalPath + "/" + Path.GetFileName(asset.Filename), asset); + extractFile(Path.Combine(finalPath, Path.GetFileName(asset.Filename)), asset); } } diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index f03e2bb0..39a5bcb1 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -53,6 +53,7 @@ this.setXMLVersion1MenuItem = new PckStudio.ToolboxItems.ToolStripRadioButtonMenuItem(); this.setXMLVersion2MenuItem = new PckStudio.ToolboxItems.ToolStripRadioButtonMenuItem(); this.setXMLVersion3MenuItem = new PckStudio.ToolboxItems.ToolStripRadioButtonMenuItem(); + this.extractToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.quickChangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openPckManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -216,6 +217,7 @@ this.pckToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.setPackIDToolStripMenuItem, this.setXMLVersionStripMenuItem, + this.extractToolStripMenuItem, this.quickChangeToolStripMenuItem}); this.pckToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; this.pckToolStripMenuItem.Name = "pckToolStripMenuItem"; @@ -269,6 +271,12 @@ this.setXMLVersion3MenuItem.Tag = 3; this.setXMLVersion3MenuItem.Click += new System.EventHandler(this.setXMLVersionMenuItem_Click); // + // extractToolStripMenuItem + // + this.extractToolStripMenuItem.Name = "extractToolStripMenuItem"; + resources.ApplyResources(this.extractToolStripMenuItem, "extractToolStripMenuItem"); + this.extractToolStripMenuItem.Click += new System.EventHandler(this.extractToolStripMenuItem_Click); + // // quickChangeToolStripMenuItem // resources.ApplyResources(this.quickChangeToolStripMenuItem, "quickChangeToolStripMenuItem"); @@ -612,6 +620,7 @@ public ToolboxItems.ToolStripRadioButtonMenuItem setXMLVersion2MenuItem; public ToolboxItems.ToolStripRadioButtonMenuItem setXMLVersion3MenuItem; private System.Windows.Forms.ToolStripMenuItem setPackIDToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem extractToolStripMenuItem; } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index d5e11516..c16be621 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -641,5 +641,15 @@ namespace PckStudio } } } + + private void extractToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TryGetCurrentEditor(out IEditor editor)) + { + PckEditor pckEditor = editor as PckEditor; + + pckEditor.extractEntirePCK(); + } + } } } \ No newline at end of file diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index db50198b..6160698a 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -356,6 +356,12 @@ Set Skin BOX Version + + 192, 22 + + + Extract PCK Contents + iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -5890,6 +5896,12 @@ PckStudio.ToolboxItems.ToolStripRadioButtonMenuItem, PCK-Studio, Version=7.0.1.2, Culture=neutral, PublicKeyToken=null + + extractToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + quickChangeToolStripMenuItem