private static DialogMenu CreateEx(BinaryReader rdr) { List <MenuExTemplateItem> itemTs = new List <MenuExTemplateItem>(); MenuExTemplateHeader header = new MenuExTemplateHeader(rdr); // header.wOffset is bytes offset from the wOffset member // so if it's 4 then just ignore it since those 4 bytes are taken up by the dwHelpId member // if it's less than 4, throw int advance = header.wOffset - 4; if (advance < 0) { throw new ResourceDataException("Invalid MenuExTemplateHeader wOffset value"); } rdr.ReadBytes(advance); while (rdr.BaseStream.Position < rdr.BaseStream.Length) { MenuExTemplateItem itemT = new MenuExTemplateItem(rdr); itemTs.Add(itemT); } DialogMenuItem root = new DialogMenuItem("Root"); Int32 i = 0; BuildMenuEx(root, itemTs, ref i); return(new DialogMenu(root)); }
private static void BuildMenuEx(DialogMenuItem current, List <MenuExTemplateItem> itemTs, ref Int32 pos) { for (int i = pos; i < itemTs.Count; i++) { MenuExTemplateItem itemT = itemTs[i]; DialogMenuItem item = new DialogMenuItem(itemT.szText); if (HasChildren(itemT)) { i++; BuildMenuEx(item, itemTs, ref i); } current.Children.Add(item); if (IsLast(itemT)) { return; } } }
private static Boolean IsLast(MenuExTemplateItem itemT) { return((itemT.bResInfo & MenuExTemplateItemInfo.LastItem) == MenuExTemplateItemInfo.LastItem); }
private static Boolean HasChildren(MenuExTemplateItem itemT) { return((itemT.bResInfo & MenuExTemplateItemInfo.HasChildren) == MenuExTemplateItemInfo.HasChildren); }