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:
parent
189de87e8e
commit
ada9ca6fb9
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue