Core Features dialog - properly determine if a core is ISettable, don't add properties and fields if the interface isn't implemented anyway

This commit is contained in:
adelikat 2014-11-23 22:04:34 +00:00
parent 189de87e8e
commit ada9ca6fb9
1 changed files with 33 additions and 14 deletions

View File

@ -50,25 +50,41 @@ namespace BizHawk.Client.EmuHawk
ReleasedCoresLabel.Text = cores.Count(c => c.CoreAttributes.Released).ToString(); ReleasedCoresLabel.Text = cores.Count(c => c.CoreAttributes.Released).ToString();
CoreTree.Nodes.Clear(); CoreTree.Nodes.Clear();
CoreTree.BeginUpdate();
foreach (var core in cores) foreach (var core in cores)
{ {
var coreNode = new TreeNode var coreNode = new TreeNode
{ {
Text = core.CoreAttributes.CoreName + (core.CoreAttributes.Released ? string.Empty : " (UNRELEASED)"), Text = core.CoreAttributes.CoreName + (core.CoreAttributes.Released ? string.Empty : " (UNRELEASED)"),
ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray, ForeColor = core.CoreAttributes.Released ? Color.Black : Color.DarkGray
// TODO
//ForeColor = services.All(s => s.IsAssignableFrom(core.CoreType)) ? Color.Black : Color.Red
}; };
foreach (var service in services) 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 var serviceNode = new TreeNode
{ {
Text = service.Name, Text = service.Name,
ForeColor = (service.IsAssignableFrom(core.CoreType)) ? Color.Black : Color.Red ForeColor = isImplemented ? Color.Black : Color.Red
}; };
if (isImplemented)
{
foreach (var field in service.GetProperties()) foreach (var field in service.GetProperties())
{ {
serviceNode.Nodes.Add(new TreeNode serviceNode.Nodes.Add(new TreeNode
@ -84,6 +100,7 @@ namespace BizHawk.Client.EmuHawk
Text = field.Name Text = field.Name
}); });
} }
}
coreNode.Nodes.Add(serviceNode); coreNode.Nodes.Add(serviceNode);
} }
@ -91,6 +108,8 @@ namespace BizHawk.Client.EmuHawk
CoreTree.Nodes.Add(coreNode); CoreTree.Nodes.Add(coreNode);
} }
CoreTree.EndUpdate();
} }
} }
} }