private void SetPane(GroupPane pane, GroupPane parentPane) { if (parentPane != null) { parentPane.Childern.Add(pane); pane.Parent = parentPane; } }
private void GetGroupPanes(GroupPane pane, ref List <GroupPane> panes) { panes.Add(pane); foreach (GroupPane childPane in pane.Childern) { GetGroupPanes(childPane, ref panes); } }
private void WriteGroupPanes(FileWriter writer, GroupPane pane, LayoutHeader header, ref int sectionCount) { WriteSection(writer, pane.Signature, pane, () => pane.Write(writer, header)); sectionCount++; if (pane.HasChildern) { sectionCount += 2; //Write start of children section WriteSection(writer, "grs1", null); foreach (GroupPane child in pane.Childern) { WriteGroupPanes(writer, child, header, ref sectionCount); } //Write pae1 of children section WriteSection(writer, "gre1", null); } }
private void LoadGroup(GroupPane pane, TreeNode parent = null) { var paneNode = new TreeNode() { Text = pane.Name, Tag = pane }; if (parent == null) { treeView1.Nodes.Add(paneNode); } else { parent.Nodes.Add(paneNode); } foreach (var childPane in pane.Childern) { LoadGroup(childPane, paneNode); } }
public void Read(FileReader reader, BFLYT bflyt) { PaneLookup.Clear(); LayoutInfo = new LYT1(); TextureList = new TXL1(); MaterialList = new MAT1(); FontList = new FNL1(); RootPane = new PAN1(); RootGroup = new GRP1(); UserData = new USD1(); FileInfo = bflyt; reader.SetByteOrder(true); reader.ReadSignature(4, Magic); ByteOrderMark = reader.ReadUInt16(); reader.CheckByteOrderMark(ByteOrderMark); HeaderSize = reader.ReadUInt16(); Version = reader.ReadUInt32(); SetVersionInfo(); uint FileSize = reader.ReadUInt32(); ushort sectionCount = reader.ReadUInt16(); reader.ReadUInt16(); //Padding IsBigEndian = reader.ByteOrder == Syroot.BinaryData.ByteOrder.BigEndian; if (!IsBigEndian) { if (VersionMajor == 3) { TextureManager.Platform = TextureManager.PlatformType.ThreeDS; } else { TextureManager.Platform = TextureManager.PlatformType.Switch; } } else { TextureManager.Platform = TextureManager.PlatformType.WiiU; } TextureManager.LayoutFile = this; bool setRoot = false; bool setGroupRoot = false; BasePane currentPane = null; BasePane parentPane = null; GroupPane currentGroupPane = null; GroupPane parentGroupPane = null; reader.SeekBegin(HeaderSize); for (int i = 0; i < sectionCount; i++) { long pos = reader.Position; string Signature = reader.ReadString(4, Encoding.ASCII); uint SectionSize = reader.ReadUInt32(); SectionCommon section = new SectionCommon(Signature); switch (Signature) { case "lyt1": LayoutInfo = new LYT1(reader); break; case "txl1": TextureList = new TXL1(reader, this); break; case "fnl1": FontList = new FNL1(reader, this); break; case "mat1": MaterialList = new MAT1(reader, this); break; case "pan1": var panel = new PAN1(reader, this); AddPaneToTable(panel); if (!setRoot) { RootPane = panel; setRoot = true; } SetPane(panel, parentPane); currentPane = panel; break; case "pic1": var picturePanel = new PIC1(reader, this); AddPaneToTable(picturePanel); SetPane(picturePanel, parentPane); currentPane = picturePanel; break; case "txt1": var textPanel = new TXT1(reader, this); AddPaneToTable(textPanel); SetPane(textPanel, parentPane); currentPane = textPanel; break; case "bnd1": var boundsPanel = new BND1(reader, this); AddPaneToTable(boundsPanel); SetPane(boundsPanel, parentPane); currentPane = boundsPanel; break; case "prt1": var partsPanel = new PRT1(reader, this); AddPaneToTable(partsPanel); SetPane(partsPanel, parentPane); currentPane = partsPanel; break; case "wnd1": var windowPanel = new WND1(reader, this); AddPaneToTable(windowPanel); SetPane(windowPanel, parentPane); currentPane = windowPanel; break; case "scr1": var scissorPane = new SCR1(reader, this); AddPaneToTable(scissorPane); SetPane(scissorPane, parentPane); currentPane = scissorPane; break; case "ali1": var alignmentPane = new ALI1(reader, this); AddPaneToTable(alignmentPane); SetPane(alignmentPane, parentPane); currentPane = alignmentPane; break; case "pas1": if (currentPane != null) { parentPane = currentPane; } break; case "pae1": if (parentPane != null) { currentPane = parentPane; } parentPane = currentPane.Parent; break; case "grp1": var groupPanel = new GRP1(reader, this); if (!setGroupRoot) { RootGroup = groupPanel; setGroupRoot = true; } SetPane(groupPanel, parentGroupPane); currentGroupPane = groupPanel; break; case "grs1": if (currentGroupPane != null) { parentGroupPane = currentGroupPane; } break; case "gre1": currentGroupPane = parentGroupPane; parentGroupPane = currentGroupPane.Parent; break; /* case "cnt1": * Container = new CNT1(reader, this); * break;*/ case "usd1": long dataPos = reader.Position; if (currentPane != null) { ((PAN1)currentPane).UserData = new USD1(reader, this); reader.SeekBegin(dataPos); ((PAN1)currentPane).UserData.Data = reader.ReadBytes((int)SectionSize - 8); } else { //User data before panes UserData = new USD1(reader, this); reader.SeekBegin(dataPos); UserData.Data = reader.ReadBytes((int)SectionSize - 8); } break; //If the section is not supported store the raw bytes default: section.Data = reader.ReadBytes((int)SectionSize - 8); UnknownSections.Add(section); Console.WriteLine("Unknown section!" + Signature); break; } section.SectionSize = SectionSize; reader.SeekBegin(pos + SectionSize); } }
public void Read(FileReader reader, BRLYT brlyt) { PaneLookup.Clear(); LayoutInfo = new LYT1(); TextureList = new TXL1(); MaterialList = new MAT1(); FontList = new FNL1(); RootPane = new PAN1(); RootGroup = new GRP1(); FileInfo = brlyt; reader.SetByteOrder(true); Magic = reader.ReadSignature(4); if (Magic == "TYLR") { reader.ReverseMagic = true; } ByteOrderMark = reader.ReadUInt16(); reader.CheckByteOrderMark(ByteOrderMark); Version = reader.ReadUInt16(); uint FileSize = reader.ReadUInt32(); HeaderSize = reader.ReadUInt16(); ushort sectionCount = reader.ReadUInt16(); IsBigEndian = reader.ByteOrder == Syroot.BinaryData.ByteOrder.BigEndian; TextureManager.LayoutFile = this; TextureManager.Platform = TextureManager.PlatformType.Wii; bool setRoot = false; bool setGroupRoot = false; BasePane currentPane = null; BasePane parentPane = null; GroupPane currentGroupPane = null; GroupPane parentGroupPane = null; reader.SeekBegin(HeaderSize); for (int i = 0; i < sectionCount; i++) { long pos = reader.Position; string Signature = reader.ReadSignature(4); uint SectionSize = reader.ReadUInt32(); SectionCommon section = new SectionCommon(Signature); switch (Signature) { case "lyt1": LayoutInfo = new LYT1(reader); break; case "txl1": TextureList = new TXL1(reader, this); break; case "fnl1": FontList = new FNL1(reader, this); break; case "mat1": MaterialList = new MAT1(reader, this); break; case "pan1": var panel = new PAN1(reader, this); AddPaneToTable(panel); if (!setRoot) { RootPane = panel; setRoot = true; } SetPane(panel, parentPane); currentPane = panel; break; case "pic1": var picturePanel = new PIC1(reader, this); AddPaneToTable(picturePanel); SetPane(picturePanel, parentPane); currentPane = picturePanel; break; case "txt1": var textPanel = new TXT1(reader, this); AddPaneToTable(textPanel); SetPane(textPanel, parentPane); currentPane = textPanel; break; case "bnd1": var boundsPanel = new BND1(reader, this); AddPaneToTable(boundsPanel); SetPane(boundsPanel, parentPane); currentPane = boundsPanel; break; case "wnd1": var windowPanel = new WND1(this, reader); AddPaneToTable(windowPanel); SetPane(windowPanel, parentPane); currentPane = windowPanel; break; case "cnt1": break; case "pas1": if (currentPane != null) { parentPane = currentPane; } break; case "pae1": currentPane = parentPane; parentPane = currentPane.Parent; break; case "grp1": var groupPanel = new GRP1(reader, this); if (!setGroupRoot) { RootGroup = groupPanel; setGroupRoot = true; } SetPane(groupPanel, parentGroupPane); currentGroupPane = groupPanel; break; case "grs1": if (currentGroupPane != null) { parentGroupPane = currentGroupPane; } break; case "gre1": currentGroupPane = parentGroupPane; parentGroupPane = currentGroupPane.Parent; break; case "usd1": break; //If the section is not supported store the raw bytes default: section.Data = reader.ReadBytes((int)SectionSize); break; } section.SectionSize = SectionSize; reader.SeekBegin(pos + SectionSize); } }