Пример #1
0
        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);
        }
Пример #2
0
 int romDataItemOffsetCompare(IRomDataObject a, IRomDataObject b)
 {
     if (a is ItemLoader || b is ItemLoader)
     {
     }
     return(a.Offset - b.Offset);
 }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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());
        }
Пример #5
0
        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");
        }