From 19abc2d12bbdfc273722c8de46bf82679937d583 Mon Sep 17 00:00:00 2001 From: adelikat Date: Thu, 15 Jan 2015 22:11:18 +0000 Subject: [PATCH] Core features list - gut the All tab to only show IEmulator, since the others are no longer reliable since instances of cores register implementations now --- BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs | 98 +++++-------------- 1 file changed, 24 insertions(+), 74 deletions(-) diff --git a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs index 0865aa78f9..d4f86dabe4 100644 --- a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs +++ b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs @@ -140,14 +140,6 @@ namespace BizHawk.Client.EmuHawk CoreTree.ImageList.Images.Add("Good", Properties.Resources.GreenCheck); CoreTree.ImageList.Images.Add("Bad", Properties.Resources.ExclamationRed); - var services = Assembly - .GetAssembly(typeof(IEmulator)) - .GetTypes() - .Where(t => t.IsInterface) - .Where(t => typeof(IEmulatorService).IsAssignableFrom(t)) - .Where(t => t != typeof(IEmulatorService)) - .ToList(); - var cores = Assembly .Load("BizHawk.Emulation.Cores") .GetTypes() @@ -180,69 +172,33 @@ namespace BizHawk.Client.EmuHawk ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray, }; - bool missingImplementation = false; + var service = typeof(IEmulator); - foreach (var service in services.Where(s => !core.ServicesNotApplicable.NotApplicableTypes.Contains(s))) + bool isImplemented = false; + if (service.IsAssignableFrom(core.CoreType)) { - bool isImplemented = false; - if (service.IsAssignableFrom(core.CoreType)) - { - isImplemented = true; - } - else if (service.IsAssignableFrom(typeof(ISettable<,>))) - { - isImplemented = core.CoreType - .GetInterfaces() - .Where(t => t.IsGenericType && - t.GetGenericTypeDefinition() == typeof(ISettable<,>)) - .FirstOrDefault() != null; - } + isImplemented = true; + } + var serviceNode = new TreeNode + { + Text = service.Name, + ForeColor = isImplemented ? Color.Black : Color.Red + }; - var serviceNode = new TreeNode + serviceNode.Expand(); + + bool fullyImplementedInterface = isImplemented; + + if (isImplemented) + { + foreach (var field in service.GetMethods().OrderBy(f => f.Name)) { - Text = service.Name, - ForeColor = isImplemented ? Color.Black : Color.Red - }; + var coreImplementation = core.CoreType.GetMethod(field.Name); - bool fullyImplementedInterface = isImplemented; - - if (isImplemented) - { - foreach (var field in service.GetMethods().OrderBy(f => f.Name)) + if (coreImplementation != null) { - try - { - var coreImplementation = core.CoreType.GetMethod(field.Name); - - if (coreImplementation != null) - { - var i = coreImplementation.IsImplemented(); - serviceNode.Nodes.Add(new TreeNode - { - Text = field.Name, - ImageKey = i ? "Good" : "Bad", - SelectedImageKey = i ? "Good" : "Bad", - StateImageKey = i ? "Good" : "Bad" - }); - - if (!i) - { - fullyImplementedInterface = false; - } - } - } - catch (Exception) - { - // TODO: SavestateBinary() and SaveStateBinary(BinaryWriter bw) cause an exception, need to look at signature too - } - } - - // Properties are redundant the getter and setters show up when iterating methods - /* - foreach (var field in service.GetProperties().OrderBy(f => f.Name)) - { - var i = field.IsImplemented(); + var i = coreImplementation.IsImplemented(); serviceNode.Nodes.Add(new TreeNode { Text = field.Name, @@ -256,19 +212,13 @@ namespace BizHawk.Client.EmuHawk fullyImplementedInterface = false; } } - */ } - else - { - missingImplementation = true; - } - - serviceNode.StateImageKey = serviceNode.SelectedImageKey = serviceNode.ImageKey = fullyImplementedInterface ? "Good" : "Bad"; - - coreNode.Nodes.Add(serviceNode); } - coreNode.StateImageKey = coreNode.SelectedImageKey = coreNode.ImageKey = missingImplementation ? "Bad" : "Good"; + serviceNode.StateImageKey = serviceNode.SelectedImageKey = serviceNode.ImageKey = fullyImplementedInterface ? "Good" : "Bad"; + + coreNode.Nodes.Add(serviceNode); + coreNode.StateImageKey = coreNode.SelectedImageKey = coreNode.ImageKey = fullyImplementedInterface ? "Good" : "Bad"; CoreTree.Nodes.Add(coreNode); }