From ada9ca6fb9f64d24e729abe11f95e872ec8205f7 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sun, 23 Nov 2014 22:04:34 +0000 Subject: [PATCH] Core Features dialog - properly determine if a core is ISettable, don't add properties and fields if the interface isn't implemented anyway --- BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs | 47 +++++++++++++------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs index 9af1dc8246..33c10ce961 100644 --- a/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs +++ b/BizHawk.Client.EmuHawk/CoreFeatureAnalysis.cs @@ -50,39 +50,56 @@ namespace BizHawk.Client.EmuHawk ReleasedCoresLabel.Text = cores.Count(c => c.CoreAttributes.Released).ToString(); CoreTree.Nodes.Clear(); + CoreTree.BeginUpdate(); foreach (var core in cores) { var coreNode = new TreeNode { Text = core.CoreAttributes.CoreName + (core.CoreAttributes.Released ? string.Empty : " (UNRELEASED)"), - ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray, - // TODO - //ForeColor = services.All(s => s.IsAssignableFrom(core.CoreType)) ? Color.Black : Color.Red + ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray }; foreach (var service in services) { + 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; + } + + var serviceNode = new TreeNode { Text = service.Name, - ForeColor = (service.IsAssignableFrom(core.CoreType)) ? Color.Black : Color.Red + ForeColor = isImplemented ? Color.Black : Color.Red }; - foreach(var field in service.GetProperties()) + if (isImplemented) { - serviceNode.Nodes.Add(new TreeNode + foreach (var field in service.GetProperties()) { - Text = field.Name - }); - } + serviceNode.Nodes.Add(new TreeNode + { + Text = field.Name + }); + } - foreach (var field in service.GetMethods()) - { - serviceNode.Nodes.Add(new TreeNode + foreach (var field in service.GetMethods()) { - Text = field.Name - }); + serviceNode.Nodes.Add(new TreeNode + { + Text = field.Name + }); + } } coreNode.Nodes.Add(serviceNode); @@ -91,6 +108,8 @@ namespace BizHawk.Client.EmuHawk CoreTree.Nodes.Add(coreNode); } + + CoreTree.EndUpdate(); } } }