コード例 #1
0
        private void mnuContextNodeExtractOriginal_Click(object sender, EventArgs e)
        {
            TreeNode n = tvwFilelistNormal.SelectedNode;

            if (n != null)
            {
                DirectoryNode d_node = (DirectoryNode)n.Tag;
                if (d_node.Leaf != null)
                {
                    PiggLeaf     leaf      = d_node.Leaf;
                    PiggLeafInfo leaf_info = leaf.PiggReferences[leaf.PiggReferences.Count - 1];
                    PiggTexture  tex       = new PiggTexture(leaf_info);
                    string       ext       = Path.GetExtension(tex.Filename).ToLower();

                    string filter = Utility.ExtToDescriptive(ext) +
                                    " files (*" + ext + ")|*" + ext + "|";
                    filter                 += "All files (*.*)|*.*";
                    dlgSave.Filter          = filter;
                    dlgSave.FilterIndex     = 1;
                    dlgSave.FileName        = Path.GetFileName(tex.Filename);
                    dlgSave.OverwritePrompt = true;
                    if (dlgSave.ShowDialog() == DialogResult.OK)
                    {
                        FileStream fs = new FileStream(dlgSave.FileName, FileMode.Create, FileAccess.Write, FileShare.Write);
                        tex.Extract(fs, TextureExtractType.Original);
                        fs.Close();
                    }
                }
            }
        }
コード例 #2
0
ファイル: PiggFile.cs プロジェクト: broxen/piggtools
        /// <summary>
        /// Reads and populates this object from a pigg data file.
        /// </summary>
        private void ReadPiggFile()
        {
            if (FullPath == null)
            {
                return;
            }

            FileStream   fs     = File.Open(FullPath, FileMode.Open, FileAccess.Read);
            BinaryReader reader = new BinaryReader(fs);

            // Read the Pigg file header
            this.Header = new PiggFileHeader(reader);

            // Read the Pigg file string table
            fs.Seek(this.Header.DirectoryEntries * 0x30, SeekOrigin.Current);
            long string_table_offset = fs.Position;

            this.StringTable = new PiggFileStringTable(reader);

            // --- Read the directory entry table -----------------------------------
            fs.Seek(this.Header.Size, SeekOrigin.Begin);
            string err_msg = @"Invalid directory entry format within Pigg File " +
                             "at offset {0:x8}.";

            for (int i = 0; i < this.Header.DirectoryEntries; i++)
            {
                PiggFileDirectoryEntry entry = new PiggFileDirectoryEntry(reader);
                PiggLeaf leaf =
                    PiggLeaf.AddLeaf(RootNode, this.StringTable[entry.StringIndex]);
                PiggLeafInfo leaf_info = new PiggLeafInfo(this, entry);
                leaf.Parent.AddCapacity(leaf_info.UncompressedSize);
                leaf.PiggReferences.Add(leaf_info);
            }

            // --- Read the secondary entry table -----------------------------------

            fs.Seek(string_table_offset + 0x0c + this.StringTable.Size, SeekOrigin.Begin);
            if (reader.ReadInt32() != (int)PiggFileMarker.SecondaryTable)
            {
                throw new FormatException(string.Format(err_msg,
                                                        reader.BaseStream.Position - sizeof(Int32)));
            }
            int secondary_entry_count = reader.ReadInt32();
            int secondary_entry_size  = reader.ReadInt32();



            fs.Close();
        }
