private TreeNode MakeNode(IRomDataObject item) { TreeNode node = new TreeNode(item.DisplayName); node.Tag = item; node.ImageKey = node.SelectedImageKey = node.StateImageKey = getImageKey(item); IRomDataParentObject p = item as IRomDataParentObject; if (p != null) { if (p.HasSubItems) { List <IRomDataObject> objects = new List <IRomDataObject>(); objects.AddRange(p.GetSubItems()); objects.Sort(romDataItemOffsetCompare); foreach (IRomDataObject subItem in objects) { node.Nodes.Add(MakeNode(subItem)); } } } return(node); }
int romDataItemOffsetCompare(IRomDataObject a, IRomDataObject b) { if (a is ItemLoader || b is ItemLoader) { } return(a.Offset - b.Offset); }
private void DisplayNode(TreeNode node) { IRomDataParentObject data = node.Tag as IRomDataParentObject; if (data != null && data.HasListItems) { ShowObjectSubitems(data); } IRomDataObject obj = node.Tag as IRomDataObject; var ex = obj as IRomDataObjectEx; bool nonContiguous = false; // Assume data is contiguous if obj does not specify if (ex != null) { nonContiguous = !ex.Contiguous; } // Show hex data for an object that has contiguous data and a specified size if (!nonContiguous && (obj != null && obj.Size != 0)) { DisplayDataString(RomDataObjects.FormatData(obj, rom.data), obj.Offset, obj.Size); } }
public static string FormatData(IRomDataObject obj, byte[] data) { StringBuilder result = new StringBuilder(obj.Size * 3); int offset = obj.Offset;; int upperLimit = Math.Min(data.Length, offset + obj.Size); for (int i = offset; i < upperLimit; i++) { if (i != offset) { result.Append(' '); } result.Append(data[i].ToString("X").PadLeft(2, '0')); } return(result.ToString()); }
private string getImageKey(IRomDataObject o) { if (o is MetroidRom) { return("ROM"); } if (o is Level) { return("Level"); } if (o is ComboTable) { return("Combo"); } if (o is StructureCollection) { return("Struct"); } if (o is PaletteTable) { return("Palette"); } if (o is PatternTable) { return("Patterns"); } if (o is ScreenCollection) { return("Screen"); } if (o is PointerTableData) { return("Pointers"); } if (o is ItemLoader || o is ItemRowEntry || o is ScreenItems) { return("Items"); } return("Misc"); }