using PackExplorer.Pack; using PackExplorer.Pack.IO; using PackExplorer.Pack.Structure; using PackExplorer.Pack.Util; using PackExplorer.PackAdv; using PackExplorer.PackAdv.Structure; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; using System.Runtime.InteropServices.ComTypes; using System.Windows.Forms; namespace PackExplorer.UI { public class MainForm : Form { private IContainer components; private TreeView packTreeView; private MenuStrip menuStrip1; private ToolStripMenuItem fileToolStripMenuItem; private ToolStripMenuItem openToolStripMenuItem; private ToolStripMenuItem extractToolStripMenuItem; private ToolStripMenuItem extractAllToolStripMenuItem; private DataHrc dataHierarchy; private string oldHeader = "data.hd"; private string newHeader = "pack.hdr"; protected override void Dispose(bool disposing) { if (disposing && components != null) { components.Dispose(); } Dispose(disposing); } private void InitializeComponent() { packTreeView = new TreeView(); menuStrip1 = new MenuStrip(); fileToolStripMenuItem = new ToolStripMenuItem(); openToolStripMenuItem = new ToolStripMenuItem(); extractToolStripMenuItem = new ToolStripMenuItem(); extractAllToolStripMenuItem = new ToolStripMenuItem(); menuStrip1.SuspendLayout(); SuspendLayout(); packTreeView.Dock = DockStyle.Fill; packTreeView.Location = new Point(0, 24); packTreeView.Name = "packTreeView"; packTreeView.Size = new Size(292, 242); packTreeView.TabIndex = 0; menuStrip1.Items.AddRange(new ToolStripItem[1] { fileToolStripMenuItem }); menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; menuStrip1.Size = new Size(292, 24); menuStrip1.TabIndex = 1; menuStrip1.Text = "menuStrip1"; fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[3] { openToolStripMenuItem, extractToolStripMenuItem, extractAllToolStripMenuItem }); fileToolStripMenuItem.Name = "fileToolStripMenuItem"; fileToolStripMenuItem.Size = new Size(37, 20); fileToolStripMenuItem.Text = "File"; openToolStripMenuItem.Name = "openToolStripMenuItem"; openToolStripMenuItem.Size = new Size(152, 22); openToolStripMenuItem.Text = "Open"; openToolStripMenuItem.Click += new EventHandler(openToolStripMenuItem_Click); extractToolStripMenuItem.Name = "extractToolStripMenuItem"; extractToolStripMenuItem.Size = new Size(152, 22); extractToolStripMenuItem.Text = "Extract"; extractToolStripMenuItem.Click += new EventHandler(extractToolStripMenuItem_Click); extractAllToolStripMenuItem.Name = "extractAllToolStripMenuItem"; extractAllToolStripMenuItem.Size = new Size(152, 22); extractAllToolStripMenuItem.Text = "ExtractAll"; extractAllToolStripMenuItem.Click += new EventHandler(extractAllToolStripMenuItem_Click); AutoScaleDimensions = new SizeF(7f, 12f); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(292, 266); Controls.Add(packTreeView); Controls.Add(menuStrip1); MainMenuStrip = menuStrip1; Name = "MainForm"; Text = "Form1"; menuStrip1.ResumeLayout(false); menuStrip1.PerformLayout(); ResumeLayout(false); PerformLayout(); } public MainForm() { InitializeComponent(); } private void ShowTree(DataHrc dataHierarchy) { packTreeView.Nodes.Clear(); Folder root = dataHierarchy.Root; AddToTree(root, packTreeView.Nodes); packTreeView.Refresh(); } private void AddToTree(Folder folder, TreeNodeCollection collection) { TreeNodeCollection treeNodeCollection = collection; TreeNode treeNode = new TreeNode(folder.Name); if (folder.Name.Length != 0) { treeNode.Tag = folder; collection.Add(treeNode); treeNodeCollection = treeNode.Nodes; } for (int i = 0; i < folder.FolderCount; i++) { Folder folder2 = folder.GetFolder(i); AddToTree(folder2, treeNodeCollection); } for (int j = 0; j < folder.FileCount; j++) { Pack.Structure.File file = folder.GetFile(j); TreeNode treeNode2 = new TreeNode(file.Name); treeNode2.Tag = file; treeNodeCollection.Add(treeNode2); } } private void openToolStripMenuItem_Click(object sender, EventArgs e) { FileDialog fileDialog = new OpenFileDialog(); fileDialog.Filter = string.Format("Pack Header({0}, {1})|{0};{1}", oldHeader, newHeader); DialogResult dialogResult = fileDialog.ShowDialog(); if (dialogResult == DialogResult.OK) { string text = fileDialog.FileName.Replace("\\", "/"); string[] separator = new string[1] { "/" }; List list = new List(text.Split(separator, StringSplitOptions.RemoveEmptyEntries)); text = list[list.Count - 1].ToLower(); if (text == oldHeader) { Stream stream = null; Stream stream2 = null; try { string fileName = fileDialog.FileName; stream = new FileStream(fileName, FileMode.Open); string path = fileName.Substring(0, fileName.Length - 3) + ".pak"; stream2 = new FileStream(path, FileMode.Open); Pack.PackData packData = new Pack.PackData(); packData.Load(stream, stream2); dataHierarchy = new Pack.Structure.DataHierarchy(packData); ShowTree(dataHierarchy); } catch (Exception ex) { MessageBox.Show(ex.Message); stream?.Close(); stream2?.Close(); } } else if (text == newHeader) { try { PackAdv.PackData packData2 = new PackAdv.PackData(); packData2.Load(fileDialog.FileName); dataHierarchy = new PackAdv.Structure.DataHierarchy(packData2); ShowTree(dataHierarchy); } catch (Exception ex2) { MessageBox.Show(ex2.Message); } } } } private void extractToolStripMenuItem_Click(object sender, EventArgs e) { if (dataHierarchy == null) { return; } TreeNode selectedNode = packTreeView.SelectedNode; if (selectedNode == null) { return; } AskDestinationForm askDestinationForm = new AskDestinationForm(); DialogResult dialogResult = askDestinationForm.ShowDialog(); if (dialogResult == DialogResult.OK) { string destinationPath = askDestinationForm.DestinationPath; string fullPath = selectedNode.FullPath; fullPath = Pack.Util.Path.FormatPath(fullPath); FileWriter fileWriter = new FileWriter(); if (selectedNode.Tag is Pack.Structure.File) { dataHierarchy.ExtractFileTo(destinationPath, fullPath, fileWriter); } else { dataHierarchy.ExtractFolderTo(destinationPath, fullPath, fileWriter); } } } private void extractAllToolStripMenuItem_Click(object sender, EventArgs e) { if (dataHierarchy != null) { AskDestinationForm askDestinationForm = new AskDestinationForm(); DialogResult dialogResult = askDestinationForm.ShowDialog(); if (dialogResult == DialogResult.OK) { string destinationPath = askDestinationForm.DestinationPath; FileWriter fileWriter = new FileWriter(); dataHierarchy.ExtractAllTo(destinationPath, fileWriter); } } } } }