コード例 #3
0
        private void tvwFilelistNormal_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            // Check for right-click
            if (e.Button == MouseButtons.Right)
            {
                tvwFilelistNormal.SelectedNode = e.Node;
                DirectoryNode d_node = (DirectoryNode)e.Node.Tag;
                if (d_node.Leaf != null)
                {
                    FileInfo fi  = new FileInfo(d_node.Leaf.Name);
                    string   ext = fi.Extension;
                    mnuContextNodeSeparator.Visible       = false;
                    mnuContextNodeExtractOriginal.Visible = false;
                    mnuContextNodeExtractBmp.Visible      = false;
                    mnuContextNodeExtractJpg.Visible      = false;
                    mnuContextNodeExtractPng.Visible      = false;
                    mnuContextNodeExtractWav.Visible      = false;
                    switch (ext.ToLower())
                    {
                    case ".texture":
                        int          last = d_node.Leaf.PiggReferences.Count - 1;
                        PiggLeafInfo info = d_node.Leaf.PiggReferences[last];
                        PiggTexture  tex  = new PiggTexture(info);
                        ext = Path.GetExtension(tex.Filename).ToLower();
                        if (ext[0] == '.')
                        {
                            ext = ext.Substring(1);
                        }

                        mnuContextNodeExtract.Image         = imlImages.Images[5];
                        mnuContextNodeExtractOriginal.Image = imlImages.Images[4];
                        mnuContextNodeExtractOriginal.Text  =
                            string.Format("Extract as original format ({0})...", ext);
                        mnuContextNodeSeparator.Visible       = true;
                        mnuContextNodeExtractOriginal.Visible = true;
                        mnuContextNodeExtractBmp.Visible      = true;
                        mnuContextNodeExtractJpg.Visible      = true;
                        mnuContextNodeExtractPng.Visible      = true;
                        break;

                    case ".bmp":
                    case ".jpg":
                    case ".png":
                        mnuContextNodeExtract.Image = imlImages.Images[4];
                        break;

                    case ".bin":
                        mnuContextNodeExtract.Image = imlImages.Images[5];
                        break;

                    case ".geo":
                        mnuContextNodeExtract.Image = imlImages.Images[6];
                        break;

                    case ".txt":
                        mnuContextNodeExtract.Image = imlImages.Images[7];
                        break;

                    case ".cfg":
                        mnuContextNodeExtract.Image = imlImages.Images[8];
                        break;

                    case ".ogg":
                    case ".mp3":
                    case ".wav":
                        mnuContextNodeExtract.Image = imlImages.Images[9];
                        //mnuContextNodeExtractOriginal.Image = imlImages.Images[9];
                        //mnuContextNodeSeparator.Visible = true;
                        //mnuContextNodeExtractOriginal.Visible = true;
                        //mnuContextNodeExtractWav.Visible = true;
                        break;

                    default:
                        mnuContextNodeExtract.Image = imlImages.Images[3];
                        break;
                    }
                }
                mnuContext.Show(tvwFilelistNormal, e.Location);
            }
        }
コード例 #4
0
        private void tvwFilelistNormal_AfterSelect(object sender, TreeViewEventArgs e)
        {
            DirectoryNode d_node = (DirectoryNode)e.Node.Tag;

            if (d_node.Leaf != null)
            {
                PiggLeafInfo leaf_info =
                    d_node.Leaf.PiggReferences[d_node.Leaf.PiggReferences.Count - 1];
                int    index     = d_node.Leaf.Name.LastIndexOf('.');
                string extension = "";
                if (index >= 0)
                {
                    extension = d_node.Leaf.Name.Substring(index);
                }
                switch (extension)
                {
                case ".texture":
                    PiggTexture tex = new PiggTexture(leaf_info);
                    imgViewer.Picture = tex.Image;
                    picImage.Image    = tex.Image;
                    picImage.Height   = tex.Image.Height;
                    picImage.Width    = tex.Image.Width;

                    break;
                }

                // Fill in properties
                txtProperties.Clear();
                string properties = "";
                properties += string.Format("Source: {0}\r\n",
                                            leaf_info.File.FullPath);
                properties += string.Format("File size: {0}\r\n",
                                            Utility.FriendlyBytes(leaf_info.UncompressedSize));
                properties += string.Format("Timestamp: {0}\r\n",
                                            leaf_info.Timestamp);
                properties += string.Format("Filename: {0}\r\n",
                                            leaf_info.File.FullPath);
                properties += string.Format("File start: 0x{0:x8}\r\n",
                                            leaf_info.Offset);
                properties += string.Format("Compressend length: 0x{0:x8}\r\n",
                                            leaf_info.CompressedSize);
                properties += string.Format("Uncompressed length: 0x{0:x8}\r\n",
                                            leaf_info.UncompressedSize);
                txtProperties.Text = properties;
            }
            else
            {
                txtProperties.Clear();
                string properties = "";
                properties += string.Format("Full Path: {0}\r\n", d_node.Node.FullPath);
                properties += string.Format("Size of child leafs: {0:x16} ({1})\r\n",
                                            d_node.Node.Capacity, Utility.FriendlyBytes(d_node.Node.Capacity));
                properties += string.Format("Total Size: {0:x16} ({1})\r\n",
                                            d_node.Node.TotalCapacity, Utility.FriendlyBytes(d_node.Node.TotalCapacity));
                foreach (PiggFile reference in d_node.Node.PiggFileRefs)
                {
                    properties += string.Format("Reference: {0}", reference.FullPath);
                }
                txtProperties.Text = properties;
            }
        }