예제 #1
0
        private List <EntryTreeNode> PopulateForge(EntryTreeNode node)
        {
            Forge forge = node.Forge;

            if (forge == null)
            {
                return(null);
            }

            // read if only the forge has not been read
            if (!forge.IsFullyRead())
            {
                if (forge.GetEntryCount() > 20000)
                {
                    string entries = string.Format("{0:n0}", forge.GetEntryCount());
                    if (MessageBox.Show($"This .forge contains more than 20,000 entries ({entries} exactly). Blacksmith may freeze while loading or it may not load them at all.\nDo this at your own risk.", "Warning", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        forge.Read();
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    forge.Read();
                }
                node.Forge = forge; // set again for assurance
            }

            // populate the forge tree with its entries
            List <EntryTreeNode> entryNodes = new List <EntryTreeNode>();

            foreach (Forge.FileEntry entry in forge.FileEntries)
            {
                EntryTreeNode n = new EntryTreeNode
                {
                    Game   = node.Game,
                    Offset = entry.IndexTable.OffsetToRawDataTable,
                    Path   = Path.Combine(node.Path, entry.NameTable.Name),
                    Size   = entry.IndexTable.RawDataSize,
                    Text   = entry.NameTable.Name,
                    Type   = EntryTreeNodeType.ENTRY
                };
                n.Nodes.Add(new EntryTreeNode(""));
                entryNodes.Add(n);
            }

            return(entryNodes);
        }